From e50cf9b2a212367d4d913bf57871dd2aa2342a80 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Fri, 30 Aug 2019 14:47:58 -0400 Subject: [PATCH] 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 ++++++++----------- .../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;