diff options
Diffstat (limited to 'src/lib/ector')
-rw-r--r-- | src/lib/ector/cairo/ector_renderer_cairo_shape.c | 24 | ||||
-rw-r--r-- | src/lib/ector/cairo/ector_renderer_cairo_shape.eo | 1 | ||||
-rw-r--r-- | src/lib/ector/gl/ector_renderer_gl_shape.c | 21 | ||||
-rw-r--r-- | src/lib/ector/gl/ector_renderer_gl_shape.eo | 1 | ||||
-rw-r--r-- | src/lib/ector/software/ector_renderer_software_shape.c | 43 | ||||
-rw-r--r-- | src/lib/ector/software/ector_renderer_software_shape.eo | 2 |
6 files changed, 59 insertions, 33 deletions
diff --git a/src/lib/ector/cairo/ector_renderer_cairo_shape.c b/src/lib/ector/cairo/ector_renderer_cairo_shape.c index 87fe2a0..2605623 100644 --- a/src/lib/ector/cairo/ector_renderer_cairo_shape.c +++ b/src/lib/ector/cairo/ector_renderer_cairo_shape.c | |||
@@ -75,15 +75,19 @@ struct _Ector_Renderer_Cairo_Shape_Data | |||
75 | cairo_path_t *path; | 75 | cairo_path_t *path; |
76 | }; | 76 | }; |
77 | 77 | ||
78 | EOLIAN static void | 78 | static void |
79 | _ector_renderer_cairo_shape_efl_gfx_path_commit(Eo *obj EINA_UNUSED, | 79 | _ector_renderer_cairo_shape_path_changed(void *data, const Efl_Event *event) |
80 | Ector_Renderer_Cairo_Shape_Data *pd) | ||
81 | { | 80 | { |
82 | if (pd->path) | 81 | Ector_Renderer_Cairo_Shape_Data *pd = data; |
83 | { | 82 | Efl_Gfx_Path_Change_Event *ev = event->info; |
84 | cairo_path_destroy(pd->path); | 83 | |
85 | pd->path = NULL; | 84 | if (!pd->path) return; |
86 | } | 85 | if (ev && !((ev->what & EFL_GFX_CHANGE_FLAG_MATRIX) || |
86 | (ev->what & EFL_GFX_CHANGE_FLAG_PATH))) | ||
87 | return; | ||
88 | |||
89 | cairo_path_destroy(pd->path); | ||
90 | pd->path = NULL; | ||
87 | } | 91 | } |
88 | 92 | ||
89 | static Eina_Bool | 93 | static Eina_Bool |
@@ -251,7 +255,9 @@ _ector_renderer_cairo_shape_efl_object_constructor(Eo *obj, Ector_Renderer_Cairo | |||
251 | pd->shape = efl_data_xref(obj, ECTOR_RENDERER_SHAPE_MIXIN, obj); | 255 | pd->shape = efl_data_xref(obj, ECTOR_RENDERER_SHAPE_MIXIN, obj); |
252 | pd->base = efl_data_xref(obj, ECTOR_RENDERER_CLASS, obj); | 256 | pd->base = efl_data_xref(obj, ECTOR_RENDERER_CLASS, obj); |
253 | 257 | ||
254 | return obj; | 258 | efl_event_callback_add(obj, EFL_GFX_PATH_EVENT_CHANGED, _ector_renderer_cairo_shape_path_changed, pd); |
259 | |||
260 | return obj; | ||
255 | } | 261 | } |
256 | 262 | ||
257 | static Efl_Object * | 263 | static Efl_Object * |
diff --git a/src/lib/ector/cairo/ector_renderer_cairo_shape.eo b/src/lib/ector/cairo/ector_renderer_cairo_shape.eo index 7c95844..b76dd29 100644 --- a/src/lib/ector/cairo/ector_renderer_cairo_shape.eo +++ b/src/lib/ector/cairo/ector_renderer_cairo_shape.eo | |||
@@ -6,7 +6,6 @@ class Ector.Renderer.Cairo.Shape (Ector.Renderer.Cairo, Ector.Renderer.Shape, Ef | |||
6 | Ector.Renderer.prepare; | 6 | Ector.Renderer.prepare; |
7 | Ector.Renderer.draw; | 7 | Ector.Renderer.draw; |
8 | Efl.Gfx.Path.bounds_get; | 8 | Efl.Gfx.Path.bounds_get; |
9 | Efl.Gfx.Path.commit; | ||
10 | Ector.Renderer.crc { get; } | 9 | Ector.Renderer.crc { get; } |
11 | Ector.Renderer.Cairo.op_fill; | 10 | Ector.Renderer.Cairo.op_fill; |
12 | Efl.Object.constructor; | 11 | Efl.Object.constructor; |
diff --git a/src/lib/ector/gl/ector_renderer_gl_shape.c b/src/lib/ector/gl/ector_renderer_gl_shape.c index cf2266d..79e029d 100644 --- a/src/lib/ector/gl/ector_renderer_gl_shape.c +++ b/src/lib/ector/gl/ector_renderer_gl_shape.c | |||
@@ -20,15 +20,18 @@ struct _Ector_Renderer_GL_Shape_Data | |||
20 | GLshort *vertex; | 20 | GLshort *vertex; |
21 | }; | 21 | }; |
22 | 22 | ||
23 | EOLIAN static void | 23 | static void |
24 | _ector_renderer_gl_shape_efl_gfx_path_commit(Eo *obj EINA_UNUSED, | 24 | _ector_renderer_gl_shape_path_changed(void *data, const Efl_Event *event EINA_UNUSED) |
25 | Ector_Renderer_GL_Shape_Data *pd) | ||
26 | { | 25 | { |
27 | if (pd->vertex) | 26 | Ector_Renderer_GL_Shape_Data *pd = data; |
28 | { | 27 | Efl_Gfx_Path_Change_Event *ev = event->info; |
29 | free(pd->vertex); | 28 | |
30 | pd->vertex = NULL; | 29 | if (ev && !((ev->what & EFL_GFX_CHANGE_FLAG_MATRIX) || |
31 | } | 30 | (ev->what & EFL_GFX_CHANGE_FLAG_PATH))) |
31 | return; | ||
32 | |||
33 | free(pd->vertex); | ||
34 | pd->vertex = NULL; | ||
32 | } | 35 | } |
33 | 36 | ||
34 | static Eina_Bool | 37 | static Eina_Bool |
@@ -151,6 +154,8 @@ _ector_renderer_gl_shape_efl_object_constructor(Eo *obj, Ector_Renderer_GL_Shape | |||
151 | pd->shape = efl_data_xref(obj, ECTOR_RENDERER_SHAPE_MIXIN, obj); | 154 | pd->shape = efl_data_xref(obj, ECTOR_RENDERER_SHAPE_MIXIN, obj); |
152 | pd->base = efl_data_xref(obj, ECTOR_RENDERER_CLASS, obj); | 155 | pd->base = efl_data_xref(obj, ECTOR_RENDERER_CLASS, obj); |
153 | 156 | ||
157 | efl_event_callback_add(obj, EFL_GFX_PATH_EVENT_CHANGED, _ector_renderer_gl_shape_path_changed, pd); | ||
158 | |||
154 | return obj; | 159 | return obj; |
155 | } | 160 | } |
156 | 161 | ||
diff --git a/src/lib/ector/gl/ector_renderer_gl_shape.eo b/src/lib/ector/gl/ector_renderer_gl_shape.eo index 6323ef6..21ef655 100644 --- a/src/lib/ector/gl/ector_renderer_gl_shape.eo +++ b/src/lib/ector/gl/ector_renderer_gl_shape.eo | |||
@@ -8,7 +8,6 @@ class Ector.Renderer.GL.Shape (Ector.Renderer.GL, Ector.Renderer.Shape, Efl.Gfx. | |||
8 | Ector.Renderer.crc { get; } | 8 | Ector.Renderer.crc { get; } |
9 | Ector.Renderer.GL.op_fill; | 9 | Ector.Renderer.GL.op_fill; |
10 | Efl.Gfx.Path.bounds_get; | 10 | Efl.Gfx.Path.bounds_get; |
11 | Efl.Gfx.Path.commit; | ||
12 | Efl.Object.constructor; | 11 | Efl.Object.constructor; |
13 | Efl.Object.destructor; | 12 | Efl.Object.destructor; |
14 | } | 13 | } |
diff --git a/src/lib/ector/software/ector_renderer_software_shape.c b/src/lib/ector/software/ector_renderer_software_shape.c index b9cf1fa..396e472 100644 --- a/src/lib/ector/software/ector_renderer_software_shape.c +++ b/src/lib/ector/software/ector_renderer_software_shape.c | |||
@@ -734,20 +734,36 @@ _ector_renderer_software_shape_ector_renderer_software_op_fill(Eo *obj EINA_UNUS | |||
734 | return EINA_FALSE; | 734 | return EINA_FALSE; |
735 | } | 735 | } |
736 | 736 | ||
737 | EOLIAN static void | 737 | static void |
738 | _ector_renderer_software_shape_efl_gfx_path_commit(Eo *obj EINA_UNUSED, | 738 | _ector_renderer_software_shape_efl_gfx_path_path_set(Eo *obj, |
739 | Ector_Renderer_Software_Shape_Data *pd) | 739 | Ector_Renderer_Software_Shape_Data *pd, |
740 | const Efl_Gfx_Path_Command *op, | ||
741 | const double *points) | ||
740 | { | 742 | { |
741 | if (pd->shape_data) | 743 | if (pd->shape_data) ector_software_rasterizer_destroy_rle_data(pd->shape_data); |
742 | { | 744 | if (pd->outline_data) ector_software_rasterizer_destroy_rle_data(pd->outline_data); |
743 | ector_software_rasterizer_destroy_rle_data(pd->shape_data); | 745 | pd->shape_data = NULL; |
744 | pd->shape_data = NULL; | 746 | pd->outline_data = NULL; |
745 | } | 747 | |
746 | if (pd->outline_data) | 748 | efl_gfx_path_set(efl_super(obj, MY_CLASS), op, points); |
747 | { | 749 | } |
748 | ector_software_rasterizer_destroy_rle_data(pd->outline_data); | 750 | |
749 | pd->outline_data = NULL; | 751 | |
750 | } | 752 | static void |
753 | _ector_renderer_software_shape_path_changed(void *data, const Efl_Event *event EINA_UNUSED) | ||
754 | { | ||
755 | Ector_Renderer_Software_Shape_Data *pd = data; | ||
756 | Efl_Gfx_Path_Change_Event *ev = event->info; | ||
757 | |||
758 | if (ev && !((ev->what & EFL_GFX_CHANGE_FLAG_MATRIX) || | ||
759 | (ev->what & EFL_GFX_CHANGE_FLAG_PATH))) | ||
760 | return; | ||
761 | |||
762 | if (pd->shape_data) ector_software_rasterizer_destroy_rle_data(pd->shape_data); | ||
763 | if (pd->outline_data) ector_software_rasterizer_destroy_rle_data(pd->outline_data); | ||
764 | |||
765 | pd->shape_data = NULL; | ||
766 | pd->outline_data = NULL; | ||
751 | } | 767 | } |
752 | 768 | ||
753 | static Eo * | 769 | static Eo * |
@@ -761,6 +777,7 @@ _ector_renderer_software_shape_efl_object_constructor(Eo *obj, Ector_Renderer_So | |||
761 | pd->public_shape = efl_data_xref(obj, EFL_GFX_SHAPE_MIXIN, obj); | 777 | pd->public_shape = efl_data_xref(obj, EFL_GFX_SHAPE_MIXIN, obj); |
762 | pd->shape = efl_data_xref(obj, ECTOR_RENDERER_SHAPE_MIXIN, obj); | 778 | pd->shape = efl_data_xref(obj, ECTOR_RENDERER_SHAPE_MIXIN, obj); |
763 | pd->base = efl_data_xref(obj, ECTOR_RENDERER_CLASS, obj); | 779 | pd->base = efl_data_xref(obj, ECTOR_RENDERER_CLASS, obj); |
780 | efl_event_callback_add(obj, EFL_GFX_PATH_EVENT_CHANGED, _ector_renderer_software_shape_path_changed, pd); | ||
764 | 781 | ||
765 | return obj; | 782 | return obj; |
766 | } | 783 | } |
diff --git a/src/lib/ector/software/ector_renderer_software_shape.eo b/src/lib/ector/software/ector_renderer_software_shape.eo index 04f19ba..abe8344 100644 --- a/src/lib/ector/software/ector_renderer_software_shape.eo +++ b/src/lib/ector/software/ector_renderer_software_shape.eo | |||
@@ -8,7 +8,7 @@ class Ector.Renderer.Software.Shape (Ector.Renderer.Software, Ector.Renderer.Sha | |||
8 | Ector.Renderer.Software.op_fill; | 8 | Ector.Renderer.Software.op_fill; |
9 | Ector.Renderer.mask { set; } | 9 | Ector.Renderer.mask { set; } |
10 | Ector.Renderer.crc { get; } | 10 | Ector.Renderer.crc { get; } |
11 | Efl.Gfx.Path.commit; | 11 | Efl.Gfx.Path.path { set; } |
12 | Efl.Object.constructor; | 12 | Efl.Object.constructor; |
13 | Efl.Object.destructor; | 13 | Efl.Object.destructor; |
14 | } | 14 | } |