From 7b271865d02919ac927dd15792fbeade48dbcbff Mon Sep 17 00:00:00 2001 From: Michal Szczecinski Date: Mon, 10 May 2021 12:49:20 +0200 Subject: [PATCH] evas vg: Radial gradient code cleanup. Removed ector dependency. Removed redundant code. Change-Id: If81e57d02aafbd7489f2a4ff5fa44995d0462637 --- .../canvas/efl_canvas_vg_gradient_radial.c | 187 +++++++----------- 1 file changed, 67 insertions(+), 120 deletions(-) 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 9b2c2e2bbb..7ed737e0c6 100644 --- a/src/lib/evas/canvas/efl_canvas_vg_gradient_radial.c +++ b/src/lib/evas/canvas/efl_canvas_vg_gradient_radial.c @@ -14,42 +14,35 @@ struct _Efl_Canvas_Vg_Gradient_Radial_Data double radius; }; - static void -_efl_canvas_vg_gradient_radial_efl_gfx_gradient_radial_center_set(Eo *obj EINA_UNUSED, - Efl_Canvas_Vg_Gradient_Radial_Data *pd, +_efl_canvas_vg_gradient_radial_efl_gfx_gradient_radial_center_set(Eo *obj, + Efl_Canvas_Vg_Gradient_Radial_Data *pd EINA_UNUSED, double x, double y) { - pd->center.x = x; - pd->center.y = y; - - efl_canvas_vg_node_change(obj); + evas_vg_gradient_radial_center_set((Evas_Vg_Gradient_Radial*)obj, x, y); } static void -_efl_canvas_vg_gradient_radial_efl_gfx_gradient_radial_center_get(const Eo *obj EINA_UNUSED, - Efl_Canvas_Vg_Gradient_Radial_Data *pd, +_efl_canvas_vg_gradient_radial_efl_gfx_gradient_radial_center_get(const Eo *obj, + Efl_Canvas_Vg_Gradient_Radial_Data *pd EINA_UNUSED, double *x, double *y) { - if (x) *x = pd->center.x; - if (y) *y = pd->center.y; + evas_vg_gradient_radial_center_get((Evas_Vg_Gradient_Radial*)obj, x, y); } static void -_efl_canvas_vg_gradient_radial_efl_gfx_gradient_radial_radius_set(Eo *obj EINA_UNUSED, - Efl_Canvas_Vg_Gradient_Radial_Data *pd, +_efl_canvas_vg_gradient_radial_efl_gfx_gradient_radial_radius_set(Eo *obj, + Efl_Canvas_Vg_Gradient_Radial_Data *pd EINA_UNUSED, double r) { - pd->radius = r; - - efl_canvas_vg_node_change(obj); + evas_vg_gradient_radial_radius_set((Evas_Vg_Gradient_Radial*)obj, r); } static double -_efl_canvas_vg_gradient_radial_efl_gfx_gradient_radial_radius_get(const Eo *obj EINA_UNUSED, - Efl_Canvas_Vg_Gradient_Radial_Data *pd) +_efl_canvas_vg_gradient_radial_efl_gfx_gradient_radial_radius_get(const Eo *obj, + Efl_Canvas_Vg_Gradient_Radial_Data *pd EINA_UNUSED) { - return pd->radius; + return evas_vg_gradient_radial_radius_get((Evas_Vg_Gradient_Radial*)obj); } static void @@ -72,50 +65,6 @@ _efl_canvas_vg_gradient_radial_efl_gfx_gradient_radial_focal_get(const Eo *obj E if (y) *y = pd->focal.y; } -#ifndef HAVE_THORVG -static void -_efl_canvas_vg_gradient_radial_render_pre(Evas_Object_Protected_Data *vg_pd EINA_UNUSED, - Efl_VG *obj, - Efl_Canvas_Vg_Node_Data *nd, - void *engine EINA_UNUSED, - void *output EINA_UNUSED, - void *context EINA_UNUSED, - Ector_Surface *surface, - Eina_Matrix3 *ptransform, - int p_opacity EINA_UNUSED, - Ector_Buffer *comp, - Efl_Gfx_Vg_Composite_Method comp_method, - void *data) -{ - Efl_Canvas_Vg_Gradient_Radial_Data *pd = data; - Efl_Canvas_Vg_Gradient_Data *gd; - - if (nd->flags == EFL_GFX_CHANGE_FLAG_NONE) return; - - nd->flags = EFL_GFX_CHANGE_FLAG_NONE; - - gd = efl_data_scope_get(obj, EFL_CANVAS_VG_GRADIENT_CLASS); - EFL_CANVAS_VG_COMPUTE_MATRIX(ctransform, ptransform, nd); - - if (!nd->renderer) - { - efl_domain_current_push(EFL_ID_DOMAIN_SHARED); - nd->renderer = ector_surface_renderer_factory_new(surface, ECTOR_RENDERER_GRADIENT_RADIAL_MIXIN); - efl_domain_current_pop(); - } - - ector_renderer_transformation_set(nd->renderer, ctransform); - ector_renderer_origin_set(nd->renderer, nd->x, nd->y); - ector_renderer_visibility_set(nd->renderer, nd->visibility); - efl_gfx_gradient_stop_set(nd->renderer, gd->colors, gd->colors_count); - efl_gfx_gradient_spread_set(nd->renderer, gd->spread); - efl_gfx_gradient_radial_center_set(nd->renderer, pd->center.x, pd->center.y); - efl_gfx_gradient_radial_focal_set(nd->renderer, pd->focal.x, pd->focal.y); - efl_gfx_gradient_radial_radius_set(nd->renderer, pd->radius); - ector_renderer_prepare(nd->renderer); - ector_renderer_comp_method_set(nd->renderer, comp, comp_method); -} -#else static void _gradient_radial_render_pre_tvg(Efl_Canvas_Vg_Gradient_Data *gd, Tvg_Paint *shape, @@ -128,23 +77,25 @@ _gradient_radial_render_pre_tvg(Efl_Canvas_Vg_Gradient_Data *gd, else if (owner == EVAS_VG_GRADIENT_OWNER_TYPE_STROKE) tvg_shape_set_stroke_radial_gradient(shape, gd->gradient); } -#endif static Eo * _efl_canvas_vg_gradient_radial_efl_object_constructor(Eo *obj, Efl_Canvas_Vg_Gradient_Radial_Data *pd) { - Efl_Canvas_Vg_Node_Data *nd; + Efl_Canvas_Vg_Node_Data *nd = NULL; + Efl_Canvas_Vg_Gradient_Data *gd = NULL; + obj = efl_constructor(efl_super(obj, MY_CLASS)); + if (!obj) return NULL; + nd = efl_data_scope_get(obj, EFL_CANVAS_VG_NODE_CLASS); -#ifndef HAVE_THORVG - nd->render_pre = _efl_canvas_vg_gradient_radial_render_pre; -#else - Efl_Canvas_Vg_Gradient_Data *gd; + if (!nd) return NULL; + gd = efl_data_scope_get(obj, EFL_CANVAS_VG_GRADIENT_CLASS); + if (!gd) return NULL; + gd->gradient_render_pre_tvg = _gradient_radial_render_pre_tvg; gd->spread = EFL_GFX_GRADIENT_SPREAD_PAD; gd->gradient = tvg_radial_gradient_new(); -#endif nd->data = pd; return obj; @@ -158,24 +109,25 @@ _efl_canvas_vg_gradient_radial_efl_object_destructor(Eo *obj, } 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_gradient_radial_efl_gfx_path_bounds_get(const Eo *obj, + Efl_Canvas_Vg_Gradient_Radial_Data *pd EINA_UNUSED, 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; + Efl_Canvas_Vg_Node_Data *nd = NULL; + Efl_Canvas_Vg_Gradient_Data *gd = NULL; 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 (!obj) return; + + nd = efl_data_scope_get(obj, EFL_CANVAS_VG_NODE_CLASS); + if (!nd) return; + + gd = efl_data_scope_get(obj, EFL_CANVAS_VG_GRADIENT_CLASS); + if (!gd || !gd->gradient) + 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 @@ -184,9 +136,10 @@ _efl_canvas_vg_gradient_radial_efl_gfx_path_interpolate(Eo *obj, const Efl_VG *from, const Efl_VG *to, double pos_map) { - Efl_Canvas_Vg_Gradient_Radial_Data *fromd, *tod; - double from_map; - Eina_Bool r; + Efl_Canvas_Vg_Gradient_Radial_Data *fromd = NULL, *tod = NULL; + Efl_Canvas_Vg_Gradient_Data *gd = NULL; + double from_map = 0.0f; + Eina_Bool r = EINA_FALSE; r = efl_gfx_path_interpolate(efl_super(obj, EFL_CANVAS_VG_GRADIENT_RADIAL_CLASS), from, to, pos_map); @@ -194,8 +147,14 @@ _efl_canvas_vg_gradient_radial_efl_gfx_path_interpolate(Eo *obj, fromd = efl_data_scope_get(from, EFL_CANVAS_VG_GRADIENT_RADIAL_CLASS); tod = efl_data_scope_get(to, EFL_CANVAS_VG_GRADIENT_RADIAL_CLASS); + + gd = efl_data_scope_get(obj, EFL_CANVAS_VG_GRADIENT_CLASS); + if (!gd) return EINA_FALSE; + from_map = 1.0 - pos_map; + if (!fromd || !tod || !pd) return EINA_FALSE; + #define INTP(Pd, From, To, Member, From_Map, Pos_Map) \ Pd->Member = From->Member * From_Map + To->Member * Pos_Map @@ -207,11 +166,7 @@ _efl_canvas_vg_gradient_radial_efl_gfx_path_interpolate(Eo *obj, #undef INTP -#ifdef HAVE_THORVG - Efl_Canvas_Vg_Gradient_Data *gd = efl_data_scope_get(obj, EFL_CANVAS_VG_GRADIENT_CLASS); tvg_radial_gradient_set(gd->gradient, pd->center.x, pd->center.y, pd->radius); -#endif - return EINA_TRUE; } @@ -223,23 +178,25 @@ _efl_canvas_vg_gradient_radial_efl_duplicate_duplicate(const Eo *obj, Efl_Canvas Efl_VG *cn = NULL; cn = efl_duplicate(efl_super(obj, MY_CLASS)); - efl_gfx_gradient_radial_focal_set(cn, pd->focal.x, pd->focal.y); - efl_gfx_gradient_radial_center_set(cn, pd->center.x, pd->center.y); - efl_gfx_gradient_radial_radius_set(cn, pd->radius); + evas_vg_gradient_radial_focal_set(cn, pd->focal.x, pd->focal.y); + evas_vg_gradient_radial_center_set(cn, pd->center.x, pd->center.y); + evas_vg_gradient_radial_radius_set(cn, pd->radius); return cn; } EAPI void evas_vg_gradient_radial_center_set(Evas_Vg_Gradient_Radial *obj, double x, double y) { -#ifdef HAVE_THORVG + Efl_Canvas_Vg_Gradient_Data *gd = NULL; + Efl_Canvas_Vg_Gradient_Radial_Data *rgd = NULL; + + float r = 0.0f; if (!obj) return; - Efl_Canvas_Vg_Gradient_Data *gd = efl_data_scope_get(obj, EFL_CANVAS_VG_GRADIENT_CLASS); - Efl_Canvas_Vg_Gradient_Radial_Data *rgd = efl_data_scope_get(obj, MY_CLASS); + gd = efl_data_scope_get(obj, EFL_CANVAS_VG_GRADIENT_CLASS); + rgd = efl_data_scope_get(obj, MY_CLASS); if (!gd || !rgd) return; - float r = 0.0f; tvg_radial_gradient_get(gd->gradient, NULL, NULL, &r); tvg_radial_gradient_set(gd->gradient, x, y, r); @@ -247,66 +204,56 @@ evas_vg_gradient_radial_center_set(Evas_Vg_Gradient_Radial *obj, double x, doubl rgd->center.y = y; if (gd->shape) efl_canvas_vg_node_change(gd->shape); -#else - efl_gfx_gradient_radial_center_set(obj, x, y); -#endif } EAPI void evas_vg_gradient_radial_center_get(Evas_Vg_Gradient_Radial *obj, double *x, double *y) { -#ifdef HAVE_THORVG + Efl_Canvas_Vg_Gradient_Data *gd = NULL; + float tx = 0.0f, ty = 0.0f; if (!obj) return; - Efl_Canvas_Vg_Gradient_Data *gd = efl_data_scope_get(obj, EFL_CANVAS_VG_GRADIENT_CLASS); - if (!gd) return; + gd = efl_data_scope_get(obj, EFL_CANVAS_VG_GRADIENT_CLASS); + if (!gd || !gd->gradient) return; - float tx = 0.f, ty = 0.f; tvg_radial_gradient_get(gd->gradient, &tx, &ty, NULL); if (x) *x = tx; if (y) *y = ty; -#else - efl_gfx_gradient_radial_center_get(obj, x, y); -#endif } EAPI void evas_vg_gradient_radial_radius_set(Evas_Vg_Gradient_Radial *obj, double r) { -#ifdef HAVE_THORVG + Efl_Canvas_Vg_Gradient_Data *gd = NULL; + Efl_Canvas_Vg_Gradient_Radial_Data *rgd = NULL; + float x = 0.0f, y = 0.0f; if (!obj) return; - Efl_Canvas_Vg_Gradient_Data *gd = efl_data_scope_get(obj, EFL_CANVAS_VG_GRADIENT_CLASS); - Efl_Canvas_Vg_Gradient_Radial_Data *rgd = efl_data_scope_get(obj, MY_CLASS); + gd = efl_data_scope_get(obj, EFL_CANVAS_VG_GRADIENT_CLASS); + rgd = efl_data_scope_get(obj, MY_CLASS); if (!gd || !rgd) return; - float x = 0.0f, y = 0.0f; tvg_radial_gradient_get(gd->gradient, &x, &y, NULL); tvg_radial_gradient_set(gd->gradient, x, y, r); rgd->radius = r; if (gd->shape) efl_canvas_vg_node_change(gd->shape); -#else - efl_gfx_gradient_radial_radius_set(obj, r); -#endif } EAPI double evas_vg_gradient_radial_radius_get(Evas_Vg_Gradient_Radial *obj) { -#ifdef HAVE_THORVG + Efl_Canvas_Vg_Gradient_Data *gd = NULL; + float r = 0.0f; + if (!obj) return 0.0; - Efl_Canvas_Vg_Gradient_Data *gd = efl_data_scope_get(obj, EFL_CANVAS_VG_GRADIENT_CLASS); - if (!gd) return 0.0; + gd = efl_data_scope_get(obj, EFL_CANVAS_VG_GRADIENT_CLASS); + if (!gd || !gd->gradient) return 0.0; - float r = 0.0f; tvg_radial_gradient_get(gd->gradient, NULL, NULL, &r); return r; -#else - return efl_gfx_gradient_radial_radius_get(obj); -#endif } EAPI void -- 2.34.1