evas vector: Added efl_duplicate api implementation for thorvg shape. 82/246982/3
authorMichal Szczecinski <m.szczecinsk@partner.samsung.com>
Thu, 5 Nov 2020 10:57:53 +0000 (11:57 +0100)
committerHermet Park <chuneon.park@samsung.com>
Tue, 10 Nov 2020 04:52:02 +0000 (04:52 +0000)
This implementation is needed to render properly edje vector parts.

Change-Id: Ida8f382eef0227e996eedfc8c4add286fa0bbaee

src/lib/evas/canvas/efl_canvas_vg_shape.c

index d27a1ad..31795a4 100644 (file)
@@ -810,7 +810,7 @@ _efl_canvas_vg_shape_efl_gfx_path_commit(Eo *obj,
 EOLIAN static Efl_Canvas_Vg_Node *
 _efl_canvas_vg_shape_efl_duplicate_duplicate(const Eo *obj, Efl_Canvas_Vg_Shape_Data *pd)
 {
-   //TODO: implement me!
+#ifndef HAVE_THORVG
    Efl_Canvas_Vg_Node *node;
    Efl_Canvas_Vg_Shape_Data *sd;
 
@@ -836,7 +836,39 @@ _efl_canvas_vg_shape_efl_duplicate_duplicate(const Eo *obj, Efl_Canvas_Vg_Shape_
      }
 
    efl_gfx_path_copy_from(node, obj);
+
    return node;
+#else
+   Efl_Canvas_Vg_Node *node = NULL;
+   Efl_Canvas_Vg_Shape_Data *sd = NULL;
+
+   node = efl_duplicate(efl_super(obj, MY_CLASS));
+   sd = efl_data_scope_get(node, MY_CLASS);
+
+   if (pd->shape)
+     {
+        if (sd->shape) tvg_paint_del(sd->shape);
+        sd->shape = tvg_paint_duplicate(pd->shape);
+     }
+
+   if (pd->fill)
+     {
+        Tvg_Gradient *grad = NULL;
+        Efl_Canvas_Vg_Gradient_Data *gd = NULL;
+
+        sd->fill = efl_duplicate(pd->fill);
+        tvg_shape_get_gradient(sd->shape, &grad);
+        gd = efl_data_scope_get(sd->fill, EFL_CANVAS_VG_GRADIENT_CLASS);
+        if (gd) gd->gradient = grad;
+     }
+
+   sd->curr_ctrl = pd->curr_ctrl;
+   sd->curr = pd->curr;
+   sd->start = pd->start;
+   sd->cmd_prev = pd->cmd_prev;
+
+   return node;
+#endif
 }
 
 EAPI double