zmike pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=e50cf9b2a212367d4d913bf57871dd2aa2342a80

commit e50cf9b2a212367d4d913bf57871dd2aa2342a80
Author: Mike Blumenkrantz <zm...@samsung.com>
Date:   Fri Aug 30 14:47:58 2019 -0400

    efl_ui/pan: add pan,content_size,changed event
    
    Summary:
    this is a shortcut so pan users don't have to manually hook the content
    resize event
    Depends on D9788
    
    Reviewers: bu5hm4n
    
    Reviewed By: bu5hm4n
    
    Subscribers: cedric, #reviewers, #committers
    
    Tags: #efl_widgets
    
    Differential Revision: https://phab.enlightenment.org/D9789
---
 src/lib/elementary/efl_ui_image_zoomable.c        |  5 +++-
 src/lib/elementary/efl_ui_list_view.c             |  4 +++-
 src/lib/elementary/efl_ui_pan.c                   |  1 +
 src/lib/elementary/efl_ui_pan.eo                  |  1 +
 src/lib/elementary/efl_ui_scroll_manager.c        | 28 ++++++++++-------------
 src/lib/elementary/efl_ui_widget_scroll_manager.h |  1 -
 6 files changed, 21 insertions(+), 19 deletions(-)

diff --git a/src/lib/elementary/efl_ui_image_zoomable.c 
b/src/lib/elementary/efl_ui_image_zoomable.c
index 6c46d10e57..8655558b47 100644
--- a/src/lib/elementary/efl_ui_image_zoomable.c
+++ b/src/lib/elementary/efl_ui_image_zoomable.c
@@ -140,10 +140,13 @@ _calc_job_cb(void *data)
      }
    if ((minw != sd->minw) || (minh != sd->minh))
      {
+        Eina_Size2D sz;
         sd->minw = minw;
         sd->minh = minh;
 
-        efl_event_callback_call(sd->pan_obj, 
EFL_UI_PAN_EVENT_PAN_CONTENT_POSITION_CHANGED, NULL);
+        sz = efl_ui_pan_content_size_get(sd->pan_obj);
+
+        efl_event_callback_call(sd->pan_obj, 
EFL_UI_PAN_EVENT_PAN_CONTENT_SIZE_CHANGED, &sz);
         _sizing_eval(obj);
      }
    sd->calc_job = NULL;
diff --git a/src/lib/elementary/efl_ui_list_view.c 
b/src/lib/elementary/efl_ui_list_view.c
index 1b59b1d750..d6b9f29663 100644
--- a/src/lib/elementary/efl_ui_list_view.c
+++ b/src/lib/elementary/efl_ui_list_view.c
@@ -857,13 +857,15 @@ 
_efl_ui_list_view_efl_ui_list_view_model_min_size_get(const Eo *obj EINA_UNUSED,
 EOLIAN static void
 _efl_ui_list_view_efl_ui_list_view_model_min_size_set(Eo *obj, 
Efl_Ui_List_View_Data *pd, Eina_Size2D min)
 {
+   Eina_Size2D sz;
    ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
 
    pd->min.w = min.w;
    pd->min.h = min.h;
 
    efl_gfx_hint_size_min_set(wd->resize_obj, EINA_SIZE2D(pd->min.w, 
pd->min.h));
-   efl_event_callback_call(pd->pan_obj, EFL_CONTENT_EVENT_CONTENT_CHANGED, 
NULL);
+   sz = pd->min;
+   efl_event_callback_call(pd->pan_obj, 
EFL_UI_PAN_EVENT_PAN_CONTENT_SIZE_CHANGED, &sz);
 }
 
 EOLIAN static void
diff --git a/src/lib/elementary/efl_ui_pan.c b/src/lib/elementary/efl_ui_pan.c
index 1dcea1c6f6..22211071f6 100644
--- a/src/lib/elementary/efl_ui_pan.c
+++ b/src/lib/elementary/efl_ui_pan.c
@@ -142,6 +142,7 @@ _efl_ui_pan_content_resize_cb(void *data,
         evas_object_smart_changed(pobj);
      }
    efl_event_callback_call(pobj, 
EFL_UI_PAN_EVENT_PAN_CONTENT_POSITION_CHANGED, NULL);
+   efl_event_callback_call(pobj, EFL_UI_PAN_EVENT_PAN_CONTENT_SIZE_CHANGED, 
&sz);
 }
 
 EOLIAN static Eina_Bool
