ector: implements bounds_get for gradients in Cairo backend.
authorCedric BAIL <cedric@osg.samsung.com>
Fri, 3 Apr 2015 14:37:55 +0000 (16:37 +0200)
committerCedric BAIL <cedric@osg.samsung.com>
Fri, 3 Apr 2015 14:37:55 +0000 (16:37 +0200)
src/lib/ector/cairo/ector_cairo_private.h
src/lib/ector/cairo/ector_renderer_cairo_base.c
src/lib/ector/cairo/ector_renderer_cairo_gradient_linear.c
src/lib/ector/cairo/ector_renderer_cairo_gradient_linear.eo
src/lib/ector/cairo/ector_renderer_cairo_gradient_radial.c
src/lib/ector/cairo/ector_renderer_cairo_gradient_radial.eo

index 07446a8..486f9ad 100644 (file)
@@ -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)                            \
index 5a51aae..795b57c 100644 (file)
 #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
index ce4097b..e44734c 100644 (file)
@@ -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)
index 3d4ed9a..64c6056 100644 (file)
@@ -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;
index 4e07754..1f4ac8e 100644 (file)
@@ -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)
index fb79bec..c05ad9e 100644 (file)
@@ -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;