cedric pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=641699738216f20bc432ab527ccebea6264f523c

commit 641699738216f20bc432ab527ccebea6264f523c
Author: Cedric BAIL <ced...@osg.samsung.com>
Date:   Thu Sep 17 07:55:52 2015 +0200

    ector: make it possible to have an unique id per Ector_Renderer.
    
    This is going to be used by an Eina_Hash to deduplicate the number of 
Ector_Renderer.
---
 .../cairo/ector_renderer_cairo_gradient_linear.c   | 22 +++++++++++++++++++
 .../cairo/ector_renderer_cairo_gradient_linear.eo  |  1 +
 .../cairo/ector_renderer_cairo_gradient_radial.c   | 22 +++++++++++++++++++
 .../cairo/ector_renderer_cairo_gradient_radial.eo  |  1 +
 src/lib/ector/cairo/ector_renderer_cairo_shape.c   | 25 ++++++++++++++++++++++
 src/lib/ector/cairo/ector_renderer_cairo_shape.eo  |  1 +
 src/lib/ector/ector_private.h                      | 10 +++++++++
 src/lib/ector/ector_renderer_base.c                | 16 ++++++++++++++
 src/lib/ector/ector_renderer_generic_base.eo       |  5 +++++
 .../ector_renderer_software_gradient_linear.c      | 16 ++++++++++++++
 .../ector_renderer_software_gradient_linear.eo     |  1 +
 .../ector_renderer_software_gradient_radial.c      | 16 ++++++++++++++
 .../ector_renderer_software_gradient_radial.eo     |  1 +
 .../ector/software/ector_renderer_software_shape.c | 25 ++++++++++++++++++++++
 .../software/ector_renderer_software_shape.eo      |  1 +
 15 files changed, 163 insertions(+)

diff --git a/src/lib/ector/cairo/ector_renderer_cairo_gradient_linear.c 
b/src/lib/ector/cairo/ector_renderer_cairo_gradient_linear.c
index 2eece58..cf354b4 100644
--- a/src/lib/ector/cairo/ector_renderer_cairo_gradient_linear.c
+++ b/src/lib/ector/cairo/ector_renderer_cairo_gradient_linear.c
@@ -163,4 +163,26 @@ 
_ector_renderer_cairo_gradient_linear_efl_gfx_gradient_base_stop_set(Eo *obj,
                efl_gfx_gradient_stop_set(colors, length));
 }
 
+static unsigned int
+_ector_renderer_cairo_gradient_linear_ector_renderer_generic_base_crc_get(Eo 
*obj, Ector_Renderer_Cairo_Gradient_Linear_Data *pd EINA_UNUSED)
+{
+   Ector_Renderer_Generic_Gradient_Linear_Data *gld;
+   Ector_Renderer_Generic_Gradient_Data *gd;
+   unsigned int crc;
+
+   eo_do_super(obj, ECTOR_RENDERER_CAIRO_GRADIENT_LINEAR_CLASS,
+               crc = ector_renderer_crc_get());
+
+   gld = eo_data_scope_get(obj, ECTOR_RENDERER_GENERIC_GRADIENT_LINEAR_MIXIN);
+   gd = eo_data_scope_get(obj, ECTOR_RENDERER_GENERIC_GRADIENT_MIXIN);
+   if (!gd || !gld) return crc;
+
+   crc = eina_crc((void*) gd->s, sizeof (Efl_Gfx_Gradient_Spread), crc, 
EINA_FALSE);
+   if (gd->colors_count)
+     crc = eina_crc((void*) gd->colors, sizeof (Efl_Gfx_Gradient_Stop) * 
gd->colors_count, crc, EINA_FALSE);
+   crc = eina_crc((void*) gld, sizeof 
(Ector_Renderer_Generic_Gradient_Linear_Data), crc, EINA_FALSE);
+
+   return crc;
+}
+
 #include "ector_renderer_cairo_gradient_linear.eo.c"
