From 7e6c21c44b1a8c2a32db938d6995f2cd9438240e Mon Sep 17 00:00:00 2001 From: Yossi Kantor Date: Wed, 12 Mar 2014 20:13:45 +0200 Subject: [PATCH] Eolian: Integration of Evas Out --- src/Makefile_Evas.am | 10 ++- src/lib/evas/Evas_Eo.h | 4 ++ src/lib/evas/canvas/evas_out.c | 120 +++++--------------------------- src/lib/evas/canvas/evas_out.eo | 38 ++++++++++ 4 files changed, 68 insertions(+), 104 deletions(-) create mode 100644 src/lib/evas/canvas/evas_out.eo diff --git a/src/Makefile_Evas.am b/src/Makefile_Evas.am index 7afd640477..9ff154a601 100644 --- a/src/Makefile_Evas.am +++ b/src/Makefile_Evas.am @@ -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 \ diff --git a/src/lib/evas/Evas_Eo.h b/src/lib/evas/Evas_Eo.h index 583b0fd260..c53222e237 100644 --- a/src/lib/evas/Evas_Eo.h +++ b/src/lib/evas/Evas_Eo.h @@ -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 \ No newline at end of file diff --git a/src/lib/evas/canvas/evas_out.c b/src/lib/evas/canvas/evas_out.c index 2b1bdb629a..5e877d16a4 100644 --- a/src/lib/evas/canvas/evas_out.c +++ b/src/lib/evas/canvas/evas_out.c @@ -7,10 +7,9 @@ #include -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" \ No newline at end of file diff --git a/src/lib/evas/canvas/evas_out.eo b/src/lib/evas/canvas/evas_out.eo new file mode 100644 index 0000000000..1b777efb4d --- /dev/null +++ b/src/lib/evas/canvas/evas_out.eo @@ -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; + } + +} \ No newline at end of file