summaryrefslogtreecommitdiff
path: root/src/lib/ector
diff options
context:
space:
mode:
authorHermet Park <hermetpark@gmail.com>2019-09-11 13:12:08 +0900
committerHermet Park <hermetpark@gmail.com>2019-09-11 13:14:56 +0900
commitdc0056ca936fc014aaf7949ef9fa3cf41c2d6964 (patch)
tree0c94ad95e2a263b3e58653882aa9b1d051dae6a0 /src/lib/ector
parent3d50083f41c2e5dc087ff98ea3af104c70002546 (diff)
downloadefl-dc0056ca936fc014aaf7949ef9fa3cf41c2d6964.tar.gz
ector: removed cairo backend.
For reducing maintainability burden, We drop supporting cairo backend. The default backend is to software implementation from now. It's well maintained so far and works good.x
Diffstat (limited to 'src/lib/ector')
-rw-r--r--src/lib/ector/Ector.h2
-rw-r--r--src/lib/ector/cairo/Ector_Cairo.h55
-rw-r--r--src/lib/ector/cairo/ector_cairo_private.h95
-rw-r--r--src/lib/ector/cairo/ector_cairo_software_surface.c120
-rw-r--r--src/lib/ector/cairo/ector_cairo_software_surface.eo14
-rw-r--r--src/lib/ector/cairo/ector_cairo_surface.c146
-rw-r--r--src/lib/ector/cairo/ector_cairo_surface.eo35
-rw-r--r--src/lib/ector/cairo/ector_renderer_cairo.c229
-rw-r--r--src/lib/ector/cairo/ector_renderer_cairo.eo21
-rw-r--r--src/lib/ector/cairo/ector_renderer_cairo_gradient_linear.c197
-rw-r--r--src/lib/ector/cairo/ector_renderer_cairo_gradient_linear.eo15
-rw-r--r--src/lib/ector/cairo/ector_renderer_cairo_gradient_radial.c220
-rw-r--r--src/lib/ector/cairo/ector_renderer_cairo_gradient_radial.eo15
-rw-r--r--src/lib/ector/cairo/ector_renderer_cairo_shape.c331
-rw-r--r--src/lib/ector/cairo/ector_renderer_cairo_shape.eo16
-rw-r--r--src/lib/ector/cairo/meson.build39
-rw-r--r--src/lib/ector/gl/Ector_GL.h2
-rw-r--r--src/lib/ector/meson.build1
-rw-r--r--src/lib/ector/software/ector_software_buffer.c2
19 files changed, 2 insertions, 1553 deletions
diff --git a/src/lib/ector/Ector.h b/src/lib/ector/Ector.h
index 01a71d6e6e..961a42c150 100644
--- a/src/lib/ector/Ector.h
+++ b/src/lib/ector/Ector.h
@@ -52,7 +52,7 @@ extern "C" {
*
* Ector is a retained mode drawing library designed to work
* for and with a scenegraph such as Evas, which supports several
- * types of rendering surface including software, cairo, and gl.
+ * types of rendering surface including software and gl.
*
* @section ector_main_compiling How to compile the library
*
diff --git a/src/lib/ector/cairo/Ector_Cairo.h b/src/lib/ector/cairo/Ector_Cairo.h
deleted file mode 100644
index 99eeafac9a..0000000000
--- a/src/lib/ector/cairo/Ector_Cairo.h
+++ /dev/null
@@ -1,55 +0,0 @@
-#ifndef ECTOR_CAIRO_H_
-# define ECTOR_CAIRO_H_
-
-#include <Ector.h>
-
-#ifdef EAPI
-# undef EAPI
-#endif
-
-#ifdef _WIN32
-# ifdef EFL_BUILD
-# ifdef DLL_EXPORT
-# define EAPI __declspec(dllexport)
-# else
-# define EAPI
-# endif
-# else
-# define EAPI __declspec(dllimport)
-# endif
-#else
-# ifdef __GNUC__
-# if __GNUC__ >= 4
-# define EAPI __attribute__ ((visibility("default")))
-# else
-# define EAPI
-# endif
-# else
-# define EAPI
-# endif
-#endif
-
-#ifdef EFL_BETA_API_SUPPORT
-
-#ifndef _ECTOR_CAIRO_SURFACE_EO_CLASS_TYPE
-#define _ECTOR_CAIRO_SURFACE_EO_CLASS_TYPE
-
-typedef Eo Ector_Cairo_Surface;
-
-#endif
-
-typedef struct _cairo_t cairo_t;
-
-#include "cairo/ector_cairo_surface.eo.h"
-#include "cairo/ector_cairo_software_surface.eo.h"
-#include "cairo/ector_renderer_cairo.eo.h"
-#include "cairo/ector_renderer_cairo_shape.eo.h"
-#include "cairo/ector_renderer_cairo_gradient_linear.eo.h"
-#include "cairo/ector_renderer_cairo_gradient_radial.eo.h"
-
-#endif
-
-#undef EAPI
-#define EAPI
-
-#endif
diff --git a/src/lib/ector/cairo/ector_cairo_private.h b/src/lib/ector/cairo/ector_cairo_private.h
deleted file mode 100644
index a7a6d7661f..0000000000
--- a/src/lib/ector/cairo/ector_cairo_private.h
+++ /dev/null
@@ -1,95 +0,0 @@
-#ifndef ECTOR_CAIRO_PRIVATE_H_
-# define ECTOR_CAIRO_PRIVATE_H_
-
-#include "draw.h"
-
-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_Data Ector_Renderer_Cairo_Data;
-
-struct _Ector_Cairo_Surface_Data
-{
- cairo_t *cairo;
- struct {
- double x, y;
- } current;
-};
-
-struct _Ector_Renderer_Cairo_Data
-{
- Ector_Cairo_Surface_Data *parent;
- Ector_Renderer_Data *generic;
-
- cairo_matrix_t *m;
-};
-
-typedef enum _cairo_extend {
- CAIRO_EXTEND_NONE,
- CAIRO_EXTEND_REPEAT,
- CAIRO_EXTEND_REFLECT,
- CAIRO_EXTEND_PAD
-} cairo_extend_t;
-
-static inline cairo_extend_t
-_ector_cairo_extent_get(Efl_Gfx_Gradient_Spread s)
-{
- switch (s)
- {
- case EFL_GFX_GRADIENT_SPREAD_PAD:
- return CAIRO_EXTEND_PAD;
- case EFL_GFX_GRADIENT_SPREAD_REFLECT:
- return CAIRO_EXTEND_REFLECT;
- case EFL_GFX_GRADIENT_SPREAD_REPEAT:
- return CAIRO_EXTEND_REPEAT;
- default:
- return CAIRO_EXTEND_NONE;
- }
-}
-
-#define CHECK_CAIRO(Parent) (!(Parent && Parent->cairo))
-
-#define USE(Obj, Sym, Error) \
- if (!Sym) Sym = _ector_cairo_symbol_get(Obj, #Sym); \
- if (!Sym) return Error;
-
-static inline void *
-_ector_cairo_symbol_get(Ector_Renderer_Data *base,
- const char *name)
-{
- void *sym;
-
- sym = ector_cairo_surface_symbol_get(base->surface, name);
- return sym;
-}
-
-extern void (*cairo_pattern_add_color_stop_rgba)(cairo_pattern_t *pattern, double offset,
- double red, double green, double blue, double alpha);
-
-static inline void
-_ector_renderer_cairo_gradient_prepare(cairo_pattern_t *pat,
- Ector_Renderer_Gradient_Data *src,
- unsigned int mul_col)
-{
- unsigned int i;
-
- for (i = 0; i < src->colors_count; i++)
- {
- int r,g,b,a;
-
- r = ((src->colors[i].r * R_VAL(&mul_col)) >> 8);
- g = ((src->colors[i].g * G_VAL(&mul_col)) >> 8);
- b = ((src->colors[i].b * B_VAL(&mul_col)) >> 8);
- a = ((src->colors[i].a * A_VAL(&mul_col)) >> 8);
- ector_color_argb_unpremul(a, &r, &g, &b);
- cairo_pattern_add_color_stop_rgba(pat, src->colors[i].offset, r/255.0, g/255.0, b/255.0, a/255.0);
- }
-}
-
-#endif
diff --git a/src/lib/ector/cairo/ector_cairo_software_surface.c b/src/lib/ector/cairo/ector_cairo_software_surface.c
deleted file mode 100644
index 96bf1c1081..0000000000
--- a/src/lib/ector/cairo/ector_cairo_software_surface.c
+++ /dev/null
@@ -1,120 +0,0 @@
-#ifdef HAVE_CONFIG_H
-#include "config.h" /* so that EAPI in Evas.h is correctly defined */
-#endif
-
-#include "Ector_Cairo.h"
-#include "ector_private.h"
-#include <software/Ector_Software.h>
-#include "ector_cairo_software_surface.eo.h"
-
-#define MY_CLASS ECTOR_CAIRO_SOFTWARE_SURFACE_CLASS
-
-#define USE(Obj, Sym, Error) \
- if (!Sym) Sym = _ector_cairo_symbol_get(Obj, #Sym); \
- if (!Sym) return Error;
-
-static inline void *
-_ector_cairo_symbol_get(Eo *ector_surface, const char *name)
-{
- void *sym;
-
- sym = ector_cairo_surface_symbol_get(ector_surface, name);
- return sym;
-}
-
-typedef struct _cairo_surface_t cairo_surface_t;
-typedef enum {
- CAIRO_FORMAT_INVALID = -1,
- CAIRO_FORMAT_ARGB32 = 0,
- CAIRO_FORMAT_RGB24 = 1,
- CAIRO_FORMAT_A8 = 2,
- CAIRO_FORMAT_A1 = 3,
- CAIRO_FORMAT_RGB16_565 = 4,
- CAIRO_FORMAT_RGB30 = 5
-} cairo_format_t;
-
-static cairo_surface_t *(*cairo_image_surface_create_for_data)(unsigned char *data,
- cairo_format_t format,
- int width,
- int height,
- int stride) = NULL;
-static void (*cairo_surface_destroy)(cairo_surface_t *surface) = NULL;
-static cairo_t *(*cairo_create)(cairo_surface_t *target) = NULL;
-static void (*cairo_destroy)(cairo_t *cr) = NULL;
-
-typedef struct _Ector_Cairo_Software_Surface_Data Ector_Cairo_Software_Surface_Data;
-struct _Ector_Cairo_Software_Surface_Data
-{
- cairo_surface_t *surface;
- Ector_Software_Buffer_Base_Data *base;
-};
-
-EOLIAN static Eina_Bool
-_ector_cairo_software_surface_ector_buffer_pixels_set(Eo *obj, Ector_Cairo_Software_Surface_Data *pd,
- void *pixels, int width, int height, int stride,
- Efl_Gfx_Colorspace cspace, Eina_Bool writable)
-{
- cairo_t *ctx = NULL;
- Eina_Bool ok = EINA_FALSE;
-
- if ((cspace != EFL_GFX_COLORSPACE_ARGB8888) || !writable)
- {
- ERR("Unsupported surface type!");
- return EINA_FALSE;
- }
-
- USE(obj, cairo_image_surface_create_for_data, EINA_FALSE);
- USE(obj, cairo_surface_destroy, EINA_FALSE);
- USE(obj, cairo_create, EINA_FALSE);
- USE(obj, cairo_destroy, EINA_FALSE);
-
- if (pd->surface)
- cairo_surface_destroy(pd->surface);
- pd->surface = NULL;
-
- ok = ector_buffer_pixels_set(efl_super(obj, MY_CLASS), pixels, width, height, stride, cspace, writable);
-
- if (ok && pixels)
- {
- pd->surface = cairo_image_surface_create_for_data(pixels,
- CAIRO_FORMAT_ARGB32,
- width, height, pd->base->stride);
- if (!pd->surface) goto end;
-
- ctx = cairo_create(pd->surface);
- }
-
- end:
- /* evas_common_cpu_end_opt(); // do we need this? */
- ector_cairo_surface_context_set(obj, ctx);
- return ok;
-}
-
-void
-_ector_cairo_software_surface_surface_get(Eo *obj EINA_UNUSED, Ector_Cairo_Software_Surface_Data *pd, void **pixels, unsigned int *width, unsigned int *height)
-{
- if (pixels) *pixels = pd->base->pixels.u8;
- if (width) *width = pd->base->generic->w;
- if (height) *height = pd->base->generic->h;
-}
-
-static Efl_Object *
-_ector_cairo_software_surface_efl_object_constructor(Eo *obj, Ector_Cairo_Software_Surface_Data *pd)
-{
- obj = efl_constructor(efl_super(obj, MY_CLASS));
-
- if (!obj) return NULL;
- pd->base = efl_data_ref(obj, ECTOR_SOFTWARE_BUFFER_BASE_MIXIN);
- pd->base->generic = efl_data_ref(obj, ECTOR_BUFFER_MIXIN);
- pd->base->generic->eo = obj;
- return obj;
-}
-
-EOLIAN static void
-_ector_cairo_software_surface_efl_object_destructor(Eo *obj, Ector_Cairo_Software_Surface_Data *pd)
-{
- efl_data_unref(obj, pd->base);
- efl_destructor(efl_super(obj, MY_CLASS));
-}
-
-#include "ector_cairo_software_surface.eo.c"
diff --git a/src/lib/ector/cairo/ector_cairo_software_surface.eo b/src/lib/ector/cairo/ector_cairo_software_surface.eo
deleted file mode 100644
index 9cd23e5cf5..0000000000
--- a/src/lib/ector/cairo/ector_cairo_software_surface.eo
+++ /dev/null
@@ -1,14 +0,0 @@
-class @beta Ector.Cairo.Software.Surface extends Ector.Cairo.Surface implements Ector.Software.Buffer.Base
-{
- [[Ector surface on a cairo software backend
-
- Used to render ector content into a cairo software backend.
- ]]
- c_prefix: ector_cairo_software_surface;
- methods {}
- implements {
- Ector.Buffer.pixels_set;
- Efl.Object.constructor;
- Efl.Object.destructor;
- }
-}
diff --git a/src/lib/ector/cairo/ector_cairo_surface.c b/src/lib/ector/cairo/ector_cairo_surface.c
deleted file mode 100644
index 28d904499e..0000000000
--- a/src/lib/ector/cairo/ector_cairo_surface.c
+++ /dev/null
@@ -1,146 +0,0 @@
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <Eina.h>
-#include <Ector.h>
-#include <cairo/Ector_Cairo.h>
-
-#include "ector_private.h"
-#include "ector_cairo_private.h"
-
-static unsigned int _cairo_count = 0;
-static Eina_Module *_cairo_so = NULL;
-
-static void *
-_ector_cairo_surface_symbol_get(Eo *obj EINA_UNUSED,
- Ector_Cairo_Surface_Data *pd EINA_UNUSED,
- const char *name)
-{
- if (!_cairo_so)
- {
-#define LOAD(x) \
- if (!_cairo_so) \
- { \
- _cairo_so = eina_module_new(x); \
- if (_cairo_so && \
- !eina_module_load(_cairo_so)) \
- { \
- eina_module_free(_cairo_so); \
- _cairo_so = NULL; \
- } \
- }
-#if defined(_WIN32) || defined(__CYGWIN__)
- LOAD("libcairo-2.dll");
- LOAD("libcairo.dll");
-#elif defined(__APPLE__) && defined(__MACH__)
- LOAD("libcairo.dylib");
- LOAD("libcairo.so");
-#else
- LOAD("libcairo.so");
-#endif
-
-#undef LOAD
- }
-
- if (!_cairo_so)
- {
- ERR("Couldn't find cairo library. Please make sure that your system can locate it.");
- return NULL;
- }
-
- return eina_module_symbol_get(_cairo_so, name);
-}
-
-#undef USE
-#define USE(Obj, Sym, Error) \
- if (!Sym) Sym = _ector_cairo_surface_symbol_get(Obj, NULL, #Sym); \
- if (!Sym) return Error;
-
-static Ector_Renderer *
-_ector_cairo_surface_ector_surface_renderer_factory_new(Eo *obj,
- Ector_Cairo_Surface_Data *pd EINA_UNUSED,
- const Efl_Class *type)
-{
- if (type == ECTOR_RENDERER_SHAPE_MIXIN)
- return efl_add_ref(ECTOR_RENDERER_CAIRO_SHAPE_CLASS, NULL, ector_renderer_surface_set(efl_added, obj));
- else if (type == ECTOR_RENDERER_GRADIENT_LINEAR_MIXIN)
- return efl_add_ref(ECTOR_RENDERER_CAIRO_GRADIENT_LINEAR_CLASS, NULL, ector_renderer_surface_set(efl_added, obj));
- else if (type == ECTOR_RENDERER_GRADIENT_RADIAL_MIXIN)
- return efl_add_ref(ECTOR_RENDERER_CAIRO_GRADIENT_RADIAL_CLASS, NULL, ector_renderer_surface_set(efl_added, obj));
-
- ERR("Couldn't find class for type: %s\n", efl_class_name_get(type));
- return NULL;
-}
-
-typedef struct _cairo_surface_t cairo_surface_t;
-
-static void (*cairo_destroy)(cairo_t *cr) = NULL;
-static cairo_surface_t *(*cairo_image_surface_create)(int format,
- int width,
- int height) = NULL;
-static cairo_t *(*cairo_create)(cairo_surface_t *target) = NULL;
-
-static cairo_surface_t *internal = NULL;
-
-static void
-_ector_cairo_surface_context_set(Eo *obj EINA_UNUSED,
- Ector_Cairo_Surface_Data *pd,
- cairo_t *ctx)
-{
- if (pd->cairo) cairo_destroy(pd->cairo);
- if (!ctx)
- {
- if (!internal) internal = cairo_image_surface_create(0, 1, 1);
- ctx = cairo_create(internal);
- }
- pd->current.x = pd->current.y = 0;
- pd->cairo = ctx;
-}
-
-static cairo_t *
-_ector_cairo_surface_context_get(const Eo *obj EINA_UNUSED,
- Ector_Cairo_Surface_Data *pd)
-{
- return pd->cairo;
-}
-
-static void
-_ector_cairo_surface_ector_surface_reference_point_set(Eo *obj EINA_UNUSED,
- Ector_Cairo_Surface_Data *pd,
- int x, int y)
-{
- pd->current.x = x;
- pd->current.y = y;
-}
-
-static Eo *
-_ector_cairo_surface_efl_object_constructor(Eo *obj,
- Ector_Cairo_Surface_Data *pd)
-{
- USE(obj, cairo_destroy, NULL);
- USE(obj, cairo_image_surface_create, NULL);
- USE(obj, cairo_create, NULL);
-
- obj = efl_constructor(efl_super(obj, ECTOR_CAIRO_SURFACE_CLASS));
- if (!obj) return NULL;
-
- _cairo_count++;
-
- _ector_cairo_surface_context_set(obj, pd, NULL);
-
- return obj;
-}
-
-static void
-_ector_cairo_surface_efl_object_destructor(Eo *obj EINA_UNUSED,
- Ector_Cairo_Surface_Data *pd EINA_UNUSED)
-{
- efl_destructor(efl_super(obj, ECTOR_CAIRO_SURFACE_CLASS));
-
- if (--_cairo_count) return ;
- if (_cairo_so) eina_module_free(_cairo_so);
- _cairo_so = NULL;
-}
-
-#include "ector_cairo_surface.eo.c"
diff --git a/src/lib/ector/cairo/ector_cairo_surface.eo b/src/lib/ector/cairo/ector_cairo_surface.eo
deleted file mode 100644
index dabd214147..0000000000
--- a/src/lib/ector/cairo/ector_cairo_surface.eo
+++ /dev/null
@@ -1,35 +0,0 @@
-struct @extern cairo_t; [[cairo_t type]]
-
-class @beta Ector.Cairo.Surface extends Efl.Object implements Ector.Surface
-{
- [[Ector surface on a cairo backend
-
- Used to render ector content into a cairo backend.
- ]]
- c_prefix: ector_cairo_surface;
- methods {
- @property context {
- [[Cairo context]]
- set {
- }
- get {
- }
- values {
- ctx: ptr(cairo_t); [[Cairo context]]
- }
- }
- symbol_get {
- [[Lookup symbal name in cairo lib]]
- return: void_ptr @no_unused; [[Pointer to cairo lib with this symbol]]
- params {
- @in name: string; [[Symbol name]]
- }
- }
- }
- implements {
- Ector.Surface.renderer_factory_new;
- Ector.Surface.reference_point { set; }
- Efl.Object.destructor;
- Efl.Object.constructor;
- }
-}
diff --git a/src/lib/ector/cairo/ector_renderer_cairo.c b/src/lib/ector/cairo/ector_renderer_cairo.c
deleted file mode 100644
index ddcca419d8..0000000000
--- a/src/lib/ector/cairo/ector_renderer_cairo.c
+++ /dev/null
@@ -1,229 +0,0 @@
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <math.h>
-#include <float.h>
-
-#include <Eina.h>
-#include <Ector.h>
-#include <cairo/Ector_Cairo.h>
-
-#include "ector_private.h"
-#include "ector_cairo_private.h"
-
-typedef enum {
- CAIRO_OPERATOR_CLEAR,
-
- CAIRO_OPERATOR_SOURCE,
- CAIRO_OPERATOR_OVER,
- CAIRO_OPERATOR_IN,
- CAIRO_OPERATOR_OUT,
- CAIRO_OPERATOR_ATOP,
-
- CAIRO_OPERATOR_DEST,
- CAIRO_OPERATOR_DEST_OVER,
- CAIRO_OPERATOR_DEST_IN,
- CAIRO_OPERATOR_DEST_OUT,
- CAIRO_OPERATOR_DEST_ATOP,
-
- CAIRO_OPERATOR_XOR,
- CAIRO_OPERATOR_ADD,
- CAIRO_OPERATOR_SATURATE,
-
- CAIRO_OPERATOR_MULTIPLY,
- CAIRO_OPERATOR_SCREEN,
- CAIRO_OPERATOR_OVERLAY,
- CAIRO_OPERATOR_DARKEN,
- CAIRO_OPERATOR_LIGHTEN,
- CAIRO_OPERATOR_COLOR_DODGE,
- CAIRO_OPERATOR_COLOR_BURN,
- CAIRO_OPERATOR_HARD_LIGHT,
- CAIRO_OPERATOR_SOFT_LIGHT,
- CAIRO_OPERATOR_DIFFERENCE,
- CAIRO_OPERATOR_EXCLUSION,
- CAIRO_OPERATOR_HSL_HUE,
- CAIRO_OPERATOR_HSL_SATURATION,
- CAIRO_OPERATOR_HSL_COLOR,
- CAIRO_OPERATOR_HSL_LUMINOSITY
-} cairo_operator_t;
-
-static void (*cairo_translate)(cairo_t *cr, double tx, double ty) = NULL;
-static void (*cairo_matrix_init)(cairo_matrix_t *matrix,
- double xx, double yx,
- double xy, double yy,
- double x0, double y0) = NULL;
-static void (*cairo_transform)(cairo_t *cr, const cairo_matrix_t *matrix) = NULL;
-static void (*cairo_set_source_rgba)(cairo_t *cr,
- double red, double green, double blue,
- double alpha) = NULL;
-static void (*cairo_set_operator)(cairo_t *cr, cairo_operator_t op) = NULL;
-static void (*cairo_matrix_init_identity)(cairo_matrix_t *matrix) = NULL;
-
-static void (*cairo_new_path)(cairo_t *cr) = NULL;
-static void (*cairo_rectangle)(cairo_t *cr, double x, double y, double width, double height) = NULL;
-static void (*cairo_clip)(cairo_t *cr) = NULL;
-static void (*cairo_device_to_user)(cairo_t *cr, double *x, double *y) = NULL;
-
-// This routine is shared for all gradient types to use
-void (*cairo_pattern_add_color_stop_rgba)(cairo_pattern_t *pattern, double offset,
- double red, double green, double blue, double alpha) = NULL;
-
-static cairo_matrix_t identity;
-
-// Cairo needs unpremultiplied color, so force unpremul here
-void
-_ector_renderer_cairo_ector_renderer_color_set(Eo *obj EINA_UNUSED,
- Ector_Renderer_Cairo_Data *pd,
- int r, int g, int b, int a)
-{
- pd->generic->color.r = r;
- pd->generic->color.g = g;
- pd->generic->color.b = b;
- pd->generic->color.a = a;
-}
-
-void
-_ector_renderer_cairo_ector_renderer_color_get(const Eo *obj EINA_UNUSED,
- Ector_Renderer_Cairo_Data *pd,
- int *r, int *g, int *b, int *a)
-{
- if (r) *r = pd->generic->color.r;
- if (g) *g = pd->generic->color.g;
- if (b) *b = pd->generic->color.b;
- if (a) *a = pd->generic->color.a;
-}
-
-static Eina_Bool
-_ector_renderer_cairo_ector_renderer_prepare(Eo *obj, Ector_Renderer_Cairo_Data *pd)
-{
- if (!pd->parent)
- {
- pd->parent = efl_data_xref(pd->generic->surface, ECTOR_CAIRO_SURFACE_CLASS, obj);
- }
- if (pd->generic->m)
- {
- if (!pd->m) pd->m = malloc(sizeof (cairo_matrix_t));
- cairo_matrix_init(pd->m,
- pd->generic->m->xx, pd->generic->m->yx,
- pd->generic->m->xy, pd->generic->m->yy,
- pd->generic->m->xz, pd->generic->m->yz);
- }
- else
- {
- free(pd->m);
- pd->m = NULL;
- }
-
- return EINA_TRUE;
-}
-
-static Eina_Bool
-_ector_renderer_cairo_ector_renderer_draw(Eo *obj EINA_UNUSED,
- Ector_Renderer_Cairo_Data *pd,
- Efl_Gfx_Render_Op op,
- Eina_Array *clips EINA_UNUSED,
- unsigned int mul_col)
-{
- int r, g, b, a;
- cairo_operator_t cop;
- double cx, cy;
-
- switch (op)
- {
- case EFL_GFX_RENDER_OP_BLEND:
- cop = CAIRO_OPERATOR_OVER;
- break;
- case EFL_GFX_RENDER_OP_COPY:
- default:
- cop = CAIRO_OPERATOR_SOURCE;
- break;
- }
-
- r = ((pd->generic->color.r * R_VAL(&mul_col)) >> 8);
- g = ((pd->generic->color.g * G_VAL(&mul_col)) >> 8);
- b = ((pd->generic->color.b * B_VAL(&mul_col)) >> 8);
- a = ((pd->generic->color.a * A_VAL(&mul_col)) >> 8);
- ector_color_argb_unpremul(a, &r, &g, &b);
-
- cairo_set_operator(pd->parent->cairo, cop);
-
- if (clips)
- {
- int clip_count = eina_array_count(clips);
- int i=0;
- for (; i < clip_count ; i++)
- {
- Eina_Rectangle *clip = (Eina_Rectangle *)eina_array_data_get(clips, i);
- double x = (double)clip->x;
- double y = (double)clip->y;
-
- cairo_new_path(pd->parent->cairo);
- cairo_device_to_user(pd->parent->cairo, &x, &y);
- cairo_rectangle(pd->parent->cairo, x, y, clip->w, clip->h);
- }
- cairo_clip(pd->parent->cairo);
- }
-
- cairo_transform(pd->parent->cairo, &identity);
- cx = pd->generic->origin.x + pd->parent->current.x;
- cy = pd->generic->origin.y + pd->parent->current.y;
-
- cairo_translate(pd->parent->cairo, cx, cy);
-
- if (pd->m) cairo_transform(pd->parent->cairo, pd->m);
- else cairo_transform(pd->parent->cairo, &identity);
-
- cairo_set_source_rgba(pd->parent->cairo, r/255.0, g/255.0, b/255.0, a/255.0);
-
- return EINA_TRUE;
-}
-
-static Eo *
-_ector_renderer_cairo_efl_object_constructor(Eo *obj, Ector_Renderer_Cairo_Data *pd EINA_UNUSED)
-{
- obj = efl_constructor(efl_super(obj, ECTOR_RENDERER_CAIRO_CLASS));
- if (!obj) return NULL;
-
- pd->generic = efl_data_xref(obj, ECTOR_RENDERER_CLASS, obj);
-
- return obj;
-}
-
-static Efl_Object *
-_ector_renderer_cairo_efl_object_finalize(Eo *obj, Ector_Renderer_Cairo_Data *pd)
-{
- obj = efl_finalize(efl_super(obj, ECTOR_RENDERER_CAIRO_CLASS));
- if (!obj) return NULL;
-
- USE(pd->generic, cairo_matrix_init, NULL);
- USE(pd->generic, cairo_translate, NULL);
- USE(pd->generic, cairo_set_source_rgba, NULL);
- USE(pd->generic, cairo_transform, NULL);
- USE(pd->generic, cairo_set_operator, NULL);
- USE(pd->generic, cairo_new_path, NULL);
- USE(pd->generic, cairo_rectangle, NULL);
- USE(pd->generic, cairo_clip, NULL);
- USE(pd->generic, cairo_device_to_user, NULL);
- USE(pd->generic, cairo_matrix_init_identity, NULL);
-
- cairo_matrix_init_identity(&identity);
-
- return obj;
-}
-
-static void
-_ector_renderer_cairo_efl_object_destructor(Eo *obj, Ector_Renderer_Cairo_Data *pd)
-{
- Ector_Renderer_Data *base;
-
- base = efl_data_scope_get(obj, ECTOR_RENDERER_CLASS);
- efl_data_xunref(base->surface, pd->parent, obj);
- efl_data_xunref(obj, pd->generic, obj);
-
- free(pd->m);
-
- efl_destructor(efl_super(obj, ECTOR_RENDERER_CAIRO_CLASS));
-}
-
-#include "ector_renderer_cairo.eo.c"
diff --git a/src/lib/ector/cairo/ector_renderer_cairo.eo b/src/lib/ector/cairo/ector_renderer_cairo.eo
deleted file mode 100644
index 3f100b1ef1..0000000000
--- a/src/lib/ector/cairo/ector_renderer_cairo.eo
+++ /dev/null
@@ -1,21 +0,0 @@
-abstract @beta Ector.Renderer.Cairo extends Ector.Renderer
-{
- [[Ector cairo renderer abstract class]]
- methods {
- op_fill @pure_virtual {
- [[Fill operation]]
- return: bool; [[$true on success, $false otherwise]]
- params {
- @in mul_col: uint; [[Premultiplied color]]
- }
- }
- }
- implements {
- Ector.Renderer.prepare;
- Ector.Renderer.draw;
- Ector.Renderer.color { get; set; }
- Efl.Object.constructor;
- Efl.Object.finalize;
- Efl.Object.destructor;
- }
-}
diff --git a/src/lib/ector/cairo/ector_renderer_cairo_gradient_linear.c b/src/lib/ector/cairo/ector_renderer_cairo_gradient_linear.c
deleted file mode 100644
index 598e625a8c..0000000000
--- a/src/lib/ector/cairo/ector_renderer_cairo_gradient_linear.c
+++ /dev/null
@@ -1,197 +0,0 @@
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <Eina.h>
-#include <Ector.h>
-#include <cairo/Ector_Cairo.h>
-
-#include "ector_private.h"
-#include "ector_cairo_private.h"
-
-static cairo_pattern_t *(*cairo_pattern_create_linear)(double x0, double y0,
- double x1, double y1) = NULL;
-static void (*cairo_set_source)(cairo_t *cr, cairo_pattern_t *source) = NULL;
-static void (*cairo_fill)(cairo_t *cr) = NULL;
-static void (*cairo_rectangle)(cairo_t *cr,
- double x, double y,
- double width, double height) = NULL;
-static void (*cairo_pattern_destroy)(cairo_pattern_t *pattern) = NULL;
-
-static void (*cairo_pattern_set_extend)(cairo_pattern_t *pattern, cairo_extend_t extend) = NULL;
-
-typedef struct _Ector_Renderer_Cairo_Gradient_Linear_Data Ector_Renderer_Cairo_Gradient_Linear_Data;
-struct _Ector_Renderer_Cairo_Gradient_Linear_Data
-{
- Ector_Cairo_Surface_Data *parent;
-};
-
-static cairo_pattern_t *
-_ector_renderer_cairo_gradient_linear_prepare(Eo *obj EINA_UNUSED,
- Ector_Renderer_Gradient_Linear_Data *gld,
- Ector_Renderer_Gradient_Data *gd,
- unsigned int mul_col)
-{
- cairo_pattern_t *pat;
-
- pat = cairo_pattern_create_linear(gld->start.x, gld->start.y,
- gld->end.x, gld->end.y);
- if (!pat) return NULL;
- _ector_renderer_cairo_gradient_prepare(pat, gd, mul_col);
-
- cairo_pattern_set_extend(pat, _ector_cairo_extent_get(gd->s));
-
- return pat;
-}
-
-static Eina_Bool
-_ector_renderer_cairo_gradient_linear_ector_renderer_prepare(Eo *obj,
- Ector_Renderer_Cairo_Gradient_Linear_Data *pd)
-{
- ector_renderer_prepare(efl_super(obj, ECTOR_RENDERER_CAIRO_GRADIENT_LINEAR_CLASS));
-
- if (!pd->parent)
- {
- Ector_Renderer_Data *base;
-
- base = efl_data_scope_get(obj, ECTOR_RENDERER_CLASS);
- pd->parent = efl_data_xref(base->surface, ECTOR_CAIRO_SURFACE_CLASS, obj);
- }
-
- return EINA_FALSE;
-}
-
-static Eina_Bool
-_ector_renderer_cairo_gradient_linear_ector_renderer_draw(Eo *obj,
- Ector_Renderer_Cairo_Gradient_Linear_Data *pd,
- Efl_Gfx_Render_Op op, Eina_Array *clips, unsigned int mul_col)
-{
- Ector_Renderer_Gradient_Linear_Data *gld;
- Ector_Renderer_Gradient_Data *gd;
- cairo_pattern_t *pat;
-
- // FIXME: don't ignore clipping !
- gld = efl_data_scope_get(obj, ECTOR_RENDERER_GRADIENT_LINEAR_MIXIN);
- gd = efl_data_scope_get(obj, ECTOR_RENDERER_GRADIENT_MIXIN);
- if (!gd || !gld) return EINA_FALSE;
-
- pat = _ector_renderer_cairo_gradient_linear_prepare(obj, gld, gd, mul_col);
- if (!pat) return EINA_FALSE;
-
- ector_renderer_draw(efl_super(obj, ECTOR_RENDERER_CAIRO_GRADIENT_LINEAR_CLASS), op, clips, mul_col);
-
- cairo_rectangle(pd->parent->cairo, gld->start.x, gld->start.y,
- gld->end.x - gld->start.x,
- gld->end.y - gld->start.y);
- cairo_set_source(pd->parent->cairo, pat);
- cairo_fill(pd->parent->cairo);
- cairo_pattern_destroy(pat);
-
- return EINA_TRUE;
-}
-
-static Eina_Bool
-_ector_renderer_cairo_gradient_linear_ector_renderer_cairo_op_fill(Eo *obj,
- Ector_Renderer_Cairo_Gradient_Linear_Data *pd,
- unsigned int mul_col)
-{
- Ector_Renderer_Gradient_Linear_Data *gld;
- Ector_Renderer_Gradient_Data *gd;
- cairo_pattern_t *pat;
-
- gld = efl_data_scope_get(obj, ECTOR_RENDERER_GRADIENT_LINEAR_MIXIN);
- gd = efl_data_scope_get(obj, ECTOR_RENDERER_GRADIENT_MIXIN);
- if (!gd || !gld) return EINA_FALSE;
-
- pat = _ector_renderer_cairo_gradient_linear_prepare(obj, gld, gd, mul_col);
- if (!pat) return EINA_FALSE;
-
- cairo_set_source(pd->parent->cairo, pat);
- cairo_pattern_destroy(pat);
-
- return EINA_TRUE;
-}
-
-static void
-_ector_renderer_cairo_gradient_linear_efl_gfx_path_bounds_get(const Eo *obj,
- Ector_Renderer_Cairo_Gradient_Linear_Data *pd EINA_UNUSED,
- Eina_Rect *r)
-{
- Ector_Renderer_Gradient_Linear_Data *gld;
- Ector_Renderer_Cairo_Data *bd;
-
- gld = efl_data_scope_get(obj, ECTOR_RENDERER_GRADIENT_RADIAL_MIXIN);
- bd = efl_data_scope_get(obj, ECTOR_RENDERER_CAIRO_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.y);
-}
-
-static Efl_Object *
-_ector_renderer_cairo_gradient_linear_efl_object_finalize(Eo *obj, Ector_Renderer_Cairo_Gradient_Linear_Data *pd EINA_UNUSED)
-{
- Ector_Renderer_Data *base;
-
- obj = efl_finalize(efl_super(obj, ECTOR_RENDERER_CAIRO_GRADIENT_LINEAR_CLASS));
- if (!obj) return NULL;
-
- base = efl_data_scope_get(obj, ECTOR_RENDERER_CLASS);
-
- USE(base, cairo_set_source, NULL);
- USE(base, cairo_pattern_destroy, NULL);
- USE(base, cairo_rectangle, NULL);
- USE(base, cairo_fill, NULL);
- USE(base, cairo_pattern_destroy, NULL);
- USE(base, cairo_set_source, NULL);
- USE(base, cairo_pattern_set_extend, NULL);
- USE(base, cairo_pattern_create_linear, NULL);
- USE(base, cairo_pattern_add_color_stop_rgba, NULL);
-
- return obj;
-}
-
-static void
-_ector_renderer_cairo_gradient_linear_efl_object_destructor(Eo *obj,
- Ector_Renderer_Cairo_Gradient_Linear_Data *pd)
-{
- Ector_Renderer_Data *base;
-
- base = efl_data_scope_get(obj, ECTOR_RENDERER_CLASS);
- efl_data_xunref(base->surface, pd->parent, obj);
-
- efl_destructor(efl_super(obj, ECTOR_RENDERER_CAIRO_GRADIENT_LINEAR_CLASS));
-}
-
-static void
-_ector_renderer_cairo_gradient_linear_efl_gfx_gradient_stop_set(Eo *obj,
- Ector_Renderer_Cairo_Gradient_Linear_Data *pd EINA_UNUSED,
- const Efl_Gfx_Gradient_Stop *colors,
- unsigned int length)
-{
- efl_gfx_gradient_stop_set(efl_super(obj, ECTOR_RENDERER_CAIRO_GRADIENT_LINEAR_CLASS), colors, length);
-}
-
-static unsigned int
-_ector_renderer_cairo_gradient_linear_ector_renderer_crc_get(const Eo *obj, Ector_Renderer_Cairo_Gradient_Linear_Data *pd EINA_UNUSED)
-{
- Ector_Renderer_Gradient_Linear_Data *gld;
- Ector_Renderer_Gradient_Data *gd;
- unsigned int crc;
-
- crc = ector_renderer_crc_get(efl_super(obj, ECTOR_RENDERER_CAIRO_GRADIENT_LINEAR_CLASS));
-
- gld = efl_data_scope_get(obj, ECTOR_RENDERER_GRADIENT_LINEAR_MIXIN);
- gd = efl_data_scope_get(obj, ECTOR_RENDERER_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_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
deleted file mode 100644
index c6f2c4fe8d..0000000000
--- a/src/lib/ector/cairo/ector_renderer_cairo_gradient_linear.eo
+++ /dev/null
@@ -1,15 +0,0 @@
-class @beta Ector.Renderer.Cairo.Gradient.Linear extends Ector.Renderer.Cairo implements Ector.Renderer.Gradient, Ector.Renderer.Gradient.Linear, Efl.Gfx.Path
-{
- [[Ector cairo renderer gradient linear]]
- c_prefix: ector_renderer_cairo_gradient_linear;
- implements {
- Ector.Renderer.prepare;
- Ector.Renderer.draw;
- Efl.Gfx.Path.bounds_get;
- Ector.Renderer.crc { get; }
- Ector.Renderer.Cairo.op_fill;
- Efl.Object.finalize;
- Efl.Object.destructor;
- Efl.Gfx.Gradient.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
deleted file mode 100644
index bb5add0373..0000000000
--- a/src/lib/ector/cairo/ector_renderer_cairo_gradient_radial.c
+++ /dev/null
@@ -1,220 +0,0 @@
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <Eina.h>
-#include <Ector.h>
-#include <cairo/Ector_Cairo.h>
-
-#include "ector_private.h"
-#include "ector_cairo_private.h"
-
-static cairo_pattern_t *(*cairo_pattern_create_radial)(double cx0, double cy0,
- double radius0,
- double cx1, double cy1,
- double radius1) = NULL;
-static void (*cairo_set_source)(cairo_t *cr, cairo_pattern_t *source) = NULL;
-static void (*cairo_fill)(cairo_t *cr) = NULL;
-static void (*cairo_arc)(cairo_t *cr,
- double xc, double yc,
- double radius,
- double angle1, double angle2) = NULL;
-static void (*cairo_pattern_destroy)(cairo_pattern_t *pattern) = NULL;
-
-static void (*cairo_pattern_set_extend)(cairo_pattern_t *pattern, cairo_extend_t extend) = NULL;
-static void (*cairo_pattern_set_matrix)(cairo_t *cr, cairo_matrix_t *matrix) = NULL;
-static void (*cairo_matrix_init)(cairo_matrix_t *matrix,
- double xx, double yx,
- double xy, double yy,
- double x0, double y0) = NULL;
-
-// FIXME: as long as it is not possible to directly access the parent structure
-// this will be duplicated from the linear gradient renderer
-typedef struct _Ector_Renderer_Cairo_Gradient_Radial_Data Ector_Renderer_Cairo_Gradient_Radial_Data;
-struct _Ector_Renderer_Cairo_Gradient_Radial_Data
-{
- Ector_Cairo_Surface_Data *parent;
-};
-
-static Eina_Bool
-_ector_renderer_cairo_gradient_radial_ector_renderer_prepare(Eo *obj, Ector_Renderer_Cairo_Gradient_Radial_Data *pd)
-{
- ector_renderer_prepare(efl_super(obj, ECTOR_RENDERER_CAIRO_GRADIENT_RADIAL_CLASS));
-
- if (!pd->parent)
- {
- Ector_Renderer_Data *base;
-
- base = efl_data_scope_get(obj, ECTOR_RENDERER_CLASS);
- pd->parent = efl_data_xref(base->surface, ECTOR_CAIRO_SURFACE_CLASS, obj);
- }
-
- return EINA_FALSE;
-}
-
-static cairo_pattern_t *
-_ector_renderer_cairo_gradient_radial_prepare(Eo *obj,
- Ector_Renderer_Gradient_Radial_Data *grd,
- Ector_Renderer_Gradient_Data *gd,
- unsigned int mul_col)
-{
- Ector_Renderer_Data *pd = efl_data_scope_get(obj, ECTOR_RENDERER_CLASS);
- cairo_pattern_t *pat;
- cairo_matrix_t pd_m;
-
- pat = cairo_pattern_create_radial(grd->focal.x, grd->focal.y, 0,
- grd->radial.x, grd->radial.y, grd->radius);
- if (!pat) return NULL;
-
- _ector_renderer_cairo_gradient_prepare(pat, gd, mul_col);
-
- cairo_pattern_set_extend(pat, _ector_cairo_extent_get(gd->s));
-
- if (pd->m)
- {
- cairo_matrix_init(&pd_m,
- pd->m->xx, pd->m->yx,
- pd->m->xy, pd->m->yy,
- pd->m->xz, pd->m->yz);
- cairo_pattern_set_matrix(pat, &pd_m);
- }
-
- return pat;
-}
-
-// Clearly duplicated and should be in a common place...
-static Eina_Bool
-_ector_renderer_cairo_gradient_radial_ector_renderer_draw(Eo *obj, Ector_Renderer_Cairo_Gradient_Radial_Data *pd, Efl_Gfx_Render_Op op, Eina_Array *clips, unsigned int mul_col)
-{
- Ector_Renderer_Gradient_Radial_Data *grd;
- Ector_Renderer_Gradient_Data *gd;
- cairo_pattern_t *pat;
-
- // FIXME: Handle clipping and generally make it work :-)
- grd = efl_data_scope_get(obj, ECTOR_RENDERER_GRADIENT_RADIAL_MIXIN);
- gd = efl_data_scope_get(obj, ECTOR_RENDERER_GRADIENT_MIXIN);
- if (!grd || !gd) return EINA_FALSE;
-
- pat = _ector_renderer_cairo_gradient_radial_prepare(obj, grd, gd, mul_col);
- if (!pat) return EINA_FALSE;
-
- ector_renderer_draw(efl_super(obj, ECTOR_RENDERER_CAIRO_GRADIENT_RADIAL_CLASS), op, clips, mul_col);
-
- cairo_arc(pd->parent->cairo,
- grd->radial.x, grd->radial.y,
- grd->radius,
- 0, 2 * M_PI);
- cairo_set_source(pd->parent->cairo, pat);
- cairo_fill(pd->parent->cairo);
- cairo_pattern_destroy(pat);
-
- return EINA_TRUE;
-}
-
-// Clearly duplicated and should be in a common place...
-static Eina_Bool
-_ector_renderer_cairo_gradient_radial_ector_renderer_cairo_op_fill(Eo *obj,
- Ector_Renderer_Cairo_Gradient_Radial_Data *pd,
- unsigned int mul_col)
-{
- Ector_Renderer_Gradient_Radial_Data *grd;
- Ector_Renderer_Gradient_Data *gd;
- cairo_pattern_t *pat;
-
- grd = efl_data_scope_get(obj, ECTOR_RENDERER_GRADIENT_RADIAL_MIXIN);
- gd = efl_data_scope_get(obj, ECTOR_RENDERER_GRADIENT_MIXIN);
- if (!grd || !gd) return EINA_FALSE;
-
- pat = _ector_renderer_cairo_gradient_radial_prepare(obj, grd, gd, mul_col);
- if (!pat) return EINA_FALSE;
-
- cairo_set_source(pd->parent->cairo, pat);
- cairo_pattern_destroy(pat);
-
- return EINA_TRUE;
-}
-
-static void
-_ector_renderer_cairo_gradient_radial_efl_gfx_path_bounds_get(const Eo *obj EINA_UNUSED,
- Ector_Renderer_Cairo_Gradient_Radial_Data *pd EINA_UNUSED,
- Eina_Rect *r)
-{
- Ector_Renderer_Gradient_Radial_Data *gld;
- Ector_Renderer_Cairo_Data *bd;
-
- gld = efl_data_scope_get(obj, ECTOR_RENDERER_GRADIENT_RADIAL_MIXIN);
- bd = efl_data_scope_get(obj, ECTOR_RENDERER_CAIRO_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);
-}
-
-static Efl_Object *
-_ector_renderer_cairo_gradient_radial_efl_object_finalize(Eo *obj, Ector_Renderer_Cairo_Gradient_Radial_Data *pd EINA_UNUSED)
-{
- Ector_Renderer_Data *base;
-
- obj = efl_finalize(efl_super(obj, ECTOR_RENDERER_CAIRO_GRADIENT_RADIAL_CLASS));
- if (!obj) return NULL;
-
- base = efl_data_scope_get(obj, ECTOR_RENDERER_CLASS);
-
- USE(base, cairo_set_source, NULL);
- USE(base, cairo_pattern_destroy, NULL);
- USE(base, cairo_arc, NULL);
- USE(base, cairo_fill, NULL);
- USE(base, cairo_matrix_init, NULL);
- USE(base, cairo_set_source, NULL);
- USE(base, cairo_pattern_destroy, NULL);
- USE(base, cairo_pattern_set_extend, NULL);
- USE(base, cairo_pattern_set_matrix, NULL);
- USE(base, cairo_pattern_create_radial, NULL);
- USE(base, cairo_pattern_add_color_stop_rgba, NULL);
-
- return obj;
-}
-
-static void
-_ector_renderer_cairo_gradient_radial_efl_object_destructor(Eo *obj,
- Ector_Renderer_Cairo_Gradient_Radial_Data *pd)
-{
- Ector_Renderer_Data *base;
-
- base = efl_data_scope_get(obj, ECTOR_RENDERER_CLASS);
- efl_data_xunref(base->surface, pd->parent, obj);
-
- efl_destructor(efl_super(obj, ECTOR_RENDERER_CAIRO_GRADIENT_RADIAL_CLASS));
-}
-
-static void
-_ector_renderer_cairo_gradient_radial_efl_gfx_gradient_stop_set(Eo *obj,
- Ector_Renderer_Cairo_Gradient_Radial_Data *pd EINA_UNUSED,
- const Efl_Gfx_Gradient_Stop *colors,
- unsigned int length)
-{
- efl_gfx_gradient_stop_set(efl_super(obj, ECTOR_RENDERER_CAIRO_GRADIENT_RADIAL_CLASS), colors, length);
-}
-
-static unsigned int
-_ector_renderer_cairo_gradient_radial_ector_renderer_crc_get(const Eo *obj, Ector_Renderer_Cairo_Gradient_Radial_Data *pd EINA_UNUSED)
-{
- Ector_Renderer_Gradient_Radial_Data *grd;
- Ector_Renderer_Gradient_Data *gd;
- unsigned int crc;
-
- crc = ector_renderer_crc_get(efl_super(obj, ECTOR_RENDERER_CAIRO_GRADIENT_RADIAL_CLASS));
-
- grd = efl_data_scope_get(obj, ECTOR_RENDERER_GRADIENT_RADIAL_MIXIN);
- gd = efl_data_scope_get(obj, ECTOR_RENDERER_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_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
deleted file mode 100644
index bdf0059b3c..0000000000
--- a/src/lib/ector/cairo/ector_renderer_cairo_gradient_radial.eo
+++ /dev/null
@@ -1,15 +0,0 @@
-class @beta Ector.Renderer.Cairo.Gradient.Radial extends Ector.Renderer.Cairo implements Ector.Renderer.Gradient, Ector.Renderer.Gradient.Radial, Efl.Gfx.Path
-{
- [[Ector cairo renderer gradient radial]]
- c_prefix: ector_renderer_cairo_gradient_radial;
- implements {
- Ector.Renderer.prepare;
- Ector.Renderer.draw;
- Efl.Gfx.Path.bounds_get;
- Ector.Renderer.crc { get; }
- Ector.Renderer.Cairo.op_fill;
- Efl.Object.destructor;
- Efl.Object.finalize;
- Efl.Gfx.Gradient.stop { set; }
- }
-}
diff --git a/src/lib/ector/cairo/ector_renderer_cairo_shape.c b/src/lib/ector/cairo/ector_renderer_cairo_shape.c
deleted file mode 100644
index 87fe2a0778..0000000000
--- a/src/lib/ector/cairo/ector_renderer_cairo_shape.c
+++ /dev/null
@@ -1,331 +0,0 @@
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#include <math.h>
-#include <float.h>
-
-#include <Eina.h>
-#include <Ector.h>
-#include <cairo/Ector_Cairo.h>
-
-#include "ector_private.h"
-#include "ector_cairo_private.h"
-
-typedef struct _cairo_path_t cairo_path_t;
-
-typedef enum _cairo_line_cap {
- CAIRO_LINE_CAP_BUTT,
- CAIRO_LINE_CAP_ROUND,
- CAIRO_LINE_CAP_SQUARE
-} cairo_line_cap_t;
-
-typedef enum _cairo_line_join {
- CAIRO_LINE_JOIN_MITER,
- CAIRO_LINE_JOIN_ROUND,
- CAIRO_LINE_JOIN_BEVEL
-} cairo_line_join_t;
-
-typedef enum _cairo_fill_rule {
- CAIRO_FILL_RULE_WINDING,
- CAIRO_FILL_RULE_EVEN_ODD
-} cairo_fill_rule_t;
-
-static void (*cairo_move_to)(cairo_t *cr, double x, double y) = NULL;
-static void (*cairo_line_to)(cairo_t *cr, double x, double y) = NULL;
-static void (*cairo_curve_to)(cairo_t *cr,
- double x1, double y1,
- double x2, double y2,
- double x3, double y3) = NULL;
-static void (*cairo_close_path)(cairo_t *cr) = NULL;
-
-static void (*cairo_fill)(cairo_t *cr) = NULL;
-static void (*cairo_fill_preserve)(cairo_t *cr) = NULL;
-static void (*cairo_stroke)(cairo_t *cr) = NULL;
-
-static void (*cairo_set_source_rgba)(cairo_t *cr,
- double red, double green,
- double blue, double alpha) = NULL;
-
-
-static cairo_path_t *(*cairo_copy_path)(cairo_t *cr) = NULL;
-static void (*cairo_path_destroy)(cairo_path_t *path) = NULL;
-static void (*cairo_new_path)(cairo_t *cr) = NULL;
-static void (*cairo_append_path)(cairo_t *cr, const cairo_path_t *path) = NULL;
-
-static void (*cairo_set_line_width)(cairo_t *cr, double width) = NULL;
-static void (*cairo_set_line_cap)(cairo_t *cr, cairo_line_cap_t line_cap) = NULL;
-static void (*cairo_set_line_join)(cairo_t *cr, cairo_line_join_t line_join) = NULL;
-
-static void (*cairo_save)(cairo_t *cr) = NULL;
-static void (*cairo_restore)(cairo_t *cr) = NULL;
-
-static void (*cairo_set_dash) (cairo_t *cr, const double *dashes, int num_dashes, double offset) = NULL;
-static void (*cairo_set_fill_rule) (cairo_t *cr, cairo_fill_rule_t fill_rule);
-
-typedef struct _Ector_Renderer_Cairo_Shape_Data Ector_Renderer_Cairo_Shape_Data;
-struct _Ector_Renderer_Cairo_Shape_Data
-{
- Efl_Gfx_Shape_Public *public_shape;
-
- Ector_Cairo_Surface_Data *parent;
- Ector_Renderer_Shape_Data *shape;
- Ector_Renderer_Data *base;
-
- cairo_path_t *path;
-};
-
-EOLIAN static void
-_ector_renderer_cairo_shape_efl_gfx_path_commit(Eo *obj EINA_UNUSED,
- Ector_Renderer_Cairo_Shape_Data *pd)
-{
- if (pd->path)
- {
- cairo_path_destroy(pd->path);
- pd->path = NULL;
- }
-}
-
-static Eina_Bool
-_ector_renderer_cairo_shape_ector_renderer_prepare(Eo *obj, Ector_Renderer_Cairo_Shape_Data *pd)
-{
- const Efl_Gfx_Path_Command *cmds = NULL;
- const double *pts = NULL;
-
- ector_renderer_prepare(efl_super(obj, ECTOR_RENDERER_CAIRO_SHAPE_CLASS));
-
- // shouldn't this be moved to the cairo base object?
- if (!pd->parent)
- {
- Ector_Renderer_Data *base;
-
- base = efl_data_scope_get(obj, ECTOR_RENDERER_CLASS);
- pd->parent = efl_data_xref(base->surface, ECTOR_CAIRO_SURFACE_CLASS, obj);
- }
-
- efl_gfx_path_get(obj, &cmds, &pts);
- if (!pd->path && cmds)
- {
- cairo_new_path(pd->parent->cairo);
-
- for (; *cmds != EFL_GFX_PATH_COMMAND_TYPE_END; cmds++)
- {
- switch (*cmds)
- {
- case EFL_GFX_PATH_COMMAND_TYPE_MOVE_TO:
- cairo_move_to(pd->parent->cairo, pts[0], pts[1]);
-
- pts += 2;
- break;
- case EFL_GFX_PATH_COMMAND_TYPE_LINE_TO:
- cairo_line_to(pd->parent->cairo, pts[0], pts[1]);
-
- pts += 2;
- break;
- case EFL_GFX_PATH_COMMAND_TYPE_CUBIC_TO:
-
- cairo_curve_to(pd->parent->cairo,
- pts[0], pts[1], pts[2], pts[3], // control points
- pts[4], pts[5]); // destination point
-
- pts += 6;
- break;
- case EFL_GFX_PATH_COMMAND_TYPE_CLOSE:
- cairo_close_path(pd->parent->cairo);
- break;
- case EFL_GFX_PATH_COMMAND_TYPE_LAST:
- case EFL_GFX_PATH_COMMAND_TYPE_END:
- break;
- }
- }
-
- pd->path = cairo_copy_path(pd->parent->cairo);
- }
-
- return EINA_TRUE;
-}
-
-static Eina_Bool
-_ector_renderer_cairo_shape_ector_renderer_draw(Eo *obj, Ector_Renderer_Cairo_Shape_Data *pd, Efl_Gfx_Render_Op op, Eina_Array *clips, unsigned int mul_col)
-{
- int r, g, b, a;
- unsigned i;
- Efl_Gfx_Fill_Rule fill_rule;
-
- if (pd->path == NULL) return EINA_FALSE;
-
- cairo_save(pd->parent->cairo);
-
- ector_renderer_draw(efl_super(obj, ECTOR_RENDERER_CAIRO_SHAPE_CLASS), op, clips, mul_col);
-
- cairo_new_path(pd->parent->cairo);
- cairo_append_path(pd->parent->cairo, pd->path);
-
- fill_rule = efl_gfx_shape_fill_rule_get(obj);
- if (fill_rule == EFL_GFX_FILL_RULE_ODD_EVEN)
- cairo_set_fill_rule(pd->parent->cairo, CAIRO_FILL_RULE_EVEN_ODD);
- else
- cairo_set_fill_rule(pd->parent->cairo, CAIRO_FILL_RULE_WINDING);
-
- if (pd->shape->fill)
- ector_renderer_cairo_op_fill(pd->shape->fill, mul_col);
-
- if (pd->shape->stroke.fill || pd->public_shape->stroke.color.a > 0)
- {
- cairo_fill_preserve(pd->parent->cairo);
-
- if (pd->shape->stroke.fill)
- ector_renderer_cairo_op_fill(pd->shape->stroke.fill, mul_col);
- else
- {
- r = (((pd->public_shape->stroke.color.r * R_VAL(&mul_col)) + 0xff) >> 8);
- g = (((pd->public_shape->stroke.color.g * G_VAL(&mul_col)) + 0xff) >> 8);
- b = (((pd->public_shape->stroke.color.b * B_VAL(&mul_col)) + 0xff) >> 8);
- a = (((pd->public_shape->stroke.color.a * A_VAL(&mul_col)) + 0xff) >> 8);
- ector_color_argb_unpremul(a, &r, &g, &b);
- cairo_set_source_rgba(pd->parent->cairo, r/255.0, g/255.0, b/255.0, a/255.0);
- if (pd->public_shape->stroke.dash)
- {
- double *dashinfo;
-
- dashinfo = (double *) malloc(2 * pd->public_shape->stroke.dash_length * sizeof(double));
- for (i = 0; i < pd->public_shape->stroke.dash_length; i++)
- {
- dashinfo[i*2] = pd->public_shape->stroke.dash[i].length;
- dashinfo[i*2 + 1] = pd->public_shape->stroke.dash[i].gap;
- }
- cairo_set_dash(pd->parent->cairo, dashinfo, pd->public_shape->stroke.dash_length * 2, 0);
- free(dashinfo);
- }
- }
-
- // Set dash, cap and join
- cairo_set_line_width(pd->parent->cairo, (pd->public_shape->stroke.width * pd->public_shape->stroke.scale));
- cairo_set_line_cap(pd->parent->cairo, (cairo_line_cap_t) pd->public_shape->stroke.cap);
- cairo_set_line_join(pd->parent->cairo, (cairo_line_join_t) pd->public_shape->stroke.join);
- cairo_stroke(pd->parent->cairo);
- }
- else
- {
- cairo_fill(pd->parent->cairo);
- }
-
- cairo_restore(pd->parent->cairo);
- return EINA_TRUE;
-}
-
-static Eina_Bool
-_ector_renderer_cairo_shape_ector_renderer_cairo_op_fill(Eo *obj EINA_UNUSED,
- Ector_Renderer_Cairo_Shape_Data *pd EINA_UNUSED,
- unsigned int mul_col EINA_UNUSED)
-{
- // FIXME: let's find out how to fill a shape with a shape later.
- // I need to read SVG specification and see how to map that with cairo.
- ERR("fill with shape not implemented\n");
- return EINA_FALSE;
-}
-
-static void
-_ector_renderer_cairo_shape_efl_gfx_path_bounds_get(const Eo *obj,
- Ector_Renderer_Cairo_Shape_Data *pd EINA_UNUSED,
- Eina_Rect *r)
-{
- Ector_Renderer_Cairo_Data *bd;
-
- // FIXME: It should be possible to ask cairo about this
- efl_gfx_path_bounds_get(obj, r);
-
- bd = efl_data_scope_get(obj, ECTOR_RENDERER_CAIRO_CLASS);
- r->x += bd->generic->origin.x;
- r->y += bd->generic->origin.y;
-}
-
-Eo *
-_ector_renderer_cairo_shape_efl_object_constructor(Eo *obj, Ector_Renderer_Cairo_Shape_Data *pd)
-{
- obj = efl_constructor(efl_super(obj, ECTOR_RENDERER_CAIRO_SHAPE_CLASS));
-
- if (!obj) return NULL;
-
- pd->public_shape = efl_data_xref(obj, EFL_GFX_SHAPE_MIXIN, obj);
- pd->shape = efl_data_xref(obj, ECTOR_RENDERER_SHAPE_MIXIN, obj);
- pd->base = efl_data_xref(obj, ECTOR_RENDERER_CLASS, obj);
-
- return obj;
-}
-
-static Efl_Object *
-_ector_renderer_cairo_shape_efl_object_finalize(Eo *obj, Ector_Renderer_Cairo_Shape_Data *pd)
-{
- obj = efl_finalize(efl_super(obj, ECTOR_RENDERER_CAIRO_SHAPE_CLASS));
- if (!obj) return NULL;
-
- USE(pd->base, cairo_path_destroy, NULL);
- USE(pd->base, cairo_restore, NULL);
- USE(pd->base, cairo_fill, NULL);
- USE(pd->base, cairo_set_dash, NULL);
- USE(pd->base, cairo_fill_preserve, NULL);
- USE(pd->base, cairo_set_source_rgba, NULL);
- USE(pd->base, cairo_stroke, NULL);
- USE(pd->base, cairo_set_line_width, NULL);
- USE(pd->base, cairo_set_line_cap, NULL);
- USE(pd->base, cairo_set_line_join, NULL);
- USE(pd->base, cairo_new_path, NULL);
- USE(pd->base, cairo_append_path, NULL);
- USE(pd->base, cairo_save, NULL);
- USE(pd->base, cairo_copy_path, NULL);
- USE(pd->base, cairo_close_path, NULL);
- USE(pd->base, cairo_curve_to, NULL);
- USE(pd->base, cairo_line_to, NULL);
- USE(pd->base, cairo_move_to, NULL);
- USE(pd->base, cairo_set_fill_rule, NULL);
-
- return obj;
-}
-
-void
-_ector_renderer_cairo_shape_efl_object_destructor(Eo *obj, Ector_Renderer_Cairo_Shape_Data *pd)
-{
- Ector_Renderer_Data *base;
-
- // FIXME: As base class destructor can't call destructor of mixin class.
- // Call explicit API to free shape data.
- efl_gfx_path_reset(obj);
-
- base = efl_data_scope_get(obj, ECTOR_RENDERER_CLASS);
- efl_data_xunref(base->surface, pd->parent, obj);
-
- efl_data_xunref(obj, pd->shape, obj);
- efl_data_xunref(obj, pd->base, obj);
-
- efl_destructor(efl_super(obj, ECTOR_RENDERER_CAIRO_SHAPE_CLASS));
-
- if (pd->path) cairo_path_destroy(pd->path);
-}
-
-unsigned int
-_ector_renderer_cairo_shape_ector_renderer_crc_get(const Eo *obj,
- Ector_Renderer_Cairo_Shape_Data *pd)
-{
- unsigned int crc;
-
- crc = ector_renderer_crc_get(efl_super(obj, ECTOR_RENDERER_CAIRO_SHAPE_CLASS));
-
- crc = eina_crc((void*) &pd->shape->stroke.marker, sizeof (pd->shape->stroke.marker), crc, EINA_FALSE);
- crc = eina_crc((void*) &pd->public_shape->stroke.scale, sizeof (pd->public_shape->stroke.scale) * 3, crc, EINA_FALSE); // scale, width, centered
- crc = eina_crc((void*) &pd->public_shape->stroke.color, sizeof (pd->public_shape->stroke.color), crc, EINA_FALSE);
- crc = eina_crc((void*) &pd->public_shape->stroke.cap, sizeof (pd->public_shape->stroke.cap), crc, EINA_FALSE);
- crc = eina_crc((void*) &pd->public_shape->stroke.join, sizeof (pd->public_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->public_shape->stroke.dash_length)
- {
- crc = eina_crc((void*) pd->public_shape->stroke.dash, sizeof (Efl_Gfx_Dash) * pd->public_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
deleted file mode 100644
index b2d41c6842..0000000000
--- a/src/lib/ector/cairo/ector_renderer_cairo_shape.eo
+++ /dev/null
@@ -1,16 +0,0 @@
-class @beta Ector.Renderer.Cairo.Shape extends Ector.Renderer.Cairo implements Ector.Renderer.Shape, Efl.Gfx.Path
-{
- [[Ector cairo renderer shape class]]
- c_prefix: ector_renderer_cairo_shape;
- implements {
- Ector.Renderer.prepare;
- Ector.Renderer.draw;
- Efl.Gfx.Path.bounds_get;
- Efl.Gfx.Path.commit;
- Ector.Renderer.crc { get; }
- Ector.Renderer.Cairo.op_fill;
- Efl.Object.constructor;
- Efl.Object.finalize;
- Efl.Object.destructor;
- }
-}
diff --git a/src/lib/ector/cairo/meson.build b/src/lib/ector/cairo/meson.build
deleted file mode 100644
index 094aedb3e6..0000000000
--- a/src/lib/ector/cairo/meson.build
+++ /dev/null
@@ -1,39 +0,0 @@
-
-ector_src += files([
- 'ector_renderer_cairo_gradient_linear.c',
- 'ector_renderer_cairo_gradient_radial.c',
- 'ector_renderer_cairo_shape.c',
- 'ector_renderer_cairo.c',
- 'ector_cairo_software_surface.c',
- 'ector_cairo_surface.c'
-])
-
-pub_eo_files = [
- 'ector_cairo_surface.eo',
- 'ector_cairo_software_surface.eo',
- 'ector_renderer_cairo.eo',
- 'ector_renderer_cairo_shape.eo',
- 'ector_renderer_cairo_gradient_linear.eo',
- 'ector_renderer_cairo_gradient_radial.eo'
-]
-
-foreach eo_file : pub_eo_files
- pub_eo_file_target += custom_target('eolian_gen_' + eo_file,
- input : eo_file,
- output : [eo_file + '.h'],
- depfile : eo_file + '.d',
- install : false,
- install_dir : dir_package_include,
- command : eolian_gen + [ '-I', meson.current_source_dir(), eolian_include_directories,
- '-o', 'h:' + join_paths(meson.current_build_dir(), eo_file + '.h'),
- '-o', 'c:' + join_paths(meson.current_build_dir(), eo_file + '.c'),
- '-o', 'd:' + join_paths(meson.current_build_dir(), eo_file + '.d'),
- '-gchd', '@INPUT@'])
-endforeach
-
-
-if get_option('install-eo-files')
- install_data(pub_eo_files,
- install_dir: join_paths(eolian_include_dir, package_version_name)
- )
-endif
diff --git a/src/lib/ector/gl/Ector_GL.h b/src/lib/ector/gl/Ector_GL.h
index 131288a180..88b6c6bae1 100644
--- a/src/lib/ector/gl/Ector_GL.h
+++ b/src/lib/ector/gl/Ector_GL.h
@@ -34,8 +34,6 @@
#ifndef _ECTOR_GL_SURFACE_EO_CLASS_TYPE
#define _ECTOR_GL_SURFACE_EO_CLASS_TYPE
-typedef Eo Ector_Cairo_Surface;
-
#endif
typedef unsigned int GLuint;
diff --git a/src/lib/ector/meson.build b/src/lib/ector/meson.build
index 5bedb7e82b..b0d33a1d42 100644
--- a/src/lib/ector/meson.build
+++ b/src/lib/ector/meson.build
@@ -50,7 +50,6 @@ endforeach
eolian_include_directories += ['-I', meson.current_source_dir()]
-subdir('cairo')
subdir('gl')
pub_eo_types_files = [
diff --git a/src/lib/ector/software/ector_software_buffer.c b/src/lib/ector/software/ector_software_buffer.c
index 5a5c940f7f..df7fc27d1f 100644
--- a/src/lib/ector/software/ector_software_buffer.c
+++ b/src/lib/ector/software/ector_software_buffer.c
@@ -45,7 +45,7 @@ _pixels_gry8_to_argb_convert(uint32_t *dst, const uint8_t *src, int len)
}
EOLIAN static void
-_ector_software_buffer_base_pixels_clear(Eo *obj, Ector_Software_Buffer_Base_Data *pd)
+_ector_software_buffer_base_pixels_clear(Eo *obj EINA_UNUSED, Ector_Software_Buffer_Base_Data *pd)
{
if (!pd->pixels.u8) return;