From a7dcdaeb551927402b711f4516dd3083ff0f4ff9 Mon Sep 17 00:00:00 2001 From: doursse Date: Thu, 17 Jul 2008 06:06:34 +0000 Subject: [PATCH] * use ECORE_EVAS_CHECK_MODULE for Windows modules (other modules will follow later) * update Windows ecore evas module accordingly * factorize win32 code before cedric changes :p * add warning for vc++ (patch from Dmitriy Mazovka) SVN revision: 35137 --- legacy/ecore/configure.in | 129 ++--- legacy/ecore/src/lib/ecore_evas/Ecore_Evas.h | 16 +- legacy/ecore/src/lib/ecore_evas/ecore_evas.c | 16 +- .../src/lib/ecore_evas/ecore_evas_private.h | 12 +- .../src/lib/ecore_evas/ecore_evas_win32.c | 546 ++++++++---------- 5 files changed, 295 insertions(+), 424 deletions(-) diff --git a/legacy/ecore/configure.in b/legacy/ecore/configure.in index b3f6ed9371..3b2a587d9c 100644 --- a/legacy/ecore/configure.in +++ b/legacy/ecore/configure.in @@ -490,6 +490,7 @@ if test "x$have_ecore_x" = "xyes" -a "x$have_ecore_evas" = "xyes"; then ] ) fi + if test "x$have_ecore_evas_x11" = "xyes" -o \ "x$have_ecore_evas_x11_gl" = "yes" -o \ "x$have_ecore_evas_xrender" = "yes" -o \ @@ -499,106 +500,57 @@ if test "x$have_ecore_x" = "xyes" -a "x$have_ecore_evas" = "xyes"; then fi dnl ecore_win32 -# TODO: We should first check if we have win32 available before checking for win32 evas -# TODO: Need to check if we have evas before testing win32 evas engines -PKG_CHECK_MODULES(EVAS_SOFTWARE_DDRAW, evas-software-ddraw >= 0.9.9.41, - [ have_ddraw="yes" - ddraw_libs="-lddraw -ldxguid" ], - [ have_ddraw="no" ] -) -AC_SUBST(ddraw_libs) -PKG_CHECK_MODULES(EVAS_SOFTWARE_16_DDRAW, evas-software-16-ddraw >= 0.9.9.41, - [ have_ddraw_16="yes" - ddraw_16_libs="-lddraw -ldxguid" ], - [ have_ddraw_16="no" ] -) -AC_SUBST(ddraw_16_libs) - -PKG_CHECK_MODULES(EVAS_DIRECT3D, evas-direct3d >= 0.9.9.41, - [ have_direct3d="yes" - direct3d_libs="-ld3d9 -ld3dx9d" ], - [ have_direct3d="no" ] -) -AC_SUBST(direct3d_libs) - -PKG_CHECK_MODULES(EVAS_OPENGL_GLEW, evas-opengl-glew >= 0.9.9.41, - [ have_opengl_glew="yes" - glew_libs="-lglew32 -lgdi32" ], - [ have_opengl_glew="no" ] -) -AC_SUBST(glew_libs) - -have_win32="no" -if test "x${have_ddraw}" = "xyes" -o "x${have_ddraw_16}" = "xyes" -o "x${have_direct3d}" = "xyes" -o "x${have_opengl_glew}" = "xyes"; then - have_win32="yes" -fi - -ECORE_CHECK_MODULE([Win32], [no], [$have_win32], +ECORE_CHECK_MODULE([Win32], [no], [yes], [ecore_win32_libs="-lgdi32"]) AC_SUBST(ecore_win32_libs) -if test "x$have_ecore_win32" = "xyes"; then +want_ecore_evas_software_ddraw="yes" +ECORE_EVAS_CHECK_MODULE([software-ddraw], + [$want_ecore_evas_software_ddraw], + [Software DirectDraw], + $have_ecore_win32) + +want_ecore_evas_direct3d="yes" +ECORE_EVAS_CHECK_MODULE([direct3d], + [$want_ecore_evas_direct3d], + [Direct3d], + $have_ecore_win32) + +want_ecore_evas_opengl_glew="yes" +ECORE_EVAS_CHECK_MODULE([opengl-glew], + [$want_ecore_evas_opengl_glew], + [Glew OpenGL], + $have_ecore_win32) + +want_ecore_evas_software_16_ddraw="yes" +ECORE_EVAS_CHECK_MODULE([software-16-ddraw], + [$want_ecore_evas_software_16_ddraw], + [16 bpp Software DirectDraw], + $have_ecore_win32) + +if test "x$have_ecore_evas_software_ddraw" = "xyes" -o \ + "x$have_ecore_evas_direct3d" = "yes" -o \ + "x$have_ecore_evas_opengl_glew" = "yes" -o \ + "x$have_ecore_evas_software_16_ddraw" = "yes"; then + AC_DEFINE(BUILD_ECORE_EVAS_WIN32, 1, [Support for Win32 Engine in Ecore_Evas]) requirements_ecore_evas="$requirements_ecore_evas ecore-win32" fi -have_ecore_evas_ddraw="no" -if test "x${have_ecore_win32}" = "xyes" -a "x${have_ddraw}" = "xyes"; then - AC_DEFINE(BUILD_ECORE_EVAS_SOFTWARE_DIRECTDRAW, 1, [Support for DirectDraw Engine in Ecore_Evas]) - have_ecore_evas_ddraw="yes" -fi - -have_ecore_evas_ddraw_16="no" -if test "x${have_ecore_win32}" = "xyes" -a "x${have_ddraw_16}" = "xyes"; then - AC_DEFINE(BUILD_ECORE_EVAS_SOFTWARE_DIRECTDRAW_16, 1, [Support for 16 bpp DirectDraw Engine in Ecore_Evas]) - have_ecore_evas_ddraw_16="yes" -fi - -have_ecore_evas_direct3d="no" -if test "x${have_ecore_win32}" = "xyes" -a "x${have_direct3d}" = "xyes"; then - AC_DEFINE(BUILD_ECORE_EVAS_DIRECT3D, 1, [Support for Direct3D Engine in Ecore_Evas]) - have_ecore_evas_direct3d="yes" -fi - -have_ecore_evas_opengl_glew="no" -if test "x${have_ecore_win32}" = "xyes" -a "x${have_opengl_glew}" = "xyes"; then - AC_DEFINE(BUILD_ECORE_EVAS_GL_GLEW, 1, [Support for OpenGL with Glew Engine in Ecore_Evas]) - have_ecore_evas_opengl_glew="yes" -fi +dnl ecore_wince ECORE_CHECK_MODULE([WinCE], [no]) -if test "x$have_ecore_wince" = "xyes"; then +want_ecore_evas_software_16_wince="yes" +ECORE_EVAS_CHECK_MODULE([software-16-wince], + [$want_ecore_evas_software_16_wince], + [16 bpp Software Windows CE], + $have_ecore_wince) + +if test "x$have_ecore_evas_software_16_wince" = "xyes"; then requirements_ecore_evas="$requirements_ecore_evas ecore-wince" fi -have_ecore_evas_software_16_wince="no" -if test "x$have_ecore_wince" = "xyes" -a "x$have_ecore_evas" = "xyes"; then - want_ecore_evas_wince="yes" - AC_ARG_ENABLE(ecore-evas-software-16-wince, - AC_HELP_STRING( - [--enable-ecore-evas-software-16-wince], - [enable WinCE support in the ecore_evas module.] - ), - [ want_ecore_evas_wince=$enableval ] - ) - AC_MSG_CHECKING(whether ecore_evas WinCE support is to be built) - AC_MSG_RESULT($want_ecore_evas_wince) - - if test "x$want_ecore_evas_wince" = "xyes"; then - PKG_CHECK_MODULES(EVAS_SOFTWARE_16_WINCE, evas-software-16-wince, [ - AC_DEFINE(BUILD_ECORE_EVAS_SOFTWARE_16_WINCE, 1, [Support for WinCE Engine in Ecore_Evas]) - have_ecore_evas_software_16_wince="yes"; - ], [ - have_ecore_evas_software_16_wince="no"; - ]) - fi - - if test "x$have_ecore_evas_software_16_wince" = "xyes"; then - requirements_ecore_evas="$requirements_ecore_evas ecore-wince" - fi -fi - dnl ecore_dfb PKG_CHECK_MODULES(DIRECTFB, directfb >= 0.9.16, [ have_directfb="yes" ], @@ -911,9 +863,10 @@ echo " Ecore_Evas XRender Support...: $have_ecore_evas_xrender" echo " Ecore_Evas X11 16bpp Support.: $have_ecore_evas_x11_16" echo " Ecore_Win32..................: $have_ecore_win32" -echo " Ecore_Evas DirectDraw Support: $have_ecore_evas_ddraw" +echo " Ecore_Evas DirectDraw Support: $have_ecore_evas_software_ddraw" echo " Ecore_Evas Direct3D Support..: $have_ecore_evas_direct3d" echo " Ecore_Evas GL Glew Support...: $have_ecore_evas_opengl_glew" +echo " Ecore_Evas DirectDraw 16bpp Support: $have_ecore_evas_software_16_ddraw" echo " Ecore_WinCE..................: $have_ecore_wince" echo " Ecore_Evas WinCE Support.....: $have_ecore_evas_software_16_wince" echo " Ecore_DFB....................: $have_ecore_directfb" diff --git a/legacy/ecore/src/lib/ecore_evas/Ecore_Evas.h b/legacy/ecore/src/lib/ecore_evas/Ecore_Evas.h index 785d2b722f..f760bd99da 100644 --- a/legacy/ecore/src/lib/ecore_evas/Ecore_Evas.h +++ b/legacy/ecore/src/lib/ecore_evas/Ecore_Evas.h @@ -76,11 +76,11 @@ typedef enum _Ecore_Evas_Engine_Type ECORE_EVAS_ENGINE_DIRECTFB, ECORE_EVAS_ENGINE_SOFTWARE_X11_16, ECORE_EVAS_ENGINE_SOFTWARE_DDRAW, - ECORE_EVAS_ENGINE_SOFTWARE_DDRAW_16, + ECORE_EVAS_ENGINE_SOFTWARE_16_DDRAW, ECORE_EVAS_ENGINE_DIRECT3D, - ECORE_EVAS_ENGINE_GL_GLEW, + ECORE_EVAS_ENGINE_OPENGL_GLEW, ECORE_EVAS_ENGINE_SDL, - ECORE_EVAS_ENGINE_SOFTWARE_WINCE, + ECORE_EVAS_ENGINE_SOFTWARE_16_WINCE, } Ecore_Evas_Engine_Type; typedef enum _Ecore_Evas_Avoid_Damage_Type @@ -89,7 +89,7 @@ typedef enum _Ecore_Evas_Avoid_Damage_Type ECORE_EVAS_AVOID_DAMAGE_EXPOSE = 1, ECORE_EVAS_AVOID_DAMAGE_BUILT_IN = 2 } Ecore_Evas_Avoid_Damage_Type; - + #ifndef _ECORE_X_H #define _ECORE_X_WINDOW_PREDEF typedef unsigned int Ecore_X_Window; @@ -165,30 +165,26 @@ EAPI Ecore_Evas *ecore_evas_software_ddraw_new(Ecore_Win32_Window *parent, int width, int height); -EAPI Ecore_Win32_Window *ecore_evas_software_ddraw_window_get(Ecore_Evas *ee); - EAPI Ecore_Evas *ecore_evas_software_ddraw_16_new(Ecore_Win32_Window *parent, int x, int y, int width, int height); -EAPI Ecore_Win32_Window *ecore_evas_software_ddraw_16_window_get(Ecore_Evas *ee); - EAPI Ecore_Evas *ecore_evas_direct3d_new(Ecore_Win32_Window *parent, int x, int y, int width, int height); -EAPI Ecore_Win32_Window *ecore_evas_direct3d_window_get(Ecore_Evas *ee); - EAPI Ecore_Evas *ecore_evas_gl_glew_new(Ecore_Win32_Window *parent, int x, int y, int width, int height); +EAPI Ecore_Win32_Window *ecore_evas_win32_window_get(Ecore_Evas *ee); + EAPI Ecore_Evas *ecore_evas_sdl_new(const char* name, int w, int h, int fullscreen, int hwsurface, int noframe, int alpha); EAPI Ecore_Evas *ecore_evas_software_wince_new(Ecore_WinCE_Window *parent, diff --git a/legacy/ecore/src/lib/ecore_evas/ecore_evas.c b/legacy/ecore/src/lib/ecore_evas/ecore_evas.c index 8f1c52042f..95df6f4de3 100644 --- a/legacy/ecore/src/lib/ecore_evas/ecore_evas.c +++ b/legacy/ecore/src/lib/ecore_evas/ecore_evas.c @@ -67,7 +67,7 @@ ecore_evas_engine_type_supported_get(Ecore_Evas_Engine_Type engine) return 0; #endif case ECORE_EVAS_ENGINE_SOFTWARE_DDRAW: -#ifdef BUILD_ECORE_EVAS_DIRECTDRAW +#ifdef BUILD_ECORE_EVAS_SOFTWARE_DDRAW return 1; #else return 0; @@ -78,8 +78,8 @@ ecore_evas_engine_type_supported_get(Ecore_Evas_Engine_Type engine) #else return 0; #endif - case ECORE_EVAS_ENGINE_GL_GLEW: -#ifdef BUILD_ECORE_EVAS_GL_GLEW + case ECORE_EVAS_ENGINE_OPENGL_GLEW: +#ifdef BUILD_ECORE_EVAS_OPENGL_GLEW return 1; #else return 0; @@ -90,8 +90,14 @@ ecore_evas_engine_type_supported_get(Ecore_Evas_Engine_Type engine) #else return 0; #endif - case ECORE_EVAS_ENGINE_SOFTWARE_WINCE: -#ifdef BUILD_ECORE_EVAS_WINCE + case ECORE_EVAS_ENGINE_SOFTWARE_16_DDRAW: +#ifdef BUILD_ECORE_EVAS_SOFTWARE_16_DDRAW + return 1; +#else + return 0; +#endif + case ECORE_EVAS_ENGINE_SOFTWARE_16_WINCE: +#ifdef BUILD_ECORE_EVAS_SOFTWARE_16_WINCE return 1; #else return 0; diff --git a/legacy/ecore/src/lib/ecore_evas/ecore_evas_private.h b/legacy/ecore/src/lib/ecore_evas/ecore_evas_private.h index 782299c32c..b52a6aa2e3 100644 --- a/legacy/ecore/src/lib/ecore_evas/ecore_evas_private.h +++ b/legacy/ecore/src/lib/ecore_evas/ecore_evas_private.h @@ -65,18 +65,18 @@ #ifdef BUILD_ECORE_EVAS_BUFFER # include #endif -#ifdef BUILD_ECORE_WIN32 +#ifdef BUILD_ECORE_EVAS_WIN32 # include "Ecore_Win32.h" -# ifdef BUILD_ECORE_EVAS_SOFTWARE_DIRECTDRAW +# ifdef BUILD_ECORE_EVAS_SOFTWARE_DDRAW # include # endif -# ifdef BUILD_ECORE_EVAS_SOFTWARE_DIRECTDRAW_16 +# ifdef BUILD_ECORE_EVAS_SOFTWARE_16_DDRAW # include # endif # ifdef BUILD_ECORE_EVAS_DIRECT3D # include # endif -# ifdef BUILD_ECORE_EVAS_GL_GLEW +# ifdef BUILD_ECORE_EVAS_OPENGL_GLEW # include # endif #endif @@ -194,7 +194,7 @@ struct _Ecore_Evas_Engine Ecore_DirectFB_Window *window; } directfb; #endif -#ifdef BUILD_ECORE_WIN32 +#ifdef BUILD_ECORE_EVAS_WIN32 struct { Ecore_Win32_Window *parent; Ecore_Win32_Window *window; @@ -303,7 +303,7 @@ void _ecore_evas_buffer_render(Ecore_Evas *ee); #ifdef BUILD_ECORE_EVAS_DIRECTFB int _ecore_evas_directfb_shutdown(void); #endif -#ifdef BUILD_ECORE_WIN32 +#ifdef BUILD_ECORE_EVAS_WIN32 int _ecore_evas_win32_shutdown(void); #endif #ifdef BUILD_ECORE_EVAS_SOFTWARE_16_WINCE diff --git a/legacy/ecore/src/lib/ecore_evas/ecore_evas_win32.c b/legacy/ecore/src/lib/ecore_evas/ecore_evas_win32.c index 0f9218e825..b68c524d2a 100644 --- a/legacy/ecore/src/lib/ecore_evas/ecore_evas_win32.c +++ b/legacy/ecore/src/lib/ecore_evas/ecore_evas_win32.c @@ -2,20 +2,24 @@ * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2 */ +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + #include /* for NULL */ -#include "config.h" #include "Ecore.h" #include "ecore_private.h" -#include "ecore_evas_private.h" -#include "Ecore_Evas.h" -#ifdef BUILD_ECORE_WIN32 +#ifdef BUILD_ECORE_EVAS_WIN32 # include "Ecore_Win32.h" # include "ecore_win32_private.h" -#endif /* BUILD_ECORE_WIN32 */ +#endif /* BUILD_ECORE_EVAS_WIN32 */ + +#include "ecore_evas_private.h" +#include "Ecore_Evas.h" -#ifdef BUILD_ECORE_WIN32 +#ifdef BUILD_ECORE_EVAS_WIN32 #define ECORE_EVAS_EVENT_COUNT 14 @@ -416,7 +420,11 @@ _ecore_evas_win32_event_window_damage(void *data __UNUSED__, int type __UNUSED__ if (ee->prop.avoid_damage) { -#warning [ECORE] [WIN32] No Region code +#ifdef _MSC_VER +# pragma message ("[ECORE] [WIN32] No Region code") +#else +# warning [ECORE] [WIN32] No Region code +#endif /* ! _MSC_VER */ } else { @@ -682,8 +690,10 @@ _ecore_evas_win32_rotation_set(Ecore_Evas *ee, int rotation) if (ee->rotation == rotation) return; rot_dif = ee->rotation - rotation; if (rot_dif < 0) rot_dif = -rot_dif; + if (!strcmp(ee->driver, "software_ddraw")) { +#ifdef BUILD_ECORE_EVAS_SOFTWARE_DDRAW Evas_Engine_Info_Software_DDraw *einfo; einfo = (Evas_Engine_Info_Software_DDraw *)evas_engine_info_get(ee->evas); @@ -743,6 +753,7 @@ _ecore_evas_win32_rotation_set(Ecore_Evas *ee, int rotation) evas_damage_rectangle_add(ee->evas, 0, 0, ee->h, ee->w); else evas_damage_rectangle_add(ee->evas, 0, 0, ee->w, ee->h); +#endif /* BUILD_ECORE_EVAS_SOFTWARE_DDRAW */ } } @@ -917,19 +928,20 @@ _ecore_evas_win32_fullscreen_set(Ecore_Evas *ee, int on) /* else */ /* _ecore_evas_win32_state_update(ee); */ } -#endif + +#endif /* BUILD_ECORE_EVAS_WIN32 */ static void * _ecore_evas_win32_window_get(Ecore_Evas *ee) { -#ifdef BUILD_ECORE_WIN32 +#ifdef BUILD_ECORE_EVAS_WIN32 return ee->engine.win32.window; #else return NULL; -#endif /* BUILD_ECORE_WIN32 */ +#endif /* BUILD_ECORE_EVAS_WIN32 */ } -#ifdef BUILD_ECORE_WIN32 +#ifdef BUILD_ECORE_EVAS_WIN32 static const Ecore_Evas_Engine_Func _ecore_win32_engine_func = { _ecore_evas_win32_free, @@ -980,294 +992,59 @@ static const Ecore_Evas_Engine_Func _ecore_win32_engine_func = _ecore_evas_win32_window_get }; -#endif /* BUILD_ECORE_WIN32 */ +#endif /* BUILD_ECORE_EVAS_WIN32 */ /* API */ -EAPI Ecore_Evas * -ecore_evas_software_ddraw_new(Ecore_Win32_Window *parent, - int x, - int y, - int width, - int height) +static int +_ecore_evas_engine_software_ddraw_init(Ecore_Evas *ee) { -#ifdef BUILD_ECORE_EVAS_SOFTWARE_DIRECTDRAW +#ifdef BUILD_ECORE_EVAS_SOFTWARE_DDRAW Evas_Engine_Info_Software_DDraw *einfo; - Ecore_Evas *ee; + const char *driver; int rmethod; - rmethod = evas_render_method_lookup("software_ddraw"); + driver = "software_ddraw"; + + rmethod = evas_render_method_lookup(driver); if (!rmethod) - return NULL; + return 0; - printf ("ecore_evas_software_ddraw_new : ecore_win32_init\n"); - if (!ecore_win32_init()) - return NULL; - - ee = calloc(1, sizeof(Ecore_Evas)); - if (!ee) - return NULL; - - ECORE_MAGIC_SET(ee, ECORE_MAGIC_EVAS); - - _ecore_evas_win32_init(); - - ee->engine.func = (Ecore_Evas_Engine_Func *)&_ecore_win32_engine_func; - - ee->driver = "software_ddraw"; - - if (width < 1) width = 1; - if (height < 1) height = 1; - ee->x = x; - ee->y = y; - ee->w = width; - ee->h = height; - - ee->prop.max.w = 32767; - ee->prop.max.h = 32767; - ee->prop.layer = 4; - ee->prop.request_pos = 0; - ee->prop.sticky = 0; - /* FIXME: sticky to add */ - - /* init evas here */ - printf ("ecore_evas_software_ddraw_new : evas_new\n"); - ee->evas = evas_new(); - evas_data_attach_set(ee->evas, ee); - printf ("ecore_evas_software_ddraw_new : evas_output_method_set\n"); + ee->driver = driver; evas_output_method_set(ee->evas, rmethod); - printf ("ecore_evas_software_ddraw_new : evas_output_size_set\n"); - evas_output_size_set(ee->evas, width, height); - printf ("ecore_evas_software_ddraw_new : evas_output_viewport_set\n"); - evas_output_viewport_set(ee->evas, 0, 0, width, height); - ee->engine.win32.parent = parent; - printf ("ecore_evas_software_ddraw_new : ecore_win32_window_new\n"); - ee->engine.win32.window = ecore_win32_window_new(parent, x, y, width, height); - if (!ee->engine.win32.window) - { - _ecore_evas_win32_shutdown(); - free(ee); - return NULL; - } - - printf ("ecore_evas_software_ddraw_new : evas_engine_info_get\n"); einfo = (Evas_Engine_Info_Software_DDraw *)evas_engine_info_get(ee->evas); if (einfo) { /* FIXME: REDRAW_DEBUG missing for now */ einfo->info.window = ((struct _Ecore_Win32_Window *)ee->engine.win32.window)->window; - einfo->info.depth = ecore_win32_screen_depth_get();; - einfo->info.rotation = 0; - printf ("ecore_evas_software_ddraw_new : evas_engine_info_set\n"); - evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo); - } - - evas_key_modifier_add(ee->evas, "Shift"); - evas_key_modifier_add(ee->evas, "Control"); - evas_key_modifier_add(ee->evas, "Alt"); - evas_key_modifier_add(ee->evas, "Meta"); - evas_key_modifier_add(ee->evas, "Hyper"); - evas_key_modifier_add(ee->evas, "Super"); - evas_key_lock_add(ee->evas, "Caps_Lock"); - evas_key_lock_add(ee->evas, "Num_Lock"); - evas_key_lock_add(ee->evas, "Scroll_Lock"); - - ecore_evases = _ecore_list2_prepend(ecore_evases, ee); - ecore_evases_hash = evas_hash_add(ecore_evases_hash, _ecore_evas_win32_winid_str_get(ee->engine.win32.window), ee); - - return ee; -#else - return NULL; - parent = NULL; - x = 0; - y = 0; - width = 0; - height = 0; -#endif /* BUILD_ECORE_EVAS_SOFTWARE_DIRECTDRAW */ -} - -EAPI Ecore_Win32_Window * -ecore_evas_software_ddraw_window_get(Ecore_Evas *ee) -{ - return (Ecore_Win32_Window *) _ecore_evas_win32_window_get(ee); -} - -EAPI Ecore_Evas * -ecore_evas_software_ddraw_16_new(Ecore_Win32_Window *parent, - int x, - int y, - int width, - int height) -{ -#ifdef BUILD_ECORE_EVAS_SOFTWARE_DIRECTDRAW_16 - Evas_Engine_Info_Software_16_DDraw *einfo; - Ecore_Evas *ee; - int rmethod; - - rmethod = evas_render_method_lookup("software_16_ddraw"); - if (!rmethod) - return NULL; - - if (!ecore_win32_init()) - return NULL; - - ee = calloc(1, sizeof(Ecore_Evas)); - if (!ee) - return NULL; - - ECORE_MAGIC_SET(ee, ECORE_MAGIC_EVAS); - - _ecore_evas_win32_init(); - - ee->engine.func = (Ecore_Evas_Engine_Func *)&_ecore_win32_engine_func; - - ee->driver = "software_16_ddraw"; - - if (width < 1) width = 1; - if (height < 1) height = 1; - ee->x = x; - ee->y = y; - ee->w = width; - ee->h = height; - - ee->prop.max.w = 32767; - ee->prop.max.h = 32767; - ee->prop.layer = 4; - ee->prop.request_pos = 0; - ee->prop.sticky = 0; - /* FIXME: sticky to add */ - - /* init evas here */ - ee->evas = evas_new(); - evas_data_attach_set(ee->evas, ee); - evas_output_method_set(ee->evas, rmethod); - evas_output_size_set(ee->evas, width, height); - evas_output_viewport_set(ee->evas, 0, 0, width, height); - - ee->engine.win32.parent = parent; - ee->engine.win32.window = ecore_win32_window_new(parent, x, y, width, height); - if (!ee->engine.win32.window) - { - _ecore_evas_win32_shutdown(); - free(ee); - return NULL; - } - - if (ecore_win32_screen_depth_get() != 16) - { - ecore_win32_window_del(ee->engine.win32.window); - _ecore_evas_win32_shutdown(); - free(ee); - return NULL; - } - - einfo = (Evas_Engine_Info_Software_16_DDraw *)evas_engine_info_get(ee->evas); - if (einfo) - { - /* FIXME: REDRAW_DEBUG missing for now */ - einfo->info.window = ((struct _Ecore_Win32_Window *)ee->engine.win32.window)->window; -/* einfo->info.object = ecore_win32_ddraw_object_get(ee->engine.win32.window); */ -/* einfo->info.surface_primary = ecore_win32_ddraw_surface_primary_get(ee->engine.win32.window); */ -/* einfo->info.surface_back = ecore_win32_ddraw_surface_back_get(ee->engine.win32.window); */ -/* einfo->info.surface_source = ecore_win32_ddraw_surface_source_get(ee->engine.win32.window); */ -/* einfo->info.depth = ecore_win32_ddraw_depth_get(ee->engine.win32.window); */ einfo->info.depth = ecore_win32_screen_depth_get(); - printf ("ecore_evas_software_ddraw_16_new depth : %d\n", einfo->info.depth); einfo->info.rotation = 0; evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo); } - evas_key_modifier_add(ee->evas, "Shift"); - evas_key_modifier_add(ee->evas, "Control"); - evas_key_modifier_add(ee->evas, "Alt"); - evas_key_modifier_add(ee->evas, "Meta"); - evas_key_modifier_add(ee->evas, "Hyper"); - evas_key_modifier_add(ee->evas, "Super"); - evas_key_lock_add(ee->evas, "Caps_Lock"); - evas_key_lock_add(ee->evas, "Num_Lock"); - evas_key_lock_add(ee->evas, "Scroll_Lock"); - - ecore_evases = _ecore_list2_prepend(ecore_evases, ee); - ecore_evases_hash = evas_hash_add(ecore_evases_hash, _ecore_evas_win32_winid_str_get(ee->engine.win32.window), ee); - - return ee; + return 1; #else - return NULL; - parent = NULL; - x = 0; - y = 0; - width = 0; - height = 0; -#endif /* BUILD_ECORE_EVAS_SOFTWARE_DIRECTDRAW_16 */ + return 0; +#endif /* ! BUILD_ECORE_EVAS_SOFTWARE_DDRAW */ } -EAPI Ecore_Win32_Window * -ecore_evas_software_ddraw_16_window_get(Ecore_Evas *ee) -{ - return (Ecore_Win32_Window *) _ecore_evas_win32_window_get(ee); -} - -EAPI Ecore_Evas * -ecore_evas_direct3d_new(Ecore_Win32_Window *parent, - int x, - int y, - int width, - int height) +static int +_ecore_evas_engine_direct3d_init(Ecore_Evas *ee) { #ifdef BUILD_ECORE_EVAS_DIRECT3D Evas_Engine_Info_Direct3D *einfo; - Ecore_Evas *ee; - int rmethod; + const char *driver; + int rmethod; - rmethod = evas_render_method_lookup("direct3d"); + driver = "direct3d"; + + rmethod = evas_render_method_lookup(driver); if (!rmethod) - return NULL; + return 0; - if (!ecore_win32_init()) - return NULL; - - ee = calloc(1, sizeof(Ecore_Evas)); - if (!ee) - return NULL; - - ECORE_MAGIC_SET(ee, ECORE_MAGIC_EVAS); - - _ecore_evas_win32_init(); - - ee->engine.func = (Ecore_Evas_Engine_Func *)&_ecore_win32_engine_func; - - ee->driver = "direct3d"; - - if (width < 1) width = 1; - if (height < 1) height = 1; - ee->x = x; - ee->y = y; - ee->w = width; - ee->h = height; - - ee->prop.max.w = 32767; - ee->prop.max.h = 32767; - ee->prop.layer = 4; - ee->prop.request_pos = 0; - ee->prop.sticky = 0; - /* FIXME: sticky to add */ - - /* init evas here */ - ee->evas = evas_new(); - evas_data_attach_set(ee->evas, ee); + ee->driver = driver; evas_output_method_set(ee->evas, rmethod); - evas_output_size_set(ee->evas, width, height); - evas_output_viewport_set(ee->evas, 0, 0, width, height); - - ee->engine.win32.parent = parent; - ee->engine.win32.window = ecore_win32_window_new(parent, x, y, width, height); - if (!ee->engine.win32.window) - { - _ecore_evas_win32_shutdown(); - free(ee); - return NULL; - } einfo = (Evas_Engine_Info_Direct3D *)evas_engine_info_get(ee->evas); if (einfo) @@ -1279,51 +1056,88 @@ ecore_evas_direct3d_new(Ecore_Win32_Window *parent, evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo); } - evas_key_modifier_add(ee->evas, "Shift"); - evas_key_modifier_add(ee->evas, "Control"); - evas_key_modifier_add(ee->evas, "Alt"); - evas_key_modifier_add(ee->evas, "Meta"); - evas_key_modifier_add(ee->evas, "Hyper"); - evas_key_modifier_add(ee->evas, "Super"); - evas_key_lock_add(ee->evas, "Caps_Lock"); - evas_key_lock_add(ee->evas, "Num_Lock"); - evas_key_lock_add(ee->evas, "Scroll_Lock"); - - ecore_evases = _ecore_list2_prepend(ecore_evases, ee); - ecore_evases_hash = evas_hash_add(ecore_evases_hash, _ecore_evas_win32_winid_str_get(ee->engine.win32.window), ee); - - return ee; + return 1; #else - return NULL; - parent = NULL; - x = 0; - y = 0; - width = 0; - height = 0; -#endif /* BUILD_ECORE_EVAS_DIRECT3D */ + return 0; +#endif /* ! BUILD_ECORE_EVAS_DIRECT3D */ } -EAPI Ecore_Win32_Window * -ecore_evas_direct3d_window_get(Ecore_Evas *ee) +static int +_ecore_evas_engine_opengl_glew_init(Ecore_Evas *ee) { - return (Ecore_Win32_Window *) _ecore_evas_win32_window_get(ee); -} - -EAPI Ecore_Evas * -ecore_evas_gl_glew_new(Ecore_Win32_Window *parent, - int x, - int y, - int width, - int height) -{ -#ifdef BUILD_ECORE_EVAS_GL_GLEW +#ifdef BUILD_ECORE_EVAS_OPENGL_GLEW Evas_Engine_Info_GL_Glew *einfo; - Ecore_Evas *ee; + const char *driver; int rmethod; - rmethod = evas_render_method_lookup("gl_glew"); + driver = "gl_glew"; + + rmethod = evas_render_method_lookup(driver); if (!rmethod) - return NULL; + return 0; + + ee->driver = driver; + evas_output_method_set(ee->evas, rmethod); + + einfo = (Evas_Engine_Info_GL_Glew *)evas_engine_info_get(ee->evas); + if (einfo) + { + /* FIXME: REDRAW_DEBUG missing for now */ + einfo->info.window = ((struct _Ecore_Win32_Window *)ee->engine.win32.window)->window; + einfo->info.depth = ecore_win32_screen_depth_get(); + evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo); + } + + return 1; +#else + return 0; +#endif /* ! BUILD_ECORE_EVAS_OPENGL_GLEW */ +} + +static int +_ecore_evas_engine_software_16_ddraw_init(Ecore_Evas *ee) +{ +#ifdef BUILD_ECORE_EVAS_SOFTWARE_16_DIRECTDRAW + Evas_Engine_Info_Software_DDraw *einfo; + const char *driver; + int rmethod; + + driver = "software_16_ddraw"; + + rmethod = evas_render_method_lookup(driver); + if (!rmethod) + return 0; + + ee->driver = driver; + evas_output_method_set(ee->evas, rmethod); + + if (ecore_win32_screen_depth_get() != 16) + return 0; + + einfo = (Evas_Engine_Info_Software_16_DDraw *)evas_engine_info_get(ee->evas); + if (einfo) + { + /* FIXME: REDRAW_DEBUG missing for now */ + einfo->info.window = ((struct _Ecore_Win32_Window *)ee->engine.win32.window)->window; + einfo->info.depth = ecore_win32_screen_depth_get(); + einfo->info.rotation = 0; + evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo); + } +#else + return 0; +#endif /* ! BUILD_ECORE_EVAS_SOFTWARE_16_DIRECTDRAW */ +} + +static Ecore_Evas * +_ecore_evas_win32_new_internal(int (*_ecore_evas_engine_init)(Ecore_Evas *ee), + Ecore_Win32_Window *parent, + int x, + int y, + int width, + int height) +{ +#ifdef BUILD_ECORE_EVAS_WIN32 + Ecore_Evas *ee; if (!ecore_win32_init()) return NULL; @@ -1337,8 +1151,6 @@ ecore_evas_gl_glew_new(Ecore_Win32_Window *parent, _ecore_evas_win32_init(); ee->engine.func = (Ecore_Evas_Engine_Func *)&_ecore_win32_engine_func; - - ee->driver = "gl_glew"; if (width < 1) width = 1; if (height < 1) height = 1; @@ -1357,7 +1169,6 @@ ecore_evas_gl_glew_new(Ecore_Win32_Window *parent, /* init evas here */ ee->evas = evas_new(); evas_data_attach_set(ee->evas, ee); - evas_output_method_set(ee->evas, rmethod); evas_output_size_set(ee->evas, width, height); evas_output_viewport_set(ee->evas, 0, 0, width, height); @@ -1370,13 +1181,11 @@ ecore_evas_gl_glew_new(Ecore_Win32_Window *parent, return NULL; } - einfo = (Evas_Engine_Info_GL_Glew *)evas_engine_info_get(ee->evas); - if (einfo) + if (!_ecore_evas_engine_init(ee)) { - /* FIXME: REDRAW_DEBUG missing for now */ - einfo->info.window = ((struct _Ecore_Win32_Window *)ee->engine.win32.window)->window; - einfo->info.depth = ecore_win32_screen_depth_get(); - evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo); + _ecore_evas_win32_shutdown(); + free(ee); + return NULL; } evas_key_modifier_add(ee->evas, "Shift"); @@ -1400,5 +1209,112 @@ ecore_evas_gl_glew_new(Ecore_Win32_Window *parent, y = 0; width = 0; height = 0; -#endif /* BUILD_ECORE_EVAS_GL_GLEW */ +#endif /* ! BUILD_ECORE_EVAS_WIN32 */ +} + +EAPI Ecore_Evas * +ecore_evas_software_ddraw_new(Ecore_Win32_Window *parent, + int x, + int y, + int width, + int height) +{ +#ifdef BUILD_ECORE_EVAS_SOFTWARE_DDRAW + return _ecore_evas_win32_new_internal(_ecore_evas_engine_software_ddraw_init, + parent, + x, + y, + width, + height); +#else + return NULL; + parent = NULL; + x = 0; + y = 0; + width = 0; + height = 0; +#endif /* ! BUILD_ECORE_EVAS_SOFTWARE_DDRAW */ +} + +EAPI Ecore_Evas * +ecore_evas_software_16_ddraw_new(Ecore_Win32_Window *parent, + int x, + int y, + int width, + int height) +{ +#ifdef BUILD_ECORE_EVAS_SOFTWARE_16_DIRECTDRAW + return _ecore_evas_win32_new_internal(_ecore_evas_engine_software_16_ddraw_init, + parent, + x, + y, + width, + height); +#else + return NULL; + parent = NULL; + x = 0; + y = 0; + width = 0; + height = 0; +#endif /* ! BUILD_ECORE_EVAS_SOFTWARE_16_DIRECTDRAW */ +} + +EAPI Ecore_Evas * +ecore_evas_direct3d_new(Ecore_Win32_Window *parent, + int x, + int y, + int width, + int height) +{ +#ifdef BUILD_ECORE_EVAS_DIRECT3D + return _ecore_evas_win32_new_internal(_ecore_evas_engine_direct3d_init, + parent, + x, + y, + width, + height); +#else + return NULL; + parent = NULL; + x = 0; + y = 0; + width = 0; + height = 0; +#endif /* ! BUILD_ECORE_EVAS_DIRECT3D */ +} + +EAPI Ecore_Evas * +ecore_evas_gl_glew_new(Ecore_Win32_Window *parent, + int x, + int y, + int width, + int height) +{ +#ifdef BUILD_ECORE_EVAS_OPENGL_GLEW + return _ecore_evas_win32_new_internal(_ecore_evas_engine_opengl_glew_init, + parent, + x, + y, + width, + height); +#else + return NULL; + parent = NULL; + x = 0; + y = 0; + width = 0; + height = 0; +#endif /* BUILD_ECORE_EVAS_OPENGL_GLEW */ +} + +EAPI Ecore_Win32_Window * +ecore_evas_win32_window_get(Ecore_Evas *ee) +{ +#ifdef BUILD_ECORE_EVAS_WIN32 + return (Ecore_Win32_Window *) _ecore_evas_win32_window_get(ee); +#else + return NULL; + ee = NULL; +#endif /* BUILD_ECORE_EVAS_WIN32 */ }