Eolian: Integration of Evas Out

This commit is contained in:
Yossi Kantor 2014-03-12 20:13:45 +02:00 committed by Daniel Zaoui
parent 2219b5434c
commit 7e6c21c44b
4 changed files with 68 additions and 104 deletions

View File

@ -31,7 +31,9 @@ BUILT_SOURCES += \
lib/evas/canvas/evas_grid.eo.c \
lib/evas/canvas/evas_grid.eo.h \
lib/evas/canvas/evas_image.eo.c \
lib/evas/canvas/evas_image.eo.h
lib/evas/canvas/evas_image.eo.h \
lib/evas/canvas/evas_out.eo.c \
lib/evas/canvas/evas_out.eo.h
EXTRA_DIST += \
lib/evas/canvas/evas_object.eo \
@ -48,7 +50,8 @@ EXTRA_DIST += \
lib/evas/canvas/evas_common_interface.eo \
lib/evas/canvas/evas.eo \
lib/evas/canvas/evas_grid.eo \
lib/evas/canvas/evas_image.eo
lib/evas/canvas/evas_image.eo \
lib/evas/canvas/evas_out.eo
lib_LTLIBRARIES += lib/evas/libevas.la
noinst_LTLIBRARIES =
@ -78,7 +81,8 @@ nodist_installed_evascanvasheaders_DATA = \
lib/evas/canvas/evas_object.eo.h \
lib/evas/canvas/evas.eo.h \
lib/evas/canvas/evas_grid.eo.h \
lib/evas/canvas/evas_image.eo.h
lib/evas/canvas/evas_image.eo.h \
lib/evas/canvas/evas_out.eo.h
noinst_HEADERS = \
lib/evas/include/evas_inline.x \

View File

@ -6678,7 +6678,9 @@ enum
/**
* @}
*/
#include "canvas/evas_out.eo.h"
#if 0
#define EVAS_OUT_CLASS evas_out_class_get()
const Eo_Class *evas_out_class_get(void) EINA_CONST;
extern EAPI Eo_Op EVAS_OUT_BASE_ID;
@ -6776,3 +6778,5 @@ EO_TYPECHECK(Eina_Bool *, ret)
#define evas_out_engine_info_get(ret) \
EVAS_OUT_ID(EVAS_OUT_SUB_ID_ENGINE_INFO_GET), \
EO_TYPECHECK(Evas_Engine_Info **, ret)
#endif

View File