diff --git a/src/lib/ector/cairo/ector_renderer_cairo_gradient_linear.eo 
b/src/lib/ector/cairo/ector_renderer_cairo_gradient_linear.eo
index 64c6056..2085f69 100644
--- a/src/lib/ector/cairo/ector_renderer_cairo_gradient_linear.eo
+++ b/src/lib/ector/cairo/ector_renderer_cairo_gradient_linear.eo
@@ -6,6 +6,7 @@ class Ector.Renderer.Cairo.Gradient_Linear 
(Ector.Renderer.Cairo.Base, Ector.Ren
       Ector.Renderer.Generic.Base.prepare;
       Ector.Renderer.Generic.Base.draw;
       Ector.Renderer.Generic.Base.bounds_get;
+      Ector.Renderer.Generic.Base.crc.get;
       Ector.Renderer.Cairo.Base.fill;
       Eo.Base.destructor;
       Efl.Gfx.Gradient.Base.stop.set;
diff --git a/src/lib/ector/cairo/ector_renderer_cairo_gradient_radial.c 
b/src/lib/ector/cairo/ector_renderer_cairo_gradient_radial.c
index 508632b..0857e25 100644
--- a/src/lib/ector/cairo/ector_renderer_cairo_gradient_radial.c
+++ b/src/lib/ector/cairo/ector_renderer_cairo_gradient_radial.c
@@ -168,4 +168,26 @@ 
_ector_renderer_cairo_gradient_radial_efl_gfx_gradient_base_stop_set(Eo *obj,
                efl_gfx_gradient_stop_set(colors, length));
 }
 
+static unsigned int
+_ector_renderer_cairo_gradient_radial_ector_renderer_generic_base_crc_get(Eo 
*obj, Ector_Renderer_Cairo_Gradient_Radial_Data *pd EINA_UNUSED)
+{
+   Ector_Renderer_Generic_Gradient_Radial_Data *grd;
+   Ector_Renderer_Generic_Gradient_Data *gd;
+   unsigned int crc;
+
+   eo_do_super(obj, ECTOR_RENDERER_CAIRO_GRADIENT_RADIAL_CLASS,
+               crc = ector_renderer_crc_get());
+
+   grd = eo_data_scope_get(obj, ECTOR_RENDERER_GENERIC_GRADIENT_RADIAL_MIXIN);
+   gd = eo_data_scope_get(obj, ECTOR_RENDERER_GENERIC_GRADIENT_MIXIN);
+   if (!grd || !gd) return crc;
+
+   crc = eina_crc((void*) gd->s, sizeof (Efl_Gfx_Gradient_Spread), crc, 
EINA_FALSE);
+   if (gd->colors_count)
+     crc = eina_crc((void*) gd->colors, sizeof (Efl_Gfx_Gradient_Stop) * 
gd->colors_count, crc, EINA_FALSE);
+   crc = eina_crc((void*) grd, sizeof 
(Ector_Renderer_Generic_Gradient_Radial_Data), crc, EINA_FALSE);
+
+   return crc;
+}
+
 #include "ector_renderer_cairo_gradient_radial.eo.c"
