summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsubhransu mohanty <sub.mohanty@samsung.com>2017-10-23 11:05:34 -0700
committerCedric Bail <cedric@osg.samsung.com>2017-10-23 11:05:38 -0700
commitd26759555737681f454dbf80653a72dc506d355f (patch)
tree025abce62951f7808ba8dd1c8ee8ae5644221026
parent74155b6e3424fe2cf9c6a92e0853e627ba865359 (diff)
evas: add set function for root_node property.
Summary: Currently user ask for the root_node from the evas_vg object and then attach its tree by setting the root node as parent. With this change this process will be explicit. user has to set the root node to the evas_vg object and the object will take the ownership of the tree. User can query the current vg_tree by root_node_get api. Test Plan: Fixed the test app to reflects this change. Reviewers: jpeg, cedric Reviewed By: jpeg, cedric Subscribers: cedric Differential Revision: https://phab.enlightenment.org/D5347 Signed-off-by: Cedric Bail <cedric@osg.samsung.com>
-rw-r--r--src/Makefile_Evas.am2
-rw-r--r--src/examples/evas/evas-vg-batman.c5
-rw-r--r--src/examples/evas/evas-vg-simple.c12
-rw-r--r--src/lib/edje/edje_calc.c5
-rw-r--r--src/lib/evas/canvas/efl_vg_root_node.eo9
-rw-r--r--src/lib/evas/canvas/evas_object_vg.c67
-rw-r--r--src/lib/evas/canvas/evas_vg.eo11
-rw-r--r--src/lib/evas/canvas/evas_vg_node.c6
-rw-r--r--src/lib/evas/canvas/evas_vg_private.h7
-rw-r--r--src/lib/evas/canvas/evas_vg_root_node.c97
10 files changed, 74 insertions, 147 deletions
diff --git a/src/Makefile_Evas.am b/src/Makefile_Evas.am
index 2da7935afc..6e2e155af1 100644
--- a/src/Makefile_Evas.am
+++ b/src/Makefile_Evas.am
@@ -23,7 +23,6 @@ evas_canvas_eolian_pub_files = \
23 lib/evas/canvas/efl_vg.eo \ 23 lib/evas/canvas/efl_vg.eo \
24 lib/evas/canvas/efl_vg_container.eo \ 24 lib/evas/canvas/efl_vg_container.eo \
25 lib/evas/canvas/efl_vg_shape.eo \ 25 lib/evas/canvas/efl_vg_shape.eo \
26 lib/evas/canvas/efl_vg_root_node.eo \
27 lib/evas/canvas/efl_vg_gradient.eo \ 26 lib/evas/canvas/efl_vg_gradient.eo \
28 lib/evas/canvas/efl_vg_gradient_radial.eo \ 27 lib/evas/canvas/efl_vg_gradient_radial.eo \
29 lib/evas/canvas/efl_vg_gradient_linear.eo \ 28 lib/evas/canvas/efl_vg_gradient_linear.eo \
@@ -394,7 +393,6 @@ lib_evas_libevas_la_SOURCES += \
394lib/evas/canvas/evas_object_vg.c \ 393lib/evas/canvas/evas_object_vg.c \
395lib/evas/canvas/evas_vg_node.c \ 394lib/evas/canvas/evas_vg_node.c \
396lib/evas/canvas/evas_vg_container.c \ 395lib/evas/canvas/evas_vg_container.c \
397lib/evas/canvas/evas_vg_root_node.c \
398lib/evas/canvas/evas_vg_gradient.c \ 396lib/evas/canvas/evas_vg_gradient.c \
399lib/evas/canvas/evas_vg_gradient_linear.c \ 397lib/evas/canvas/evas_vg_gradient_linear.c \
400lib/evas/canvas/evas_vg_gradient_radial.c \ 398lib/evas/canvas/evas_vg_gradient_radial.c \
diff --git a/src/examples/evas/evas-vg-batman.c b/src/examples/evas/evas-vg-batman.c
index 10f4862490..6800daf248 100644
--- a/src/examples/evas/evas-vg-batman.c
+++ b/src/examples/evas/evas-vg-batman.c
@@ -57,6 +57,7 @@ static const char *batmans_path[] = {
57static void 57static void
58_on_delete(Ecore_Evas *ee EINA_UNUSED) 58_on_delete(Ecore_Evas *ee EINA_UNUSED)
59{ 59{
60 ecore_animator_del(animation);
60 ecore_main_loop_quit(); 61 ecore_main_loop_quit();
61} 62}
62 63
@@ -141,7 +142,9 @@ main(void)
141 142
142 animation = ecore_animator_timeline_add(1, _animator, NULL); 143 animation = ecore_animator_timeline_add(1, _animator, NULL);
143 144
144 root = evas_object_vg_root_node_get(vg); 145 root = evas_vg_container_add(NULL);
146
147 evas_object_vg_root_node_set(vg, root);
145 148
146 Eina_Matrix3 matrix; 149 Eina_Matrix3 matrix;
147 eina_matrix3_identity(&matrix); 150 eina_matrix3_identity(&matrix);
diff --git a/src/examples/evas/evas-vg-simple.c b/src/examples/evas/evas-vg-simple.c
index 3414970b19..111fc3ef3c 100644
--- a/src/examples/evas/evas-vg-simple.c
+++ b/src/examples/evas/evas-vg-simple.c
@@ -309,7 +309,7 @@ _1_basic_shape_test()
309 evas_object_event_callback_add(d.vg, EVAS_CALLBACK_KEY_DOWN, _basic_shape_key_handle, NULL); 309 evas_object_event_callback_add(d.vg, EVAS_CALLBACK_KEY_DOWN, _basic_shape_key_handle, NULL);
310 puts(basic_shape_menu); 310 puts(basic_shape_menu);
311 311
312 container = evas_vg_container_add(evas_object_vg_root_node_get(d.vg)); 312 container = evas_vg_container_add(NULL);
313 313
314 // Line 314 // Line
315 shape = evas_vg_shape_add(container); 315 shape = evas_vg_shape_add(container);
@@ -406,6 +406,8 @@ _1_basic_shape_test()
406 evas_vg_node_color_set(new_shape, 0, 0, 200, 200); 406 evas_vg_node_color_set(new_shape, 0, 0, 200, 200);
407 evas_vg_node_origin_set(new_shape, 350, 450); 407 evas_vg_node_origin_set(new_shape, 350, 450);
408 d.shape_list = eina_list_append(d.shape_list, new_shape); 408 d.shape_list = eina_list_append(d.shape_list, new_shape);
409
410 evas_object_vg_root_node_set(d.vg, container);
409} 411}
410 412
411// 2. Basic shape Test Case END 413// 2. Basic shape Test Case END
@@ -487,9 +489,11 @@ _2_interpolation_test()
487 evas_vg_node_origin_set(shape, 150, 150); 489 evas_vg_node_origin_set(shape, 150, 150);
488 d.shape_list = eina_list_append(d.shape_list, shape); 490 d.shape_list = eina_list_append(d.shape_list, shape);
489 491
490 shape = evas_vg_shape_add(evas_object_vg_root_node_get(d.vg)); 492 shape = evas_vg_shape_add(NULL);
491 evas_vg_node_origin_set(shape, 150, 150); 493 evas_vg_node_origin_set(shape, 150, 150);
492 d.shape_list = eina_list_append(d.shape_list, shape); 494 d.shape_list = eina_list_append(d.shape_list, shape);
495
496 evas_object_vg_root_node_set(d.vg, shape);
493} 497}
494 498
495// 2. Interpolation Test Case END 499// 2. Interpolation Test Case END
@@ -513,11 +517,13 @@ _main_menu()
513 // create the initial screen 517 // create the initial screen
514 d.vg = evas_object_vg_add(d.evas); 518 d.vg = evas_object_vg_add(d.evas);
515 evas_object_show(d.vg); 519 evas_object_show(d.vg);
516 shape = evas_vg_shape_add(evas_object_vg_root_node_get(d.vg)); 520 shape = evas_vg_shape_add(NULL);
517 evas_vg_shape_append_svg_path(shape, batman); 521 evas_vg_shape_append_svg_path(shape, batman);
518 evas_vg_node_color_set(shape, 10, 0, 0, 10); 522 evas_vg_node_color_set(shape, 10, 0, 0, 10);
519 evas_vg_node_origin_set(shape, 0, 100); 523 evas_vg_node_origin_set(shape, 0, 100);
520 524
525 evas_object_vg_root_node_set(d.vg, shape);
526
521 _canvas_resize_cb(d.ee); 527 _canvas_resize_cb(d.ee);
522 puts(main_menu); 528 puts(main_menu);
523} 529}
diff --git a/src/lib/edje/edje_calc.c b/src/lib/edje/edje_calc.c
index 5a01da863f..ba5b4742dc 100644
--- a/src/lib/edje/edje_calc.c
+++ b/src/lib/edje/edje_calc.c
@@ -3695,7 +3695,6 @@ _edje_svg_recalc_apply(Edje *ed, Edje_Real_Part *ep, Edje_Calc_Params *p3 EINA_U
3695{ 3695{
3696 int w, h; 3696 int w, h;
3697 int new_svg = -1; 3697 int new_svg = -1;
3698 Efl_VG *root_vg;
3699 Eina_Matrix3 matrix; 3698 Eina_Matrix3 matrix;
3700 Edje_Vector_Data *start, *end; 3699 Edje_Vector_Data *start, *end;
3701 3700
@@ -3703,8 +3702,6 @@ _edje_svg_recalc_apply(Edje *ed, Edje_Real_Part *ep, Edje_Calc_Params *p3 EINA_U
3703 3702
3704 if( (w == 0) || (h == 0)) return; 3703 if( (w == 0) || (h == 0)) return;
3705 3704
3706 root_vg = evas_object_vg_root_node_get(ep->object);
3707
3708 if (ep->param2) 3705 if (ep->param2)
3709 { 3706 {
3710 Edje_Part_Description_Vector *next_state = (Edje_Part_Description_Vector *)ep->param2->description; 3707 Edje_Part_Description_Vector *next_state = (Edje_Part_Description_Vector *)ep->param2->description;
@@ -3751,7 +3748,7 @@ _edje_svg_recalc_apply(Edje *ed, Edje_Real_Part *ep, Edje_Calc_Params *p3 EINA_U
3751 3748
3752 _edje_dupe_vector_data(ed, chosen_desc->vg.id, w, h, &ep->typedata.vector->cur); 3749 _edje_dupe_vector_data(ed, chosen_desc->vg.id, w, h, &ep->typedata.vector->cur);
3753 3750
3754 efl_parent_set(ep->typedata.vector->cur.vg, root_vg); 3751 evas_object_vg_root_node_set(ep->object, ep->typedata.vector->cur.vg);
3755 } 3752 }
3756 } 3753 }
3757} 3754}
diff --git a/src/lib/evas/canvas/efl_vg_root_node.eo b/src/lib/evas/canvas/efl_vg_root_node.eo
deleted file mode 100644
index a48b0e2a07..0000000000
--- a/src/lib/evas/canvas/efl_vg_root_node.eo
+++ /dev/null
@@ -1,9 +0,0 @@
1class Efl.VG.Root_Node (Efl.VG.Container)
2{
3 [[Efl vector graphics root node class]]
4 legacy_prefix: evas_vg_root_node;
5 implements {
6 Efl.Object.parent { set; }
7 Efl.Object.constructor;
8 }
9}
diff --git a/src/lib/evas/canvas/evas_object_vg.c b/src/lib/evas/canvas/evas_object_vg.c
index c18d0b4357..386dcb85c9 100644
--- a/src/lib/evas/canvas/evas_object_vg.c
+++ b/src/lib/evas/canvas/evas_object_vg.c
@@ -2,7 +2,6 @@
2#include "evas_private.h" 2#include "evas_private.h"
3 3
4#include "evas_vg_private.h" 4#include "evas_vg_private.h"
5#include "efl_vg_root_node.eo.h"
6 5
7#define MY_CLASS EVAS_VG_CLASS 6#define MY_CLASS EVAS_VG_CLASS
8 7
@@ -61,6 +60,19 @@ static const Evas_Object_Func object_func =
61 NULL 60 NULL
62}; 61};
63 62
63static void
64_evas_vg_tree_changed(void *data, const Efl_Event *event EINA_UNUSED)
65{
66 Evas_Object_Protected_Data *obj = data;
67 Evas_VG_Data *pd = efl_data_scope_get(obj->object, MY_CLASS);
68
69 if (pd->changed) return;
70
71 pd->changed = EINA_TRUE;
72
73 evas_object_change(obj->object, obj);
74}
75
64/* the actual api call to add a vector graphic object */ 76/* the actual api call to add a vector graphic object */
65EAPI Evas_Object * 77EAPI Evas_Object *
66evas_object_vg_add(Evas *e) 78evas_object_vg_add(Evas *e)
@@ -75,7 +87,32 @@ evas_object_vg_add(Evas *e)
75Efl_VG * 87Efl_VG *
76_evas_vg_root_node_get(Eo *obj EINA_UNUSED, Evas_VG_Data *pd) 88_evas_vg_root_node_get(Eo *obj EINA_UNUSED, Evas_VG_Data *pd)
77{ 89{
78 return pd->root; 90 return pd->vg_tree;
91}
92
93void
94_evas_vg_root_node_set(Eo *obj EINA_UNUSED, Evas_VG_Data *pd, Efl_VG *root_node)
95{
96 // if the same root is already set
97 if (pd->vg_tree == root_node)
98 return;
99
100 // detach/free the old root_node
101 if (pd->vg_tree)
102 efl_parent_set(pd->vg_tree, NULL);
103
104 pd->vg_tree = root_node;
105
106 if (pd->vg_tree)
107 {
108 // set the parent so that vg canvas can render it.
109 efl_parent_set(pd->vg_tree, pd->root);
110 }
111
112 // force a redraw
113 pd->changed = EINA_TRUE;
114
115 evas_object_change(obj, efl_data_scope_get(obj, EFL_CANVAS_OBJECT_CLASS));
79} 116}
80 117
81static void 118static void
@@ -101,7 +138,7 @@ _evas_vg_efl_object_destructor(Eo *eo_obj, Evas_VG_Data *pd)
101 138
102 efl_event_callback_del(e, EFL_CANVAS_EVENT_RENDER_POST, _cleanup_reference, pd); 139 efl_event_callback_del(e, EFL_CANVAS_EVENT_RENDER_POST, _cleanup_reference, pd);
103 140
104 efl_unref(pd->root); 141 efl_del(pd->root);
105 pd->root = NULL; 142 pd->root = NULL;
106 efl_destructor(efl_super(eo_obj, MY_CLASS)); 143 efl_destructor(efl_super(eo_obj, MY_CLASS));
107} 144}
@@ -119,11 +156,12 @@ _evas_vg_efl_object_constructor(Eo *eo_obj, Evas_VG_Data *pd)
119 obj->type = o_type; 156 obj->type = o_type;
120 157
121 /* root node */ 158 /* root node */
122 pd->root = efl_add(EFL_VG_ROOT_NODE_CLASS, eo_obj); 159 pd->root = efl_add(EFL_VG_CONTAINER_CLASS, NULL);
123 efl_ref(pd->root); 160
124
125 eina_array_step_set(&pd->cleanup, sizeof(pd->cleanup), 8); 161 eina_array_step_set(&pd->cleanup, sizeof(pd->cleanup), 8);
126 162
163 efl_event_callback_add(pd->root, EFL_GFX_EVENT_CHANGED, _evas_vg_tree_changed, obj);
164
127 return eo_obj; 165 return eo_obj;
128} 166}
129 167
@@ -212,6 +250,8 @@ evas_object_vg_render(Evas_Object *eo_obj EINA_UNUSED,
212 vd->root, NULL, 250 vd->root, NULL,
213 do_async); 251 do_async);
214 obj->layer->evas->engine.func->ector_end(engine, context, ector, surface, vd->engine_data, do_async); 252 obj->layer->evas->engine.func->ector_end(engine, context, ector, surface, vd->engine_data, do_async);
253
254 vd->changed = EINA_FALSE;
215} 255}
216 256
217static void 257static void
@@ -220,7 +260,6 @@ evas_object_vg_render_pre(Evas_Object *eo_obj,
220 void *type_private_data) 260 void *type_private_data)
221{ 261{
222 Evas_VG_Data *vd = type_private_data; 262 Evas_VG_Data *vd = type_private_data;
223 Efl_VG_Data *rnd;
224 int is_v, was_v; 263 int is_v, was_v;
225 Ector_Surface *s; 264 Ector_Surface *s;
226 265
@@ -254,20 +293,8 @@ evas_object_vg_render_pre(Evas_Object *eo_obj,
254 was_v = evas_object_was_visible(eo_obj,obj); 293 was_v = evas_object_was_visible(eo_obj,obj);
255 if (!(is_v | was_v)) goto done; 294 if (!(is_v | was_v)) goto done;
256 295
257 // FIXME: for now the walking Evas_VG_Node tree doesn't trigger any damage 296 if (vd->changed)
258 // So just forcing it here if necessary
259 rnd = efl_data_scope_get(vd->root, EFL_VG_CLASS);
260
261 // Once the destructor has been called, root node will be zero
262 // and a full redraw is still necessary.
263 if (!rnd)
264 {
265 evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes, eo_obj, obj);
266 goto done;
267 }
268 else if (rnd->changed)
269 { 297 {
270 rnd->changed = EINA_FALSE;
271 evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes, eo_obj, obj); 298 evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes, eo_obj, obj);
272 goto done; 299 goto done;
273 } 300 }
diff --git a/src/lib/evas/canvas/evas_vg.eo b/src/lib/evas/canvas/evas_vg.eo
index 10c0f90cdd..4eac040637 100644
--- a/src/lib/evas/canvas/evas_vg.eo
+++ b/src/lib/evas/canvas/evas_vg.eo
@@ -7,15 +7,18 @@ class Evas.VG (Efl.Canvas.Object, Efl.Gfx.Fill, Efl.Gfx.View)
7 @property root_node { 7 @property root_node {
8 get { 8 get {
9 [[Get the root node of the evas_object_vg. 9 [[Get the root node of the evas_object_vg.
10 @since 1.14]]
11 }
12 set {
13 [[Set the root node of the evas_object_vg.
10 14
11 Note: To manually create the shape object and show in the Vg 15 Note: To manually create the shape object and show in the Vg
12 object canvas you must create the hierarchy and set the 16 object canvas you must create the hierarchy and set as root node.
13 parent as root node.
14 17
15 @since 1.14]] 18 It takes the ownership of the root node. ]]
16 } 19 }
17 values { 20 values {
18 container: Efl.Object; [[Root node of the VG canvas.]] /* FIXME: Should be Efl.VG */ 21 root: Efl.VG; [[Root node of the VG canvas.]]
19 } 22 }
20 } 23 }
21 } 24 }
diff --git a/src/lib/evas/canvas/evas_vg_node.c b/src/lib/evas/canvas/evas_vg_node.c
index a7077abf37..116f9f49ef 100644
--- a/src/lib/evas/canvas/evas_vg_node.c
+++ b/src/lib/evas/canvas/evas_vg_node.c
@@ -2,7 +2,6 @@
2#include "evas_private.h" 2#include "evas_private.h"
3 3
4#include "evas_vg_private.h" 4#include "evas_vg_private.h"
5#include "efl_vg_root_node.eo.h"
6 5
7#include <string.h> 6#include <string.h>
8#include <math.h> 7#include <math.h>
@@ -503,12 +502,9 @@ _efl_vg_root_parent_get(Eo *obj)
503{ 502{
504 Eo *parent; 503 Eo *parent;
505 504
506 if (efl_isa(obj, EFL_VG_ROOT_NODE_CLASS))
507 return obj;
508
509 parent = efl_parent_get(obj); 505 parent = efl_parent_get(obj);
510 506
511 if (!parent) return NULL; 507 if (!parent) return obj;
512 return _efl_vg_root_parent_get(parent); 508 return _efl_vg_root_parent_get(parent);
513} 509}
514 510
diff --git a/src/lib/evas/canvas/evas_vg_private.h b/src/lib/evas/canvas/evas_vg_private.h
index ac945bc21a..47003def5b 100644
--- a/src/lib/evas/canvas/evas_vg_private.h
+++ b/src/lib/evas/canvas/evas_vg_private.h
@@ -12,14 +12,17 @@ typedef struct _Evas_VG_Data Evas_VG_Data;
12 12
13struct _Evas_VG_Data 13struct _Evas_VG_Data
14{ 14{
15 void *engine_data; 15 void *engine_data;
16 Efl_VG *root; 16 Efl_VG *root;
17 Efl_VG *vg_tree;
17 18
18 Eina_Rect fill; 19 Eina_Rect fill;
19 20
20 unsigned int width, height; 21 unsigned int width, height;
21 22
22 Eina_Array cleanup; 23 Eina_Array cleanup;
24
25 Eina_Bool changed;
23}; 26};
24 27
25struct _Efl_VG_Data 28struct _Efl_VG_Data
diff --git a/src/lib/evas/canvas/evas_vg_root_node.c b/src/lib/evas/canvas/evas_vg_root_node.c
deleted file mode 100644
index 3fa746f25a..0000000000
--- a/src/lib/evas/canvas/evas_vg_root_node.c
+++ /dev/null
@@ -1,97 +0,0 @@
1#include "evas_common_private.h"
2#include "evas_private.h"
3
4#include "evas_vg_private.h"
5#include "efl_vg_root_node.eo.h"
6
7#include <string.h>
8
9#define MY_CLASS EFL_VG_ROOT_NODE_CLASS
10
11typedef struct _Efl_VG_Root_Node_Data Efl_VG_Root_Node_Data;
12struct _Efl_VG_Root_Node_Data
13{
14 Evas_Object *parent;
15 Evas_Object_Protected_Data *data;
16};
17
18static void
19_evas_vg_root_node_render_pre(Eo *obj EINA_UNUSED,
20 Eina_Matrix3 *parent,
21 Ector_Surface *s,
22 void *data,
23 Efl_VG_Data *nd)
24{
25 Efl_VG_Container_Data *pd = data;
26 Eina_List *l;
27 Eo *child;
28
29 EFL_VG_COMPUTE_MATRIX(current, parent, nd);
30
31 EINA_LIST_FOREACH(pd->children, l, child)
32 _evas_vg_render_pre(child, s, current);
33}
34
35static void
36_evas_vg_root_node_changed(void *data, const Efl_Event *event)
37{
38 Efl_VG_Root_Node_Data *pd = data;
39 Efl_VG_Data *bd = efl_data_scope_get(event->object, EFL_VG_CLASS);
40
41 if (bd->changed) return;
42 bd->changed = EINA_TRUE;
43
44 if (pd->parent) evas_object_change(pd->parent, pd->data);
45}
46
47static void
48_efl_vg_root_node_efl_object_parent_set(Eo *obj,
49 Efl_VG_Root_Node_Data *pd,
50 Eo *parent)
51{
52 // Nice little hack, jump over parent parent_set in Efl_VG_Root
53 efl_parent_set(efl_super(obj, EFL_VG_CLASS), parent);
54 if (parent && !efl_isa(parent, EVAS_VG_CLASS))
55 {
56 ERR("Parent of VG_ROOT_NODE must be a VG_CLASS");
57 }
58 else
59 {
60 pd->parent = parent;
61 pd->data = parent ? efl_data_scope_get(parent, EFL_CANVAS_OBJECT_CLASS) : NULL;
62 }
63}
64
65static Eo *
66_efl_vg_root_node_efl_object_constructor(Eo *obj,
67 Efl_VG_Root_Node_Data *pd)
68{
69 Efl_VG_Container_Data *cd;
70 Efl_VG_Data *nd;
71 Eo *parent;
72
73 // We are copying here the code of the vg container to make it possible to
74 // enforce that the root node is the only one to attach to an Evas_Object_VG
75 cd = efl_data_scope_get(obj, EFL_VG_CONTAINER_CLASS);
76 cd->children = NULL;
77 cd->names = eina_hash_stringshared_new(NULL);
78
79 // Nice little hack, jump over parent constructor in Efl_VG_Root
80 obj = efl_constructor(efl_super(obj, EFL_VG_CLASS));
81 parent = efl_parent_get(obj);
82 efl_vg_name_set(obj, "root");
83 if (!efl_isa(parent, EVAS_VG_CLASS)) {
84 ERR("Parent of VG_ROOT_NODE must be a VG_CLASS");
85 return NULL;
86 }
87
88 nd = efl_data_scope_get(obj, EFL_VG_CLASS);
89 nd->render_pre = _evas_vg_root_node_render_pre;
90 nd->data = cd;
91
92 efl_event_callback_add(obj, EFL_GFX_EVENT_CHANGED, _evas_vg_root_node_changed, pd);
93
94 return obj;
95}
96
97#include "efl_vg_root_node.eo.c"