forked from enlightenment/efl
ector: implements bounds_get for gradients in Cairo backend.
This commit is contained in:
parent
2d9bccbfdc
commit
510a3e42e8
|
@ -3,7 +3,15 @@
|
|||
|
||||
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;
|
||||
|
@ -14,6 +22,14 @@ struct _Ector_Cairo_Surface_Data
|
|||
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) \
|
||||
|
|
|
@ -12,12 +12,6 @@
|
|||
#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,
|
||||
|
||||
|
@ -71,15 +65,6 @@ static void (*cairo_rectangle)(cairo_t *cr, double x, double y, double width, do
|
|||
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
|
||||
|
|
|
@ -117,6 +117,25 @@ _ector_renderer_cairo_gradient_linear_ector_renderer_cairo_base_fill(Eo *obj,
|
|||
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)
|
||||
|
|
|
@ -5,6 +5,7 @@ class Ector.Renderer.Cairo.Gradient_Linear (Ector.Renderer.Cairo.Base, Ector.Ren
|
|||
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;
|
||||
|
|
|
@ -122,6 +122,24 @@ _ector_renderer_cairo_gradient_radial_ector_renderer_cairo_base_fill(Eo *obj, Ec
|
|||
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)
|
||||
|
|
|
@ -5,6 +5,7 @@ class Ector.Renderer.Cairo.Gradient_Radial (Ector.Renderer.Cairo.Base, Ector.Ren
|
|||
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;
|
||||
|
|
Loading…
Reference in New Issue