From 9331322c79fe01102b83ff99d083edb4c55821bb Mon Sep 17 00:00:00 2001 From: Michal Maciola Date: Tue, 20 Apr 2021 15:39:29 +0200 Subject: [PATCH] evas vg: gradient path bounds get 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 | 13 +++++++++++-- src/lib/evas/canvas/efl_canvas_vg_gradient_radial.c | 11 ++++++++++- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/lib/evas/canvas/efl_canvas_vg_gradient_linear.c b/src/lib/evas/canvas/efl_canvas_vg_gradient_linear.c index a015bd4..8712b86 100644 --- a/src/lib/evas/canvas/efl_canvas_vg_gradient_linear.c +++ b/src/lib/evas/canvas/efl_canvas_vg_gradient_linear.c @@ -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 diff --git a/src/lib/evas/canvas/efl_canvas_vg_gradient_radial.c b/src/lib/evas/canvas/efl_canvas_vg_gradient_radial.c index 827f053..9b2c2e2 100644 --- a/src/lib/evas/canvas/efl_canvas_vg_gradient_radial.c +++ b/src/lib/evas/canvas/efl_canvas_vg_gradient_radial.c @@ -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 -- 2.7.4