spinner - add some signal for haptic, changing value
authorHyukSoon Choi <hs619.choi@samsung.com>
Fri, 3 Apr 2020 00:48:40 +0000 (09:48 +0900)
committerWooHyun Jung <wh0705.jung@samsung.com>
Wed, 8 Apr 2020 00:16:49 +0000 (09:16 +0900)
Change-Id: I5509d2035dff6f228d675c496ac343da77dc5bc2
Signed-off-by: HyukSoon Choi <hs619.choi@samsung.com>
src/lib/ecore_wl2/Ecore_Wl2.h
src/lib/elementary/elm_spinner.c
src/lib/elementary_tizen/elm_genlist.c
src/lib/elementary_tizen/elm_widget_genlist.h

index e14fb0a..4545955 100644 (file)
@@ -2930,6 +2930,27 @@ EAPI void ecore_wl2_session_recovery_disable(void);
 /** @internal */
 EAPI Ecore_Wl2_Surface *ecore_wl2_surface_create(Ecore_Wl2_Window *win, Eina_Bool alpha);
 
+// TIZEN_ONLY(20171107): support a tizen_keyrouter interface
+EAPI void ecore_wl2_display_sync(Ecore_Wl2_Display *display);
+EAPI Eina_Bool ecore_wl2_window_keygrab_set(Ecore_Wl2_Window *win, const char *key, int mod EINA_UNUSED, int not_mod EINA_UNUSED, int priority EINA_UNUSED, Ecore_Wl2_Window_Keygrab_Mode grab_mode);
+EAPI Eina_Bool ecore_wl2_window_keygrab_unset(Ecore_Wl2_Window *win, const char *key, int mod EINA_UNUSED, int any_mod EINA_UNUSED);
+//
+EAPI Eina_List *ecore_wl2_window_keygrab_list_set(Ecore_Wl2_Window *win, Eina_List *infos);
+EAPI Eina_List *ecore_wl2_window_keygrab_list_unset(Ecore_Wl2_Window *win, Eina_List *infos);
+
+// TIZEN_ONLY(20171107): add ecore_wl2_window_input_get() EAPI
+EAPI Ecore_Wl2_Input *ecore_wl2_window_input_get(Ecore_Wl2_Window *win);
+//
+// TIZEN_ONLY(20200326): add ecore_wl2_window_pointer/keyboard_get() EAPI
+/** @internal */
+EAPI Ecore_Wl2_Input *ecore_wl2_window_pointer_get(Ecore_Wl2_Window *win);
+/** @internal */
+EAPI Ecore_Wl2_Input *ecore_wl2_window_keyboard_get(Ecore_Wl2_Window *win);
+//
+// TIZEN_ONLY(20171114): support a pointer warp
+EAPI Eina_Bool ecore_wl2_window_pointer_warp(Ecore_Wl2_Window *win, int x, int y);
+//
+
 //TIZEN_ONLY(20171108): add a new API to ecore_wl2_sync
 /** @internal */
 EAPI void ecore_wl2_sync(void);
index 0c8922a..9480241 100644 (file)
@@ -214,6 +214,27 @@ apply:
    elm_object_text_set(sd->ent, buf);
 }
 
+//TIZEN_ONLY(20200403): update genlist item when special value text is changed
+static void
+_update_genlist_item_text(Elm_Spinner_Data *sd, double value)
+{
+   if (!sd->genlist || !sd->genlist_items) return;
+   Eina_List *l;
+   Elm_Object_Item *item = NULL;
+   Elm_Spinner_Item_Data* sp_item_data = NULL;
+
+   EINA_LIST_FOREACH(sd->genlist_items, l, item)
+     {
+        sp_item_data = elm_object_item_data_get(item);
+        if (sp_item_data && fabs(sp_item_data->value - value) < FLT_EPSILON)
+          {
+             elm_genlist_item_fields_update(item, "elm.text", ELM_GENLIST_ITEM_FIELD_TEXT);
+             break;
+          }
+     }
+}
+//
+
 //TIZEN_ONLY(20191210): List Spinner feature
 static char*
 _get_genlist_item_buf(Elm_Spinner_Data *sd, double val)
@@ -659,16 +680,21 @@ _genlist_value_apply(Evas_Object *obj)
 
    evas_object_smart_callback_del_full(sd->genlist, "unfocused",
                                        _genlist_unfocused_cb, obj);
-   evas_object_smart_callback_del(sd->genlist, "item,aligned,detected", _genlist_item_aligned_cb);
+   evas_object_smart_callback_del(sd->genlist, "aligned,item,detected", _genlist_item_aligned_cb);
    evas_object_smart_callback_del(sd->genlist, "realized", _genlist_realized_cb);
    evas_object_smart_callback_del(sd->genlist, "scroll,anim,start", _genlist_scroll_anim_start_cb);
    evas_object_smart_callback_del(sd->genlist, "scroll,anim,stop", _genlist_scroll_anim_stop_cb);
 
    _genlist_hide(obj);
 
