summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/lib/ector/cairo/ector_renderer_cairo_shape.c24
-rw-r--r--src/lib/ector/cairo/ector_renderer_cairo_shape.eo1
-rw-r--r--src/lib/ector/gl/ector_renderer_gl_shape.c21
-rw-r--r--src/lib/ector/gl/ector_renderer_gl_shape.eo1
-rw-r--r--src/lib/ector/software/ector_renderer_software_shape.c43
-rw-r--r--src/lib/ector/software/ector_renderer_software_shape.eo2
-rw-r--r--src/lib/efl/interfaces/efl_gfx_path.c49
-rw-r--r--src/lib/efl/interfaces/efl_gfx_path.eo13
-rw-r--r--src/lib/efl/interfaces/efl_gfx_shape.c3
-rw-r--r--src/lib/elementary/efl_ui_textpath.c16
-rw-r--r--src/lib/elementary/efl_ui_textpath.eo1
-rw-r--r--src/lib/evas/canvas/efl_canvas_vg_shape.c51
-rw-r--r--src/lib/evas/canvas/efl_canvas_vg_shape.eo1
13 files changed, 94 insertions, 132 deletions
diff --git a/src/lib/ector/cairo/ector_renderer_cairo_shape.c b/src/lib/ector/cairo/ector_renderer_cairo_shape.c
index 2605623..87fe2a0 100644
--- a/src/lib/ector/cairo/ector_renderer_cairo_shape.c
+++ b/src/lib/ector/cairo/ector_renderer_cairo_shape.c
@@ -75,19 +75,15 @@ struct _Ector_Renderer_Cairo_Shape_Data
75 cairo_path_t *path; 75 cairo_path_t *path;
76}; 76};
77 77
78static void 78EOLIAN static void
79_ector_renderer_cairo_shape_path_changed(void *data, const Efl_Event *event) 79_ector_renderer_cairo_shape_efl_gfx_path_commit(Eo *obj EINA_UNUSED,
80 Ector_Renderer_Cairo_Shape_Data *pd)
80{ 81{
81 Ector_Renderer_Cairo_Shape_Data *pd = data; 82 if (pd->path)
82 Efl_Gfx_Path_Change_Event *ev = event->info; 83 {
83 84 cairo_path_destroy(pd->path);
84 if (!pd->path) return; 85 pd->path = NULL;
85 if (ev && !((ev->what & EFL_GFX_CHANGE_FLAG_MATRIX) || 86 }
86 (ev->what & EFL_GFX_CHANGE_FLAG_PATH)))
87 return;
88
89 cairo_path_destroy(pd->path);
90 pd->path = NULL;
91} 87}
92 88
93static Eina_Bool 89static Eina_Bool
@@ -255,9 +251,7 @@ _ector_renderer_cairo_shape_efl_object_constructor(Eo *obj, Ector_Renderer_Cairo
255 pd->shape = efl_data_xref(obj, ECTOR_RENDERER_SHAPE_MIXIN, obj); 251 pd->shape = efl_data_xref(obj, ECTOR_RENDERER_SHAPE_MIXIN, obj);
256 pd->base = efl_data_xref(obj, ECTOR_RENDERER_CLASS, obj); 252 pd->base = efl_data_xref(obj, ECTOR_RENDERER_CLASS, obj);
257 253
258 efl_event_callback_add(obj, EFL_GFX_PATH_EVENT_CHANGED, _ector_renderer_cairo_shape_path_changed, pd); 254 return obj;
259
260 return obj;
261} 255}
262 256
263static Efl_Object * 257static 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 b76dd29..7c95844 100644
--- a/src/lib/ector/cairo/ector_renderer_cairo_shape.eo
+++ b/src/lib/ector/cairo/ector_renderer_cairo_shape.eo
@@ -6,6 +6,7 @@ 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;
9 Ector.Renderer.crc { get; } 10 Ector.Renderer.crc { get; }
10 Ector.Renderer.Cairo.op_fill; 11 Ector.Renderer.Cairo.op_fill;
11 Efl.Object.constructor; 12 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 79e029d..cf2266d 100644
--- a/src/lib/ector/gl/ector_renderer_gl_shape.c
+++ b/src/lib/ector/gl/ector_renderer_gl_shape.c
@@ -20,18 +20,15 @@ struct _Ector_Renderer_GL_Shape_Data
20 GLshort *vertex; 20 GLshort *vertex;
21}; 21};
22 22
23static void 23EOLIAN static void
24_ector_renderer_gl_shape_path_changed(void *data, const Efl_Event *event EINA_UNUSED) 24_ector_renderer_gl_shape_efl_gfx_path_commit(Eo *obj EINA_UNUSED,
25 Ector_Renderer_GL_Shape_Data *pd)
25{ 26{
26 Ector_Renderer_GL_Shape_Data *pd = data; 27 if (pd->vertex)
27 Efl_Gfx_Path_Change_Event *ev = event->info; 28 {
28 29 free(pd->vertex);
29 if (ev && !((ev->what & EFL_GFX_CHANGE_FLAG_MATRIX) || 30 pd->vertex = NULL;
30 (ev->what & EFL_GFX_CHANGE_FLAG_PATH))) 31 }
31 return;
32
33 free(pd->vertex);
34 pd->vertex = NULL;
35} 32}
36 33
37static Eina_Bool 34static Eina_Bool
@@ -154,8 +151,6 @@ _ector_renderer_gl_shape_efl_object_constructor(Eo *obj, Ector_Renderer_GL_Shape
154 pd->shape = efl_data_xref(obj, ECTOR_RENDERER_SHAPE_MIXIN, obj); 151 pd->shape = efl_data_xref(obj, ECTOR_RENDERER_SHAPE_MIXIN, obj);
155 pd->base = efl_data_xref(obj, ECTOR_RENDERER_CLASS, obj); 152 pd->base = efl_data_xref(obj, ECTOR_RENDERER_CLASS, obj);
156 153
157 efl_event_callback_add(obj, EFL_GFX_PATH_EVENT_CHANGED, _ector_renderer_gl_shape_path_changed, pd);
158
159 return obj; 154 return obj;
160} 155}
161 156
diff --git a/src/lib/ector/gl/ector_renderer_gl_shape.eo b/src/lib/ector/gl/ector_renderer_gl_shape.eo
index 21ef655..6323ef6 100644
--- a/src/lib/ector/gl/ector_renderer_gl_shape.eo
+++ b/src/lib/ector/gl/ector_renderer_gl_shape.eo
@@ -8,6 +8,7 @@ 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;
11 Efl.Object.constructor; 12 Efl.Object.constructor;
12 Efl.Object.destructor; 13 Efl.Object.destructor;
13 } 14 }
diff --git a/src/lib/ector/software/ector_renderer_software_shape.c b/src/lib/ector/software/ector_renderer_software_shape.c
index 396e472..b9cf1fa 100644
--- a/src/lib/ector/software/ector_renderer_software_shape.c
+++ b/src/lib/ector/software/ector_renderer_software_shape.c
@@ -734,36 +734,20 @@ _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
737static void 737EOLIAN static void
738_ector_renderer_software_shape_efl_gfx_path_path_set(Eo *obj, 738_ector_renderer_software_shape_efl_gfx_path_commit(Eo *obj EINA_UNUSED,
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)
742{
743 if (pd->shape_data) ector_software_rasterizer_destroy_rle_data(pd->shape_data);
744 if (pd->outline_data) ector_software_rasterizer_destroy_rle_data(pd->outline_data);
745 pd->shape_data = NULL;
746 pd->outline_data = NULL;
747
748 efl_gfx_path_set(efl_super(obj, MY_CLASS), op, points);
749}
750
751
752static void
753_ector_renderer_software_shape_path_changed(void *data, const Efl_Event *event EINA_UNUSED)
754{ 740{
755 Ector_Renderer_Software_Shape_Data *pd = data; 741 if (pd->shape_data)
756 Efl_Gfx_Path_Change_Event *ev = event->info; 742 {
757 743 ector_software_rasterizer_destroy_rle_data(pd->shape_data);
758 if (ev && !((ev->what & EFL_GFX_CHANGE_FLAG_MATRIX) || 744 pd->shape_data = NULL;
759 (ev->what & EFL_GFX_CHANGE_FLAG_PATH))) 745 }
760 return; 746 if (pd->outline_data)
761 747 {
762 if (pd->shape_data) ector_software_rasterizer_destroy_rle_data(pd->shape_data); 748 ector_software_rasterizer_destroy_rle_data(pd->outline_data);
763 if (pd->outline_data) ector_software_rasterizer_destroy_rle_data(pd->outline_data); 749 pd->outline_data = NULL;
764 750 }
765 pd->shape_data = NULL;
766 pd->outline_data = NULL;
767} 751}
768 752
769static Eo * 753static Eo *
@@ -777,7 +761,6 @@ _ector_renderer_software_shape_efl_object_constructor(Eo *obj, Ector_Renderer_So
777 pd->public_shape = efl_data_xref(obj, EFL_GFX_SHAPE_MIXIN, obj); 761 pd->public_shape = efl_data_xref(obj, EFL_GFX_SHAPE_MIXIN, obj);
778 pd->shape = efl_data_xref(obj, ECTOR_RENDERER_SHAPE_MIXIN, obj); 762 pd->shape = efl_data_xref(obj, ECTOR_RENDERER_SHAPE_MIXIN, obj);
779 pd->base = efl_data_xref(obj, ECTOR_RENDERER_CLASS, obj); 763 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);
781 764
782 return obj; 765 return obj;
783} 766}
diff --git a/src/lib/ector/software/ector_renderer_software_shape.eo b/src/lib/ector/software/ector_renderer_software_shape.eo
index abe8344..04f19ba 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.path { set; } 11 Efl.Gfx.Path.commit;
12 Efl.Object.constructor; 12 Efl.Object.constructor;
13 Efl.Object.destructor; 13 Efl.Object.destructor;
14 } 14 }
diff --git a/src/lib/efl/interfaces/efl_gfx_path.c b/src/lib/efl/interfaces/efl_gfx_path.c
index 7278216..c40d33a 100644
--- a/src/lib/efl/interfaces/efl_gfx_path.c
+++ b/src/lib/efl/interfaces/efl_gfx_path.c
@@ -173,7 +173,6 @@ _efl_gfx_path_path_set(Eo *obj, Efl_Gfx_Path_Data *pd,
173 return; 173 return;
174 } 174 }
175 175
176 Efl_Gfx_Path_Change_Event ev = { EFL_GFX_CHANGE_FLAG_PATH };
177 Efl_Gfx_Path_Command *cmds; 176 Efl_Gfx_Path_Command *cmds;
178 double *pts; 177 double *pts;
179 unsigned int cmds_length = 0, pts_length = 0; 178 unsigned int cmds_length = 0, pts_length = 0;
@@ -202,8 +201,6 @@ _efl_gfx_path_path_set(Eo *obj, Efl_Gfx_Path_Data *pd,
202 _efl_gfx_path_current_search(pd->commands, pd->points, 201 _efl_gfx_path_current_search(pd->commands, pd->points,
203 &pd->current.x, &pd->current.y, 202 &pd->current.x, &pd->current.y,
204 &pd->current_ctrl.x, &pd->current_ctrl.y); 203 &pd->current_ctrl.x, &pd->current_ctrl.y);
205
206 efl_event_callback_call(obj, EFL_GFX_PATH_EVENT_CHANGED, &ev);
207} 204}
208 205
209EOLIAN static void 206EOLIAN static void
@@ -293,7 +290,6 @@ EOLIAN static Eina_Bool
293_efl_gfx_path_interpolate(Eo *obj, Efl_Gfx_Path_Data *pd, 290_efl_gfx_path_interpolate(Eo *obj, Efl_Gfx_Path_Data *pd,
294 const Eo *from, const Eo *to, double pos_map) 291 const Eo *from, const Eo *to, double pos_map)
295{ 292{
296 Efl_Gfx_Path_Change_Event ev = { EFL_GFX_CHANGE_FLAG_PATH };
297 Efl_Gfx_Path_Data *from_pd, *to_pd; 293 Efl_Gfx_Path_Data *from_pd, *to_pd;
298 Efl_Gfx_Path_Command *cmds; 294 Efl_Gfx_Path_Command *cmds;
299 double interv; //interpolated value 295 double interv; //interpolated value
@@ -374,8 +370,6 @@ _efl_gfx_path_interpolate(Eo *obj, Efl_Gfx_Path_Data *pd,
374 370
375 } 371 }
376 372
377 efl_event_callback_legacy_call(obj, EFL_GFX_PATH_EVENT_CHANGED, &ev);
378
379 return EINA_TRUE; 373 return EINA_TRUE;
380} 374}
381 375
@@ -411,10 +405,8 @@ _efl_gfx_path_reserve(Eo *obj EINA_UNUSED, Efl_Gfx_Path_Data *pd,
411} 405}
412 406
413EOLIAN static void 407EOLIAN static void
414_efl_gfx_path_reset(Eo *obj, Efl_Gfx_Path_Data *pd) 408_efl_gfx_path_reset(Eo *obj EINA_UNUSED, Efl_Gfx_Path_Data *pd)
415{ 409{
416 Efl_Gfx_Path_Change_Event ev = { EFL_GFX_CHANGE_FLAG_PATH };
417
418 free(pd->commands); 410 free(pd->commands);
419 pd->reserved_cmd_cnt = 0; 411 pd->reserved_cmd_cnt = 0;
420 pd->commands = NULL; 412 pd->commands = NULL;
@@ -433,15 +425,13 @@ _efl_gfx_path_reset(Eo *obj, Efl_Gfx_Path_Data *pd)
433 pd->current_ctrl.x = 0; 425 pd->current_ctrl.x = 0;
434 pd->current_ctrl.y = 0; 426 pd->current_ctrl.y = 0;
435 pd->convex = EINA_FALSE; 427 pd->convex = EINA_FALSE;
436
437 efl_event_callback_legacy_call(obj, EFL_GFX_PATH_EVENT_CHANGED, &ev);
438} 428}
439 429
440EOLIAN static void 430EOLIAN static void
441_efl_gfx_path_append_move_to(Eo *obj, Efl_Gfx_Path_Data *pd, 431_efl_gfx_path_append_move_to(Eo *obj EINA_UNUSED,
442 double x, double y) 432 Efl_Gfx_Path_Data *pd,
433 double x, double y)
443{ 434{
444 Efl_Gfx_Path_Change_Event ev = { EFL_GFX_CHANGE_FLAG_PATH };
445 double *offset_point; 435 double *offset_point;
446 436
447 if (!efl_gfx_path_grow(EFL_GFX_PATH_COMMAND_TYPE_MOVE_TO, pd, &offset_point)) 437 if (!efl_gfx_path_grow(EFL_GFX_PATH_COMMAND_TYPE_MOVE_TO, pd, &offset_point))
@@ -452,15 +442,13 @@ _efl_gfx_path_append_move_to(Eo *obj, Efl_Gfx_Path_Data *pd,
452 442
453 pd->current.x = x; 443 pd->current.x = x;
454 pd->current.y = y; 444 pd->current.y = y;
455
456 efl_event_callback_legacy_call(obj, EFL_GFX_PATH_EVENT_CHANGED, &ev);
457} 445}
458 446
459EOLIAN static void 447EOLIAN static void
460_efl_gfx_path_append_line_to(Eo *obj, Efl_Gfx_Path_Data *pd, 448_efl_gfx_path_append_line_to(Eo *obj EINA_UNUSED,
461 double x, double y) 449 Efl_Gfx_Path_Data *pd,
450 double x, double y)
462{ 451{
463 Efl_Gfx_Path_Change_Event ev = { EFL_GFX_CHANGE_FLAG_PATH };
464 double *offset_point; 452 double *offset_point;
465 453
466 if (!efl_gfx_path_grow(EFL_GFX_PATH_COMMAND_TYPE_LINE_TO, pd, &offset_point)) 454 if (!efl_gfx_path_grow(EFL_GFX_PATH_COMMAND_TYPE_LINE_TO, pd, &offset_point))
@@ -471,17 +459,15 @@ _efl_gfx_path_append_line_to(Eo *obj, Efl_Gfx_Path_Data *pd,
471 459
472 pd->current.x = x; 460 pd->current.x = x;
473 pd->current.y = y; 461 pd->current.y = y;
474
475 efl_event_callback_legacy_call(obj, EFL_GFX_PATH_EVENT_CHANGED, &ev);
476} 462}
477 463
478EOLIAN static void 464EOLIAN static void
479_efl_gfx_path_append_cubic_to(Eo *obj, Efl_Gfx_Path_Data *pd, 465_efl_gfx_path_append_cubic_to(Eo *obj EINA_UNUSED,
480 double ctrl_x0, double ctrl_y0, 466 Efl_Gfx_Path_Data *pd,
481 double ctrl_x1, double ctrl_y1, 467 double ctrl_x0, double ctrl_y0,
482 double x, double y) 468 double ctrl_x1, double ctrl_y1,
469 double x, double y)
483{ 470{
484 Efl_Gfx_Path_Change_Event ev = { EFL_GFX_CHANGE_FLAG_PATH };
485 double *offset_point; 471 double *offset_point;
486 472
487 if (!efl_gfx_path_grow(EFL_GFX_PATH_COMMAND_TYPE_CUBIC_TO, 473 if (!efl_gfx_path_grow(EFL_GFX_PATH_COMMAND_TYPE_CUBIC_TO,
@@ -499,8 +485,6 @@ _efl_gfx_path_append_cubic_to(Eo *obj, Efl_Gfx_Path_Data *pd,
499 pd->current.y = y; 485 pd->current.y = y;
500 pd->current_ctrl.x = ctrl_x1; 486 pd->current_ctrl.x = ctrl_x1;
501 pd->current_ctrl.y = ctrl_y1; 487 pd->current_ctrl.y = ctrl_y1;
502
503 efl_event_callback_legacy_call(obj, EFL_GFX_PATH_EVENT_CHANGED, &ev);
504} 488}
505 489
506EOLIAN static void 490EOLIAN static void
@@ -1084,14 +1068,10 @@ _efl_gfx_path_append_arc(Eo *obj, Efl_Gfx_Path_Data *pd,
1084} 1068}
1085 1069
1086EOLIAN static void 1070EOLIAN static void
1087_efl_gfx_path_append_close(Eo *obj, Efl_Gfx_Path_Data *pd) 1071_efl_gfx_path_append_close(Eo *obj EINA_UNUSED, Efl_Gfx_Path_Data *pd)
1088{ 1072{
1089 Efl_Gfx_Path_Change_Event ev = { EFL_GFX_CHANGE_FLAG_PATH };
1090 double *offset_point; 1073 double *offset_point;
1091
1092 efl_gfx_path_grow(EFL_GFX_PATH_COMMAND_TYPE_CLOSE, pd, &offset_point); 1074 efl_gfx_path_grow(EFL_GFX_PATH_COMMAND_TYPE_CLOSE, pd, &offset_point);
1093
1094 efl_event_callback_legacy_call(obj, EFL_GFX_PATH_EVENT_CHANGED, &ev);
1095} 1075}
1096 1076
1097static void 1077static void
@@ -1538,7 +1518,6 @@ error:
1538EOLIAN static void 1518EOLIAN static void
1539_efl_gfx_path_copy_from(Eo *obj, Efl_Gfx_Path_Data *pd, const Eo *dup_from) 1519_efl_gfx_path_copy_from(Eo *obj, Efl_Gfx_Path_Data *pd, const Eo *dup_from)
1540{ 1520{
1541 Efl_Gfx_Path_Change_Event ev = { EFL_GFX_CHANGE_FLAG_PATH };
1542 Efl_Gfx_Path_Data *from; 1521 Efl_Gfx_Path_Data *from;
1543 1522
1544 if (obj == dup_from) return; 1523 if (obj == dup_from) return;
@@ -1548,8 +1527,6 @@ _efl_gfx_path_copy_from(Eo *obj, Efl_Gfx_Path_Data *pd, const Eo *dup_from)
1548 pd->convex = from->convex; 1527 pd->convex = from->convex;
1549 1528
1550 _efl_gfx_path_path_set(obj, pd, from->commands, from->points); 1529 _efl_gfx_path_path_set(obj, pd, from->commands, from->points);
1551
1552 efl_event_callback_legacy_call(obj, EFL_GFX_PATH_EVENT_CHANGED, &ev);
1553} 1530}
1554 1531
1555#include "interfaces/efl_gfx_path.eo.c" 1532#include "interfaces/efl_gfx_path.eo.c"
diff --git a/src/lib/efl/interfaces/efl_gfx_path.eo b/src/lib/efl/interfaces/efl_gfx_path.eo
index c1ec7aa..d60886e 100644
--- a/src/lib/efl/interfaces/efl_gfx_path.eo
+++ b/src/lib/efl/interfaces/efl_gfx_path.eo
@@ -292,8 +292,15 @@ mixin Efl.Gfx.Path
292 @in pts_count: uint; [[Pointers count to reserve]] 292 @in pts_count: uint; [[Pointers count to reserve]]
293 } 293 }
294 } 294 }
295 } 295 commit @pure_virtual {
296 events { 296 [[Request to update the path object.
297 changed: Efl.Gfx.Path_Change_Event; [[Graphics path was changed.]] 297
298 One path object may get appending several path calls (such as
299 append_cubic, append_rect, etc) to construct the final path data.
300 Here commit means all path data is prepared and now object
301 could update its own internal status based on the last path
302 information.
303 ]]
304 }
298 } 305 }
299} 306}
diff --git a/src/lib/efl/interfaces/efl_gfx_shape.c b/src/lib/efl/interfaces/efl_gfx_shape.c
index a9327c3..bdebbfa 100644
--- a/src/lib/efl/interfaces/efl_gfx_shape.c
+++ b/src/lib/efl/interfaces/efl_gfx_shape.c
@@ -161,10 +161,7 @@ _efl_gfx_shape_stroke_color_get(const Eo *obj EINA_UNUSED, Efl_Gfx_Shape_Data *p
161EOLIAN static void 161EOLIAN static void
162_efl_gfx_shape_stroke_width_set(Eo *obj, Efl_Gfx_Shape_Data *pd, double w) 162_efl_gfx_shape_stroke_width_set(Eo *obj, Efl_Gfx_Shape_Data *pd, double w)
163{ 163{
164 Efl_Gfx_Path_Change_Event ev = { EFL_GFX_CHANGE_FLAG_PATH };
165
166 pd->public.stroke.width = w; 164 pd->public.stroke.width = w;
167 efl_event_callback_legacy_call(obj, EFL_GFX_PATH_EVENT_CHANGED, &ev);
168} 165}
169 166
170EOLIAN static double 167EOLIAN static double
diff --git a/src/lib/elementary/efl_ui_textpath.c b/src/lib/elementary/efl_ui_textpath.c
index 192478e..095c7a3 100644
--- a/src/lib/elementary/efl_ui_textpath.c
+++ b/src/lib/elementary/efl_ui_textpath.c
@@ -544,17 +544,10 @@ _ellipsis_set(Efl_Ui_Textpath_Data *pd)
544} 544}
545 545
546static void 546static void
547_path_changed_cb(void *data, const Efl_Event *event) 547_efl_ui_textpath_efl_gfx_path_commit(Eo *obj, Efl_Ui_Textpath_Data *pd)
548{ 548{
549 Efl_Gfx_Path_Change_Event *ev = event->info; 549 _path_data_get(obj, pd, EINA_TRUE);
550 EFL_UI_TEXTPATH_DATA_GET(data, sd); 550 _sizing_eval(pd);
551
552 if (ev && !((ev->what & EFL_GFX_CHANGE_FLAG_MATRIX) ||
553 (ev->what & EFL_GFX_CHANGE_FLAG_PATH)))
554 return;
555
556 _path_data_get(data, sd, EINA_TRUE);
557 _sizing_eval(sd);
558} 551}
559 552
560static Eina_Bool 553static Eina_Bool
@@ -594,8 +587,6 @@ _efl_ui_textpath_efl_canvas_group_group_add(Eo *obj, Efl_Ui_Textpath_Data *priv)
594 587
595 evas_object_smart_member_add(priv->text_obj, obj); 588 evas_object_smart_member_add(priv->text_obj, obj);
596 elm_widget_sub_object_add(obj, priv->text_obj); 589 elm_widget_sub_object_add(obj, priv->text_obj);
597
598 efl_event_callback_add(obj, EFL_GFX_PATH_EVENT_CHANGED, _path_changed_cb, obj);
599} 590}
600 591
601EOLIAN static Efl_Object * 592EOLIAN static Efl_Object *
@@ -714,6 +705,7 @@ _efl_ui_textpath_circle_set(Eo *obj, Efl_Ui_Textpath_Data *pd, double x, double
714 radius * 2, start_angle, 360); 705 radius * 2, start_angle, 360);
715 } 706 }
716 707
708 _path_data_get(obj, pd, EINA_TRUE);
717 _sizing_eval(pd); 709 _sizing_eval(pd);
718} 710}
719 711
diff --git a/src/lib/elementary/efl_ui_textpath.eo b/src/lib/elementary/efl_ui_textpath.eo
index 917621c..bc25a0b 100644
--- a/src/lib/elementary/efl_ui_textpath.eo
+++ b/src/lib/elementary/efl_ui_textpath.eo
@@ -40,6 +40,7 @@ class Efl.Ui.Textpath (Efl.Ui.Layout, Efl.Text, Efl.Gfx.Path)
40 implements { 40 implements {
41 Efl.Object.constructor; 41 Efl.Object.constructor;
42 Efl.Object.destructor; 42 Efl.Object.destructor;
43 Efl.Gfx.Path.commit;
43 Efl.Canvas.Group.group_calculate; 44 Efl.Canvas.Group.group_calculate;
44 Efl.Text.text {get; set;} 45 Efl.Text.text {get; set;}
45 Efl.Part.part_get; 46 Efl.Part.part_get;
diff --git a/src/lib/evas/canvas/efl_canvas_vg_shape.c b/src/lib/evas/canvas/efl_canvas_vg_shape.c
index 728afb5..d1c41fa 100644
--- a/src/lib/evas/canvas/efl_canvas_vg_shape.c
+++ b/src/lib/evas/canvas/efl_canvas_vg_shape.c
@@ -17,11 +17,6 @@ struct _Efl_Canvas_Vg_Shape_Data
17}; 17};
18 18
19// FIXME: Use the renderer bounding box when it has been created instead of an estimation 19// FIXME: Use the renderer bounding box when it has been created instead of an estimation
20static void
21_efl_canvas_vg_shape_path_changed(void *data, const Efl_Event *event)
22{
23 efl_canvas_vg_node_change(event->object);
24}
25 20
26static void 21static void
27_efl_canvas_vg_shape_fill_set(Eo *obj EINA_UNUSED, 22_efl_canvas_vg_shape_fill_set(Eo *obj EINA_UNUSED,
@@ -32,8 +27,6 @@ _efl_canvas_vg_shape_fill_set(Eo *obj EINA_UNUSED,
32 27
33 pd->fill = efl_ref(f); 28 pd->fill = efl_ref(f);
34 efl_unref(tmp); 29 efl_unref(tmp);
35
36 efl_canvas_vg_node_change(obj);
37} 30}
38 31
39static Efl_Canvas_Vg_Node * 32static Efl_Canvas_Vg_Node *
@@ -51,8 +44,6 @@ _efl_canvas_vg_shape_stroke_fill_set(Eo *obj EINA_UNUSED,
51 44
52 pd->stroke.fill = efl_ref(f); 45 pd->stroke.fill = efl_ref(f);
53 efl_unref(tmp); 46 efl_unref(tmp);
54
55 efl_canvas_vg_node_change(obj);
56} 47}
57 48
58static Efl_Canvas_Vg_Node * 49static Efl_Canvas_Vg_Node *
@@ -71,8 +62,6 @@ _efl_canvas_vg_shape_stroke_marker_set(Eo *obj EINA_UNUSED,
71 62
72 pd->stroke.marker = efl_ref(m); 63 pd->stroke.marker = efl_ref(m);
73 efl_unref(tmp); 64 efl_unref(tmp);
74
75 efl_canvas_vg_node_change(obj);
76} 65}
77 66
78static Efl_Canvas_Vg_Shape * 67static Efl_Canvas_Vg_Shape *
@@ -119,9 +108,9 @@ _efl_canvas_vg_shape_render_pre(Evas_Object_Protected_Data *vg_pd,
119 ector_renderer_shape_stroke_fill_set(nd->renderer, stroke_fill ? stroke_fill->renderer : NULL); 108 ector_renderer_shape_stroke_fill_set(nd->renderer, stroke_fill ? stroke_fill->renderer : NULL);
120 ector_renderer_shape_stroke_marker_set(nd->renderer, stroke_marker ? stroke_marker->renderer : NULL); 109 ector_renderer_shape_stroke_marker_set(nd->renderer, stroke_marker ? stroke_marker->renderer : NULL);
121 efl_gfx_path_copy_from(nd->renderer, obj); 110 efl_gfx_path_copy_from(nd->renderer, obj);
111 efl_gfx_path_commit(nd->renderer);
122 ector_renderer_prepare(nd->renderer); 112 ector_renderer_prepare(nd->renderer);
123 ector_renderer_mask_set(nd->renderer, mask, mask_op); 113 ector_renderer_mask_set(nd->renderer, mask, mask_op);
124
125} 114}
126 115
127static Eo * 116static Eo *
@@ -140,9 +129,6 @@ _efl_canvas_vg_shape_efl_object_constructor(Eo *obj, Efl_Canvas_Vg_Shape_Data *p
140 nd->render_pre = _efl_canvas_vg_shape_render_pre; 129 nd->render_pre = _efl_canvas_vg_shape_render_pre;
141 nd->data = pd; 130 nd->data = pd;
142 131
143 efl_event_callback_add(obj, EFL_GFX_PATH_EVENT_CHANGED,
144 _efl_canvas_vg_shape_path_changed, pd);
145
146 return obj; 132 return obj;
147} 133}
148 134
@@ -153,9 +139,6 @@ _efl_canvas_vg_shape_efl_object_destructor(Eo *obj, Efl_Canvas_Vg_Shape_Data *pd
153 if (pd->stroke.fill) efl_unref(pd->stroke.fill); 139 if (pd->stroke.fill) efl_unref(pd->stroke.fill);
154 if (pd->stroke.marker) efl_unref(pd->stroke.marker); 140 if (pd->stroke.marker) efl_unref(pd->stroke.marker);
155 141
156 efl_event_callback_del(obj, EFL_GFX_PATH_EVENT_CHANGED,
157 _efl_canvas_vg_shape_path_changed, pd);
158
159 efl_gfx_path_reset(obj); 142 efl_gfx_path_reset(obj);
160 efl_destructor(efl_super(obj, MY_CLASS)); 143 efl_destructor(efl_super(obj, MY_CLASS));
161} 144}
@@ -197,6 +180,12 @@ _efl_canvas_vg_shape_efl_gfx_path_interpolate(Eo *obj,
197 return r; 180 return r;
198} 181}
199 182
183EOLIAN static void
184_efl_canvas_vg_shape_efl_gfx_path_commit(Eo *obj,
185 Efl_Canvas_Vg_Shape_Data *pd EINA_UNUSED)
186{
187 efl_canvas_vg_node_change(obj);
188}
200 189
201EOLIAN static Efl_Canvas_Vg_Node * 190EOLIAN static Efl_Canvas_Vg_Node *
202_efl_canvas_vg_shape_efl_duplicate_duplicate(const Eo *obj, Efl_Canvas_Vg_Shape_Data *pd) 191_efl_canvas_vg_shape_efl_duplicate_duplicate(const Eo *obj, Efl_Canvas_Vg_Shape_Data *pd)
@@ -241,6 +230,7 @@ EAPI void
241evas_vg_shape_stroke_scale_set(Eo *obj, double s) 230evas_vg_shape_stroke_scale_set(Eo *obj, double s)
242{ 231{
243 efl_gfx_shape_stroke_scale_set(obj, s); 232 efl_gfx_shape_stroke_scale_set(obj, s);
233 efl_canvas_vg_node_change(obj);
244} 234}
245 235
246EAPI void 236EAPI void
@@ -253,6 +243,7 @@ EAPI void
253evas_vg_shape_stroke_color_set(Eo *obj, int r, int g, int b, int a) 243evas_vg_shape_stroke_color_set(Eo *obj, int r, int g, int b, int a)
254{ 244{
255 efl_gfx_shape_stroke_color_set(obj, r, g, b, a); 245 efl_gfx_shape_stroke_color_set(obj, r, g, b, a);
246 efl_canvas_vg_node_change(obj);
256} 247}
257 248
258EAPI double 249EAPI double
@@ -265,6 +256,7 @@ EAPI void
265evas_vg_shape_stroke_width_set(Eo *obj, double w) 256evas_vg_shape_stroke_width_set(Eo *obj, double w)
266{ 257{
267 efl_gfx_shape_stroke_width_set(obj, w); 258 efl_gfx_shape_stroke_width_set(obj, w);
259 efl_canvas_vg_node_change(obj);
268} 260}
269 261
270EAPI double 262EAPI double
@@ -277,6 +269,7 @@ EAPI void
277evas_vg_shape_stroke_location_set(Eo *obj, double centered) 269evas_vg_shape_stroke_location_set(Eo *obj, double centered)
278{ 270{
279 efl_gfx_shape_stroke_location_set(obj, centered); 271 efl_gfx_shape_stroke_location_set(obj, centered);
272 efl_canvas_vg_node_change(obj);
280} 273}
281 274
282EAPI void 275EAPI void
@@ -289,6 +282,7 @@ EAPI void
289evas_vg_shape_stroke_dash_set(Eo *obj, const Efl_Gfx_Dash *dash, unsigned int length) 282evas_vg_shape_stroke_dash_set(Eo *obj, const Efl_Gfx_Dash *dash, unsigned int length)
290{ 283{
291 efl_gfx_shape_stroke_dash_set(obj, dash, length); 284 efl_gfx_shape_stroke_dash_set(obj, dash, length);
285 efl_canvas_vg_node_change(obj);
292} 286}
293 287
294EAPI Efl_Gfx_Cap 288EAPI Efl_Gfx_Cap
@@ -301,6 +295,7 @@ EAPI void
301evas_vg_shape_stroke_cap_set(Eo *obj, Efl_Gfx_Cap c) 295evas_vg_shape_stroke_cap_set(Eo *obj, Efl_Gfx_Cap c)
302{ 296{
303 efl_gfx_shape_stroke_cap_set(obj, c); 297 efl_gfx_shape_stroke_cap_set(obj, c);
298 efl_canvas_vg_node_change(obj);
304} 299}
305 300
306EAPI Efl_Gfx_Join 301EAPI Efl_Gfx_Join
@@ -313,12 +308,14 @@ EAPI void
313evas_vg_shape_stroke_join_set(Eo *obj, Efl_Gfx_Join j) 308evas_vg_shape_stroke_join_set(Eo *obj, Efl_Gfx_Join j)
314{ 309{
315 efl_gfx_shape_stroke_join_set(obj, j); 310 efl_gfx_shape_stroke_join_set(obj, j);
311 efl_canvas_vg_node_change(obj);
316} 312}
317 313
318EAPI void 314EAPI void
319evas_vg_shape_path_set(Eo *obj, const Efl_Gfx_Path_Command *op, const double *points) 315evas_vg_shape_path_set(Eo *obj, const Efl_Gfx_Path_Command *op, const double *points)
320{ 316{
321 efl_gfx_path_set(obj, op, points); 317 efl_gfx_path_set(obj, op, points);
318 efl_canvas_vg_node_change(obj);
322} 319}
323 320
324EAPI void 321EAPI void
@@ -349,90 +346,106 @@ EAPI void
349evas_vg_shape_dup(Eo *obj, Eo *dup_from) 346evas_vg_shape_dup(Eo *obj, Eo *dup_from)
350{ 347{
351 efl_gfx_path_copy_from(obj, dup_from); 348 efl_gfx_path_copy_from(obj, dup_from);
349 efl_canvas_vg_node_change(obj);
352} 350}
353 351
354EAPI void 352EAPI void
355evas_vg_shape_reset(Eo *obj) 353evas_vg_shape_reset(Eo *obj)
356{ 354{
357 efl_gfx_path_reset(obj); 355 efl_gfx_path_reset(obj);
356 efl_canvas_vg_node_change(obj);
358} 357}
359 358
360EAPI void 359EAPI void
361evas_vg_shape_append_move_to(Eo *obj, double x, double y) 360evas_vg_shape_append_move_to(Eo *obj, double x, double y)
362{ 361{
363 efl_gfx_path_append_move_to(obj, x, y); 362 efl_gfx_path_append_move_to(obj, x, y);
363 efl_canvas_vg_node_change(obj);
364} 364}
365 365
366EAPI void 366EAPI void
367evas_vg_shape_append_line_to(Eo *obj, double x, double y) 367evas_vg_shape_append_line_to(Eo *obj, double x, double y)
368{ 368{
369 efl_gfx_path_append_line_to(obj, x, y); 369 efl_gfx_path_append_line_to(obj, x, y);
370 efl_canvas_vg_node_change(obj);
370} 371}
371 372
372EAPI void 373EAPI void
373evas_vg_shape_append_quadratic_to(Eo *obj, double x, double y, double ctrl_x, double ctrl_y) 374evas_vg_shape_append_quadratic_to(Eo *obj, double x, double y, double ctrl_x, double ctrl_y)
374{ 375{
375 efl_gfx_path_append_quadratic_to(obj, x, y, ctrl_x, ctrl_y); 376 efl_gfx_path_append_quadratic_to(obj, x, y, ctrl_x, ctrl_y);
377 efl_canvas_vg_node_change(obj);
376} 378}
377 379
378EAPI void 380EAPI void
379evas_vg_shape_append_squadratic_to(Eo *obj, double x, double y) 381evas_vg_shape_append_squadratic_to(Eo *obj, double x, double y)
380{ 382{
381 efl_gfx_path_append_squadratic_to(obj, x, y); 383 efl_gfx_path_append_squadratic_to(obj, x, y);
384 efl_canvas_vg_node_change(obj);
382} 385}
383 386
384EAPI void 387EAPI void
385evas_vg_shape_append_cubic_to(Eo *obj, double x, double y, double ctrl_x0, double ctrl_y0, double ctrl_x1, double ctrl_y1) 388evas_vg_shape_append_cubic_to(Eo *obj, double x, double y, double ctrl_x0, double ctrl_y0, double ctrl_x1, double ctrl_y1)
386{ 389{
387 efl_gfx_path_append_cubic_to(obj, x, y, ctrl_x0, ctrl_y0, ctrl_x1, ctrl_y1); 390 efl_gfx_path_append_cubic_to(obj, x, y, ctrl_x0, ctrl_y0, ctrl_x1, ctrl_y1);
391 efl_canvas_vg_node_change(obj);
388} 392}
389 393
390EAPI void 394EAPI void
391evas_vg_shape_append_scubic_to(Eo *obj, double x, double y, double ctrl_x, double ctrl_y) 395evas_vg_shape_append_scubic_to(Eo *obj, double x, double y, double ctrl_x, double ctrl_y)
392{ 396{
393 efl_gfx_path_append_scubic_to(obj, x, y, ctrl_x, ctrl_y); 397 efl_gfx_path_append_scubic_to(obj, x, y, ctrl_x, ctrl_y);
398 efl_canvas_vg_node_change(obj);
394} 399}
395 400
396EAPI void 401EAPI void
397evas_vg_shape_append_arc_to(Eo *obj, double x, double y, double rx, double ry, double angle, Eina_Bool large_arc, Eina_Bool sweep) 402evas_vg_shape_append_arc_to(Eo *obj, double x, double y, double rx, double ry, double angle, Eina_Bool large_arc, Eina_Bool sweep)
398{ 403{
399 efl_gfx_path_append_arc_to(obj, x, y, rx, ry, angle, large_arc, sweep); 404 efl_gfx_path_append_arc_to(obj, x, y, rx, ry, angle, large_arc, sweep);
405 efl_canvas_vg_node_change(obj);
400} 406}
401 407
402EAPI void 408EAPI void
403evas_vg_shape_append_arc(Eo *obj, double x, double y, double w, double h, double start_angle, double sweep_length) 409evas_vg_shape_append_arc(Eo *obj, double x, double y, double w, double h, double start_angle, double sweep_length)
404{ 410{
405 efl_gfx_path_append_arc(obj, x, y, w, h, start_angle, sweep_length); 411 efl_gfx_path_append_arc(obj, x, y, w, h, start_angle, sweep_length);
412 efl_canvas_vg_node_change(obj);
406} 413}
407 414
408EAPI void 415EAPI void
409evas_vg_shape_append_close(Eo *obj) 416evas_vg_shape_append_close(Eo *obj)
410{ 417{
411 efl_gfx_path_append_close(obj); 418 efl_gfx_path_append_close(obj);
419 efl_canvas_vg_node_change(obj);
412} 420}
413 421
414EAPI void 422EAPI void
415evas_vg_shape_append_circle(Eo *obj, double x, double y, double radius) 423evas_vg_shape_append_circle(Eo *obj, double x, double y, double radius)
416{ 424{
417 efl_gfx_path_append_circle(obj, x, y, radius); 425 efl_gfx_path_append_circle(obj, x, y, radius);
426 efl_canvas_vg_node_change(obj);
418} 427}
419 428
420EAPI void 429EAPI void
421evas_vg_shape_append_rect(Eo *obj, double x, double y, double w, double h, double rx, double ry) 430evas_vg_shape_append_rect(Eo *obj, double x, double y, double w, double h, double rx, double ry)
422{ 431{
423 efl_gfx_path_append_rect(obj, x, y, w, h, rx, ry); 432 efl_gfx_path_append_rect(obj, x, y, w, h, rx, ry);
433 efl_canvas_vg_node_change(obj);
424} 434}
425 435
426EAPI void 436EAPI void
427evas_vg_shape_append_svg_path(Eo *obj, const char *svg_path_data) 437evas_vg_shape_append_svg_path(Eo *obj, const char *svg_path_data)
428{ 438{
429 efl_gfx_path_append_svg_path(obj, svg_path_data); 439 efl_gfx_path_append_svg_path(obj, svg_path_data);
440 efl_canvas_vg_node_change(obj);
430} 441}
431 442
432EAPI Eina_Bool 443EAPI Eina_Bool
433evas_vg_shape_interpolate(Eo *obj, const Eo *from, const Eo *to, double pos_map) 444evas_vg_shape_interpolate(Eo *obj, const Eo *from, const Eo *to, double pos_map)
434{ 445{
435 return efl_gfx_path_interpolate(obj, from, to, pos_map); 446 Eina_Bool ret = efl_gfx_path_interpolate(obj, from, to, pos_map);
447 efl_canvas_vg_node_change(obj);
448 return ret;
436} 449}
437 450
438EAPI Eina_Bool 451EAPI Eina_Bool
diff --git a/src/lib/evas/canvas/efl_canvas_vg_shape.eo b/src/lib/evas/canvas/efl_canvas_vg_shape.eo
index c51df0b..2997071 100644
--- a/src/lib/evas/canvas/efl_canvas_vg_shape.eo
+++ b/src/lib/evas/canvas/efl_canvas_vg_shape.eo
@@ -36,6 +36,7 @@ class Efl.Canvas.Vg.Shape (Efl.Canvas.Vg.Node, Efl.Gfx.Shape)
36 } 36 }
37 implements { 37 implements {
38 Efl.Gfx.Path.interpolate; 38 Efl.Gfx.Path.interpolate;
39 Efl.Gfx.Path.commit;
39 Efl.Duplicate.duplicate; 40 Efl.Duplicate.duplicate;
40 Efl.Object.constructor; 41 Efl.Object.constructor;
41 Efl.Object.destructor; 42 Efl.Object.destructor;