efl_canvas_surface: change mixin to abstract

Summary:
If Efl.Canvas.Surface is changed from mixin to abstract, then its sub
classes do not need to inherit from Efl.Object to be a class.
Moreover, Efl.Canvas.Surface's data can be derived to its sub classes
easily.

Reviewers: jpeg, segfaultxavi, woohyun, Hermet

Subscribers: cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D7411
This commit is contained in:
Jaehyun Cho 2018-12-18 11:17:12 +09:00
parent 4a4d32b60d
commit 7a5589b14a
8 changed files with 43 additions and 39 deletions

View File

@ -1,6 +1,6 @@
#include "efl_canvas_surface.h" #include "efl_canvas_surface.h"
#define MY_CLASS EFL_CANVAS_SURFACE_MIXIN #define MY_CLASS EFL_CANVAS_SURFACE_CLASS
EOLIAN static Eo * EOLIAN static Eo *
_efl_canvas_surface_efl_object_constructor(Eo *eo, Efl_Canvas_Surface_Data *pd) _efl_canvas_surface_efl_object_constructor(Eo *eo, Efl_Canvas_Surface_Data *pd)

View File

@ -1,4 +1,4 @@
mixin Efl.Canvas.Surface (Efl.Interface, Efl.Canvas.Image_Internal) abstract Efl.Canvas.Surface (Efl.Canvas.Image_Internal)
{ {
[[Native surfaces usually bound to an externally-managed buffer. [[Native surfaces usually bound to an externally-managed buffer.

View File

@ -4,13 +4,13 @@
typedef struct _Efl_Canvas_Surface_Tbm_Data typedef struct _Efl_Canvas_Surface_Tbm_Data
{ {
Efl_Canvas_Surface_Data *base;
} Efl_Canvas_Surface_Tbm_Data; } Efl_Canvas_Surface_Tbm_Data;
EOLIAN static Eo * EOLIAN static Eo *
_efl_canvas_surface_tbm_efl_object_constructor(Eo *eo, Efl_Canvas_Surface_Tbm_Data *pd) _efl_canvas_surface_tbm_efl_object_constructor(Eo *eo, Efl_Canvas_Surface_Tbm_Data *pd EINA_UNUSED)
{ {
Evas_Object_Protected_Data *obj; Evas_Object_Protected_Data *obj;
Efl_Canvas_Surface_Data *sd;
eo = efl_constructor(efl_super(eo, MY_CLASS)); eo = efl_constructor(efl_super(eo, MY_CLASS));
obj = efl_data_scope_get(eo, EFL_CANVAS_OBJECT_CLASS); obj = efl_data_scope_get(eo, EFL_CANVAS_OBJECT_CLASS);
@ -22,34 +22,35 @@ _efl_canvas_surface_tbm_efl_object_constructor(Eo *eo, Efl_Canvas_Surface_Tbm_Da
return NULL; return NULL;
} }
pd->base = efl_data_ref(eo, EFL_CANVAS_SURFACE_MIXIN); sd = efl_data_scope_get(eo, EFL_CANVAS_SURFACE_CLASS);
pd->base->surf.type = EVAS_NATIVE_SURFACE_TBM; sd->surf.type = EVAS_NATIVE_SURFACE_TBM;
return eo; return eo;
} }
EOLIAN static void EOLIAN static void
_efl_canvas_surface_tbm_efl_object_destructor(Eo *eo, Efl_Canvas_Surface_Tbm_Data *pd) _efl_canvas_surface_tbm_efl_object_destructor(Eo *eo, Efl_Canvas_Surface_Tbm_Data *pd EINA_UNUSED)
{ {
Evas_Object_Protected_Data *obj; Evas_Object_Protected_Data *obj;
obj = efl_data_scope_get(eo, EFL_CANVAS_OBJECT_CLASS); obj = efl_data_scope_get(eo, EFL_CANVAS_OBJECT_CLASS);
ENFN->image_native_shutdown(ENC, EVAS_NATIVE_SURFACE_TBM); ENFN->image_native_shutdown(ENC, EVAS_NATIVE_SURFACE_TBM);
efl_data_unref(eo, pd->base);
efl_destructor(eo); efl_destructor(eo);
} }
EOLIAN static Eina_Bool EOLIAN static Eina_Bool
_efl_canvas_surface_tbm_efl_canvas_surface_native_buffer_set(Eo *eo, Efl_Canvas_Surface_Tbm_Data *pd, void *buffer) _efl_canvas_surface_tbm_efl_canvas_surface_native_buffer_set(Eo *eo, Efl_Canvas_Surface_Tbm_Data *pd EINA_UNUSED, void *buffer)
{ {
pd->base->surf.data.tbm.buffer = buffer; Efl_Canvas_Surface_Data *sd = efl_data_scope_get(eo, EFL_CANVAS_SURFACE_CLASS);
if (!_evas_image_native_surface_set(eo, &pd->base->surf))
sd->surf.data.tbm.buffer = buffer;
if (!_evas_image_native_surface_set(eo, &sd->surf))
{ {
ERR("failed to set native buffer"); ERR("failed to set native buffer");
pd->base->buffer = NULL; sd->buffer = NULL;
return EINA_FALSE; return EINA_FALSE;
} }
pd->base->buffer = buffer; sd->buffer = buffer;
return EINA_TRUE; return EINA_TRUE;
} }

View File

@ -1,4 +1,4 @@
class Efl.Canvas.Surface_Tbm (Efl.Object, Efl.Canvas.Surface) class Efl.Canvas.Surface_Tbm (Efl.Canvas.Surface)
{ {
[[Native Tizen Buffer Manager surface for Efl canvas]] [[Native Tizen Buffer Manager surface for Efl canvas]]

View File

@ -4,13 +4,13 @@
typedef struct _Efl_Canvas_Surface_Wayland_Data typedef struct _Efl_Canvas_Surface_Wayland_Data
{ {
Efl_Canvas_Surface_Data *base;
} Efl_Canvas_Surface_Wayland_Data; } Efl_Canvas_Surface_Wayland_Data;
EOLIAN static Eo * EOLIAN static Eo *
_efl_canvas_surface_wayland_efl_object_constructor(Eo *eo, Efl_Canvas_Surface_Wayland_Data *pd) _efl_canvas_surface_wayland_efl_object_constructor(Eo *eo, Efl_Canvas_Surface_Wayland_Data *pd EINA_UNUSED)
{ {
Evas_Object_Protected_Data *obj; Evas_Object_Protected_Data *obj;
Efl_Canvas_Surface_Data *sd;
eo = efl_constructor(efl_super(eo, MY_CLASS)); eo = efl_constructor(efl_super(eo, MY_CLASS));
obj = efl_data_scope_get(eo, EFL_CANVAS_OBJECT_CLASS); obj = efl_data_scope_get(eo, EFL_CANVAS_OBJECT_CLASS);
@ -22,34 +22,35 @@ _efl_canvas_surface_wayland_efl_object_constructor(Eo *eo, Efl_Canvas_Surface_Wa
return NULL; return NULL;
} }
pd->base = efl_data_ref(eo, EFL_CANVAS_SURFACE_MIXIN); sd = efl_data_scope_get(eo, EFL_CANVAS_SURFACE_CLASS);
pd->base->surf.type = EVAS_NATIVE_SURFACE_WL; sd->surf.type = EVAS_NATIVE_SURFACE_WL;
return eo; return eo;
} }
EOLIAN static void EOLIAN static void
_efl_canvas_surface_wayland_efl_object_destructor(Eo *eo, Efl_Canvas_Surface_Wayland_Data *pd) _efl_canvas_surface_wayland_efl_object_destructor(Eo *eo, Efl_Canvas_Surface_Wayland_Data *pd EINA_UNUSED)
{ {
Evas_Object_Protected_Data *obj; Evas_Object_Protected_Data *obj;
obj = efl_data_scope_get(eo, EFL_CANVAS_OBJECT_CLASS); obj = efl_data_scope_get(eo, EFL_CANVAS_OBJECT_CLASS);
ENFN->image_native_shutdown(ENC, EVAS_NATIVE_SURFACE_WL); ENFN->image_native_shutdown(ENC, EVAS_NATIVE_SURFACE_WL);
efl_data_unref(eo, pd->base);
efl_destructor(eo); efl_destructor(eo);
} }
EOLIAN static Eina_Bool EOLIAN static Eina_Bool
_efl_canvas_surface_wayland_efl_canvas_surface_native_buffer_set(Eo *eo, Efl_Canvas_Surface_Wayland_Data *pd, void *buffer) _efl_canvas_surface_wayland_efl_canvas_surface_native_buffer_set(Eo *eo, Efl_Canvas_Surface_Wayland_Data *pd EINA_UNUSED, void *buffer)
{ {
pd->base->surf.data.wl.legacy_buffer = buffer; Efl_Canvas_Surface_Data *sd = efl_data_scope_get(eo, EFL_CANVAS_SURFACE_CLASS);
if (!_evas_image_native_surface_set(eo, &pd->base->surf))
sd->surf.data.wl.legacy_buffer = buffer;
if (!_evas_image_native_surface_set(eo, &sd->surf))
{ {
ERR("failed to set native buffer"); ERR("failed to set native buffer");
pd->base->buffer = NULL; sd->buffer = NULL;
return EINA_FALSE; return EINA_FALSE;
} }
pd->base->buffer = buffer; sd->buffer = buffer;
return EINA_TRUE; return EINA_TRUE;
} }

View File

@ -1,4 +1,4 @@
class Efl.Canvas.Surface_Wayland (Efl.Object, Efl.Canvas.Surface) class Efl.Canvas.Surface_Wayland (Efl.Canvas.Surface)
{ {
[[Native Wayland surface for Efl canvas]] [[Native Wayland surface for Efl canvas]]

View File

@ -4,14 +4,14 @@
typedef struct _Efl_Canvas_Surface_X11_Data typedef struct _Efl_Canvas_Surface_X11_Data
{ {
Efl_Canvas_Surface_Data *base;
Efl_Canvas_Surface_X11_Pixmap px; Efl_Canvas_Surface_X11_Pixmap px;
} Efl_Canvas_Surface_X11_Data; } Efl_Canvas_Surface_X11_Data;
EOLIAN static Eo * EOLIAN static Eo *
_efl_canvas_surface_x11_efl_object_constructor(Eo *eo, Efl_Canvas_Surface_X11_Data *pd) _efl_canvas_surface_x11_efl_object_constructor(Eo *eo, Efl_Canvas_Surface_X11_Data *pd EINA_UNUSED)
{ {
Evas_Object_Protected_Data *obj; Evas_Object_Protected_Data *obj;
Efl_Canvas_Surface_Data *sd;
eo = efl_constructor(efl_super(eo, MY_CLASS)); eo = efl_constructor(efl_super(eo, MY_CLASS));
obj = efl_data_scope_get(eo, EFL_CANVAS_OBJECT_CLASS); obj = efl_data_scope_get(eo, EFL_CANVAS_OBJECT_CLASS);
@ -23,36 +23,37 @@ _efl_canvas_surface_x11_efl_object_constructor(Eo *eo, Efl_Canvas_Surface_X11_Da
return NULL; return NULL;
} }
pd->base = efl_data_ref(eo, EFL_CANVAS_SURFACE_MIXIN); sd = efl_data_scope_get(eo, EFL_CANVAS_SURFACE_CLASS);
pd->base->surf.version = EVAS_NATIVE_SURFACE_VERSION; sd->surf.version = EVAS_NATIVE_SURFACE_VERSION;
pd->base->surf.type = EVAS_NATIVE_SURFACE_X11; sd->surf.type = EVAS_NATIVE_SURFACE_X11;
return eo; return eo;
} }
EOLIAN static void EOLIAN static void
_efl_canvas_surface_x11_efl_object_destructor(Eo *eo, Efl_Canvas_Surface_X11_Data *pd) _efl_canvas_surface_x11_efl_object_destructor(Eo *eo, Efl_Canvas_Surface_X11_Data *pd EINA_UNUSED)
{ {
Evas_Object_Protected_Data *obj; Evas_Object_Protected_Data *obj;
obj = efl_data_scope_get(eo, EFL_CANVAS_OBJECT_CLASS); obj = efl_data_scope_get(eo, EFL_CANVAS_OBJECT_CLASS);
ENFN->image_native_shutdown(ENC, EVAS_NATIVE_SURFACE_X11); ENFN->image_native_shutdown(ENC, EVAS_NATIVE_SURFACE_X11);
efl_data_unref(eo, pd->base);
efl_destructor(eo); efl_destructor(eo);
} }
EOLIAN static Eina_Bool EOLIAN static Eina_Bool
_efl_canvas_surface_x11_pixmap_set(Eo *eo, Efl_Canvas_Surface_X11_Data *pd EINA_UNUSED, void *visual, unsigned long pixmap) _efl_canvas_surface_x11_pixmap_set(Eo *eo, Efl_Canvas_Surface_X11_Data *pd EINA_UNUSED, void *visual, unsigned long pixmap)
{ {
Efl_Canvas_Surface_Data *sd = efl_data_scope_get(eo, EFL_CANVAS_SURFACE_CLASS);
pd->px.pixmap = pixmap; pd->px.pixmap = pixmap;
pd->px.visual = visual; pd->px.visual = visual;
if (!_evas_image_native_surface_set(eo, &pd->base->surf)) if (!_evas_image_native_surface_set(eo, &sd->surf))
{ {
ERR("failed to set native buffer"); ERR("failed to set native buffer");
pd->base->buffer = NULL; sd->buffer = NULL;
return EINA_FALSE; return EINA_FALSE;
} }
pd->base->buffer = &pd->px; sd->buffer = &pd->px;
return EINA_TRUE; return EINA_TRUE;
} }
@ -67,18 +68,19 @@ EOLIAN static Eina_Bool
_efl_canvas_surface_x11_efl_canvas_surface_native_buffer_set(Eo *eo, Efl_Canvas_Surface_X11_Data *pd, void *buffer) _efl_canvas_surface_x11_efl_canvas_surface_native_buffer_set(Eo *eo, Efl_Canvas_Surface_X11_Data *pd, void *buffer)
{ {
Efl_Canvas_Surface_X11_Pixmap *px = buffer; Efl_Canvas_Surface_X11_Pixmap *px = buffer;
Efl_Canvas_Surface_Data *sd = efl_data_scope_get(eo, EFL_CANVAS_SURFACE_CLASS);
if (px) if (px)
{ {
pd->px.pixmap = px->pixmap; pd->px.pixmap = px->pixmap;
pd->px.visual = px->visual; pd->px.visual = px->visual;
pd->base->buffer = &pd->px; sd->buffer = &pd->px;
} }
else else
{ {
pd->px.pixmap = 0L; pd->px.pixmap = 0L;
pd->px.visual = NULL; pd->px.visual = NULL;
pd->base->buffer = NULL; sd->buffer = NULL;
} }
return efl_canvas_surface_x11_pixmap_set(eo, pd->px.visual, pd->px.pixmap); return efl_canvas_surface_x11_pixmap_set(eo, pd->px.visual, pd->px.pixmap);
} }

View File

@ -5,7 +5,7 @@ struct Efl.Canvas.Surface_X11_Pixmap
pixmap: ulong; [[X11 Pixmap ID.]] pixmap: ulong; [[X11 Pixmap ID.]]
} }
class Efl.Canvas.Surface_X11 (Efl.Object, Efl.Canvas.Surface) class Efl.Canvas.Surface_X11 (Efl.Canvas.Surface)
{ {
[[Native X11 surface for Efl canvas]] [[Native X11 surface for Efl canvas]]