-   evas_object_geometry_get(sd->genlist, &x, &y, NULL, &h);
-   y_center = y + h / 2;
-   sd->aligned_item = elm_genlist_at_xy_item_get(sd->genlist, x, y_center, NULL);
+   //TIZEN_ONLY(20200403): update aligned item only if scrolling is in progress
+   if (sd->scrolling)
+   //
+     {
+        evas_object_geometry_get(sd->genlist, &x, &y, NULL, &h);
+        y_center = y + h / 2;
+        sd->aligned_item = elm_genlist_at_xy_item_get(sd->genlist, x, y_center, NULL);
+     }
 
    _genlist_item_value_apply(obj);
    sd->scrolling = EINA_FALSE;//anim_stop_cb not comes when genlist is hidden while scrolling is in progress
@@ -1016,7 +1042,7 @@ _toggle_genlist(Evas_Object *obj)
         sd->scrolling = EINA_FALSE;
 
         evas_object_smart_callback_add
-          (sd->genlist, "item,aligned,detected", _genlist_item_aligned_cb, obj);
+          (sd->genlist, "aligned,item,detected", _genlist_item_aligned_cb, obj);
         evas_object_smart_callback_add
           (sd->genlist, "scroll,anim,start", _genlist_scroll_anim_start_cb, sd);
         evas_object_smart_callback_add
@@ -2100,8 +2126,9 @@ _update_genlist_aligned_item(Elm_Spinner_Data *sd)
            }
       }
 
-    if (sd->genlist_visible)
-      elm_genlist_item_show(sd->aligned_item, ELM_GENLIST_ITEM_SCROLLTO_MIDDLE);
+    //TIZEN_ONLY(20200403): Update aligned item if spinner value is reset
+    elm_genlist_item_show(sd->aligned_item, ELM_GENLIST_ITEM_SCROLLTO_MIDDLE);
+    //
 
     evas_object_smart_callback_add
       (sd->genlist, "realized", _genlist_realized_cb, sd);