diff --git a/src/lib/elementary/efl_ui_pan.eo b/src/lib/elementary/efl_ui_pan.eo
index 2cfbb5c33a..e9edd8f273 100644
--- a/src/lib/elementary/efl_ui_pan.eo
+++ b/src/lib/elementary/efl_ui_pan.eo
@@ -66,5 +66,6 @@ class @beta Efl.Ui.Pan extends Efl.Canvas.Group implements 
Efl.Content
    events {
       pan,viewport,changed: void; [[This widget's position or size has 
changed.]]
       pan,content_position,changed: void; [[The content's position has 
changed.]]
+      pan,content_size,changed: Eina.Size2D; [[The content's size has changed, 
its size in the event is the new size]]
    }
 }
diff --git a/src/lib/elementary/efl_ui_scroll_manager.c 
b/src/lib/elementary/efl_ui_scroll_manager.c
index 5dbc8efd59..656662835a 100644
--- a/src/lib/elementary/efl_ui_scroll_manager.c
+++ b/src/lib/elementary/efl_ui_scroll_manager.c
@@ -1977,7 +1977,7 @@ 
_efl_ui_scroll_manager_content_resized(Efl_Ui_Scroll_Manager_Data *sd, Eina_Size
 }
 
 static void
-_efl_ui_scroll_manager_pan_content_resized_cb(void *data, const Efl_Event 
*event)
+_efl_ui_scroll_manager_pan_content_size_changed_cb(void *data, const Efl_Event 
*event)
 {
    Efl_Ui_Scroll_Manager_Data *sd = data;
    Eina_Size2D *content = event->info;
@@ -1986,24 +1986,18 @@ _efl_ui_scroll_manager_pan_content_resized_cb(void 
*data, const Efl_Event *event
 }
 
 static void
-_efl_ui_scroll_manager_pan_content_changed(Efl_Ui_Scroll_Manager_Data *sd, Eo 
*content)
+_efl_ui_scroll_manager_pan_content_changed(Efl_Ui_Scroll_Manager_Data *sd)
 {
    Eina_Size2D sz = {0, 0};
 
-   /* protect against widgets that synthesize these events to trigger this 
codepath */
-   if (content && (content != sd->pan_content))
-     efl_event_callback_add(sd->pan_content, 
EFL_GFX_ENTITY_EVENT_SIZE_CHANGED, 
_efl_ui_scroll_manager_pan_content_resized_cb, sd);
-   else if (sd->pan_content)
-     efl_event_callback_del(sd->pan_content, 
EFL_GFX_ENTITY_EVENT_SIZE_CHANGED, 
_efl_ui_scroll_manager_pan_content_resized_cb, sd);
-   sd->pan_content = content;
-   sz = efl_ui_pan_content_size_get(sd->pan_obj);
+   if (sd->pan_obj) sz = efl_ui_pan_content_size_get(sd->pan_obj);
    _efl_ui_scroll_manager_content_resized(sd, sz);
 }
 
 static void
-_efl_ui_scroll_manager_pan_content_changed_cb(void *data, const Efl_Event 
*event)
+_efl_ui_scroll_manager_pan_content_changed_cb(void *data, const Efl_Event 
*event EINA_UNUSED)
 {
-   _efl_ui_scroll_manager_pan_content_changed(data, event->info);
+   _efl_ui_scroll_manager_pan_content_changed(data);
 }
 
 static void
@@ -2279,10 +2273,12 @@ _efl_ui_scroll_manager_pan_set(Eo *obj, 
Efl_Ui_Scroll_Manager_Data *sd, Eo *pan)
            (sd->pan_obj, EFL_UI_PAN_EVENT_PAN_VIEWPORT_CHANGED, 
_efl_ui_scroll_manager_pan_viewport_changed_cb, sd);
         efl_event_callback_del
            (sd->pan_obj, EFL_UI_PAN_EVENT_PAN_CONTENT_POSITION_CHANGED, 
_efl_ui_scroll_manager_pan_position_changed_cb, sd);
-        _efl_ui_scroll_manager_pan_content_changed(sd, NULL);
+        efl_event_callback_del
+           (sd->pan_obj, EFL_UI_PAN_EVENT_PAN_CONTENT_SIZE_CHANGED, 
_efl_ui_scroll_manager_pan_content_size_changed_cb, sd);
      }
 
    sd->pan_obj = pan;
