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
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,
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;
}
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
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);
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
#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;
}
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);
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