[#809] Added x axis scrolling feature into lv_page_focus function.
This commit is contained in:
@@ -456,8 +456,10 @@ void lv_page_focus(lv_obj_t * page, const lv_obj_t * obj, uint16_t anim_time)
|
|||||||
/* Be sure there is no position changing animation in progress
|
/* Be sure there is no position changing animation in progress
|
||||||
* because it can overide the current changes*/
|
* because it can overide the current changes*/
|
||||||
lv_anim_del(page, (lv_anim_fp_t)lv_obj_set_y);
|
lv_anim_del(page, (lv_anim_fp_t)lv_obj_set_y);
|
||||||
|
lv_anim_del(page, (lv_anim_fp_t)lv_obj_set_x);
|
||||||
lv_anim_del(page, (lv_anim_fp_t)lv_obj_set_pos);
|
lv_anim_del(page, (lv_anim_fp_t)lv_obj_set_pos);
|
||||||
lv_anim_del(ext->scrl, (lv_anim_fp_t)lv_obj_set_y);
|
lv_anim_del(ext->scrl, (lv_anim_fp_t)lv_obj_set_y);
|
||||||
|
lv_anim_del(ext->scrl, (lv_anim_fp_t)lv_obj_set_x);
|
||||||
lv_anim_del(ext->scrl, (lv_anim_fp_t)lv_obj_set_pos);
|
lv_anim_del(ext->scrl, (lv_anim_fp_t)lv_obj_set_pos);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -469,8 +471,15 @@ void lv_page_focus(lv_obj_t * page, const lv_obj_t * obj, uint16_t anim_time)
|
|||||||
lv_coord_t scrlable_y = lv_obj_get_y(ext->scrl);
|
lv_coord_t scrlable_y = lv_obj_get_y(ext->scrl);
|
||||||
lv_coord_t page_h = lv_obj_get_height(page);
|
lv_coord_t page_h = lv_obj_get_height(page);
|
||||||
|
|
||||||
|
lv_coord_t obj_x = obj->coords.x1 - ext->scrl->coords.x1;
|
||||||
|
lv_coord_t obj_w = lv_obj_get_width(obj);
|
||||||
|
lv_coord_t scrlable_x = lv_obj_get_x(ext->scrl);
|
||||||
|
lv_coord_t page_w = lv_obj_get_width(page);
|
||||||
|
|
||||||
lv_coord_t top_err = -(scrlable_y + obj_y);
|
lv_coord_t top_err = -(scrlable_y + obj_y);
|
||||||
lv_coord_t bot_err = scrlable_y + obj_y + obj_h - page_h;
|
lv_coord_t bot_err = scrlable_y + obj_y + obj_h - page_h;
|
||||||
|
lv_coord_t left_err = -(scrlable_x + obj_x);
|
||||||
|
lv_coord_t right_err = scrlable_x + obj_x + obj_w - page_w;
|
||||||
|
|
||||||
/*If obj is higher then the page focus where the "error" is smaller*/
|
/*If obj is higher then the page focus where the "error" is smaller*/
|
||||||
|
|
||||||
@@ -488,6 +497,21 @@ void lv_page_focus(lv_obj_t * page, const lv_obj_t * obj, uint16_t anim_time)
|
|||||||
scrlable_y = -(obj_y + style_scrl->body.padding.ver + style->body.padding.ver);
|
scrlable_y = -(obj_y + style_scrl->body.padding.ver + style->body.padding.ver);
|
||||||
scrlable_y -= style_scrl->body.padding.ver;
|
scrlable_y -= style_scrl->body.padding.ver;
|
||||||
scrlable_y += page_h - obj_h;
|
scrlable_y += page_h - obj_h;
|
||||||
|
}
|
||||||
|
/*Out of the page on the left*/
|
||||||
|
else if((obj_w <= page_w && left_err > 0) ||
|
||||||
|
(obj_w > page_w && left_err < right_err)) {
|
||||||
|
/*Calculate a new position and let some space above*/
|
||||||
|
scrlable_x = -(obj_x - style_scrl->body.padding.ver - style->body.padding.ver);
|
||||||
|
scrlable_x += style_scrl->body.padding.ver;
|
||||||
|
}
|
||||||
|
/*Out of the page on the right*/
|
||||||
|
else if((obj_w <= page_w && right_err > 0) ||
|
||||||
|
(obj_w > page_w && left_err >= right_err)) {
|
||||||
|
/*Calculate a new position and let some space below*/
|
||||||
|
scrlable_x = -(obj_x + style_scrl->body.padding.ver + style->body.padding.ver);
|
||||||
|
scrlable_x -= style_scrl->body.padding.ver;
|
||||||
|
scrlable_x += page_w - obj_w;
|
||||||
} else {
|
} else {
|
||||||
/*Already in focus*/
|
/*Already in focus*/
|
||||||
return;
|
return;
|
||||||
@@ -495,6 +519,7 @@ void lv_page_focus(lv_obj_t * page, const lv_obj_t * obj, uint16_t anim_time)
|
|||||||
|
|
||||||
if(anim_time == 0) {
|
if(anim_time == 0) {
|
||||||
lv_obj_set_y(ext->scrl, scrlable_y);
|
lv_obj_set_y(ext->scrl, scrlable_y);
|
||||||
|
lv_obj_set_x(ext->scrl, scrlable_x);
|
||||||
#if USE_LV_ANIMATION
|
#if USE_LV_ANIMATION
|
||||||
} else {
|
} else {
|
||||||
lv_anim_t a;
|
lv_anim_t a;
|
||||||
@@ -509,6 +534,12 @@ void lv_page_focus(lv_obj_t * page, const lv_obj_t * obj, uint16_t anim_time)
|
|||||||
a.path = lv_anim_path_linear;
|
a.path = lv_anim_path_linear;
|
||||||
a.fp = (lv_anim_fp_t) lv_obj_set_y;
|
a.fp = (lv_anim_fp_t) lv_obj_set_y;
|
||||||
lv_anim_create(&a);
|
lv_anim_create(&a);
|
||||||
|
|
||||||
|
a.start = lv_obj_get_x(ext->scrl);
|
||||||
|
a.end = scrlable_x;
|
||||||
|
a.var = ext->scrl;
|
||||||
|
a.fp = (lv_anim_fp_t) lv_obj_set_x;
|
||||||
|
lv_anim_create(&a);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user