diff --git a/src/lib/ector/cairo/ector_renderer_cairo_gradient_radial.eo 
b/src/lib/ector/cairo/ector_renderer_cairo_gradient_radial.eo
index c05ad9e..0b3ae92 100644
--- a/src/lib/ector/cairo/ector_renderer_cairo_gradient_radial.eo
+++ b/src/lib/ector/cairo/ector_renderer_cairo_gradient_radial.eo
@@ -6,6 +6,7 @@ class Ector.Renderer.Cairo.Gradient_Radial 
(Ector.Renderer.Cairo.Base, Ector.Ren
       Ector.Renderer.Generic.Base.prepare;
       Ector.Renderer.Generic.Base.draw;
       Ector.Renderer.Generic.Base.bounds_get;
+      Ector.Renderer.Generic.Base.crc.get;
       Ector.Renderer.Cairo.Base.fill;
       Eo.Base.destructor;
       Efl.Gfx.Gradient.Base.stop.set;
diff --git a/src/lib/ector/cairo/ector_renderer_cairo_shape.c 
b/src/lib/ector/cairo/ector_renderer_cairo_shape.c
index ac06da0..c598a2c 100644
--- a/src/lib/ector/cairo/ector_renderer_cairo_shape.c
+++ b/src/lib/ector/cairo/ector_renderer_cairo_shape.c
@@ -293,5 +293,30 @@ _ector_renderer_cairo_shape_eo_base_destructor(Eo *obj, 
Ector_Renderer_Cairo_Sha
    if (pd->path) cairo_path_destroy(pd->path);
 }
 
+unsigned int
+_ector_renderer_cairo_shape_ector_renderer_generic_base_crc_get(Eo *obj,
+                                                                
Ector_Renderer_Cairo_Shape_Data *pd)
+{
+   unsigned int crc;
+
+   eo_do_super(obj, ECTOR_RENDERER_CAIRO_SHAPE_CLASS,
+               crc = ector_renderer_crc_get());
+
+   crc = eina_crc((void*) &pd->shape->stroke.marker, sizeof 
(pd->shape->stroke.marker), crc, EINA_FALSE);
+   crc = eina_crc((void*) &pd->shape->stroke.scale, sizeof 
(pd->shape->stroke.scale) * 3, crc, EINA_FALSE); // scale, width, centered
+   crc = eina_crc((void*) &pd->shape->stroke.color, sizeof 
(pd->shape->stroke.color), crc, EINA_FALSE);
+   crc = eina_crc((void*) &pd->shape->stroke.cap, sizeof 
(pd->shape->stroke.cap), crc, EINA_FALSE);
+   crc = eina_crc((void*) &pd->shape->stroke.join, sizeof 
(pd->shape->stroke.join), crc, EINA_FALSE);
+
+   if (pd->shape->fill) crc = _renderer_crc_get(pd->shape->fill, crc);
+   if (pd->shape->stroke.fill) crc = _renderer_crc_get(pd->shape->stroke.fill, 
crc);
+   if (pd->shape->stroke.marker) crc = 
_renderer_crc_get(pd->shape->stroke.marker, crc);
+   if (pd->shape->stroke.dash_length)
+     {
+        crc = eina_crc((void*) pd->shape->stroke.dash, sizeof (Efl_Gfx_Dash) * 
pd->shape->stroke.dash_length, crc, EINA_FALSE);
+     }
+
+   return crc;
+}
 
 #include "ector_renderer_cairo_shape.eo.c"
diff --git a/src/lib/ector/cairo/ector_renderer_cairo_shape.eo 
b/src/lib/ector/cairo/ector_renderer_cairo_shape.eo
index e9d4a17..298935b 100644
--- a/src/lib/ector/cairo/ector_renderer_cairo_shape.eo
+++ b/src/lib/ector/cairo/ector_renderer_cairo_shape.eo
@@ -6,6 +6,7 @@ class Ector.Renderer.Cairo.Shape (Ector.Renderer.Cairo.Base, 
Ector.Renderer.Gene
       Ector.Renderer.Generic.Base.prepare;
       Ector.Renderer.Generic.Base.draw;
       Ector.Renderer.Generic.Base.bounds_get;
+      Ector.Renderer.Generic.Base.crc.get;
       Ector.Renderer.Cairo.Base.fill;
       Eo.Base.constructor;
       Eo.Base.destructor;
diff --git a/src/lib/ector/ector_private.h b/src/lib/ector/ector_private.h
index 31072d2..099542b 100644
--- a/src/lib/ector/ector_private.h
+++ b/src/lib/ector/ector_private.h
@@ -145,4 +145,14 @@ struct _Ector_Renderer_Generic_Shape_Data
    } stroke;
 };
 
+static inline unsigned int
+_renderer_crc_get(Eo *obj, unsigned int crc)
+{
+   unsigned int id;
+
+   eo_do(obj, id = ector_renderer_crc_get());
+   crc = eina_crc((void*) &id, sizeof (id), crc, EINA_FALSE);
+   return crc;
+}
+
 #endif
diff --git a/src/lib/ector/ector_renderer_base.c 
b/src/lib/ector/ector_renderer_base.c
index b4c44c9..4c84eba 100644
--- a/src/lib/ector/ector_renderer_base.c
+++ b/src/lib/ector/ector_renderer_base.c
@@ -135,4 +135,20 @@ _ector_renderer_generic_base_prepare(Eo *obj EINA_UNUSED,
    return EINA_TRUE;
 }
 
+static unsigned int
+_ector_renderer_generic_base_crc_get(Eo *obj EINA_UNUSED,
+                                     Ector_Renderer_Generic_Base_Data *pd)
+{
+   unsigned int crc;
+
+   crc = eina_crc((void*) &pd->color, sizeof(pd->color), 0xffffffff, 
EINA_TRUE);
+   crc = eina_crc((void*) &pd->q, sizeof(pd->q), crc, EINA_FALSE);
+   crc = eina_crc((void*) &pd->origin, sizeof(pd->origin), crc, EINA_FALSE);
+
+   if (pd->m) crc = eina_crc((void*) pd->m, sizeof(Eina_Matrix3), crc, 
EINA_FALSE);
+   if (pd->mask) crc = _renderer_crc_get(pd->mask, crc);
+
+   return crc;
+}
+
 #include "ector_renderer_generic_base.eo.c"
