diff options
Diffstat (limited to 'src')
22 files changed, 24 insertions, 1597 deletions
diff --git a/src/examples/evas/evas-vg-json.c b/src/examples/evas/evas-vg-json.c index a6c0969381..7447373711 100644 --- a/src/examples/evas/evas-vg-json.c +++ b/src/examples/evas/evas-vg-json.c @@ -58,9 +58,6 @@ _on_delete(Ecore_Evas *ee EINA_UNUSED) int main(void) { - //Cairo backend is not supported. - putenv("ECTOR_BACKEND=default"); - if (!ecore_evas_init()) return EXIT_FAILURE; 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; diff --git a/src/modules/evas/engines/gl_generic/evas_engine.c b/src/modules/evas/engines/gl_generic/evas_engine.c index 2840f51a28..4b0a6c735b 100644 --- a/src/modules/evas/engines/gl_generic/evas_engine.c +++ b/src/modules/evas/engines/gl_generic/evas_engine.c @@ -2,7 +2,6 @@ #include "evas_gl_core_private.h" #include "software/Ector_Software.h" -#include "cairo/Ector_Cairo.h" #include "gl/Ector_GL.h" #include "evas_ector_gl.h" #include "filters/gl_engine_filter.h" @@ -2534,7 +2533,6 @@ eng_texture_image_get(void *engine EINA_UNUSED, void *texture) return e3d_texture_get((E3D_Texture *)texture); } -static Eina_Bool use_cairo = EINA_FALSE; static Eina_Bool use_gl = EINA_FALSE; static Ector_Surface * @@ -2544,20 +2542,14 @@ eng_ector_create(void *engine EINA_UNUSED) const char *ector_backend; ector_backend = getenv("ECTOR_BACKEND"); efl_domain_current_push(EFL_ID_DOMAIN_SHARED); - if (ector_backend && !strcasecmp(ector_backend, "default")) - { - ector = efl_add_ref(ECTOR_SOFTWARE_SURFACE_CLASS, NULL); - } - else if (ector_backend && !strcasecmp(ector_backend, "experimental")) + if (ector_backend && !strcasecmp(ector_backend, "gl")) { ector = efl_add_ref(ECTOR_GL_SURFACE_CLASS, NULL); use_gl = EINA_TRUE; } else - { - ector = efl_add_ref(ECTOR_CAIRO_SOFTWARE_SURFACE_CLASS, NULL); - use_cairo = EINA_TRUE; - } + ector = efl_add_ref(ECTOR_SOFTWARE_SURFACE_CLASS, NULL); + efl_domain_current_pop(); return ector; } @@ -2639,7 +2631,11 @@ eng_ector_renderer_draw(void *engine EINA_UNUSED, void *surface, void *context EINA_UNUSED, Ector_Renderer *renderer, Eina_Array *clips EINA_UNUSED, Eina_Bool do_async EINA_UNUSED) { - if (use_cairo || !use_gl) + if (use_gl) + { + //FIXME no implementation yet + } + else { int w, h; Eina_Rectangle *r; @@ -2654,10 +2650,7 @@ eng_ector_renderer_draw(void *engine EINA_UNUSED, void *surface, while ((r = eina_array_pop(c))) eina_rectangle_free(r); eina_array_free(c); - } - else - { - //FIXME no implementation yet + } } @@ -2724,7 +2717,11 @@ eng_ector_begin(void *engine, void *surface, void *context EINA_UNUSED, Ector_Surface *ector, int x, int y, Eina_Bool clear, Eina_Bool do_async EINA_UNUSED) { - if (use_cairo|| !use_gl) + if (use_gl) + { + //FIXME: No implementation yet + } + else { int w, h, stride; Evas_GL_Image *glim = surface; @@ -2740,10 +2737,7 @@ eng_ector_begin(void *engine, void *surface, // it just uses the software backend to draw for now ector_buffer_pixels_set(ector, pixels, w, h, stride, EFL_GFX_COLORSPACE_ARGB8888, EINA_TRUE); ector_surface_reference_point_set(ector, x, y); - } - else - { - //FIXME: No implementation yet + } } @@ -2754,7 +2748,11 @@ eng_ector_end(void *engine, Ector_Surface *ector, Eina_Bool do_async EINA_UNUSED) { - if (use_cairo || !use_gl) + if (use_gl) + { + //FIXME: No implementation yet + } + else { Evas_GL_Image *glim = surface; DATA32 *pixels; @@ -2766,10 +2764,7 @@ eng_ector_end(void *engine, eng_image_data_put(engine, glim, pixels); ector_buffer_pixels_set(ector, NULL, 0, 0, 0, EFL_GFX_COLORSPACE_ARGB8888, EINA_TRUE); evas_common_cpu_end_opt(); - } - else if (use_gl) - { - //FIXME: No implementation yet + } } diff --git a/src/modules/evas/engines/software_generic/evas_engine.c b/src/modules/evas/engines/software_generic/evas_engine.c index 59391c4f6e..c85de3e4d3 100644 --- a/src/modules/evas/engines/software_generic/evas_engine.c +++ b/src/modules/evas/engines/software_generic/evas_engine.c @@ -5,7 +5,6 @@ #include "region.h" #include <software/Ector_Software.h> -#include "cairo/Ector_Cairo.h" #include "evas_ector_software.h" #include "draw.h" #include "evas_filter_private.h" @@ -4193,26 +4192,13 @@ eng_output_idle_flush(void *engine EINA_UNUSED, void *data) // Ector functions -static Eina_Bool use_cairo; - static Ector_Surface * eng_ector_create(void *engine EINA_UNUSED) { Ector_Surface *ector; - const char *ector_backend; - ector_backend = getenv("ECTOR_BACKEND"); efl_domain_current_push(EFL_ID_DOMAIN_SHARED); - if (ector_backend && !strcasecmp(ector_backend, "default")) - { - ector = efl_add_ref(ECTOR_SOFTWARE_SURFACE_CLASS, NULL); - use_cairo = EINA_FALSE; - } - else - { - ector = efl_add_ref(ECTOR_CAIRO_SOFTWARE_SURFACE_CLASS, NULL); - use_cairo = EINA_TRUE; - } + ector = efl_add_ref(ECTOR_SOFTWARE_SURFACE_CLASS, NULL); efl_domain_current_pop(); return ector; } |