diff options
author | Hermet Park <hermetpark@gmail.com> | 2018-11-14 21:50:50 +0900 |
---|---|---|
committer | Hermet Park <hermetpark@gmail.com> | 2018-11-14 21:50:50 +0900 |
commit | e2cd8eea55c339d1ab96524113f5452a414957d5 (patch) | |
tree | de82f6a93181756600c67233e1ee42f8ace06293 /src/lib/evas/canvas | |
parent | 09da85807a6447d6e9c04fc72fdb485a78192d82 (diff) |
evas vg: optimize gradient sequences.
Summary:
1. Pointed out gradient prepare step triggered duplicatedly,
because they are immediate children of container.
But gradients is desigend to fill shape,
shape could get ready of the gradients which are applied to.
So, container doesn't need to prepare gradient children.
2. Ector shape does prepare its gradient renderer in it's prepare time,
each gradients objects doesn't need to prepare renderer separately.
Here code skip duplication of sequences of gradients preparation step.
by cleaning up logic.
Reviewers: #committers
Subscribers: cedric, #reviewers, #committers
Tags: #efl
Differential Revision: https://phab.enlightenment.org/D7269
Diffstat (limited to 'src/lib/evas/canvas')
-rw-r--r-- | src/lib/evas/canvas/evas_vg_container.c | 6 | ||||
-rw-r--r-- | src/lib/evas/canvas/evas_vg_gradient_linear.c | 4 | ||||
-rw-r--r-- | src/lib/evas/canvas/evas_vg_gradient_radial.c | 6 | ||||
-rw-r--r-- | src/lib/evas/canvas/evas_vg_private.h | 10 | ||||
-rw-r--r-- | src/lib/evas/canvas/evas_vg_shape.c | 2 |
5 files changed, 16 insertions, 12 deletions
diff --git a/src/lib/evas/canvas/evas_vg_container.c b/src/lib/evas/canvas/evas_vg_container.c index 367a3c99ca..ccb8bfbf76 100644 --- a/src/lib/evas/canvas/evas_vg_container.c +++ b/src/lib/evas/canvas/evas_vg_container.c | |||
@@ -35,7 +35,7 @@ _efl_canvas_vg_container_render_pre(Eo *obj EINA_UNUSED, | |||
35 | Efl_Canvas_Vg_Node_Data *child_nd; | 35 | Efl_Canvas_Vg_Node_Data *child_nd; |
36 | Efl_Gfx_Change_Flag flag; | 36 | Efl_Gfx_Change_Flag flag; |
37 | 37 | ||
38 | if (nd->flags == EFL_GFX_CHANGE_FLAG_NONE) return ; | 38 | if (nd->flags == EFL_GFX_CHANGE_FLAG_NONE) return; |
39 | 39 | ||
40 | flag = nd->flags; | 40 | flag = nd->flags; |
41 | nd->flags = EFL_GFX_CHANGE_FLAG_NONE; | 41 | nd->flags = EFL_GFX_CHANGE_FLAG_NONE; |
@@ -44,6 +44,10 @@ _efl_canvas_vg_container_render_pre(Eo *obj EINA_UNUSED, | |||
44 | 44 | ||
45 | EINA_LIST_FOREACH(pd->children, l, child) | 45 | EINA_LIST_FOREACH(pd->children, l, child) |
46 | { | 46 | { |
47 | //Skip Gradients. they will be updated by Shape. | ||
48 | if (efl_isa(child, EFL_CANVAS_VG_GRADIENT_CLASS)) | ||
49 | continue; | ||
50 | |||
47 | if (flag & EFL_GFX_CHANGE_FLAG_MATRIX) | 51 | if (flag & EFL_GFX_CHANGE_FLAG_MATRIX) |
48 | { | 52 | { |
49 | child_nd = efl_data_scope_get(child, EFL_CANVAS_VG_NODE_CLASS); | 53 | child_nd = efl_data_scope_get(child, EFL_CANVAS_VG_NODE_CLASS); |
diff --git a/src/lib/evas/canvas/evas_vg_gradient_linear.c b/src/lib/evas/canvas/evas_vg_gradient_linear.c index c7a1263c92..26b434b00d 100644 --- a/src/lib/evas/canvas/evas_vg_gradient_linear.c +++ b/src/lib/evas/canvas/evas_vg_gradient_linear.c | |||
@@ -87,7 +87,9 @@ _efl_canvas_vg_gradient_linear_render_pre(Eo *obj, | |||
87 | efl_gfx_gradient_spread_set(nd->renderer, gd->s); | 87 | efl_gfx_gradient_spread_set(nd->renderer, gd->s); |
88 | efl_gfx_gradient_linear_start_set(nd->renderer, pd->start.x, pd->start.y); | 88 | efl_gfx_gradient_linear_start_set(nd->renderer, pd->start.x, pd->start.y); |
89 | efl_gfx_gradient_linear_end_set(nd->renderer, pd->end.x, pd->end.y); | 89 | efl_gfx_gradient_linear_end_set(nd->renderer, pd->end.x, pd->end.y); |
90 | ector_renderer_prepare(nd->renderer); | 90 | |
91 | //Prepare renderer triggered by ector shape this gradient applied to. | ||
92 | //ector_renderer_prepare(nd->renderer); | ||
91 | } | 93 | } |
92 | 94 | ||
93 | static Eo * | 95 | static Eo * |
diff --git a/src/lib/evas/canvas/evas_vg_gradient_radial.c b/src/lib/evas/canvas/evas_vg_gradient_radial.c index 573c17a79f..a56c2200ba 100644 --- a/src/lib/evas/canvas/evas_vg_gradient_radial.c +++ b/src/lib/evas/canvas/evas_vg_gradient_radial.c | |||
@@ -81,7 +81,7 @@ _efl_canvas_vg_gradient_radial_render_pre(Eo *obj, | |||
81 | Efl_Canvas_Vg_Gradient_Radial_Data *pd = data; | 81 | Efl_Canvas_Vg_Gradient_Radial_Data *pd = data; |
82 | Efl_Canvas_Vg_Gradient_Data *gd; | 82 | Efl_Canvas_Vg_Gradient_Data *gd; |
83 | 83 | ||
84 | if (nd->flags == EFL_GFX_CHANGE_FLAG_NONE) return ; | 84 | if (nd->flags == EFL_GFX_CHANGE_FLAG_NONE) return; |
85 | 85 | ||
86 | nd->flags = EFL_GFX_CHANGE_FLAG_NONE; | 86 | nd->flags = EFL_GFX_CHANGE_FLAG_NONE; |
87 | 87 | ||
@@ -104,7 +104,9 @@ _efl_canvas_vg_gradient_radial_render_pre(Eo *obj, | |||
104 | efl_gfx_gradient_radial_center_set(nd->renderer, pd->center.x, pd->center.y); | 104 | efl_gfx_gradient_radial_center_set(nd->renderer, pd->center.x, pd->center.y); |
105 | efl_gfx_gradient_radial_focal_set(nd->renderer, pd->focal.x, pd->focal.y); | 105 | efl_gfx_gradient_radial_focal_set(nd->renderer, pd->focal.x, pd->focal.y); |
106 | efl_gfx_gradient_radial_radius_set(nd->renderer, pd->radius); | 106 | efl_gfx_gradient_radial_radius_set(nd->renderer, pd->radius); |
107 | ector_renderer_prepare(nd->renderer); | 107 | |
108 | //Prepare renderer triggered by ector shape this gradient applied to. | ||
109 | //ector_renderer_prepare(nd->renderer); | ||
108 | } | 110 | } |
109 | 111 | ||
110 | static Eo * | 112 | static Eo * |
diff --git a/src/lib/evas/canvas/evas_vg_private.h b/src/lib/evas/canvas/evas_vg_private.h index cc43fb03ab..b71cf18b81 100644 --- a/src/lib/evas/canvas/evas_vg_private.h +++ b/src/lib/evas/canvas/evas_vg_private.h | |||
@@ -116,14 +116,10 @@ void efl_canvas_vg_node_root_set(Efl_VG *node, Efl_VG *vg | |||
116 | static inline Efl_Canvas_Vg_Node_Data * | 116 | static inline Efl_Canvas_Vg_Node_Data * |
117 | _evas_vg_render_pre(Efl_VG *child, Ector_Surface *s, Eina_Matrix3 *m) | 117 | _evas_vg_render_pre(Efl_VG *child, Ector_Surface *s, Eina_Matrix3 *m) |
118 | { | 118 | { |
119 | Efl_Canvas_Vg_Node_Data *child_nd = NULL; | 119 | if (!child) return NULL; |
120 | |||
121 | // FIXME: Prevent infinite loop | ||
122 | if (child) | ||
123 | child_nd = efl_data_scope_get(child, EFL_CANVAS_VG_NODE_CLASS); | ||
124 | if (child_nd) | ||
125 | child_nd->render_pre(child, m, s, child_nd->data, child_nd); | ||
126 | 120 | ||
121 | Efl_Canvas_Vg_Node_Data *child_nd = efl_data_scope_get(child, EFL_CANVAS_VG_NODE_CLASS); | ||
122 | if (child_nd) child_nd->render_pre(child, m, s, child_nd->data, child_nd); | ||
127 | return child_nd; | 123 | return child_nd; |
128 | } | 124 | } |
129 | 125 | ||
diff --git a/src/lib/evas/canvas/evas_vg_shape.c b/src/lib/evas/canvas/evas_vg_shape.c index 936bc26aa1..24cc485944 100644 --- a/src/lib/evas/canvas/evas_vg_shape.c +++ b/src/lib/evas/canvas/evas_vg_shape.c | |||
@@ -87,7 +87,7 @@ _efl_canvas_vg_shape_render_pre(Eo *obj EINA_UNUSED, | |||
87 | Efl_Canvas_Vg_Shape_Data *pd = data; | 87 | Efl_Canvas_Vg_Shape_Data *pd = data; |
88 | Efl_Canvas_Vg_Node_Data *fill, *stroke_fill, *stroke_marker, *mask; | 88 | Efl_Canvas_Vg_Node_Data *fill, *stroke_fill, *stroke_marker, *mask; |
89 | 89 | ||
90 | if (nd->flags == EFL_GFX_CHANGE_FLAG_NONE) return ; | 90 | if (nd->flags == EFL_GFX_CHANGE_FLAG_NONE) return; |
91 | 91 | ||
92 | nd->flags = EFL_GFX_CHANGE_FLAG_NONE; | 92 | nd->flags = EFL_GFX_CHANGE_FLAG_NONE; |
93 | 93 | ||