From d51bdf3c77adf81495c9a777e591079d42735b47 Mon Sep 17 00:00:00 2001 From: Marcel Hollerbach Date: Wed, 27 Nov 2019 17:04:24 +0100 Subject: [PATCH] efl_ui_spotlight: move event rectangle for now the eventrect was a swallow part, created by the container, set to the edje layout. However, the only real user for this is the scroll spotlight manager. Which means, we have mostly unneeded element resized by edje, which is quite an overhead. With this commit, this is moved to the scroll manager, which makes the usage with stack and plain less memory heavy. Differential Revision: https://phab.enlightenment.org/D10763 --- data/elementary/themes/edc/efl/spotlight.edc | 6 ------ src/lib/elementary/efl_ui_spotlight_container.c | 6 ------ .../efl_ui_spotlight_manager_scroll.c | 17 ++++++++++++----- 3 files changed, 12 insertions(+), 17 deletions(-) diff --git a/data/elementary/themes/edc/efl/spotlight.edc b/data/elementary/themes/edc/efl/spotlight.edc index 802be68847..725cdce611 100644 --- a/data/elementary/themes/edc/efl/spotlight.edc +++ b/data/elementary/themes/edc/efl/spotlight.edc @@ -8,12 +8,6 @@ group { "efl/spotlight"; data.item: "version" "123"; min: 0 50; } } - swallow { "efl.event"; - scale; - repeat_events: 1; - desc { "default"; - } - } } } diff --git a/src/lib/elementary/efl_ui_spotlight_container.c b/src/lib/elementary/efl_ui_spotlight_container.c index 06b53a70b4..2d964e57e3 100644 --- a/src/lib/elementary/efl_ui_spotlight_container.c +++ b/src/lib/elementary/efl_ui_spotlight_container.c @@ -218,12 +218,6 @@ _efl_ui_spotlight_container_efl_object_constructor(Eo *obj, elm_widget_can_focus_set(obj, EINA_FALSE); efl_event_callback_array_add(obj, spotlight_resized(), pd); - pd->event = efl_add(EFL_CANVAS_RECTANGLE_CLASS, - evas_object_evas_get(obj)); - evas_object_color_set(pd->event, 0, 0, 0, 0); - evas_object_repeat_events_set(pd->event, EINA_TRUE); - efl_content_set(efl_part(obj, "efl.event"), pd->event); - return obj; } diff --git a/src/lib/elementary/efl_ui_spotlight_manager_scroll.c b/src/lib/elementary/efl_ui_spotlight_manager_scroll.c index 18486763ad..1b5d974176 100644 --- a/src/lib/elementary/efl_ui_spotlight_manager_scroll.c +++ b/src/lib/elementary/efl_ui_spotlight_manager_scroll.c @@ -8,6 +8,7 @@ typedef struct { Efl_Ui_Spotlight_Container * container; Efl_Gfx_Entity *foreclip, *backclip; + Efl_Canvas_Rectangle *event; Eina_Size2D page_size; struct { Eina_Bool active; @@ -47,6 +48,7 @@ _apply_box_properties(Eo *obj, Efl_Ui_Spotlight_Manager_Scroll_Data *pd) else current_pos = efl_pack_index_get(pd->container, efl_ui_spotlight_active_element_get(pd->container)); + efl_gfx_entity_geometry_set(pd->event, group_pos); efl_gfx_entity_geometry_set(pd->foreclip, group_pos); //first calculate the size geometry.h = pd->page_size.h; @@ -174,17 +176,22 @@ _efl_ui_spotlight_manager_scroll_efl_ui_spotlight_manager_bind(Eo *obj, Efl_Ui_S efl_gfx_entity_visible_set(pd->backclip, EINA_FALSE); efl_canvas_group_member_add(spotlight, pd->backclip); + pd->event = efl_add(EFL_CANVAS_RECTANGLE_CLASS, + evas_object_evas_get(obj)); + efl_canvas_object_repeat_events_set(pd->event, EINA_TRUE); + efl_event_callback_array_add(pd->event, mouse_listeners(), obj); + efl_canvas_group_member_add(spotlight, pd->event); + efl_gfx_color_set(pd->event, 0, 0, 0, 0); + for (int i = 0; i < efl_content_count(spotlight) ; ++i) { Efl_Gfx_Entity *elem = efl_pack_content_get(spotlight, i); efl_canvas_object_clipper_set(elem, pd->backclip); efl_canvas_group_member_add(pd->container, elem); efl_gfx_entity_visible_set(elem, EINA_TRUE); + efl_gfx_stack_above(pd->event, elem); } _apply_box_properties(obj, pd); - - efl_event_callback_array_add(efl_content_get(efl_part(pd->container, "efl.event")), mouse_listeners(), obj); } - } EOLIAN static void @@ -193,7 +200,7 @@ _efl_ui_spotlight_manager_scroll_efl_ui_spotlight_manager_content_add(Eo *obj EI efl_gfx_entity_visible_set(subobj, EINA_TRUE); efl_canvas_object_clipper_set(subobj, pd->backclip); efl_canvas_group_member_add(pd->container, subobj); - + efl_gfx_stack_above(pd->event, subobj); if (!pd->transition.active) _apply_box_properties(obj, pd); } @@ -311,7 +318,7 @@ _efl_ui_spotlight_manager_scroll_efl_ui_spotlight_manager_animated_transition_ge EOLIAN static void _efl_ui_spotlight_manager_scroll_efl_object_invalidate(Eo *obj, Efl_Ui_Spotlight_Manager_Scroll_Data *pd EINA_UNUSED) { - efl_event_callback_array_del(efl_content_get(efl_part(pd->container, "efl.event")), mouse_listeners(), obj); + efl_del(pd->event); efl_del(pd->backclip); efl_del(pd->foreclip);