diff --git a/src/lib/ector/ector_renderer_generic_base.eo 
b/src/lib/ector/ector_renderer_generic_base.eo
index 7e0b0c2..80043d9 100644
--- a/src/lib/ector/ector_renderer_generic_base.eo
+++ b/src/lib/ector/ector_renderer_generic_base.eo
@@ -81,6 +81,11 @@ abstract Ector.Renderer.Generic.Base (Eo.Base)
            q: Ector_Quality;
         }
       }
+      @property crc {
+         get {
+            return: uint;
+        }
+      }
       bounds_get {
         params {
            @out r: Eina.Rectangle;
diff --git a/src/lib/ector/software/ector_renderer_software_gradient_linear.c 
b/src/lib/ector/software/ector_renderer_software_gradient_linear.c
index f2ca832..a7ce3ec 100644
--- a/src/lib/ector/software/ector_renderer_software_gradient_linear.c
+++ b/src/lib/ector/software/ector_renderer_software_gradient_linear.c
@@ -108,4 +108,20 @@ 
_ector_renderer_software_gradient_linear_efl_gfx_gradient_base_stop_set(Eo *obj,
    destroy_color_table(pd);
 }
 
+static unsigned int
+_ector_renderer_software_gradient_linear_ector_renderer_generic_base_crc_get(Eo
 *obj, Ector_Renderer_Software_Gradient_Data *pd)
+{
+   unsigned int crc;
+
+   eo_do_super(obj, ECTOR_RENDERER_SOFTWARE_GRADIENT_LINEAR_CLASS,
+               crc = ector_renderer_crc_get());
+
+   crc = eina_crc((void*) pd->gd->s, sizeof (Efl_Gfx_Gradient_Spread), crc, 
EINA_FALSE);
+   if (pd->gd->colors_count)
+     crc = eina_crc((void*) pd->gd->colors, sizeof (Efl_Gfx_Gradient_Stop) * 
pd->gd->colors_count, crc, EINA_FALSE);
+   crc = eina_crc((void*) pd->gld, sizeof 
(Ector_Renderer_Generic_Gradient_Linear_Data), crc, EINA_FALSE);
+
+   return crc;
+}
+
 #include "ector_renderer_software_gradient_linear.eo.c"
diff --git a/src/lib/ector/software/ector_renderer_software_gradient_linear.eo 
b/src/lib/ector/software/ector_renderer_software_gradient_linear.eo
index 32f83df..d028548 100644
--- a/src/lib/ector/software/ector_renderer_software_gradient_linear.eo
+++ b/src/lib/ector/software/ector_renderer_software_gradient_linear.eo
@@ -6,6 +6,7 @@ class Ector.Renderer.Software.Gradient_Linear 
(Ector.Renderer.Software.Base, Ect
    implements {
       Ector.Renderer.Generic.Base.prepare;
       Ector.Renderer.Generic.Base.draw;
+      Ector.Renderer.Generic.Base.crc.get;
       Ector.Renderer.Software.Base.fill;
       Eo.Base.constructor;
       Eo.Base.destructor;
diff --git a/src/lib/ector/software/ector_renderer_software_gradient_radial.c 
b/src/lib/ector/software/ector_renderer_software_gradient_radial.c
index 5b63f95..74a8dab 100644
--- a/src/lib/ector/software/ector_renderer_software_gradient_radial.c
+++ b/src/lib/ector/software/ector_renderer_software_gradient_radial.c
@@ -116,4 +116,20 @@ 
_ector_renderer_software_gradient_radial_efl_gfx_gradient_base_stop_set(Eo *obj,
    destroy_color_table(pd);
 }
 
+static unsigned int
+_ector_renderer_software_gradient_radial_ector_renderer_generic_base_crc_get(Eo
 *obj, Ector_Renderer_Software_Gradient_Data *pd)
+{
+   unsigned int crc;
+
+   eo_do_super(obj, ECTOR_RENDERER_SOFTWARE_GRADIENT_RADIAL_CLASS,
+               crc = ector_renderer_crc_get());
+
+   crc = eina_crc((void*) pd->gd->s, sizeof (Efl_Gfx_Gradient_Spread), crc, 
EINA_FALSE);
+   if (pd->gd->colors_count)
+     crc = eina_crc((void*) pd->gd->colors, sizeof (Efl_Gfx_Gradient_Stop) * 
pd->gd->colors_count, crc, EINA_FALSE);
+   crc = eina_crc((void*) pd->gld, sizeof 
(Ector_Renderer_Generic_Gradient_Radial_Data), crc, EINA_FALSE);
+
+   return crc;
+}
+
 #include "ector_renderer_software_gradient_radial.eo.c"
diff --git a/src/lib/ector/software/ector_renderer_software_gradient_radial.eo 
b/src/lib/ector/software/ector_renderer_software_gradient_radial.eo
index 85625f3..c94bfe4 100644
--- a/src/lib/ector/software/ector_renderer_software_gradient_radial.eo
+++ b/src/lib/ector/software/ector_renderer_software_gradient_radial.eo
@@ -6,6 +6,7 @@ class Ector.Renderer.Software.Gradient_Radial 
(Ector.Renderer.Software.Base, Ect
    implements {
       Ector.Renderer.Generic.Base.prepare;
       Ector.Renderer.Generic.Base.draw;
+      Ector.Renderer.Generic.Base.crc.get;
       Ector.Renderer.Software.Base.fill;
       Eo.Base.constructor;
       Eo.Base.destructor;
diff --git a/src/lib/ector/software/ector_renderer_software_shape.c 
b/src/lib/ector/software/ector_renderer_software_shape.c
index c0cfe77..d659c92 100644
--- a/src/lib/ector/software/ector_renderer_software_shape.c
+++ b/src/lib/ector/software/ector_renderer_software_shape.c
@@ -726,4 +726,29 @@ _ector_renderer_software_shape_eo_base_destructor(Eo *obj, 
Ector_Renderer_Softwa
 }
 
 
+unsigned int
+_ector_renderer_software_shape_ector_renderer_generic_base_crc_get(Eo *obj,
+                                                                   
Ector_Renderer_Software_Shape_Data *pd)
+{
+   unsigned int crc;
+
+   eo_do_super(obj, ECTOR_RENDERER_SOFTWARE_SHAPE_CLASS, crc = 
ector_renderer_crc_get());
+
+   crc = eina_crc((void*) &pd->shape->stroke.marker, sizeof 
(pd->shape->stroke.marker), crc, EINA_FALSE);
+   crc = eina_crc((void*) &pd->shape->stroke.scale, sizeof 
(pd->shape->stroke.scale) * 3, crc, EINA_FALSE); // scale, width, centered
+   crc = eina_crc((void*) &pd->shape->stroke.color, sizeof 
(pd->shape->stroke.color), crc, EINA_FALSE);
+   crc = eina_crc((void*) &pd->shape->stroke.cap, sizeof 
(pd->shape->stroke.cap), crc, EINA_FALSE);
+   crc = eina_crc((void*) &pd->shape->stroke.join, sizeof 
(pd->shape->stroke.join), crc, EINA_FALSE);
+
+   if (pd->shape->fill) crc = _renderer_crc_get(pd->shape->fill, crc);
+   if (pd->shape->stroke.fill) crc = _renderer_crc_get(pd->shape->stroke.fill, 
crc);
+   if (pd->shape->stroke.marker) crc = 
_renderer_crc_get(pd->shape->stroke.marker, crc);
+   if (pd->shape->stroke.dash_length)
+     {
+        crc = eina_crc((void*) pd->shape->stroke.dash, sizeof (Efl_Gfx_Dash) * 
pd->shape->stroke.dash_length, crc, EINA_FALSE);
+     }
+
+   return crc;
+}
+
 #include "ector_renderer_software_shape.eo.c"
diff --git a/src/lib/ector/software/ector_renderer_software_shape.eo 
b/src/lib/ector/software/ector_renderer_software_shape.eo
index 267ef7c..017a9cc 100644
--- a/src/lib/ector/software/ector_renderer_software_shape.eo
+++ b/src/lib/ector/software/ector_renderer_software_shape.eo
@@ -6,6 +6,7 @@ class Ector.Renderer.Software.Shape 
(Ector.Renderer.Software.Base, Ector.Rendere
       Ector.Renderer.Generic.Base.prepare;
       Ector.Renderer.Generic.Base.draw;
       Ector.Renderer.Software.Base.fill;
+      Ector.Renderer.Generic.Base.crc.get;
       Efl.Gfx.Shape.path.set;
       Eo.Base.constructor;
       Eo.Base.destructor;      

-- 


Reply via email to