Ector: Move cairo surface back to ector
authorJean-Philippe Andre <jp.andre@samsung.com>
Thu, 3 Dec 2015 06:10:18 +0000 (15:10 +0900)
committerJean-Philippe Andre <jp.andre@samsung.com>
Thu, 3 Dec 2015 09:42:50 +0000 (18:42 +0900)
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.

src/Makefile_Ector.am
src/Makefile_Evas.am
src/lib/ector/cairo/Ector_Cairo.h
src/lib/ector/cairo/ector_cairo_software_surface.c [moved from src/modules/evas/engines/gl_generic/ector_cairo_software_surface.c with 96% similarity]
src/lib/ector/cairo/ector_cairo_software_surface.eo [moved from src/modules/evas/engines/software_generic/ector_cairo_software_surface.eo with 100% similarity]
src/lib/ector/ector_buffer.h
src/modules/evas/engines/gl_generic/ector_cairo_software_surface.eo [deleted file]
src/modules/evas/engines/gl_generic/evas_engine.c
src/modules/evas/engines/software_generic/ector_cairo_software_surface.c [deleted file]
src/modules/evas/engines/software_generic/evas_engine.c

index 0f50260..1855b17 100644 (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 \
index 2f04c3c..8f234af 100644 (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
index 351a2f5..f45dfd0 100644 (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"
@@ -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;
 }
index 41a75cb..3c40990 100644 (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
diff --git a/src/modules/evas/engines/gl_generic/ector_cairo_software_surface.eo b/src/modules/evas/engines/gl_generic/ector_cairo_software_surface.eo
deleted file mode 100644 (file)
index 8d4e789..0000000
+++ /dev/null
@@ -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;
-   }
-}
index 3a97b7d..03429d2 100644 (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 */
diff --git a/src/modules/evas/engines/software_generic/ector_cairo_software_surface.c b/src/modules/evas/engines/software_generic/ector_cairo_software_surface.c
deleted file mode 100644 (file)
index 2d4658a..0000000
+++ /dev/null
@@ -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"
index 7589d24..73334c2 100644 (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 */