evas vg: gradient path bounds get 77/257977/2
authorMichal Maciola <m.maciola@samsung.com>
Tue, 20 Apr 2021 13:39:29 +0000 (15:39 +0200)
committerHermet Park <chuneon.park@samsung.com>
Mon, 10 May 2021 04:36:18 +0000 (04:36 +0000)
Created efl_canvas_vg_gradient_[linear/radial]_efl_gfx_path_bounds_get thorvg implementation

Change-Id: Iff7e286621178127170fc4159ebfd36915a17128

src/lib/evas/canvas/efl_canvas_vg_gradient_linear.c
src/lib/evas/canvas/efl_canvas_vg_gradient_radial.c

index a015bd4..8712b86 100644 (file)
@@ -144,11 +144,20 @@ static void
 _efl_canvas_vg_gradient_linear_efl_gfx_path_bounds_get(const Eo *obj, Efl_Canvas_Vg_Gradient_Linear_Data *pd, Eina_Rect *r)
 {
    Efl_Canvas_Vg_Node_Data *nd;
-
    nd = efl_data_scope_get(obj, EFL_CANVAS_VG_NODE_CLASS);
+#ifdef HAVE_THORVG
+   if (!obj) return;
+   float x1 = 0.f, y1 = 0.f, x2 = 0.f, y2 = 0.f;
+   Efl_Canvas_Vg_Gradient_Data *gd = efl_data_scope_get(obj, EFL_CANVAS_VG_GRADIENT_CLASS);
+   if (gd && tvg_linear_gradient_get(gd->gradient, &x1, &y1, &x2, &y2) == TVG_RESULT_SUCCESS)
+     {
+        EINA_RECTANGLE_SET(r, nd->x + x1, nd->y + y1, x2 - x1, y2 - y1);
+     }
+#else
    EINA_RECTANGLE_SET(r,
                       nd->x + pd->start.x, nd->y + pd->start.y,
-                      pd->end.x - pd->start.x, pd->end.y - pd->start.x);
+                      pd->end.x - pd->start.x, pd->end.y - pd->start.y);
+#endif
 }
 
 static Eina_Bool
index 827f053..9b2c2e2 100644 (file)
@@ -161,12 +161,21 @@ static void
 _efl_canvas_vg_gradient_radial_efl_gfx_path_bounds_get(const Eo *obj, Efl_Canvas_Vg_Gradient_Radial_Data *pd, Eina_Rect *r)
 {
    Efl_Canvas_Vg_Node_Data *nd;
-
    nd = efl_data_scope_get(obj, EFL_CANVAS_VG_NODE_CLASS);
+#ifdef HAVE_THORVG
+   if (!obj) return;
+   float tx = 0.f, ty = 0.f, tr = 0.f;
+   Efl_Canvas_Vg_Gradient_Data *gd = efl_data_scope_get(obj, EFL_CANVAS_VG_GRADIENT_CLASS);
+   if (gd && tvg_radial_gradient_get(gd->gradient, &tx, &ty, &tr) == TVG_RESULT_SUCCESS)
+     {
+        EINA_RECTANGLE_SET(r, nd->x + tx - tr, nd->y + ty - tr, tr * 2, tr * 2);
+     }
+#else
    EINA_RECTANGLE_SET(r,
                       nd->x + pd->center.x - pd->radius,
                       nd->y + pd->center.y - pd->radius,
                       pd->radius * 2, pd->radius * 2);
+#endif
 }
 
 static Eina_Bool