diff --git a/legacy/ecore/src/lib/ecore_evas/Ecore_Evas.h b/legacy/ecore/src/lib/ecore_evas/Ecore_Evas.h index db7e809930..cced63f027 100644 --- a/legacy/ecore/src/lib/ecore_evas/Ecore_Evas.h +++ b/legacy/ecore/src/lib/ecore_evas/Ecore_Evas.h @@ -78,6 +78,7 @@ typedef enum _Ecore_Evas_Engine_Type ECORE_EVAS_ENGINE_SOFTWARE_DDRAW, ECORE_EVAS_ENGINE_SOFTWARE_DDRAW_16, ECORE_EVAS_ENGINE_DIRECT3D, + ECORE_EVAS_ENGINE_GL_GLEW, ECORE_EVAS_ENGINE_SDL, ECORE_EVAS_ENGINE_SOFTWARE_WINCE, } Ecore_Evas_Engine_Type; @@ -182,6 +183,12 @@ EAPI Ecore_Evas *ecore_evas_direct3d_new(Ecore_Win32_Window *parent, 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_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 1c03d687c4..9542bfb890 100644 --- a/legacy/ecore/src/lib/ecore_evas/ecore_evas.c +++ b/legacy/ecore/src/lib/ecore_evas/ecore_evas.c @@ -77,6 +77,12 @@ ecore_evas_engine_type_supported_get(Ecore_Evas_Engine_Type engine) return 1; #else return 0; +#endif + case ECORE_EVAS_ENGINE_GL_GLEW: +#ifdef BUILD_ECORE_EVAS_GL_GLEW + return 1; +#else + return 0; #endif case ECORE_EVAS_ENGINE_SDL: #ifdef BUILD_ECORE_EVAS_SDL 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 2087755292..590e68efaf 100644 --- a/legacy/ecore/src/lib/ecore_evas/ecore_evas_private.h +++ b/legacy/ecore/src/lib/ecore_evas/ecore_evas_private.h @@ -67,15 +67,18 @@ #endif #ifdef BUILD_ECORE_WIN32 # include "Ecore_Win32.h" -# ifdef HAVE_DIRECTDRAW +# ifdef BUILD_ECORE_EVAS_SOFTWARE_DIRECTDRAW # include # endif -# ifdef HAVE_DIRECTDRAW_16 +# ifdef BUILD_ECORE_EVAS_SOFTWARE_DIRECTDRAW_16 # include # endif -# ifdef HAVE_DIRECT3D +# ifdef BUILD_ECORE_EVAS_DIRECT3D # include # endif +# ifdef BUILD_ECORE_EVAS_GL_GLEW +# include +# endif #endif #ifdef BUILD_ECORE_EVAS_SOFTWARE_16_WINCE # include "Ecore_WinCE.h" 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 b65bac1683..77c9cd9ca8 100644 --- a/legacy/ecore/src/lib/ecore_evas/ecore_evas_win32.c +++ b/legacy/ecore/src/lib/ecore_evas/ecore_evas_win32.c @@ -984,7 +984,7 @@ ecore_evas_software_ddraw_new(Ecore_Win32_Window *parent, int width, int height) { -#ifdef BUILD_ECORE_EVAS_DIRECTDRAW +#ifdef BUILD_ECORE_EVAS_SOFTWARE_DIRECTDRAW Evas_Engine_Info_Software_DDraw *einfo; Ecore_Evas *ee; int rmethod; @@ -1077,7 +1077,7 @@ ecore_evas_software_ddraw_new(Ecore_Win32_Window *parent, y = 0; width = 0; height = 0; -#endif /* BUILD_ECORE_EVAS_DIRECTDRAW */ +#endif /* BUILD_ECORE_EVAS_SOFTWARE_DIRECTDRAW */ } EAPI Ecore_Win32_Window * @@ -1093,7 +1093,7 @@ ecore_evas_software_ddraw_16_new(Ecore_Win32_Window *parent, int width, int height) { -#ifdef BUILD_ECORE_EVAS_DIRECTDRAW_16 +#ifdef BUILD_ECORE_EVAS_SOFTWARE_DIRECTDRAW_16 Evas_Engine_Info_Software_16_DDraw *einfo; Ecore_Evas *ee; int rmethod; @@ -1192,7 +1192,7 @@ ecore_evas_software_ddraw_16_new(Ecore_Win32_Window *parent, y = 0; width = 0; height = 0; -#endif /* BUILD_ECORE_EVAS_DIRECTDRAW_16 */ +#endif /* BUILD_ECORE_EVAS_SOFTWARE_DIRECTDRAW_16 */ } EAPI Ecore_Win32_Window * @@ -1301,3 +1301,97 @@ ecore_evas_direct3d_window_get(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 + Evas_Engine_Info_GL_Glew *einfo; + Ecore_Evas *ee; + int rmethod; + + rmethod = evas_render_method_lookup("gl_glew"); + 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 = "gl_glew"; + + 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; + } + + 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); + } + + 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_GL_GLEW */ +}