From 6b6cb7903629bf54d5e74c28e958f4750c807cd4 Mon Sep 17 00:00:00 2001 From: Lukasz Stanislawski Date: Mon, 27 Nov 2017 14:47:59 +0530 Subject: [PATCH] elm: [gengrid]improve item scrollto alignment @tizen_feature orignal commit: af8ebba2f254a8d0f41f46a5d1c9779314ca902e Change-Id: Ic7b22beb704430fa7c49b99959a57c08ab600541 --- src/lib/elementary/elm_gengrid.c | 57 +++++++++++++++++++++++++++++++++++----- 1 file changed, 50 insertions(+), 7 deletions(-) diff --git a/src/lib/elementary/elm_gengrid.c b/src/lib/elementary/elm_gengrid.c index 7bcc69b..a214b92 100644 --- a/src/lib/elementary/elm_gengrid.c +++ b/src/lib/elementary/elm_gengrid.c @@ -102,6 +102,10 @@ static void _item_position_update(Eina_Inlist *list, int idx); static void _item_mouse_callbacks_add(Elm_Gen_Item *it, Evas_Object *view); static void _item_mouse_callbacks_del(Elm_Gen_Item *it, Evas_Object *view); static void _calc_job(void *data); +// TIZEN_ONLY (20151009) : Accessibility: updated highlight change during gengrid scroll +static int _is_item_in_viewport(int viewport_x, int viewport_y, int viewport_w, int viewport_h, + int obj_x, int obj_y, int obj_w, int obj_h); +// static const Elm_Action key_actions[] = { {"move", _key_action_move}, @@ -5443,11 +5447,50 @@ _elm_gengrid_item_efl_access_name_get(Eo *eo_it, Elm_Gen_Item *it) EOLIAN static Eina_Bool _elm_gengrid_item_efl_access_component_highlight_grab(Eo *eo_it, Elm_Gen_Item *it) { - elm_gengrid_item_show(eo_it, ELM_GENGRID_ITEM_SCROLLTO_IN); + ELM_GENGRID_DATA_GET_OR_RETURN_VAL(WIDGET(it), sd, EINA_FALSE); - //TIZEN_ONLY (20151009) : Accessibility: updated highlight change during gengrid scroll - ELM_GENGRID_DATA_GET(WIDGET(it), sd); + // if item is realized check if in viewport + if (VIEW(it)) + { + Evas_Coord wx, wy, ww, wh, x, y, w, h; + evas_object_geometry_get(WIDGET(it), &wx, &wy, &ww, &wh); + evas_object_geometry_get(VIEW(it), &x, &y, &w, &h); + switch (_is_item_in_viewport(wx, wy, ww, wh, x, y, w, h)) + { + case -1: + case -2: + elm_gengrid_item_show(eo_it, ELM_GENGRID_ITEM_SCROLLTO_TOP); + break; + case 1: + case 2: + elm_gengrid_item_show(eo_it, ELM_GENGRID_ITEM_SCROLLTO_BOTTOM); + break; + default: + elm_gengrid_item_show(eo_it, ELM_GENGRID_ITEM_SCROLLTO_IN); + } + } + else // if item is not realized we should search if we are over or below viewport + { + int idx, top, bottom; + Eina_List *realized = elm_gengrid_realized_items_get(WIDGET(it)); + if (realized) + { + // index of realized element on top of viewport + top = elm_obj_gengrid_item_index_get(eina_list_nth(realized, 0)); + // index of realized element on bottom of viewport + bottom = elm_obj_gengrid_item_index_get(eina_list_last_data_get(realized)); + idx = elm_obj_gengrid_item_index_get(eo_it); + eina_list_free(realized); + if (idx < top) + elm_gengrid_item_show(eo_it, ELM_GENGRID_ITEM_SCROLLTO_BOTTOM); + else if (idx > bottom) + elm_gengrid_item_show(eo_it, ELM_GENGRID_ITEM_SCROLLTO_TOP); + else + elm_gengrid_item_show(eo_it, ELM_GENGRID_ITEM_SCROLLTO_IN); + } + } + //TIZEN_ONLY (20151009) : Accessibility: updated highlight change during gengrid scroll if (VIEW(it)) elm_object_accessibility_highlight_set(VIEW(it), EINA_TRUE); else @@ -5882,10 +5925,10 @@ _elm_gengrid_elm_interface_scrollable_content_pos_set(Eo *obj, Elm_Gengrid_Data //sometimes highlighted item is brought in and it does not fit viewport //however content goes to the viewport position so soon it will //meet _is_item_in_viewport condition - if ((viewport_position_result == -1) && (delta_y > 0) || - (viewport_position_result == 1) && (delta_y < 0) || - (viewport_position_result == -2) && (delta_x > 0) || - (viewport_position_result == 2) && (delta_x < 0)) + if ((viewport_position_result == -1 && delta_y > 0) || + (viewport_position_result == 1 && delta_y < 0) || + (viewport_position_result == -2 && delta_x > 0) || + (viewport_position_result == 2 && delta_x < 0)) { Eina_List *realized_items = elm_gengrid_realized_items_get(obj); Eo *item; -- 2.7.4