forked from enlightenment/efl
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:
parent
4a4d32b60d
commit
7a5589b14a
|
@ -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)
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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]]
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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]]
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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]]
|
||||
|
||||
|
|
Loading…
Reference in New Issue