@ -7,10 +7,9 @@
#include <Eo.h>
EAPI Eo_Op EVAS_OUT_BASE_ID = EO_NOOP;
#define MY_CLASS EVAS_OUT_CLASS
typedef struct _Evas_Out_Public_Data Evas_Out_Public_Data;
struct _Evas_Out_Public_Data
typedef struct _Evas_Out_Data Evas_Out_Data;
struct _Evas_Out_Data
{
void *info;/*, *context, *output;*/
Evas_Coord x, y, w, h;
@ -27,10 +26,9 @@ evas_out_add(Evas *e)
return eo_obj;
}
static void
_constructor(Eo *eo_obj, void *_pd, va_list *list EINA_UNUSED)
EOLIAN static void
_evas_out_constructor(Eo *eo_obj, Evas_Out_Data *eo_dat)
{
Evas_Out_Public_Data *eo_dat = _pd;
Eo *eo_parent;
Evas_Public_Data *e;
@ -53,10 +51,9 @@ evas_output_del(Evas_Out *evo)
eo_unref(evo);
}
static void
_destructor(Eo *eo_obj, void *_pd, va_list *list EINA_UNUSED)
EOLIAN static void
_evas_out_destructor(Eo *eo_obj, Evas_Out_Data *eo_dat)
{
Evas_Out_Public_Data *eo_dat = _pd;
Eo *eo_parent;
Evas_Public_Data *e;
@ -73,20 +70,9 @@ _destructor(Eo *eo_obj, void *_pd, va_list *list EINA_UNUSED)
eo_do_super(eo_obj, MY_CLASS, eo_destructor());
}
EAPI void
evas_output_view_set(Evas_Out *evo, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h)
EOLIAN static void
_evas_out_view_set(Eo *eo_e EINA_UNUSED, Evas_Out_Data *eo_dat, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h)
{
eo_do((Eo *)evo, evas_out_view_set(x, y, w, h));
}
static void
_output_view_set(Eo *eo_e EINA_UNUSED, void *_pd, va_list *list)
{
Evas_Out_Public_Data *eo_dat = _pd;
Evas_Coord x = va_arg(*list, Evas_Coord);
Evas_Coord y = va_arg(*list, Evas_Coord);
Evas_Coord w = va_arg(*list, Evas_Coord);
Evas_Coord h = va_arg(*list, Evas_Coord);
eo_dat->x = x;
eo_dat->y = y;
eo_dat->w = w;
@ -95,97 +81,29 @@ _output_view_set(Eo *eo_e EINA_UNUSED, void *_pd, va_list *list)
// XXX: tell evas to add damage if viewport loc/size changed
}
EAPI void
evas_output_view_get(const Evas_Out *evo, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h)
EOLIAN static void
_evas_out_view_get(Eo *eo_e EINA_UNUSED, Evas_Out_Data *eo_dat, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h)
{
eo_do((Eo *)evo, evas_out_view_get(x, y, w, h));
}
static void
_output_view_get(Eo *eo_e EINA_UNUSED, void *_pd, va_list *list)
{
Evas_Out_Public_Data *eo_dat = _pd;
Evas_Coord *x = va_arg(*list, Evas_Coord *);
Evas_Coord *y = va_arg(*list, Evas_Coord *);
Evas_Coord *w = va_arg(*list, Evas_Coord *);
Evas_Coord *h = va_arg(*list, Evas_Coord *);
if (x) *x = eo_dat->x;
if (y) *y = eo_dat->y;
if (w) *w = eo_dat->w;
if (h) *h = eo_dat->h;
}
EAPI Eina_Bool
evas_output_engine_info_set(Evas_Out *evo, Evas_Engine_Info *info)
EOLIAN static Eina_Bool
_evas_out_engine_info_set(Eo *eo_e EINA_UNUSED, Evas_Out_Data *eo_dat, Evas_Engine_Info *info)
{
Eina_Bool ret = EINA_FALSE;
eo_do(evo, evas_out_engine_info_set(info, &ret));
return ret;
}
if (eo_dat->info != info) return EINA_FALSE;
static void
_output_engine_info_set(Eo *eo_e EINA_UNUSED, void *_pd, va_list *list)
{
Evas_Out_Public_Data *eo_dat = _pd;
Evas_Engine_Info *info = va_arg(*list, Evas_Engine_Info *);
Eina_Bool *ret = va_arg(*list, Eina_Bool *);
if (eo_dat->info != info)
{
*ret = EINA_FALSE;
return;
}
// XXX: handle setting of engine info here
if (ret) *ret = EINA_TRUE;
return EINA_TRUE;
}
EAPI Evas_Engine_Info *
evas_output_engine_info_get(const Evas_Out *evo)
EOLIAN static Evas_Engine_Info*
_evas_out_engine_info_get(Eo *eo_e EINA_UNUSED, Evas_Out_Data *eo_dat)
{
Evas_Engine_Info *ret = NULL;
eo_do((Eo *)evo, evas_out_engine_info_get(&ret));
return ret;
return eo_dat->info;
}
static void
_output_engine_info_get(Eo *eo_e EINA_UNUSED, void *_pd, va_list *list)
{
Evas_Out_Public_Data *eo_dat = _pd;
Evas_Engine_Info **ret = va_arg(*list, Evas_Engine_Info **);
if (ret) *ret = eo_dat->info;
}
static void
_class_constructor(Eo_Class *klass)
{
const Eo_Op_Func_Description func_desc[] = {
EO_OP_FUNC(EO_BASE_ID(EO_BASE_SUB_ID_CONSTRUCTOR), _constructor),
EO_OP_FUNC(EO_BASE_ID(EO_BASE_SUB_ID_DESTRUCTOR), _destructor),
EO_OP_FUNC(EVAS_OUT_ID(EVAS_OUT_SUB_ID_VIEW_SET), _output_view_set),
EO_OP_FUNC(EVAS_OUT_ID(EVAS_OUT_SUB_ID_VIEW_GET), _output_view_get),
EO_OP_FUNC(EVAS_OUT_ID(EVAS_OUT_SUB_ID_ENGINE_INFO_SET), _output_engine_info_set),
EO_OP_FUNC(EVAS_OUT_ID(EVAS_OUT_SUB_ID_ENGINE_INFO_GET), _output_engine_info_get),
EO_OP_FUNC_SENTINEL
};
eo_class_funcs_set(klass, func_desc);
}
static const Eo_Op_Description op_desc[] = {
EO_OP_DESCRIPTION(EVAS_OUT_SUB_ID_VIEW_SET, "Set the canvas viewport region for the output"),
EO_OP_DESCRIPTION(EVAS_OUT_SUB_ID_VIEW_GET, "Get the canvas viewport region for the output"),
EO_OP_DESCRIPTION(EVAS_OUT_SUB_ID_ENGINE_INFO_SET, "Set engine specific information for rendering to the given output"),
EO_OP_DESCRIPTION(EVAS_OUT_SUB_ID_ENGINE_INFO_GET, "Get engine specific information for rendering to the given output"),
EO_OP_DESCRIPTION_SENTINEL
};
static const Eo_Class_Description class_desc = {
EO_VERSION,
"Evas_Out",
EO_CLASS_TYPE_REGULAR,
EO_CLASS_DESCRIPTION_OPS(&EVAS_OUT_BASE_ID, op_desc, EVAS_OUT_SUB_ID_LAST),
NULL,
sizeof(Evas_Out_Public_Data),
_class_constructor,
NULL
};
EO_DEFINE_CLASS(evas_out_class_get, &class_desc, EO_BASE_CLASS, NULL);
#include "canvas/evas_out.eo.c"

View File

@ -0,0 +1,38 @@
class Evas_Out (Eo_Base)
{
eo_prefix: evas_out;
legacy_prefix: evas_output;
properties {
view {
set {
/*@ Sets the viewport region of the canvas that the output displays This sets both the viewport region in the canvas that displays on the given output, but also the viewport size will match the output resolution 1:1. */
}
get {
/*@ Gets the viewport region of the canvas that the output displays */
}
values {
Evas_Coord x;
Evas_Coord y;
Evas_Coord w;
Evas_Coord h;
}
}
engine_info {
set {
/*@ Sets the engine specific output parameters for a given output. */
return Eina_Bool;
}
get {
/*@ Gets the engine specific output parameters for a given output. */
}
values {
Evas_Engine_Info *info; /*@ The engine parameters */
}
}
}
implements {
Eo_Base::constructor;
Eo_Base::destructor;
}
}