1
0
mirror of https://github.com/lvgl/lvgl.git synced 2025-01-28 07:03:00 +08:00

Merge branch 'dev' of https://github.com/littlevgl/lvgl into dev

This commit is contained in:
Gabor Kiss-Vamosi 2021-02-23 09:45:18 +01:00
commit 1d53278958
6 changed files with 48 additions and 19 deletions

View File

@ -86,7 +86,7 @@ void _lv_indev_scroll_handler(lv_indev_proc_t * proc)
/*Respect the scroll limit area*/
scroll_limit_diff(proc, &diff_x, &diff_y);
_lv_obj_scroll_by_raw(scroll_obj, diff_x, diff_y);
lv_obj_scroll_by(scroll_obj, diff_x, diff_y, LV_ANIM_OFF);
proc->types.pointer.scroll_sum.x += diff_x;
proc->types.pointer.scroll_sum.y += diff_y;
}

View File

@ -36,7 +36,7 @@ typedef enum {
typedef struct
{
const lv_area_t * draw_area;
lv_area_t * draw_area;
const lv_area_t * clip_area;
lv_draw_rect_dsc_t * rect_dsc;
lv_draw_label_dsc_t * label_dsc;

View File

@ -350,23 +350,25 @@ void lv_obj_scroll_to_view(lv_obj_t * obj, lv_anim_enable_t anim_en)
{
lv_obj_t * parent = lv_obj_get_parent(obj);
lv_coord_t pleft = lv_obj_get_style_pad_left(parent, LV_PART_MAIN);
lv_coord_t pright = lv_obj_get_style_pad_right(parent, LV_PART_MAIN);
lv_coord_t ptop = lv_obj_get_style_pad_top(parent, LV_PART_MAIN);
lv_coord_t pbottom = lv_obj_get_style_pad_bottom(parent, LV_PART_MAIN);
lv_dir_t scroll_dir = lv_obj_get_scroll_dir(parent);
lv_coord_t left_diff = parent->coords.x1 + pleft - obj->coords.x1;
lv_coord_t right_diff = -(parent->coords.x2 - pright - obj->coords.x2);
lv_coord_t top_diff = parent->coords.y1 + ptop - obj->coords.y1;
lv_coord_t bottom_diff = -(parent->coords.y2 - pbottom - obj->coords.y2);
lv_coord_t y_scroll = 0;
lv_coord_t ptop = lv_obj_get_style_pad_top(parent, LV_PART_MAIN);
lv_coord_t pbottom = lv_obj_get_style_pad_bottom(parent, LV_PART_MAIN);
lv_coord_t top_diff = parent->coords.y1 + ptop - obj->coords.y1;
lv_coord_t bottom_diff = -(parent->coords.y2 - pbottom - obj->coords.y2);
if((top_diff > 0 || bottom_diff > 0)) {
if(LV_ABS(top_diff) < LV_ABS(bottom_diff)) y_scroll = top_diff;
else y_scroll = -bottom_diff;
}
lv_coord_t x_scroll = 0;
lv_coord_t pleft = lv_obj_get_style_pad_left(parent, LV_PART_MAIN);
lv_coord_t pright = lv_obj_get_style_pad_right(parent, LV_PART_MAIN);
lv_coord_t left_diff = parent->coords.x1 + pleft - obj->coords.x1;
lv_coord_t right_diff = -(parent->coords.x2 - pright - obj->coords.x2);
if((left_diff > 0 || right_diff > 0)) {
if(LV_ABS(left_diff) < LV_ABS(right_diff)) x_scroll = left_diff;
else x_scroll = -right_diff;
@ -376,6 +378,11 @@ void lv_obj_scroll_to_view(lv_obj_t * obj, lv_anim_enable_t anim_en)
lv_anim_del(parent, scroll_x_anim);
lv_anim_del(parent, scroll_y_anim);
if((scroll_dir & LV_DIR_LEFT) == 0 && x_scroll < 0) x_scroll = 0;
if((scroll_dir & LV_DIR_RIGHT) == 0 && x_scroll > 0) x_scroll = 0;
if((scroll_dir & LV_DIR_TOP) == 0 && y_scroll < 0) y_scroll = 0;
if((scroll_dir & LV_DIR_BOTTOM) == 0 && y_scroll > 0) y_scroll = 0;
lv_obj_scroll_by(parent, x_scroll, y_scroll, anim_en);
}
@ -549,6 +556,7 @@ static void scroll_x_anim(void * obj, int32_t v)
static void scroll_y_anim(void * obj, int32_t v)
{
printf("scrl_anim %d\n", v);
_lv_obj_scroll_by_raw(obj, 0, v + lv_obj_get_scroll_y(obj));
}

View File

@ -55,8 +55,8 @@ void lv_indev_drv_init(lv_indev_drv_t * driver)
lv_memset_00(driver, sizeof(lv_indev_drv_t));
driver->type = LV_INDEV_TYPE_NONE;
driver->scroll_limit = LV_INDEV_DEF_DRAG_LIMIT;
driver->scroll_throw = LV_INDEV_DEF_DRAG_THROW;
driver->scroll_limit = LV_INDEV_DEF_SCROLL_LIMIT;
driver->scroll_throw = 3;//LV_INDEV_DEF_SCROLL_THROW;
driver->long_press_time = LV_INDEV_DEF_LONG_PRESS_TIME;
driver->long_press_rep_time = LV_INDEV_DEF_LONG_PRESS_REP_TIME;
driver->gesture_limit = LV_INDEV_DEF_GESTURE_LIMIT;

View File

@ -27,10 +27,10 @@ extern "C" {
*********************/
/* Drag threshold in pixels */
#define LV_INDEV_DEF_DRAG_LIMIT 10
#define LV_INDEV_DEF_SCROLL_LIMIT 10
/* Drag throw slow-down in [%]. Greater value -> faster slow-down */
#define LV_INDEV_DEF_DRAG_THROW 10
#define LV_INDEV_DEF_SCROLL_THROW 10
/* Long press time in milliseconds.
* Time to send `LV_EVENT_LONG_PRESSSED`) */

View File

@ -378,10 +378,26 @@ static void draw_knob(lv_obj_t * obj, const lv_area_t * clip_area)
position_knob(obj, &knob_area, knob_size, hor);
lv_area_copy(&slider->right_knob_area, &knob_area);
/*Handle custom drawer*/
lv_draw_rect(&slider->right_knob_area, clip_area, &knob_rect_dsc);
lv_obj_draw_hook_dsc_t hook_dsc;
lv_obj_draw_hook_dsc_init(&hook_dsc, clip_area);
hook_dsc.part = LV_PART_KNOB;
hook_dsc.sub_part_id = 0;
hook_dsc.draw_area = &slider->right_knob_area;
hook_dsc.rect_dsc = &knob_rect_dsc;
if(lv_slider_get_type(obj) != LV_SLIDER_TYPE_RANGE) {
lv_event_send(obj, LV_EVENT_DRAW_PART_BEGIN, &hook_dsc);
lv_draw_rect(&slider->right_knob_area, clip_area, &knob_rect_dsc);
lv_event_send(obj, LV_EVENT_DRAW_PART_END, &hook_dsc);
} else {
/*Save the draw dsc. because it can be modified in the hook*/
lv_draw_rect_dsc_t knob_rect_dsc_tmp;
lv_memcpy(&knob_rect_dsc_tmp, &knob_rect_dsc, sizeof(lv_draw_rect_dsc_t));
lv_event_send(obj, LV_EVENT_DRAW_PART_BEGIN, &hook_dsc);
lv_draw_rect(&slider->right_knob_area, clip_area, &knob_rect_dsc);
lv_event_send(obj, LV_EVENT_DRAW_PART_END, &hook_dsc);
if(lv_slider_get_type(obj) == LV_SLIDER_TYPE_RANGE) {
/* Draw a second knob for the start_value side */
if(hor) {
knob_area.x1 = LV_SLIDER_KNOB_COORD(hor, base_dir != LV_BIDI_DIR_RTL, slider->bar.indic_area);
@ -390,11 +406,16 @@ static void draw_knob(lv_obj_t * obj, const lv_area_t * clip_area)
knob_area.y1 = slider->bar.indic_area.y2;
}
position_knob(obj, &knob_area, knob_size, hor);
lv_area_copy(&slider->left_knob_area, &knob_area);
/*Draw the knob if the custom drawer allows it*/
lv_memcpy(&knob_rect_dsc, &knob_rect_dsc_tmp, sizeof(lv_draw_rect_dsc_t));
hook_dsc.draw_area = &slider->left_knob_area;
hook_dsc.rect_dsc = &knob_rect_dsc;
hook_dsc.sub_part_id = 1;
lv_event_send(obj, LV_EVENT_DRAW_PART_BEGIN, &hook_dsc);
lv_draw_rect(&slider->left_knob_area, clip_area, &knob_rect_dsc);
lv_event_send(obj, LV_EVENT_DRAW_PART_END, &hook_dsc);
}
}