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:
commit
1d53278958
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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));
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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`) */
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user