@@ -2331,6 +2358,23 @@ _elm_spinner_efl_ui_range_display_range_value_set(Eo *obj, Elm_Spinner_Data *sd,
 EOLIAN static double
 _elm_spinner_efl_ui_range_display_range_value_get(const Eo *obj EINA_UNUSED, Elm_Spinner_Data *sd)
 {
+   //TIZEN_ONLY(20200403): For value_get while scroll in progress
+   if (sd->list_spinner)
+     {
+        if (sd->genlist && sd->scrolling)
+          {
+             Evas_Coord x, y, h, y_center;
+             evas_object_geometry_get(sd->genlist, &x, &y, NULL, &h);
+             y_center = y + h / 2;
+             Elm_Object_Item* center_item = elm_genlist_at_xy_item_get(sd->genlist, x, y_center, NULL);
+             if (center_item)
+               {
+                  sd->aligned_item = center_item;
+                  _genlist_item_value_apply(obj);
+               }
+          }
+     }
+   //
    return sd->val;
 }
 
@@ -2394,6 +2438,10 @@ _elm_spinner_special_value_add(Eo *obj, Elm_Spinner_Data *sd, double value, cons
 
         eina_stringshare_replace(&sv->label, label);
         _label_write(obj);
+        //TIZEN_ONLY(20200403): update genlist item when special value text is changed
+        if (sd->list_spinner)
+          _update_genlist_item_text(sd, value);
+        //
         return;
      }
 
@@ -2404,6 +2452,10 @@ _elm_spinner_special_value_add(Eo *obj, Elm_Spinner_Data *sd, double value, cons
 
    sd->special_values = eina_list_append(sd->special_values, sv);
    _label_write(obj);
+   //TIZEN_ONLY(20200403): update genlist item when special value text is changed
+   if (sd->list_spinner)
+     _update_genlist_item_text(sd, value);
+   //
 }
 
 EAPI void
index 7a5a21e..51437e2 100644 (file)
@@ -62,6 +62,9 @@
 // TIZEN_ONLY(20191216) : offset of bottom margin
 #define CIRCLE_BOTTOM_OFFSET 100
 //
+//TIZEN_ONLY(20200325): offset for spinner genlist
+#define SPINNER_GENLIST_GAP 10
+//
 
 #define ERR_ABORT(_msg)                         \
    do {                                         \
@@ -1757,6 +1760,20 @@ _item_position(Elm_Gen_Item *it,
                   evas_object_show(target->item->proxy);
                }
 
+             //TIZEN_ONLY(20200325): Give signal to spinner when new item comes on center
+             if (sd->spinner_genlist)
+               {
+                  if (ELM_RECTS_INTERSECT(GL_IT(target)->scrl_x, iy + ih / 2 - SPINNER_GENLIST_GAP,
+                      GL_IT(target)->w, SPINNER_GENLIST_GAP * 2, ox, g_center, 1, 1))
+                    {
+                       if (!sd->spinner_genlist_center_item || (sd->spinner_genlist_center_item && sd->spinner_genlist_center_item != target))
+                         {
+                            evas_object_smart_callback_call(WIDGET(target), "spinner,aligned,item,change", NULL);
+                            sd->spinner_genlist_center_item  = target;
+                         }
+                    }
+               }
+             //
              if (!sd->on_hold &&
                  ELM_RECTS_INTERSECT(GL_IT(target)->scrl_x, GL_IT(target)->scrl_y,
                                      GL_IT(target)->w, GL_IT(target)->h,
@@ -2929,9 +2946,7 @@ _elm_genlist_pan_efl_canvas_group_group_calculate(Eo *obj, Elm_Genlist_Pan_Data
 
    evas_object_geometry_get(obj, &ox, &oy, &ow, &oh);
    evas_output_viewport_get(evas_object_evas_get(obj), &cvx, &cvy, &cvw, &cvh);
-   //TIZEN_ONLY(20190109): Show item in spinner when calc is completed
-   const char* str = edje_object_data_get(elm_layout_edje_get(psd->wsd->obj), "spinner_genlist");
-   //
+
    //FIXME: This is for optimizing genlist calculation after
    //       genlist sizing eval properly.
    if (ow <= 1) return;
@@ -2978,7 +2993,9 @@ _elm_genlist_pan_efl_canvas_group_group_calculate(Eo *obj, Elm_Genlist_Pan_Data
        (oh > 0) &&
        (cvh > 1) && //Since default height of viewport is 1, correctly calculated viewport height is bigger than 1.
        (!psd->wsd->loop_v || (psd->wsd->loop_v && !psd->wsd->queue)) && //psd->wsd->loop_v indicates if looping is enabled in vertical dir
-       (!str || (str && !psd->wsd->queue)))
+       //TIZEN_ONLY(20200403): Check if genlist belongs to spinner
+       (!psd->wsd->spinner_genlist || (psd->wsd->spinner_genlist && !psd->wsd->queue)))
+       //
      {
         Evas_Coord x, y, w, h;
         Elm_Gen_Item *it = psd->wsd->show_item;
@@ -5399,6 +5416,11 @@ _elm_genlist_efl_ui_widget_theme_apply(Eo *obj, Elm_Genlist_Data *sd)
    if (wsd->scroll_item_align_enable && sd->aligned_item)
      elm_genlist_item_show(EO_OBJ(sd->aligned_item), ELM_GENLIST_ITEM_SCROLLTO_MIDDLE);
 
+   //TIZEN_ONLY(20200403): Check if genlist belongs to spinner
+   const char* str = edje_object_data_get(elm_layout_edje_get(obj), "spinner_genlist");
+   if (str) sd->spinner_genlist = EINA_TRUE;
+   //
+
    return int_ret;
 }
 
index 78abcc6..d057fc4 100644 (file)
@@ -239,12 +239,18 @@ struct _Elm_Genlist_Data
    //TIZEN_ONLY(20171114) genlist: enhance accessibility scroll & highlight
    Elm_Gen_Item                         *atspi_item_to_highlight;
    //
+   //TIZEN_ONLY(20190719): Send signal when new item comes on center
+   Elm_Gen_Item                         *atspi_item_in_center;
+   //
    // TIZEN_ONLY(20180326) : Atspi: enhance finding next and prev item on screen's edge
    int                                   scroll_delta_y_backup;
    //
    //TIZEN_ONLY(20161104) : Accessibility : synchronized highlight of atspi and item align feature for wearable profile
    Elm_Gen_Item                         *currently_highlighted_item;
    //
+   //TIZEN_ONLY(20200403): Give signal to spinner when new item comes on center
+   Elm_Gen_Item                         *spinner_genlist_center_item;
+   //
 
    ///
    Elm_Genlist_Item_Scrollto_Type        focus_scrollto_type;
@@ -336,6 +342,9 @@ struct _Elm_Genlist_Data
    Eina_Bool                             bottom_margin_enabled : 1;
    Eina_Bool                             unhighlighted : 1;
    Eina_Bool                             on_clear : 1;
+   //TIZEN_ONLY(20200403): Check if genlist belongs to spinner
+   Eina_Bool                             spinner_genlist : 1;
+   //
 
    // TIZEN_ONLY(20170718) - Add new variable for solve item select issue.
    Elm_Gen_Item                         *selecting_item;