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"
#define MY_CLASS EFL_CANVAS_SURFACE_MIXIN
#define MY_CLASS EFL_CANVAS_SURFACE_CLASS
EOLIAN static Eo *
_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.

View File

@ -4,13 +4,13 @@
typedef struct _Efl_Canvas_Surface_Tbm_Data
{
Efl_Canvas_Surface_Data *base;
} Efl_Canvas_Surface_Tbm_Data;
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;
Efl_Canvas_Surface_Data *sd;
eo = efl_constructor(efl_super(eo, MY_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;
}
pd->base = efl_data_ref(eo, EFL_CANVAS_SURFACE_MIXIN);
pd->base->surf.type = EVAS_NATIVE_SURFACE_TBM;
sd = efl_data_scope_get(eo, EFL_CANVAS_SURFACE_CLASS);
sd->surf.type = EVAS_NATIVE_SURFACE_TBM;
return eo;
}
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;
obj = efl_data_scope_get(eo, EFL_CANVAS_OBJECT_CLASS);
ENFN->image_native_shutdown(ENC, EVAS_NATIVE_SURFACE_TBM);
efl_data_unref(eo, pd->base);
efl_destructor(eo);
}
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;
if (!_evas_image_native_surface_set(eo, &pd->base->surf))
Efl_Canvas_Surface_Data *sd = efl_data_scope_get(eo, EFL_CANVAS_SURFACE_CLASS);
sd->surf.data.tbm.buffer = buffer;
if (!_evas_image_native_surface_set(eo, &sd->surf))
{
ERR("failed to set native buffer");
pd->base->buffer = NULL;
sd->buffer = NULL;
return EINA_FALSE;
}
pd->base->buffer = buffer;
sd->buffer = buffer;
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]]

View File

@ -4,13 +4,13 @@
typedef struct _Efl_Canvas_Surface_Wayland_Data
{
Efl_Canvas_Surface_Data *base;
} Efl_Canvas_Surface_Wayland_Data;
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;
Efl_Canvas_Surface_Data *sd;
eo = efl_constructor(efl_super(eo, MY_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;
}
pd->base = efl_data_ref(eo, EFL_CANVAS_SURFACE_MIXIN);
pd->base->surf.type = EVAS_NATIVE_SURFACE_WL;
sd = efl_data_scope_get(eo, EFL_CANVAS_SURFACE_CLASS);
sd->surf.type = EVAS_NATIVE_SURFACE_WL;
return eo;
}
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;
obj = efl_data_scope_get(eo, EFL_CANVAS_OBJECT_CLASS);
ENFN->image_native_shutdown(ENC, EVAS_NATIVE_SURFACE_WL);
efl_data_unref(eo, pd->base);
efl_destructor(eo);
}
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;
if (!_evas_image_native_surface_set(eo, &pd->base->surf))
Efl_Canvas_Surface_Data *sd = efl_data_scope_get(eo, EFL_CANVAS_SURFACE_CLASS);
sd->surf.data.wl.legacy_buffer = buffer;
if (!_evas_image_native_surface_set(eo, &sd->surf))
{
ERR("failed to set native buffer");
pd->base->buffer = NULL;
sd->buffer = NULL;
return EINA_FALSE;
}
pd->base->buffer = buffer;
sd->buffer = buffer;
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]]

View File

@ -4,14 +4,14 @@
typedef struct _Efl_Canvas_Surface_X11_Data
{
Efl_Canvas_Surface_Data *base;
Efl_Canvas_Surface_X11_Pixmap px;
} Efl_Canvas_Surface_X11_Data;
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;
Efl_Canvas_Surface_Data *sd;
eo = efl_constructor(efl_super(eo, MY_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;
}
pd->base = efl_data_ref(eo, EFL_CANVAS_SURFACE_MIXIN);
pd->base->surf.version = EVAS_NATIVE_SURFACE_VERSION;
pd->base->surf.type = EVAS_NATIVE_SURFACE_X11;
sd = efl_data_scope_get(eo, EFL_CANVAS_SURFACE_CLASS);
sd->surf.version = EVAS_NATIVE_SURFACE_VERSION;
sd->surf.type = EVAS_NATIVE_SURFACE_X11;
return eo;
}
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;
obj = efl_data_scope_get(eo, EFL_CANVAS_OBJECT_CLASS);
ENFN->image_native_shutdown(ENC, EVAS_NATIVE_SURFACE_X11);
efl_data_unref(eo, pd->base);
efl_destructor(eo);
}
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_Data *sd = efl_data_scope_get(eo, EFL_CANVAS_SURFACE_CLASS);
pd->px.pixmap = pixmap;
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");
pd->base->buffer = NULL;
sd->buffer = NULL;
return EINA_FALSE;
}
pd->base->buffer = &pd->px;
sd->buffer = &pd->px;
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_Pixmap *px = buffer;
Efl_Canvas_Surface_Data *sd = efl_data_scope_get(eo, EFL_CANVAS_SURFACE_CLASS);
if (px)
{
pd->px.pixmap = px->pixmap;
pd->px.visual = px->visual;
pd->base->buffer = &pd->px;
sd->buffer = &pd->px;
}
else
{
pd->px.pixmap = 0L;
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);
}

View File

@ -5,7 +5,7 @@ struct Efl.Canvas.Surface_X11_Pixmap
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]]