Ector: Move cairo surface back to ector

The original plan was to have two different surfaces for GL and SW,
but this is probably not going to happen anytime soon. So, move
the implementation back to lib/ector. This avoid a file duplication.
This commit is contained in:
Jean-Philippe Andre 2015-12-03 15:10:18 +09:00
parent 52ec3d2d7e
commit 4bcea3eada
10 changed files with 14 additions and 166 deletions

View File

@ -14,6 +14,7 @@ ector_eolian_generic_h = $(ector_eolian_files_generic:%.eo=%.eo.h)
# Handle cairo backend
ector_eolian_files_cairo = \
lib/ector/cairo/ector_cairo_surface.eo \
lib/ector/cairo/ector_cairo_software_surface.eo \
lib/ector/cairo/ector_renderer_cairo_base.eo \
lib/ector/cairo/ector_renderer_cairo_shape.eo \
lib/ector/cairo/ector_renderer_cairo_gradient_linear.eo \
@ -85,6 +86,7 @@ lib/ector/cairo/ector_renderer_cairo_gradient_linear.c \
lib/ector/cairo/ector_renderer_cairo_gradient_radial.c \
lib/ector/cairo/ector_renderer_cairo_shape.c \
lib/ector/cairo/ector_renderer_cairo_base.c \
lib/ector/cairo/ector_cairo_software_surface.c \
lib/ector/cairo/ector_cairo_surface.c
installed_ectorcairoheadersdir = $(includedir)/ector-@VMAJ@/cairo
@ -166,7 +168,6 @@ EXTRA_DIST += \
lib/ector/ector_private.h \
lib/ector/ector_buffer.h \
lib/ector/cairo/ector_cairo_private.h \
lib/ector/software/ector_drawhelper_private.h \
lib/ector/software/ector_software_private.h \
static_libs/freetype/sw_ft_math.h \
static_libs/freetype/sw_ft_raster.h \

View File

@ -555,19 +555,10 @@ lib/evas/filters/blur/blur_box_rgba_i386.c \
lib/evas/filters/blur/blur_box_rgba_sse3.c \
lib/evas/filters/blur/blur_box_rgba_neon.c
### Vector surface helper
EXTRA_DIST += \
modules/evas/engines/software_generic/ector_cairo_software_surface.eo \
modules/evas/engines/gl_generic/ector_cairo_software_surface.eo
### Engines
if EVAS_STATIC_BUILD_SOFTWARE_GENERIC
BUILT_SOURCES += \
modules/evas/engines/software_generic/ector_cairo_software_surface.eo.c \
modules/evas/engines/software_generic/ector_cairo_software_surface.eo.h
lib_evas_libevas_la_SOURCES += modules/evas/engines/software_generic/evas_engine.c modules/evas/engines/software_generic/ector_cairo_software_surface.c modules/evas/engines/software_generic/Evas_Engine_Software_Generic.h
lib_evas_libevas_la_SOURCES += modules/evas/engines/software_generic/evas_engine.c modules/evas/engines/software_generic/Evas_Engine_Software_Generic.h
lib_evas_libevas_la_LIBADD +=
else
enginesoftwaregenericpkgdir = $(libdir)/evas/modules/engines/software_generic/$(MODULE_ARCH)
@ -656,10 +647,6 @@ endif
endif
if BUILD_ENGINE_GL_COMMON
BUILT_SOURCES += \
modules/evas/engines/gl_generic/ector_cairo_software_surface.eo.c \
modules/evas/engines/gl_generic/ector_cairo_software_surface.eo.h
GL_COMMON_SOURCES = \
modules/evas/engines/gl_common/evas_gl_private.h \
modules/evas/engines/gl_common/evas_gl_common.h \
@ -740,7 +727,6 @@ modules/evas/engines/gl_common/shader_3d/evas_gl_3d_shaders.x: modules/evas/engi
GL_GENERIC_SOURCES = \
modules/evas/engines/gl_generic/evas_engine.c \
modules/evas/engines/gl_generic/ector_cairo_software_surface.c \
modules/evas/engines/gl_generic/Evas_Engine_GL_Generic.h
if EVAS_STATIC_BUILD_GL_COMMON

View File

