From df48fe011dfe8b5595bca8d3b81a7c09a0b03319 Mon Sep 17 00:00:00 2001 From: cedric Date: Thu, 11 Sep 2008 13:26:40 +0000 Subject: [PATCH] Add ecore_evas_sdl16_new. git-svn-id: http://svn.enlightenment.org/svn/e/trunk/ecore@35950 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33 --- src/lib/ecore_evas/Ecore_Evas.h | 1 + src/lib/ecore_evas/ecore_evas_sdl.c | 79 +++++++++++++++++++++++++++---------- 2 files changed, 59 insertions(+), 21 deletions(-) diff --git a/src/lib/ecore_evas/Ecore_Evas.h b/src/lib/ecore_evas/Ecore_Evas.h index a25f3d8..eda2255 100644 --- a/src/lib/ecore_evas/Ecore_Evas.h +++ b/src/lib/ecore_evas/Ecore_Evas.h @@ -193,6 +193,7 @@ EAPI Ecore_Evas *ecore_evas_gl_glew_new(Ecore_Win32_Window *parent, 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_sdl16_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, int x, diff --git a/src/lib/ecore_evas/ecore_evas_sdl.c b/src/lib/ecore_evas/ecore_evas_sdl.c index 946f18e..c407430 100644 --- a/src/lib/ecore_evas/ecore_evas_sdl.c +++ b/src/lib/ecore_evas/ecore_evas_sdl.c @@ -211,6 +211,19 @@ _ecore_evas_sdl_event_video_expose(void *data __UNUSED__, int type __UNUSED__, v return 0; } +static void +_ecore_evas_render(Ecore_Evas *ee) +{ + Evas_List *updates; + + updates = evas_render_updates(ee->evas); + if (updates) + { + evas_render_updates_free(updates); + _ecore_evas_idle_timeout_update(ee); + } +} + static int _ecore_evas_idle_enter(void *data __UNUSED__) { @@ -229,22 +242,18 @@ _ecore_evas_idle_enter(void *data __UNUSED__) Ecore_Evas *ee; ee = (Ecore_Evas *)l; - if (ee->visible) - { - Evas_List *updates; - - if (ee->func.fn_pre_render) ee->func.fn_pre_render(ee); - - updates = evas_render_updates(ee->evas); - if (updates) - { - evas_render_updates_free(updates); - _ecore_evas_idle_timeout_update(ee); - } - if (ee->func.fn_post_render) ee->func.fn_post_render(ee); - } + + if (ee->func.fn_pre_render) ee->func.fn_pre_render(ee); + + if (ee->prop.avoid_damage) _ecore_evas_render(ee); + else if ((ee->visible) || + ((ee->should_be_visible) && (ee->prop.fullscreen)) || + ((ee->should_be_visible) && (ee->prop.override))) + _ecore_evas_render(ee); else evas_norender(ee->evas); + + if (ee->func.fn_post_render) ee->func.fn_post_render(ee); } #ifndef _WIN32 if (_ecore_evas_fps_debug) @@ -429,21 +438,17 @@ static const Ecore_Evas_Engine_Func _ecore_sdl_engine_func = NULL, NULL }; -#endif -EAPI Ecore_Evas* -ecore_evas_sdl_new(const char* name, int w, int h, int fullscreen, int hwsurface, int noframe, int alpha) +static Ecore_Evas* +_ecore_evas_internal_sdl_new(int rmethod, const char* name, int w, int h, int fullscreen, int hwsurface, int noframe, int alpha) { -#ifdef BUILD_ECORE_EVAS_SDL Evas_Engine_Info_SDL *einfo; Ecore_Evas *ee; - int rmethod; if (!name) name = ecore_evas_sdl_default; - rmethod = evas_render_method_lookup("software_sdl"); - if (!rmethod) return NULL; + if (ecore_evases) return NULL; if (!ecore_sdl_init(name)) return NULL; @@ -487,6 +492,7 @@ ecore_evas_sdl_new(const char* name, int w, int h, int fullscreen, int hwsurface einfo = (Evas_Engine_Info_SDL*) evas_engine_info_get(ee->evas); if (einfo) { + einfo->info.rotation = 0; einfo->info.fullscreen = fullscreen; einfo->info.hwsurface = hwsurface; einfo->info.noframe = noframe; @@ -505,8 +511,39 @@ ecore_evas_sdl_new(const char* name, int w, int h, int fullscreen, int hwsurface evas_event_feed_mouse_in(ee->evas, (unsigned int)((unsigned long long)(ecore_time_get() * 1000.0) & 0xffffffff), NULL); + SDL_ShowCursor(SDL_DISABLE); + ecore_evases = _ecore_list2_prepend(ecore_evases, ee); return ee; +} +#endif + +EAPI Ecore_Evas* +ecore_evas_sdl_new(const char* name, int w, int h, int fullscreen, int hwsurface, int noframe, int alpha) +{ +#ifdef BUILD_ECORE_EVAS_SDL + int rmethod; + + rmethod = evas_render_method_lookup("software_sdl"); + if (!rmethod) return NULL; + + return _ecore_evas_internal_sdl_new(rmethod, name, w, h, fullscreen, hwsurface, noframe, alpha); +#else + fprintf(stderr, "OUTCH !\n"); + return NULL; +#endif +} + +EAPI Ecore_Evas* +ecore_evas_sdl16_new(const char* name, int w, int h, int fullscreen, int hwsurface, int noframe, int alpha) +{ +#ifdef BUILD_ECORE_EVAS_SDL + int rmethod; + + rmethod = evas_render_method_lookup("software_16_sdl"); + if (!rmethod) return NULL; + + return _ecore_evas_internal_sdl_new(rmethod, name, w, h, fullscreen, hwsurface, noframe, alpha); #else fprintf(stderr, "OUTCH !\n"); return NULL; -- 2.7.4