Add the elm_scrollable_interface_content_viewport_resize_cb_set.
authorJaehwan Kim <jae.hwan.kim@samsung.com>
Sun, 30 Jun 2013 05:42:34 +0000 (14:42 +0900)
committerJaehwan Kim <jae.hwan.kim@samsung.com>
Sun, 30 Jun 2013 05:42:34 +0000 (14:42 +0900)
When the viewport is resized, the enrolled function is called.

ChangeLog
NEWS
src/lib/elm_interface_scrollable.c
src/lib/elm_interface_scrollable.h
src/lib/elm_scroller.c

index 50e4839..06dc04b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
 
         * Fix Segfault in elementary file_selector_example when closed.
           https://phab.enlightenment.org/T133
+
+2013-06-30  Jaehwan Kim
+
+        * Add the elm_scrollable_interface_content_viewport_resize_cb_set.
+        When the viewport is resized, the enrolled function is called.
diff --git a/NEWS b/NEWS
index 2210dbc..e476954 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -76,6 +76,7 @@ Additions:
    * Add "focused" and "unfocused" smart callback for panel, video, web, web2, genlist, hover, index, list, map, photocam, progressbar, radio, scroller, slider, slideshow, spinner, toolbar, win, calendar, check, clock, colorselector, datetime, diskselector, flipselector, gengrid, ctxpopup, fileselector_button, naviframe, player, popup, bubble, button.
    * Add elm_web_url_set(), elm_web_url_get() and "url,changed" signal for web, web2.
    * Add elm_fileselector_mime_type_filter_append and elm_fileselector_filters_clear to support mime type filter.
+   * Add the elm_scrollable_interface_content_viewport_resize_cb_set.
 
 Improvements:
 
index ca60ff2..57e4396 100644 (file)
@@ -117,7 +117,8 @@ _elm_pan_smart_resize(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
    psd->h = h;
 
    _elm_pan_update(psd);
-   evas_object_smart_callback_call(psd->self, SIG_CHANGED, NULL);
+   evas_object_smart_callback_call(psd->self, SIG_CHANGED,
+                                   ELM_OBJ_PAN_SMART_RESIZE);
 }
 
 static void
@@ -154,7 +155,8 @@ _elm_pan_pos_set(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
    psd->py = y;
 
    _elm_pan_update(psd);
-   evas_object_smart_callback_call(psd->self, SIG_CHANGED, NULL);
+   evas_object_smart_callback_call(psd->self, SIG_CHANGED,
+                                   ELM_OBJ_PAN_POS_SET);
 }
 
 static void
@@ -264,7 +266,8 @@ _elm_pan_content_del_cb(void *data,
    psd->content = NULL;
    psd->content_w = psd->content_h = psd->px = psd->py =
            psd->prev_cw = psd->prev_ch = psd->delta_posx = psd->delta_posy = 0;
-   evas_object_smart_callback_call(psd->self, SIG_CHANGED, NULL);
+   evas_object_smart_callback_call(psd->self, SIG_CHANGED,
+                                   ELM_OBJ_PAN_CONTENT_DEL);
 }
 
 static void
@@ -284,7 +287,8 @@ _elm_pan_content_resize_cb(void *data,
         psd->content_h = h;
         _elm_pan_update(psd);
      }
-   evas_object_smart_callback_call(psd->self, SIG_CHANGED, NULL);
+   evas_object_smart_callback_call(psd->self, SIG_CHANGED,
+                                   ELM_OBJ_PAN_CONTENT_RESIZE);
 }
 
 static void
@@ -326,7 +330,8 @@ _elm_pan_content_set(Evas_Object *obj,
    _elm_pan_update(psd);
 
 end:
-   evas_object_smart_callback_call(psd->self, SIG_CHANGED, NULL);
+   evas_object_smart_callback_call(psd->self, SIG_CHANGED,
+                                   ELM_OBJ_PAN_CONTENT_SET);
 }
 
 static void
@@ -3619,10 +3624,11 @@ _elm_scroll_scroll_bar_reset(Elm_Scrollable_Smart_Interface_Data *sid)
 static void
 _elm_scroll_pan_changed_cb(void *data,
                            Evas_Object *obj __UNUSED__,
-                           void *event_info __UNUSED__)
+                           void *event_info)
 {
    Evas_Coord w, h;
    Elm_Scrollable_Smart_Interface_Data *sid = data;
+   Elm_Pan_Callback_Type type = (Elm_Pan_Callback_Type) event_info;
 
    if (!sid->pan_obj) return;
 
@@ -3638,6 +3644,14 @@ _elm_scroll_pan_changed_cb(void *data,
         sid->content_info.resized = EINA_TRUE;
         _elm_scroll_wanted_region_set(sid->obj);
      }
+
+   if (type == ELM_OBJ_PAN_SMART_RESIZE)
+     if (sid->cb_func.content_viewport_resize)
+       {
+          eo_do(sid->obj, elm_scrollable_interface_content_viewport_size_get(&w, &h));
+          sid->cb_func.content_viewport_resize(obj, w, h);
+       }
+
 }
 
 static void