@ -13,6 +13,7 @@ typedef Eo Ector_Cairo_Surface;
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_base.eo.h"
#include "cairo/ector_renderer_cairo_shape.eo.h"
#include "cairo/ector_renderer_cairo_gradient_linear.eo.h"

View File

@ -2,15 +2,10 @@
#include "config.h" /* so that EAPI in Evas.h is correctly defined */
#endif
#include <Ector.h>
#include <cairo/Ector_Cairo.h>
#include "Ector_Cairo.h"
#include "ector_private.h"
#include <software/Ector_Software.h>
#include "evas_common_private.h"
#include "evas_private.h"
#include "ector_cairo_software_surface.eo.h"
#include "ector_buffer.h"
#define MY_CLASS ECTOR_CAIRO_SOFTWARE_SURFACE_CLASS
@ -94,7 +89,7 @@ _ector_cairo_software_surface_ector_generic_buffer_pixels_set(Eo *obj, Ector_Cai
}
end:
evas_common_cpu_end_opt();
/* evas_common_cpu_end_opt(); // do we need this? */
eo_do(obj, ector_cairo_surface_context_set(ctx));
return ok;
}

View File

@ -1,3 +1,6 @@
#ifndef ECTOR_BUFFER_H
#define ECTOR_BUFFER_H
#include <Ector.h>
#include "ector_generic_buffer.eo.h"
@ -25,3 +28,5 @@ typedef struct _Ector_Software_Buffer_Base_Data
Eina_Bool nofree : 1; // pixel data should not be free()'ed
Eina_Bool span_free : 1;
} Ector_Software_Buffer_Base_Data;
#endif

View File

@ -2,8 +2,7 @@
#include "evas_gl_core_private.h"
#include "software/Ector_Software.h"
#include "ector_cairo_software_surface.eo.h"
#include "cairo/Ector_Cairo.h"
#ifdef HAVE_DLSYM
# include <dlfcn.h> /* dlopen,dlclose,etc */

View File

@ -1,127 +0,0 @@
#ifdef HAVE_CONFIG_H
#include "config.h" /* so that EAPI in Evas.h is correctly defined */
#endif
#include <Ector.h>
#include <cairo/Ector_Cairo.h>
#include <software/Ector_Software.h>
#include "evas_common_private.h"
#include "evas_private.h"
#include "ector_cairo_software_surface.eo.h"
#include "ector_buffer.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;
eo_do(ector_surface,
sym = ector_cairo_surface_symbol_get(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_generic_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,
unsigned char l, unsigned char r, unsigned char t, unsigned char b)
{
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;
eo_do_super(obj, MY_CLASS,
ok = ector_buffer_pixels_set(pixels, width, height, stride,
cspace, writable, l, r, t, b));
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();
eo_do(obj, ector_cairo_surface_context_set(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 Eo_Base *
_ector_cairo_software_surface_eo_base_constructor(Eo *obj, Ector_Cairo_Software_Surface_Data *pd)
{
eo_do_super(obj, MY_CLASS, obj = eo_constructor());
pd->base = eo_data_ref(obj, ECTOR_SOFTWARE_BUFFER_BASE_MIXIN);
pd->base->generic = eo_data_ref(obj, ECTOR_GENERIC_BUFFER_MIXIN);
pd->base->generic->eo = obj;
return obj;
}
EOLIAN static void
_ector_cairo_software_surface_eo_base_destructor(Eo *obj, Ector_Cairo_Software_Surface_Data *pd)
{
eo_data_unref(obj, pd->base);
eo_do_super(obj, MY_CLASS, eo_destructor());
}
#include "ector_cairo_software_surface.eo.c"

View File

@ -1,11 +0,0 @@
class Ector.Cairo_Software.Surface (Ector.Cairo.Surface, Ector.Software.Buffer.Base)
{
eo_prefix: ector_cairo_software_surface;
legacy_prefix: null;
methods {}
implements {
Ector.Generic.Buffer.pixels_set;
Eo.Base.constructor;
Eo.Base.destructor;
}
}

View File

@ -8,8 +8,7 @@
#include "region.h"
#include <software/Ector_Software.h>
#include "ector_cairo_software_surface.eo.h"
#include "cairo/Ector_Cairo.h"
#ifdef HAVE_DLSYM
# include <dlfcn.h> /* dlopen,dlclose,etc */