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]]
+}
+
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 *
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;
}
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);
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);
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);
pd->m = NULL;
}
+ pd->flags |= EFL_GFX_CHANGE_FLAG_MATRIX;
_efl_vg_changed(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;
double x, y;
int r, g, b, a;
+ Efl_Gfx_Change_Flag flags;
Eina_Bool visibility : 1;
Eina_Bool changed : 1;
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);