+   _efl_ui_scroll_manager_pan_content_changed(sd);
    if (!pan)
      return;
 
@@ -2292,11 +2288,12 @@ _efl_ui_scroll_manager_pan_set(Eo *obj, 
Efl_Ui_Scroll_Manager_Data *sd, Eo *pan)
      (sd->pan_obj, EFL_UI_PAN_EVENT_PAN_VIEWPORT_CHANGED, 
_efl_ui_scroll_manager_pan_viewport_changed_cb, sd);
    efl_event_callback_add
      (sd->pan_obj, EFL_UI_PAN_EVENT_PAN_CONTENT_POSITION_CHANGED, 
_efl_ui_scroll_manager_pan_position_changed_cb, sd);
+   efl_event_callback_add
+     (sd->pan_obj, EFL_UI_PAN_EVENT_PAN_CONTENT_SIZE_CHANGED, 
_efl_ui_scroll_manager_pan_content_size_changed_cb, sd);
    evas_object_event_callback_add(sd->pan_obj, EVAS_CALLBACK_RESIZE,
                                        _efl_ui_scroll_manager_pan_resized_cb, 
obj);
    evas_object_event_callback_add(sd->pan_obj, EVAS_CALLBACK_MOVE,
                                        _efl_ui_scroll_manager_pan_moved_cb, 
obj);
-   _efl_ui_scroll_manager_pan_content_changed(sd, efl_content_get(pan));
 }
 
 EOLIAN static Eina_Bool
@@ -2486,9 +2483,8 @@ _efl_ui_scroll_manager_efl_object_destructor(Eo *obj, 
Efl_Ui_Scroll_Manager_Data
            (sd->pan_obj, EFL_UI_PAN_EVENT_PAN_VIEWPORT_CHANGED, 
_efl_ui_scroll_manager_pan_viewport_changed_cb, sd);
         efl_event_callback_del
            (sd->pan_obj, EFL_UI_PAN_EVENT_PAN_CONTENT_POSITION_CHANGED, 
_efl_ui_scroll_manager_pan_position_changed_cb, sd);
-        if (sd->pan_content)
-          efl_event_callback_del(sd->pan_content, 
EFL_GFX_ENTITY_EVENT_SIZE_CHANGED, 
_efl_ui_scroll_manager_pan_content_resized_cb, sd);
-        sd->pan_content = NULL;
+        efl_event_callback_del
+           (sd->pan_obj, EFL_UI_PAN_EVENT_PAN_CONTENT_SIZE_CHANGED, 
_efl_ui_scroll_manager_pan_content_size_changed_cb, sd);
      }
    efl_destructor(efl_super(obj, MY_CLASS));
 }
diff --git a/src/lib/elementary/efl_ui_widget_scroll_manager.h 
b/src/lib/elementary/efl_ui_widget_scroll_manager.h
index 4001255c6f..d6c478eb6e 100644
--- a/src/lib/elementary/efl_ui_widget_scroll_manager.h
+++ b/src/lib/elementary/efl_ui_widget_scroll_manager.h
@@ -18,7 +18,6 @@ typedef struct _Efl_Ui_Scroll_Manager_Data
 
    Evas_Object                  *obj;
    Evas_Object                  *pan_obj;
-   Evas_Object                  *pan_content;
    Evas_Object                  *event_rect;
 
    Evas_Object                  *parent;

-- 


Reply via email to