efl_ui_spotlight_manager: fix not to change sub objects' color
Summary: Widget's group_member_add() sets its sub objects' color with the parent's color. Since spotlight managers call group_member_add() with spotlight container and its sub objects, the sub objects' color can be changed. e.g. packed rectangle's color is changed to white (default color value) To resolve the above issue, spotlight managers set data "_elm_leaveme" before calling group_member_add() not to change sub objects' color. Reviewers: bu5hm4n Reviewed By: bu5hm4n Subscribers: cedric, #reviewers, #committers Tags: #efl Differential Revision: https://phab.enlightenment.org/D11134
This commit is contained in:
parent
7311b6fe32
commit
a1350a0e3e
|
@ -10,6 +10,7 @@ typedef struct {
|
|||
Efl_Ui_Spotlight_Container * container;
|
||||
Eina_Size2D page_size;
|
||||
Efl_Ui_Widget *current_content;
|
||||
Efl_Gfx_Entity *clipper;
|
||||
Eina_Bool animation;
|
||||
double last_pos;
|
||||
} Efl_Ui_Spotlight_Manager_Plain_Data;
|
||||
|
@ -36,6 +37,7 @@ _geom_sync(Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Manager_Plain_Data *pd)
|
|||
goal.size = pd->page_size;
|
||||
goal.y = (group_pos.y + group_pos.h/2)-pd->page_size.h/2;
|
||||
goal.x = (group_pos.x + group_pos.w/2)-pd->page_size.w/2;
|
||||
efl_gfx_entity_geometry_set(pd->clipper, goal);
|
||||
efl_gfx_entity_geometry_set(entity, goal);
|
||||
}
|
||||
|
||||
|
@ -48,8 +50,15 @@ _efl_ui_spotlight_manager_plain_efl_ui_spotlight_manager_bind(Eo *obj, Efl_Ui_Sp
|
|||
|
||||
pd->container = spotlight;
|
||||
|
||||
pd->clipper = efl_add(EFL_CANVAS_RECTANGLE_CLASS,
|
||||
evas_object_evas_get(spotlight));
|
||||
evas_object_static_clip_set(pd->clipper, EINA_TRUE);
|
||||
efl_canvas_group_member_add(spotlight, pd->clipper);
|
||||
|
||||
for (int i = 0; i < efl_content_count(spotlight) ; ++i) {
|
||||
Efl_Gfx_Entity *elem = efl_pack_content_get(spotlight, i);
|
||||
efl_key_data_set(elem, "_elm_leaveme", spotlight);
|
||||
efl_canvas_object_clipper_set(elem, pd->clipper);
|
||||
efl_canvas_group_member_add(pd->container, elem);
|
||||
efl_gfx_entity_visible_set(elem, EINA_FALSE);
|
||||
}
|
||||
|
@ -81,6 +90,8 @@ _content_changed(Eo *obj, Efl_Ui_Spotlight_Manager_Plain_Data *pd)
|
|||
EOLIAN static void
|
||||
_efl_ui_spotlight_manager_plain_efl_ui_spotlight_manager_content_add(Eo *obj, Efl_Ui_Spotlight_Manager_Plain_Data *pd, Efl_Gfx_Entity *subobj, int index EINA_UNUSED)
|
||||
{
|
||||
efl_key_data_set(subobj, "_elm_leaveme", pd->container);
|
||||
efl_canvas_object_clipper_set(subobj, pd->clipper);
|
||||
efl_canvas_group_member_add(pd->container, subobj);
|
||||
efl_gfx_entity_visible_set(subobj, EINA_FALSE);
|
||||
_content_changed(obj, pd);
|
||||
|
@ -89,6 +100,8 @@ _efl_ui_spotlight_manager_plain_efl_ui_spotlight_manager_content_add(Eo *obj, Ef
|
|||
EOLIAN static void
|
||||
_efl_ui_spotlight_manager_plain_efl_ui_spotlight_manager_content_del(Eo *obj, Efl_Ui_Spotlight_Manager_Plain_Data *pd, Efl_Gfx_Entity *subobj, int index EINA_UNUSED)
|
||||
{
|
||||
efl_key_data_set(subobj, "_elm_leaveme", NULL);
|
||||
efl_canvas_object_clipper_set(subobj, NULL);
|
||||
efl_canvas_group_member_remove(pd->container, subobj);
|
||||
if (pd->current_content == subobj)
|
||||
pd->current_content = NULL;
|
||||
|
@ -147,5 +160,17 @@ _efl_ui_spotlight_manager_plain_efl_ui_spotlight_manager_animated_transition_get
|
|||
return pd->animation;
|
||||
}
|
||||
|
||||
EOLIAN static void
|
||||
_efl_ui_spotlight_manager_plain_efl_object_invalidate(Eo *obj, Efl_Ui_Spotlight_Manager_Plain_Data *pd)
|
||||
{
|
||||
efl_del(pd->clipper);
|
||||
|
||||
for (int i = 0; i < efl_content_count(pd->container); ++i)
|
||||
{
|
||||
efl_canvas_object_clipper_set(efl_pack_content_get(pd->container, i), NULL);
|
||||
}
|
||||
|
||||
efl_invalidate(efl_super(obj, MY_CLASS));
|
||||
}
|
||||
|
||||
#include "efl_ui_spotlight_manager_plain.eo.c"
|
||||
|
|
|
@ -8,5 +8,6 @@ class @beta Efl.Ui.Spotlight.Manager_Plain extends Efl.Ui.Spotlight.Manager
|
|||
Efl.Ui.Spotlight.Manager.size {set;}
|
||||
Efl.Ui.Spotlight.Manager.animated_transition {set; get;}
|
||||
Efl.Object.destructor;
|
||||
Efl.Object.invalidate;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -185,6 +185,7 @@ _efl_ui_spotlight_manager_scroll_efl_ui_spotlight_manager_bind(Eo *obj, Efl_Ui_S
|
|||
|
||||
for (int i = 0; i < efl_content_count(spotlight) ; ++i) {
|
||||
Efl_Gfx_Entity *elem = efl_pack_content_get(spotlight, i);
|
||||
efl_key_data_set(elem, "_elm_leaveme", spotlight);
|
||||
efl_canvas_object_clipper_set(elem, pd->backclip);
|
||||
efl_canvas_group_member_add(pd->container, elem);
|
||||
efl_gfx_entity_visible_set(elem, EINA_TRUE);
|
||||
|
@ -197,6 +198,7 @@ _efl_ui_spotlight_manager_scroll_efl_ui_spotlight_manager_bind(Eo *obj, Efl_Ui_S
|
|||
EOLIAN static void
|
||||
_efl_ui_spotlight_manager_scroll_efl_ui_spotlight_manager_content_add(Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Manager_Scroll_Data *pd, Efl_Gfx_Entity *subobj, int index EINA_UNUSED)
|
||||
{
|
||||
efl_key_data_set(subobj, "_elm_leaveme", pd->container);
|
||||
efl_gfx_entity_visible_set(subobj, EINA_TRUE);
|
||||
efl_canvas_object_clipper_set(subobj, pd->backclip);
|
||||
efl_canvas_group_member_add(pd->container, subobj);
|
||||
|
@ -209,6 +211,7 @@ _efl_ui_spotlight_manager_scroll_efl_ui_spotlight_manager_content_add(Eo *obj EI
|
|||
EOLIAN static void
|
||||
_efl_ui_spotlight_manager_scroll_efl_ui_spotlight_manager_content_del(Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Manager_Scroll_Data *pd, Efl_Gfx_Entity *subobj, int index EINA_UNUSED)
|
||||
{
|
||||
efl_key_data_set(subobj, "_elm_leaveme", NULL);
|
||||
efl_canvas_object_clipper_set(subobj, NULL);
|
||||
efl_canvas_group_member_remove(pd->container, subobj);
|
||||
|
||||
|
|
|
@ -10,6 +10,7 @@ typedef struct {
|
|||
Efl_Ui_Spotlight_Container * container;
|
||||
Efl_Canvas_Animation_Player *alpha_anim;
|
||||
Efl_Gfx_Entity *content[2];
|
||||
Efl_Gfx_Entity *clipper;
|
||||
int ids[2]; //only used when in animation
|
||||
Eina_Size2D page_size;
|
||||
Eina_Bool animation;
|
||||
|
@ -25,6 +26,7 @@ _geom_sync(Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Manager_Stack_Data *pd)
|
|||
goal.size = pd->page_size;
|
||||
goal.y = (group_pos.y + group_pos.h/2)-pd->page_size.h/2;
|
||||
goal.x = (group_pos.x + group_pos.w/2)-pd->page_size.w/2;
|
||||
efl_gfx_entity_geometry_set(pd->clipper, goal);
|
||||
for (int i = 0; i < 2; ++i)
|
||||
{
|
||||
if (pd->content[i])
|
||||
|
@ -62,12 +64,19 @@ _efl_ui_spotlight_manager_stack_efl_ui_spotlight_manager_bind(Eo *obj, Efl_Ui_Sp
|
|||
{
|
||||
pd->container = spotlight;
|
||||
|
||||
pd->clipper = efl_add(EFL_CANVAS_RECTANGLE_CLASS,
|
||||
evas_object_evas_get(pd->container));
|
||||
evas_object_static_clip_set(pd->clipper, EINA_TRUE);
|
||||
efl_canvas_group_member_add(spotlight, pd->clipper);
|
||||
|
||||
pd->alpha_anim = efl_add(EFL_CANVAS_ALPHA_ANIMATION_CLASS, obj);
|
||||
efl_animation_alpha_set(pd->alpha_anim, 0.0, 1.0);
|
||||
efl_animation_duration_set(pd->alpha_anim, 0.5);
|
||||
|
||||
for (int i = 0; i < efl_content_count(spotlight) ; ++i) {
|
||||
Efl_Gfx_Entity *elem = efl_pack_content_get(spotlight, i);
|
||||
efl_key_data_set(elem, "_elm_leaveme", spotlight);
|
||||
efl_canvas_object_clipper_set(elem, pd->clipper);
|
||||
efl_canvas_group_member_add(pd->container, elem);
|
||||
efl_gfx_entity_visible_set(elem, EINA_FALSE);
|
||||
}
|
||||
|
@ -95,6 +104,8 @@ _update_ids(Eo *obj, Efl_Ui_Spotlight_Manager_Stack_Data *pd, int avoid_index)
|
|||
EOLIAN static void
|
||||
_efl_ui_spotlight_manager_stack_efl_ui_spotlight_manager_content_add(Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Manager_Stack_Data *pd, Efl_Gfx_Entity *subobj, int index EINA_UNUSED)
|
||||
{
|
||||
efl_key_data_set(subobj, "_elm_leaveme", pd->container);
|
||||
efl_canvas_object_clipper_set(subobj, pd->clipper);
|
||||
efl_canvas_group_member_add(pd->container, subobj);
|
||||
efl_gfx_entity_visible_set(subobj, EINA_FALSE);
|
||||
_update_ids(obj, pd, -1);
|
||||
|
@ -103,6 +114,8 @@ _efl_ui_spotlight_manager_stack_efl_ui_spotlight_manager_content_add(Eo *obj EIN
|
|||
EOLIAN static void
|
||||
_efl_ui_spotlight_manager_stack_efl_ui_spotlight_manager_content_del(Eo *obj EINA_UNUSED, Efl_Ui_Spotlight_Manager_Stack_Data *pd, Efl_Gfx_Entity *subobj, int index)
|
||||
{
|
||||
efl_key_data_set(subobj, "_elm_leaveme", NULL);
|
||||
efl_canvas_object_clipper_set(subobj, NULL);
|
||||
efl_canvas_group_member_remove(pd->container, subobj);
|
||||
for (int i = 0; i < 2; ++i)
|
||||
{
|
||||
|
@ -169,10 +182,12 @@ _efl_ui_spotlight_manager_stack_efl_ui_spotlight_manager_size_set(Eo *obj, Efl_U
|
|||
}
|
||||
|
||||
EOLIAN static void
|
||||
_efl_ui_spotlight_manager_stack_efl_object_invalidate(Eo *obj, Efl_Ui_Spotlight_Manager_Stack_Data *pd EINA_UNUSED)
|
||||
_efl_ui_spotlight_manager_stack_efl_object_invalidate(Eo *obj, Efl_Ui_Spotlight_Manager_Stack_Data *pd)
|
||||
{
|
||||
efl_invalidate(efl_super(obj, MY_CLASS));
|
||||
|
||||
efl_del(pd->clipper);
|
||||
|
||||
for (int i = 0; i < efl_content_count(pd->container); ++i)
|
||||
{
|
||||
Efl_Gfx_Stack *elem = efl_pack_content_get(pd->container, i);
|
||||
|
@ -180,6 +195,8 @@ _efl_ui_spotlight_manager_stack_efl_object_invalidate(Eo *obj, Efl_Ui_Spotlight_
|
|||
{
|
||||
efl_gfx_mapping_color_set(elem, d, 255, 255, 255, 255);
|
||||
}
|
||||
|
||||
efl_canvas_object_clipper_set(elem, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue