typedef void cairo_pattern_t;
+typedef struct {
+ double xx; double yx;
+ double xy; double yy;
+ double x0; double y0;
+} cairo_matrix_t;
+
typedef struct _Ector_Cairo_Surface_Data Ector_Cairo_Surface_Data;
+typedef struct _Ector_Renderer_Cairo_Base_Data Ector_Renderer_Cairo_Base_Data;
+
struct _Ector_Cairo_Surface_Data
{
cairo_t *cairo;
Eina_Bool internal : 1;
};
+struct _Ector_Renderer_Cairo_Base_Data
+{
+ Ector_Cairo_Surface_Data *parent;
+ Ector_Renderer_Generic_Base_Data *generic;
+
+ cairo_matrix_t *m;
+};
+
#define CHECK_CAIRO(Parent) (!(Parent && Parent->cairo))
#define USE(Obj, Sym, Error) \
#include "ector_private.h"
#include "ector_cairo_private.h"
-typedef struct {
- double xx; double yx;
- double xy; double yy;
- double x0; double y0;
-} cairo_matrix_t;
-
typedef enum {
CAIRO_OPERATOR_CLEAR,
static void (*cairo_clip)(cairo_t *cr) = NULL;
static void (*cairo_device_to_user)(cairo_t *cr, double *x, double *y) = NULL;
-typedef struct _Ector_Renderer_Cairo_Base_Data Ector_Renderer_Cairo_Base_Data;
-struct _Ector_Renderer_Cairo_Base_Data
-{
- Ector_Cairo_Surface_Data *parent;
- Ector_Renderer_Generic_Base_Data *generic;
-
- cairo_matrix_t *m;
-};
-
static cairo_matrix_t identity;
// Cairo need unpremul color, so force unpremul here
return EINA_TRUE;
}
+static Eina_Bool
+_ector_renderer_cairo_gradient_linear_ector_renderer_generic_base_bounds_get(Eo *obj,
+ Ector_Renderer_Cairo_Gradient_Linear_Data *pd EINA_UNUSED,
+ Eina_Rectangle *r)
+{
+ Ector_Renderer_Generic_Gradient_Linear_Data *gld;
+ Ector_Renderer_Cairo_Base_Data *bd;
+
+ gld = eo_data_scope_get(obj, ECTOR_RENDERER_GENERIC_GRADIENT_RADIAL_MIXIN);
+ bd = eo_data_scope_get(obj, ECTOR_RENDERER_CAIRO_BASE_CLASS);
+ EINA_RECTANGLE_SET(r,
+ bd->generic->origin.x + gld->start.x,
+ bd->generic->origin.y + gld->start.y,
+ gld->end.x - gld->start.x,
+ gld->end.y - gld->start.x);
+
+ return EINA_TRUE;
+}
+
void
_ector_renderer_cairo_gradient_linear_eo_base_destructor(Eo *obj,
Ector_Renderer_Cairo_Gradient_Linear_Data *pd)
implements {
Ector.Renderer.Generic.Base.prepare;
Ector.Renderer.Generic.Base.draw;
+ Ector.Renderer.Generic.Base.bounds_get;
Ector.Renderer.Cairo.Base.fill;
Eo.Base.destructor;
Efl.Gfx.Gradient.Base.stop.set;
return EINA_TRUE;
}
+static Eina_Bool
+_ector_renderer_cairo_gradient_radial_ector_renderer_generic_base_bounds_get(Eo *obj EINA_UNUSED,
+ Ector_Renderer_Cairo_Gradient_Radial_Data *pd EINA_UNUSED,
+ Eina_Rectangle *r)
+{
+ Ector_Renderer_Generic_Gradient_Radial_Data *gld;
+ Ector_Renderer_Cairo_Base_Data *bd;
+
+ gld = eo_data_scope_get(obj, ECTOR_RENDERER_GENERIC_GRADIENT_RADIAL_MIXIN);
+ bd = eo_data_scope_get(obj, ECTOR_RENDERER_CAIRO_BASE_CLASS);
+ EINA_RECTANGLE_SET(r,
+ bd->generic->origin.x + gld->radial.x - gld->radius,
+ bd->generic->origin.y + gld->radial.y - gld->radius,
+ gld->radius * 2, gld->radius * 2);
+
+ return EINA_TRUE;
+}
+
void
_ector_renderer_cairo_gradient_radial_eo_base_destructor(Eo *obj,
Ector_Renderer_Cairo_Gradient_Radial_Data *pd)
implements {
Ector.Renderer.Generic.Base.prepare;
Ector.Renderer.Generic.Base.draw;
+ Ector.Renderer.Generic.Base.bounds_get;
Ector.Renderer.Cairo.Base.fill;
Eo.Base.destructor;
Efl.Gfx.Gradient.Base.stop.set;