gengrid & scroll_ifce : update tizen only feature - custom_pan_pos, wanted_region 44/167044/9
authorSangHyeon Lee <sh10233.lee@samsung.com>
Mon, 15 Jan 2018 06:25:34 +0000 (15:25 +0900)
committerSangHyeon Lee <sh10233.lee@samsung.com>
Mon, 22 Jan 2018 09:58:06 +0000 (18:58 +0900)
@tizen_fix

Change-Id: Ic51bfae912f1bcf34a285b23cee1c4e003a292b6
Signed-off-by: SangHyeon Lee <sh10233.lee@samsung.com>
src/lib/elementary/elm_gengrid.c
src/lib/elementary/elm_gengrid.eo
src/lib/elementary/elm_widget_gengrid.h

index a466756..f668ca4 100644 (file)
@@ -2279,6 +2279,9 @@ _elm_gengrid_pan_efl_canvas_group_group_calculate(Eo *obj EINA_UNUSED, Elm_Gengr
    //
    if (!sd->nmax) return;
 
+   //TIZEN_ONLY(20150825) : Use the specific wanted_region_set func only for gengrid.
+   sd->is_append = EINA_FALSE;
+   //
    sd->reorder_item_changed = EINA_FALSE;
 
    EINA_INLIST_FOREACH(sd->items, it)
@@ -4566,6 +4569,9 @@ EOLIAN static Elm_Object_Item*
 _elm_gengrid_item_append(Eo *obj, Elm_Gengrid_Data *sd, const Elm_Gengrid_Item_Class *itc, const void *data, Evas_Smart_Cb func, const void *func_data)
 {
    Elm_Gen_Item *it;
+   //TIZEN_ONLY(20150825) : Use the specific wanted_region_set func only for gengrid.
+   int pos_x, pos_y, min_x, min_y;
+   //
 
    it = _elm_gengrid_item_new(sd, itc, data, func, func_data);
    if (!it) return NULL;
@@ -4583,6 +4589,13 @@ _elm_gengrid_item_append(Eo *obj, Elm_Gengrid_Data *sd, const Elm_Gengrid_Item_C
    //ecore_job_del(sd->calc_job);
    //sd->calc_job = ecore_job_add(_calc_job, obj);
 
+   //TIZEN_ONLY(20150825) : Use the specific wanted_region_set func only for gengrid.
+   sd->is_append = EINA_TRUE;
+   elm_obj_pan_pos_get(sd->pan_obj, &pos_x, &pos_y);
+   elm_obj_pan_pos_min_get(sd->pan_obj, &min_x, &min_y);
+   sd->top_to_x = pos_x - min_x;
+   sd->top_to_y = pos_y - min_y;
+   //
    return EO_OBJ(it);
 }
 
@@ -4638,7 +4651,6 @@ _elm_gengrid_item_insert_before(Eo *obj, Elm_Gengrid_Data *sd, const Elm_Gengrid
    //ecore_job_del(sd->calc_job);
    //sd->calc_job = ecore_job_add(_calc_job, obj);
    //
-
    return EO_OBJ(it);
 }
 
@@ -4646,6 +4658,9 @@ EOLIAN static Elm_Object_Item*
 _elm_gengrid_item_insert_after(Eo *obj, Elm_Gengrid_Data *sd, const Elm_Gengrid_Item_Class *itc, const void *data, Elm_Object_Item *eo_relative, Evas_Smart_Cb func, const void *func_data)
 {
    Elm_Gen_Item *it;
+   //TIZEN_ONLY(20150825) : Use the specific wanted_region_set func only for gengrid.
+   int pos_x, pos_y, min_x, min_y;
+   //
    Eina_Inlist *tmp;
    EINA_SAFETY_ON_NULL_RETURN_VAL(eo_relative, NULL);
    ELM_GENGRID_ITEM_DATA_GET(eo_relative, relative);
@@ -4671,6 +4686,14 @@ _elm_gengrid_item_insert_after(Eo *obj, Elm_Gengrid_Data *sd, const Elm_Gengrid_
    //sd->calc_job = ecore_job_add(_calc_job, obj);
    //
 
+   //TIZEN_ONLY(20150825) : Use the specific wanted_region_set func only for gengrid.
+   sd->is_append = EINA_TRUE;
+   elm_obj_pan_pos_get(sd->pan_obj, &pos_x, &pos_y);
+   elm_obj_pan_pos_min_get(sd->pan_obj, &min_x, &min_y);
+   sd->top_to_x = pos_x - min_x;
+   sd->top_to_y = pos_y - min_y;
+   //
+
    return EO_OBJ(it);
 }
 
@@ -5683,6 +5706,83 @@ _elm_gengrid_item_efl_access_name_get(Eo *eo_it, Elm_Gen_Item *it)
    return it->base->accessible_name;
 }
 
+//TIZEN_ONLY(20150825) : Use the specific wanted_region_set func only for gengrid.
+EOLIAN static void
+_elm_gengrid_elm_interface_scrollable_wanted_region_set(Eo *obj EINA_UNUSED, Elm_Gengrid_Data *sd, int x EINA_UNUSED, int y EINA_UNUSED)
+{
+   if (sd->is_append)
+     {
+        Evas_Coord pan_x, pan_y;
+        Evas_Coord minx, miny;
+        Evas_Coord set_x, set_y;
+
+        elm_obj_pan_pos_get(sd->pan_obj, &pan_x, &pan_y);
+        elm_obj_pan_pos_min_get(sd->pan_obj, &minx, &miny);
+
+        if (sd->horizontal)
+          {
+             set_x = minx + sd->top_to_x;
+             elm_interface_scrollable_content_pos_set(sd->obj, set_x, pan_y, EINA_TRUE);
+          }
+        else
+          {
+             set_y = miny + sd->top_to_y;
+             elm_interface_scrollable_content_pos_set(sd->obj, pan_x, set_y, EINA_TRUE);
+          }
+     }
+}
+//
+
+//TIZEN_ONLY(20150909) : Use the specific bar_chagnged_bar_pos_adjust func only for gengrid.
+static double
+_round(double value, int pos)
+{
+   double temp;
+
+   temp = value * pow( 10, pos );
+   temp = floor( temp + 0.5 );
+   temp *= pow( 10, -pos );
+
+   return temp;
+}
+
+EOLIAN static void
+_elm_gengrid_elm_interface_scrollable_custom_pan_pos_adjust(Eo *obj, Elm_Gengrid_Data *sd, int *x, int *y)
+{
+   Evas_Coord mx, my, minx, miny;
+   double vx, vy;
+
+   ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
+
+   elm_obj_pan_pos_max_get(sd->pan_obj, &mx, &my);
+   elm_obj_pan_pos_min_get(sd->pan_obj, &minx, &miny);
+   elm_obj_pan_pos_get(sd->pan_obj, x, y);
+
+   if (edje_object_part_exists(wd->resize_obj, "elm.dragable.hbar"))
+     {
+        edje_object_part_drag_value_get
+           (wd->resize_obj, "elm.dragable.hbar", &vx, NULL);
+        *x = _round(vx * (double)mx + minx, 1);
+     }
+   else
+     {
+        if (*x > mx) *x = mx;
+        else if (*x < minx) *x = minx;
+     }
+   if (edje_object_part_exists(wd->resize_obj, "elm.dragable.vbar"))
+     {
+        edje_object_part_drag_value_get
+           (wd->resize_obj, "elm.dragable.vbar", NULL, &vy);
+        *y = _round(vy * (double)my + miny, 1);
+     }
+   else
+     {
+        if (*y > my) *y = my;
+        else if (*y < miny) *y = miny;
+     }
+}
+//
+
 //TIZEN_ONLY(20171114):  Region show on item elements fixed
 EOLIAN static Eina_Bool
 _elm_gengrid_item_efl_access_component_highlight_grab(Eo *eo_it EINA_UNUSED, Elm_Gen_Item *it)
index e049d0b..5e2ca8c 100644 (file)
@@ -580,6 +580,11 @@ class Elm.Gengrid (Efl.Ui.Layout, Efl.Ui.Focus.Composition, Elm.Interface_Scroll
       //TIZEN ONLY (20151009) : Accessibility: updated highlight change during gengrid scroll
       Elm.Interface_Scrollable.content_pos_set;
       //
+      // TIZEN_ONLY(20150825) : Use the specific wanted_region_set func only for gengrid. */
+      Elm.Interface_Scrollable.wanted_region_set;
+      //
+      /* TIZEN_ONLY(20150909) : Use the specific bar_chagnged_bar_pos_adjust func only for gengrid. */
+      Elm.Interface_Scrollable.custom_pan_pos_adjust;
    }
    events {
       realized; [[Called when gengrid realized]]
index 5e43bd3..951d070 100644 (file)
@@ -152,7 +152,10 @@ struct _Elm_Gengrid_Data
    //TIZEN_ONLY(20161114) : Refactoring Gengrid Index Position
    Eina_Bool                             position_update;
    //
-
+   //TIZEN_ONLY(20150825) : Use the specific wanted_region_set func only for gengrid.
+   Evas_Coord                            top_to_x, top_to_y;
+   Eina_Bool                             is_append : 1;
+   //
    /* custom dimensions may be set for any item.
     * the logic for placing items requires that either item widths
     * for horizontal gengrid or item height for vertical gengrid