@@ -3920,6 +3934,14 @@ _elm_scroll_content_min_limit_cb_set(Eo *obj EINA_UNUSED, void *_pd, va_list *li
 }
 
 static void
+_elm_scroll_content_viewport_resize_cb_set(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
+{
+   Elm_Scrollable_Smart_Interface_Data *sid = _pd;
+   Elm_Interface_Scrollable_Resize_Cb viewport_resize_cb = va_arg(*list, Elm_Interface_Scrollable_Resize_Cb);
+   sid->cb_func.content_viewport_resize = viewport_resize_cb;
+}
+
+static void
 _elm_scroll_momentum_animator_disabled_get(Eo *obj EINA_UNUSED, void *_pd EINA_UNUSED, va_list *list)
 {
    Elm_Scrollable_Smart_Interface_Data *sid = _pd;
@@ -4549,6 +4571,7 @@ _elm_scrollable_interface_constructor(Eo_Class *klass)
            EO_OP_FUNC(ELM_SCROLLABLE_INTERFACE_ID(ELM_SCROLLABLE_INTERFACE_SUB_ID_HBAR_PRESS_CB_SET), _elm_scroll_hbar_press_cb_set),
            EO_OP_FUNC(ELM_SCROLLABLE_INTERFACE_ID(ELM_SCROLLABLE_INTERFACE_SUB_ID_HBAR_UNPRESS_CB_SET), _elm_scroll_hbar_unpress_cb_set),
            EO_OP_FUNC(ELM_SCROLLABLE_INTERFACE_ID(ELM_SCROLLABLE_INTERFACE_SUB_ID_CONTENT_MIN_LIMIT_CB_SET), _elm_scroll_content_min_limit_cb_set),
+           EO_OP_FUNC(ELM_SCROLLABLE_INTERFACE_ID(ELM_SCROLLABLE_INTERFACE_SUB_ID_CONTENT_VIEWPORT_RESIZE_CB_SET), _elm_scroll_content_viewport_resize_cb_set),
            EO_OP_FUNC(ELM_SCROLLABLE_INTERFACE_ID(ELM_SCROLLABLE_INTERFACE_SUB_ID_CONTENT_POS_SET), _elm_scroll_content_pos_set),
            EO_OP_FUNC(ELM_SCROLLABLE_INTERFACE_ID(ELM_SCROLLABLE_INTERFACE_SUB_ID_CONTENT_POS_GET), _elm_scroll_content_pos_get),
            EO_OP_FUNC(ELM_SCROLLABLE_INTERFACE_ID(ELM_SCROLLABLE_INTERFACE_SUB_ID_CONTENT_REGION_SHOW), _elm_scroll_content_region_show),
@@ -4627,6 +4650,8 @@ static const Eo_Op_Description op_desc[] = {
      EO_OP_DESCRIPTION(ELM_SCROLLABLE_INTERFACE_SUB_ID_HBAR_PRESS_CB_SET, "description here"),
      EO_OP_DESCRIPTION(ELM_SCROLLABLE_INTERFACE_SUB_ID_HBAR_UNPRESS_CB_SET, "description here"),
      EO_OP_DESCRIPTION(ELM_SCROLLABLE_INTERFACE_SUB_ID_CONTENT_MIN_LIMIT_CB_SET, "description here"),
+     EO_OP_DESCRIPTION(ELM_SCROLLABLE_INTERFACE_SUB_ID_CONTENT_VIEWPORT_RESIZE_CB_SET,
+                       "When the viewport is resized, the callback is called."),
      EO_OP_DESCRIPTION(ELM_SCROLLABLE_INTERFACE_SUB_ID_CONTENT_POS_SET, "description here"),
      EO_OP_DESCRIPTION(ELM_SCROLLABLE_INTERFACE_SUB_ID_CONTENT_POS_GET, "description here"),
      EO_OP_DESCRIPTION(ELM_SCROLLABLE_INTERFACE_SUB_ID_CONTENT_REGION_SHOW, "description here"),
index a0c3821..8e8091e 100644 (file)
 #define ELM_OBJ_PAN_CLASS elm_obj_pan_eo_class_get()
 const Eo_Class *elm_obj_pan_eo_class_get(void) EINA_CONST;
 
+typedef enum _Elm_Pan_Callback_Type
+{
+   ELM_OBJ_PAN_SMART_RESIZE,
+   ELM_OBJ_PAN_POS_SET,
+   ELM_OBJ_PAN_CONTENT_DEL,
+   ELM_OBJ_PAN_CONTENT_RESIZE,
+   ELM_OBJ_PAN_CONTENT_SET,
+   ELM_OBJ_PAN_LAST
+} Elm_Pan_Callback_Type;
+
 extern EAPI Eo_Op ELM_OBJ_PAN_BASE_ID;
 
 enum
@@ -172,6 +182,7 @@ enum
    ELM_SCROLLABLE_INTERFACE_SUB_ID_HBAR_PRESS_CB_SET,
    ELM_SCROLLABLE_INTERFACE_SUB_ID_HBAR_UNPRESS_CB_SET,
    ELM_SCROLLABLE_INTERFACE_SUB_ID_CONTENT_MIN_LIMIT_CB_SET,
+   ELM_SCROLLABLE_INTERFACE_SUB_ID_CONTENT_VIEWPORT_RESIZE_CB_SET,
    ELM_SCROLLABLE_INTERFACE_SUB_ID_CONTENT_POS_SET,
    ELM_SCROLLABLE_INTERFACE_SUB_ID_CONTENT_POS_GET,
    ELM_SCROLLABLE_INTERFACE_SUB_ID_CONTENT_REGION_SHOW,
@@ -479,6 +490,17 @@ enum
 #define elm_scrollable_interface_content_min_limit_cb_set(min_limit_cb) ELM_SCROLLABLE_INTERFACE_ID(ELM_SCROLLABLE_INTERFACE_SUB_ID_CONTENT_MIN_LIMIT_CB_SET), EO_TYPECHECK(Elm_Interface_Scrollable_Min_Limit_Cb, min_limit_cb)
 
 /**
+ * @def elm_scrollable_interface_content_viewport_resize_cb_set
+ * @since 1.8
+ *
+ * When the viewport is resized, the callback is called.
+ *
+ * @param[in] viewport_resize_cb
+ *
+ */
+#define elm_scrollable_interface_content_viewport_resize_cb_set(viewport_resize_cb) ELM_SCROLLABLE_INTERFACE_ID(ELM_SCROLLABLE_INTERFACE_SUB_ID_CONTENT_VIEWPORT_RESIZE_CB_SET), EO_TYPECHECK(Elm_Interface_Scrollable_Resize_Cb, viewport_resize_cb)
+
+/**
  * @def elm_scrollable_interface_content_pos_set
  * @since 1.8
  *
@@ -1050,6 +1072,7 @@ struct _Elm_Pan_Smart_Data
  */
 typedef void      (*Elm_Interface_Scrollable_Cb)(Evas_Object *, void *data);
 typedef void      (*Elm_Interface_Scrollable_Min_Limit_Cb)(Evas_Object *obj, Eina_Bool w, Eina_Bool h);
+typedef void      (*Elm_Interface_Scrollable_Resize_Cb)(Evas_Object *obj, Eina_Bool w, Eina_Bool h);
 
 typedef struct _Elm_Scrollable_Smart_Interface_Data
   Elm_Scrollable_Smart_Interface_Data;
@@ -1163,6 +1186,7 @@ struct _Elm_Scrollable_Smart_Interface_Data
       Elm_Interface_Scrollable_Cb page_change;
 
       Elm_Interface_Scrollable_Min_Limit_Cb content_min_limit;
+      Elm_Interface_Scrollable_Resize_Cb content_viewport_resize;
    } cb_func;
 
    struct
index 2f121de..9efa681 100644 (file)
@@ -750,6 +750,14 @@ _elm_scroller_content_min_limit_cb(Evas_Object *obj,
 }
 
 static void
+_elm_scroller_content_viewport_resize_cb(Evas_Object *obj,
+                                   Evas_Coord w EINA_UNUSED,
+                                   Evas_Coord h EINA_UNUSED)
+{
+   elm_layout_sizing_eval(obj);
+}
+
+static void
 _elm_scroller_smart_add(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
 {
    Evas_Coord minw, minh;
@@ -804,7 +812,9 @@ _elm_scroller_smart_add(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
          elm_scrollable_interface_hbar_unpress_cb_set(_hbar_unpress_cb),
          elm_scrollable_interface_page_change_cb_set(_page_change_cb),
          elm_scrollable_interface_content_min_limit_cb_set
-         (_elm_scroller_content_min_limit_cb));
+         (_elm_scroller_content_min_limit_cb),
+         elm_scrollable_interface_content_viewport_resize_cb_set
+         (_elm_scroller_content_viewport_resize_cb));
 }
 
 static void