Merge branch 'dev-v8' into dev
This commit is contained in:
@@ -86,7 +86,7 @@ void _lv_indev_scroll_handler(lv_indev_proc_t * proc)
|
|||||||
/*Respect the scroll limit area*/
|
/*Respect the scroll limit area*/
|
||||||
scroll_limit_diff(proc, &diff_x, &diff_y);
|
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.x += diff_x;
|
||||||
proc->types.pointer.scroll_sum.y += diff_y;
|
proc->types.pointer.scroll_sum.y += diff_y;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ typedef enum {
|
|||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
const lv_area_t * draw_area;
|
lv_area_t * draw_area;
|
||||||
const lv_area_t * clip_area;
|
const lv_area_t * clip_area;
|
||||||
lv_draw_rect_dsc_t * rect_dsc;
|
lv_draw_rect_dsc_t * rect_dsc;
|
||||||
lv_draw_label_dsc_t * label_dsc;
|
lv_draw_label_dsc_t * label_dsc;
|
||||||
|
|||||||
@@ -347,23 +347,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_obj_t * parent = lv_obj_get_parent(obj);
|
||||||
|
|
||||||
lv_coord_t pleft = lv_obj_get_style_pad_left(parent, LV_PART_MAIN);
|
lv_dir_t scroll_dir = lv_obj_get_scroll_dir(parent);
|
||||||
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_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 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((top_diff > 0 || bottom_diff > 0)) {
|
||||||
if(LV_ABS(top_diff) < LV_ABS(bottom_diff)) y_scroll = top_diff;
|
if(LV_ABS(top_diff) < LV_ABS(bottom_diff)) y_scroll = top_diff;
|
||||||
else y_scroll = -bottom_diff;
|
else y_scroll = -bottom_diff;
|
||||||
}
|
}
|
||||||
|
|
||||||
lv_coord_t x_scroll = 0;
|
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((left_diff > 0 || right_diff > 0)) {
|
||||||
if(LV_ABS(left_diff) < LV_ABS(right_diff)) x_scroll = left_diff;
|
if(LV_ABS(left_diff) < LV_ABS(right_diff)) x_scroll = left_diff;
|
||||||
else x_scroll = -right_diff;
|
else x_scroll = -right_diff;
|
||||||
@@ -373,6 +375,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_x_anim);
|
||||||
lv_anim_del(parent, scroll_y_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);
|
lv_obj_scroll_by(parent, x_scroll, y_scroll, anim_en);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -397,6 +404,7 @@ static void scroll_x_anim(void * obj, int32_t v)
|
|||||||
|
|
||||||
static void scroll_y_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));
|
_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));
|
lv_memset_00(driver, sizeof(lv_indev_drv_t));
|
||||||
|
|
||||||
driver->type = LV_INDEV_TYPE_NONE;
|
driver->type = LV_INDEV_TYPE_NONE;
|
||||||
driver->scroll_limit = LV_INDEV_DEF_DRAG_LIMIT;
|
driver->scroll_limit = LV_INDEV_DEF_SCROLL_LIMIT;
|
||||||
driver->scroll_throw = LV_INDEV_DEF_DRAG_THROW;
|
driver->scroll_throw = 3;//LV_INDEV_DEF_SCROLL_THROW;
|
||||||
driver->long_press_time = LV_INDEV_DEF_LONG_PRESS_TIME;
|
driver->long_press_time = LV_INDEV_DEF_LONG_PRESS_TIME;
|
||||||
driver->long_press_rep_time = LV_INDEV_DEF_LONG_PRESS_REP_TIME;
|
driver->long_press_rep_time = LV_INDEV_DEF_LONG_PRESS_REP_TIME;
|
||||||
driver->gesture_limit = LV_INDEV_DEF_GESTURE_LIMIT;
|
driver->gesture_limit = LV_INDEV_DEF_GESTURE_LIMIT;
|
||||||
|
|||||||
@@ -27,10 +27,10 @@ extern "C" {
|
|||||||
*********************/
|
*********************/
|
||||||
|
|
||||||
/* Drag threshold in pixels */
|
/* 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 */
|
/* 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.
|
/* Long press time in milliseconds.
|
||||||
* Time to send `LV_EVENT_LONG_PRESSSED`) */
|
* 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);
|
position_knob(obj, &knob_area, knob_size, hor);
|
||||||
lv_area_copy(&slider->right_knob_area, &knob_area);
|
lv_area_copy(&slider->right_knob_area, &knob_area);
|
||||||
|
|
||||||
/*Handle custom drawer*/
|
lv_obj_draw_hook_dsc_t hook_dsc;
|
||||||
lv_draw_rect(&slider->right_knob_area, clip_area, &knob_rect_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 */
|
/* Draw a second knob for the start_value side */
|
||||||
if(hor) {
|
if(hor) {
|
||||||
knob_area.x1 = LV_SLIDER_KNOB_COORD(hor, base_dir != LV_BIDI_DIR_RTL, slider->bar.indic_area);
|
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;
|
knob_area.y1 = slider->bar.indic_area.y2;
|
||||||
}
|
}
|
||||||
position_knob(obj, &knob_area, knob_size, hor);
|
position_knob(obj, &knob_area, knob_size, hor);
|
||||||
|
|
||||||
lv_area_copy(&slider->left_knob_area, &knob_area);
|
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_draw_rect(&slider->left_knob_area, clip_area, &knob_rect_dsc);
|
||||||
|
lv_event_send(obj, LV_EVENT_DRAW_PART_END, &hook_dsc);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user