forked from enlightenment/efl
evas: propagate the change to child when object is a vector graphic container
Summary: let me know whats your thought Reviewers: Hermet, cedric Subscribers: cedric, jpeg Differential Revision: https://phab.enlightenment.org/D3893 Signed-off-by: Cedric Bail <cedric@osg.samsung.com>
This commit is contained in:
parent
ce4a9ee6c8
commit
655ed09ab4
|
@ -159,3 +159,12 @@ enum Efl.Gfx.Border_Fill_Mode
|
|||
solid = 2 [[Image's center region is to be made solid, even if it has transparency on it]]
|
||||
}
|
||||
|
||||
enum Efl.Gfx.Change.Flag
|
||||
{
|
||||
[[What property got changed for this object @since 1.18]]
|
||||
none = 0x0, [[No change]]
|
||||
matrix = 0x1, [[matrix got changed]]
|
||||
path = 0x2, [[path got changes]]
|
||||
all = -1 [[all property got changed]]
|
||||
}
|
||||
|
||||
|
|
|
@ -15,14 +15,25 @@ _efl_vg_container_render_pre(Eo *obj EINA_UNUSED,
|
|||
Efl_VG_Container_Data *pd = data;
|
||||
Eina_List *l;
|
||||
Eo *child;
|
||||
Efl_VG_Data *child_nd;
|
||||
Efl_Gfx_Change_Flag flag;
|
||||
|
||||
if (!nd->changed) return ;
|
||||
nd->changed = EINA_FALSE;
|
||||
if (nd->flags == EFL_GFX_CHANGE_FLAG_NONE) return ;
|
||||
|
||||
flag = nd->flags;
|
||||
nd->flags = EFL_GFX_CHANGE_FLAG_NONE;
|
||||
|
||||
EFL_VG_COMPUTE_MATRIX(current, parent, nd);
|
||||
|
||||
EINA_LIST_FOREACH(pd->children, l, child)
|
||||
_evas_vg_render_pre(child, s, current);
|
||||
{
|
||||
if (flag & EFL_GFX_CHANGE_FLAG_MATRIX)
|
||||
{
|
||||
child_nd = eo_data_scope_get(child, EFL_VG_CLASS);
|
||||
child_nd->flags |= EFL_GFX_CHANGE_FLAG_MATRIX;
|
||||
}
|
||||
_evas_vg_render_pre(child, s, current);
|
||||
}
|
||||
}
|
||||
|
||||
static Eo *
|
||||
|
@ -38,6 +49,7 @@ _efl_vg_container_eo_base_constructor(Eo *obj,
|
|||
nd = eo_data_scope_get(obj, EFL_VG_CLASS);
|
||||
nd->render_pre = _efl_vg_container_render_pre;
|
||||
nd->data = pd;
|
||||
nd->flags = EFL_GFX_CHANGE_FLAG_ALL;
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
|
|
@ -65,8 +65,9 @@ _efl_vg_gradient_linear_render_pre(Eo *obj,
|
|||
Efl_VG_Gradient_Linear_Data *pd = data;
|
||||
Efl_VG_Gradient_Data *gd;
|
||||
|
||||
if (!nd->changed) return ;
|
||||
nd->changed = EINA_FALSE;
|
||||
if (nd->flags == EFL_GFX_CHANGE_FLAG_NONE) return ;
|
||||
|
||||
nd->flags = EFL_GFX_CHANGE_FLAG_NONE;
|
||||
|
||||
gd = eo_data_scope_get(obj, EFL_VG_GRADIENT_CLASS);
|
||||
EFL_VG_COMPUTE_MATRIX(current, parent, nd);
|
||||
|
|
|
@ -81,8 +81,9 @@ _efl_vg_gradient_radial_render_pre(Eo *obj,
|
|||
Efl_VG_Gradient_Radial_Data *pd = data;
|
||||
Efl_VG_Gradient_Data *gd;
|
||||
|
||||
if (!nd->changed) return ;
|
||||
nd->changed = EINA_FALSE;
|
||||
if (nd->flags == EFL_GFX_CHANGE_FLAG_NONE) return ;
|
||||
|
||||
nd->flags = EFL_GFX_CHANGE_FLAG_NONE;
|
||||
|
||||
gd = eo_data_scope_get(obj, EFL_VG_GRADIENT_CLASS);
|
||||
EFL_VG_COMPUTE_MATRIX(current, parent, nd);
|
||||
|
|
|
@ -23,8 +23,7 @@ _efl_vg_property_changed(void *data, const Eo_Event *event)
|
|||
Efl_VG_Data *pd = data;
|
||||
Eo *parent;
|
||||
|
||||
if (pd->changed) return EINA_TRUE;
|
||||
pd->changed = EINA_TRUE;
|
||||
if (!pd->flags) pd->flags = EFL_GFX_CHANGE_FLAG_ALL;
|
||||
|
||||
parent = eo_parent_get(event->object);
|
||||
eo_event_callback_call(parent, event->desc, event->info);
|
||||
|
@ -57,6 +56,7 @@ _efl_vg_transformation_set(Eo *obj,
|
|||
pd->m = NULL;
|
||||
}
|
||||
|
||||
pd->flags |= EFL_GFX_CHANGE_FLAG_MATRIX;
|
||||
_efl_vg_changed(obj);
|
||||
}
|
||||
|
||||
|
@ -275,6 +275,7 @@ _efl_vg_eo_base_constructor(Eo *obj,
|
|||
}
|
||||
|
||||
eo_event_callback_add(obj, EFL_GFX_CHANGED, _efl_vg_property_changed, pd);
|
||||
pd->flags = EFL_GFX_CHANGE_FLAG_ALL;
|
||||
pd->changed = EINA_TRUE;
|
||||
|
||||
return obj;
|
||||
|
|
|
@ -37,6 +37,7 @@ struct _Efl_VG_Data
|
|||
|
||||
double x, y;
|
||||
int r, g, b, a;
|
||||
Efl_Gfx_Change_Flag flags;
|
||||
|
||||
Eina_Bool visibility : 1;
|
||||
Eina_Bool changed : 1;
|
||||
|
|
|
@ -131,8 +131,9 @@ _efl_vg_shape_render_pre(Eo *obj EINA_UNUSED,
|
|||
Efl_VG_Data *fill, *stroke_fill, *stroke_marker, *mask;
|
||||
double xn = nd->x, yn = nd->y ;
|
||||
|
||||
if (!nd->changed) return ;
|
||||
nd->changed = EINA_FALSE;
|
||||
if (nd->flags == EFL_GFX_CHANGE_FLAG_NONE) return ;
|
||||
|
||||
nd->flags = EFL_GFX_CHANGE_FLAG_NONE;
|
||||
|
||||
if(parent) eina_matrix3_point_transform(parent, nd->x, nd->y, &xn, &yn);
|
||||
|
||||
|
|
Loading…
Reference in New Issue