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
This commit is contained in:
Mike Blumenkrantz 2019-08-30 14:47:58 -04:00
parent ba0cd5d23d
commit e50cf9b2a2
6 changed files with 21 additions and 19 deletions

View File

@ -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;

View File

@ -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

View File

@ -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

View File

@ -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]]
}
}

View File

@ -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));
}

View File

@ -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;