why don't try to match with ecore_evas_new() and it's ECORE_EVAS_ENGINE? On Sat, Mar 8, 2014 at 1:27 PM, Carsten Haitzler <[email protected]> wrote: > raster pushed a commit to branch master. > > http://git.enlightenment.org/core/elementary.git/commit/?id=245a740c25f55bc3aa649757f05869a9ad8feba1 > > commit 245a740c25f55bc3aa649757f05869a9ad8feba1 > Author: Carsten Haitzler (Rasterman) <[email protected]> > Date: Sun Mar 9 00:49:33 2014 +0900 > > win - improve window engine choosing code to be simpler and support > display > > this isn't a feature or a bug fix - it's a code logic improvement that > also uses an ELM_DISPLAY environment variablew to choose a specific > engine list, and still uses ELM_ENGINE and preferred engine. this > makes it easy to add new api to prefer accel or not etc. > --- > src/lib/elm_win.c | 235 > ++++++++++++++++++++++++------------------------------ > 1 file changed, 104 insertions(+), 131 deletions(-) > > diff --git a/src/lib/elm_win.c b/src/lib/elm_win.c > index b7625f4..e53088e 100644 > --- a/src/lib/elm_win.c > +++ b/src/lib/elm_win.c > @@ -2844,7 +2844,8 @@ _win_constructor(Eo *obj, void *_pd, va_list *list) > Evas_Object *parent; > Evas *e; > const Eina_List *l; > - const char *fontpath, *fallback = NULL; > + const char *fontpath, *engine = NULL, *enginelist[32], *disp; > + int i; > > Elm_Win_Smart_Data tmp_sd; > > @@ -2853,17 +2854,6 @@ _win_constructor(Eo *obj, void *_pd, va_list *list) > /* just to store some data while trying out to create a canvas */ > memset(&tmp_sd, 0, sizeof(Elm_Win_Smart_Data)); > > -#define FALLBACK_TRY(engine) \ > - if (!tmp_sd.ee) { \ > - CRI(engine " engine creation failed. Trying default."); \ > - } while (0) > -#define FALLBACK_STORE(engine) \ > - if (tmp_sd.ee) \ > - { \ > - CRI(engine "Fallback to %s successful.", engine); \ > - fallback = engine; \ > - } > - > switch (type) > { > case ELM_WIN_INLINED_IMAGE: > @@ -2893,140 +2883,128 @@ _win_constructor(Eo *obj, void *_pd, va_list *list) > break; > > default: > - if (ENGINE_COMPARE(ELM_SOFTWARE_X11)) > + disp = getenv("ELM_DISPLAY"); > + if ((disp) && (!strcmp(disp, "x11"))) > { > - tmp_sd.ee = ecore_evas_software_x11_new(NULL, 0, 0, 0, 1, 1); > - FALLBACK_TRY("Software X11"); > - if (!tmp_sd.ee) > - { > - tmp_sd.ee = ecore_evas_fb_new(NULL, 0, 1, 1); > - FALLBACK_STORE("Software FB"); > - } > + enginelist[0] = ENGINE_GET(); > + enginelist[1] = ELM_SOFTWARE_X11; > + enginelist[2] = ELM_OPENGL_X11; > + enginelist[3] = NULL; > } > - else if (ENGINE_COMPARE(ELM_SOFTWARE_FB)) > + else if ((disp) && (!strcmp(disp, "wl"))) > { > - tmp_sd.ee = ecore_evas_fb_new(NULL, 0, 1, 1); > - FALLBACK_TRY("Software FB"); > - if (!tmp_sd.ee) > - { > - tmp_sd.ee = ecore_evas_software_x11_new(NULL, 0, 0, 0, 1, > 1); > - FALLBACK_STORE("Software X11"); > - } > + enginelist[0] = ENGINE_GET(); > + enginelist[1] = ELM_WAYLAND_SHM; > + enginelist[2] = ELM_WAYLAND_EGL; > + enginelist[3] = NULL; > } > - else if (ENGINE_COMPARE(ELM_OPENGL_X11)) > + else if ((disp) && (!strcmp(disp, "win"))) > { > - int opt[10]; > - int opt_i = 0; > - > - if (_elm_config->vsync) > - { > - opt[opt_i] = ECORE_EVAS_GL_X11_OPT_VSYNC; > - opt_i++; > - opt[opt_i] = 1; > - opt_i++; > - opt[opt_i] = 0; > - } > - if (opt_i > 0) > - tmp_sd.ee = ecore_evas_gl_x11_options_new > - (NULL, 0, 0, 0, 1, 1, opt); > - else > - tmp_sd.ee = ecore_evas_gl_x11_new(NULL, 0, 0, 0, 1, 1); > - FALLBACK_TRY("OpenGL"); > - if (!tmp_sd.ee) > - { > - tmp_sd.ee = ecore_evas_software_x11_new(NULL, 0, 0, 0, 1, > 1); > - FALLBACK_STORE("Software X11"); > - if (!tmp_sd.ee) > - { > - tmp_sd.ee = ecore_evas_fb_new(NULL, 0, 1, 1); > - FALLBACK_STORE("Software FB"); > - } > - } > + enginelist[0] = ENGINE_GET(); > + enginelist[1] = ELM_SOFTWARE_WIN32; > + enginelist[2] = NULL; > } > - else if (ENGINE_COMPARE(ELM_SOFTWARE_WIN32)) > + else if ((disp) && (!strcmp(disp, "sdl"))) > { > - tmp_sd.ee = ecore_evas_software_gdi_new(NULL, 0, 0, 1, 1); > - FALLBACK_TRY("Software Win32"); > - } > - else if (ENGINE_COMPARE(ELM_SOFTWARE_PSL1GHT)) > - { > - tmp_sd.ee = ecore_evas_psl1ght_new(NULL, 1, 1); > - FALLBACK_TRY("PSL1GHT"); > - } > - else if (ENGINE_COMPARE(ELM_SOFTWARE_SDL)) > - { > - tmp_sd.ee = ecore_evas_sdl_new(NULL, 0, 0, 0, 0, 0, 1); > - FALLBACK_TRY("Software SDL"); > - if (!tmp_sd.ee) > - { > - tmp_sd.ee = ecore_evas_software_x11_new(NULL, 0, 0, 0, 1, > 1); > - FALLBACK_STORE("Software X11"); > - if (!tmp_sd.ee) > - { > - tmp_sd.ee = ecore_evas_fb_new(NULL, 0, 1, 1); > - FALLBACK_STORE("Software FB"); > - } > - } > + enginelist[0] = ENGINE_GET(); > + enginelist[1] = ELM_SOFTWARE_SDL; > + enginelist[2] = ELM_OPENGL_SDL; > + enginelist[3] = NULL; > } > - else if (ENGINE_COMPARE(ELM_SOFTWARE_16_SDL)) > + else if ((disp) && (!strcmp(disp, "mac"))) > { > - tmp_sd.ee = ecore_evas_sdl16_new(NULL, 0, 0, 0, 0, 0, 1); > - FALLBACK_TRY("Software-16-SDL"); > - if (!tmp_sd.ee) > - { > - tmp_sd.ee = ecore_evas_software_x11_new(NULL, 0, 0, 0, 1, > 1); > - FALLBACK_STORE("Software X11"); > - if (!tmp_sd.ee) > - { > - tmp_sd.ee = ecore_evas_fb_new(NULL, 0, 1, 1); > - FALLBACK_STORE("Software FB"); > - } > - } > + enginelist[0] = ENGINE_GET(); > + enginelist[1] = ELM_OPENGL_COCOA; > + enginelist[2] = NULL; > } > - else if (ENGINE_COMPARE(ELM_OPENGL_SDL)) > + else if ((disp) && (!strcmp(disp, "ews"))) > { > - tmp_sd.ee = ecore_evas_gl_sdl_new(NULL, 1, 1, 0, 0); > - FALLBACK_TRY("OpenGL SDL"); > - if (!tmp_sd.ee) > - { > - tmp_sd.ee = ecore_evas_software_x11_new(NULL, 0, 0, 0, 1, > 1); > - FALLBACK_STORE("Software X11"); > - if (!tmp_sd.ee) > - { > - tmp_sd.ee = ecore_evas_fb_new(NULL, 0, 1, 1); > - FALLBACK_STORE("Software FB"); > - } > - } > + enginelist[0] = ENGINE_GET(); > + enginelist[1] = ELM_EWS; > + enginelist[2] = NULL; > } > - else if (ENGINE_COMPARE(ELM_OPENGL_COCOA)) > + else if ((disp) && (!strcmp(disp, "fb"))) > { > - tmp_sd.ee = ecore_evas_cocoa_new(NULL, 1, 1, 0, 0); > - FALLBACK_TRY("OpenGL Cocoa"); > + enginelist[0] = ENGINE_GET(); > + enginelist[1] = ELM_SOFTWARE_FB; > + enginelist[2] = NULL; > } > - else if (ENGINE_COMPARE(ELM_BUFFER)) > + else if ((disp) && (!strcmp(disp, "buffer"))) > { > - tmp_sd.ee = ecore_evas_buffer_new(1, 1); > + enginelist[0] = ENGINE_GET(); > + enginelist[1] = ELM_BUFFER; > + enginelist[2] = NULL; > } > - else if (ENGINE_COMPARE(ELM_EWS)) > + else if ((disp) && (!strcmp(disp, "ps3"))) > { > - tmp_sd.ee = ecore_evas_ews_new(0, 0, 1, 1); > + enginelist[0] = ENGINE_GET(); > + enginelist[1] = ELM_SOFTWARE_PSL1GHT; > + enginelist[2] = NULL; > } > - else if (ENGINE_COMPARE(ELM_WAYLAND_SHM)) > + else if ((disp) && (!strcmp(disp, "shot"))) > { > - tmp_sd.ee = ecore_evas_wayland_shm_new(NULL, 0, 0, 0, 1, 1, 0); > + enginelist[0] = ENGINE_GET(); > + enginelist[1] = NULL; > } > - else if (ENGINE_COMPARE(ELM_WAYLAND_EGL)) > + else > { > - tmp_sd.ee = ecore_evas_wayland_egl_new(NULL, 0, 0, 0, 1, 1, 0); > + enginelist[0] = ENGINE_GET(); > + enginelist[1] = ELM_SOFTWARE_X11; > + enginelist[2] = ELM_WAYLAND_SHM; > + enginelist[3] = ELM_SOFTWARE_FB; > + enginelist[4] = ELM_OPENGL_COCOA; > + enginelist[5] = ELM_SOFTWARE_SDL; > + enginelist[6] = NULL; > } > - else if (!strncmp(ENGINE_GET(), "shot:", 5)) > + for (i = 0; i < 30; i++) > { > - tmp_sd.ee = ecore_evas_buffer_new(1, 1); > - ecore_evas_manual_render_set(tmp_sd.ee, EINA_TRUE); > - tmp_sd.shot.info = eina_stringshare_add > - (ENGINE_GET() + 5); > + if ((i > 0) && (!enginelist[i])) break; > + if (!strcmp(enginelist[i], ELM_SOFTWARE_X11)) > + tmp_sd.ee = ecore_evas_software_x11_new(NULL, 0, 0, 0, 1, 1); > + else if (!strcmp(enginelist[i], ELM_OPENGL_X11)) > + { > + int opt[10], opt_i = 0; > + > + if (_elm_config->vsync) > + { > + opt[opt_i++] = ECORE_EVAS_GL_X11_OPT_VSYNC; > + opt[opt_i++] = 1; > + opt[opt_i++] = 0; > + } > + if (opt_i > 0) > + tmp_sd.ee = ecore_evas_gl_x11_options_new(NULL, 0, 0, 0, > 1, 1, opt); > + else > + tmp_sd.ee = ecore_evas_gl_x11_new(NULL, 0, 0, 0, 1, 1); > + } > + else if (!strcmp(enginelist[i], ELM_WAYLAND_SHM)) > + tmp_sd.ee = ecore_evas_wayland_shm_new(NULL, 0, 0, 0, 1, 1, > 0); > + else if (!strcmp(enginelist[i], ELM_WAYLAND_EGL)) > + tmp_sd.ee = ecore_evas_wayland_egl_new(NULL, 0, 0, 0, 1, 1, > 0); > + else if (!strcmp(enginelist[i], ELM_SOFTWARE_WIN32)) > + tmp_sd.ee = ecore_evas_software_gdi_new(NULL, 0, 0, 1, 1); > + else if (!strcmp(enginelist[i], ELM_SOFTWARE_SDL)) > + tmp_sd.ee = ecore_evas_sdl_new(NULL, 0, 0, 0, 0, 0, 1); > + else if (!strcmp(enginelist[i], ELM_OPENGL_SDL)) > + tmp_sd.ee = ecore_evas_gl_sdl_new(NULL, 1, 1, 0, 0); > + else if (!strcmp(enginelist[i], ELM_OPENGL_COCOA)) > + tmp_sd.ee = ecore_evas_cocoa_new(NULL, 1, 1, 0, 0); > + else if (!strcmp(enginelist[i], ELM_EWS)) > + tmp_sd.ee = ecore_evas_ews_new(0, 0, 1, 1); > + else if (!strcmp(enginelist[i], ELM_SOFTWARE_FB)) > + tmp_sd.ee = ecore_evas_fb_new(NULL, 0, 1, 1); > + else if (!strcmp(enginelist[i], ELM_BUFFER)) > + tmp_sd.ee = ecore_evas_buffer_new(1, 1); > + else if (!strcmp(enginelist[i], ELM_SOFTWARE_PSL1GHT)) > + tmp_sd.ee = ecore_evas_psl1ght_new(NULL, 1, 1); > + else if (!strncmp(enginelist[i], "shot:", 5)) > + { > + tmp_sd.ee = ecore_evas_buffer_new(1, 1); > + ecore_evas_manual_render_set(tmp_sd.ee, EINA_TRUE); > + tmp_sd.shot.info = eina_stringshare_add(ENGINE_GET() + 5); > + } > + engine = enginelist[i]; > + if (tmp_sd.ee) break; > } > -#undef FALLBACK_TRY > break; > } > > @@ -3069,8 +3047,6 @@ _win_constructor(Eo *obj, void *_pd, va_list *list) > > #ifdef HAVE_ELEMENTARY_X > else if (ENGINE_COMPARE(ELM_SOFTWARE_X11) || > - ENGINE_COMPARE(ELM_SOFTWARE_16_X11) || > - ENGINE_COMPARE(ELM_SOFTWARE_8_X11) || > ENGINE_COMPARE(ELM_OPENGL_X11)) > { > sd->x.client_message_handler = ecore_event_handler_add > @@ -3079,7 +3055,6 @@ _win_constructor(Eo *obj, void *_pd, va_list *list) > (ECORE_X_EVENT_WINDOW_PROPERTY, _elm_win_property_change, obj); > } > #endif > - > else if (!strncmp(ENGINE_GET(), "shot:", 5)) > _shot_init(sd); > > @@ -3181,14 +3156,13 @@ _win_constructor(Eo *obj, void *_pd, va_list *list) > _elm_win_list = eina_list_append(_elm_win_list, obj); > _elm_win_count++; > > - if (((fallback) && (!strcmp(fallback, "Software FB"))) || > - ((!fallback) && (ENGINE_COMPARE(ELM_SOFTWARE_FB)))) > + if (!strcmp(engine, ELM_SOFTWARE_FB)) > { > TRAP(sd, fullscreen_set, 1); > } > else if ((type != ELM_WIN_INLINED_IMAGE) && > - (ENGINE_COMPARE(ELM_WAYLAND_SHM) || > - ENGINE_COMPARE(ELM_WAYLAND_EGL))) > + (!strcmp(engine, ELM_WAYLAND_SHM) || > + (!strcmp(engine, ELM_WAYLAND_EGL)))) > _elm_win_frame_add(sd, "default"); > > if (_elm_config->focus_highlight_enable) > @@ -3209,8 +3183,7 @@ _win_constructor(Eo *obj, void *_pd, va_list *list) > > if ((_elm_config->softcursor_mode == ELM_SOFTCURSOR_MODE_ON) || > ((_elm_config->softcursor_mode == ELM_SOFTCURSOR_MODE_AUTO) && > - (((fallback) && (!strcmp(fallback, "Software FB"))) || > - ((!fallback) && (ENGINE_COMPARE(ELM_SOFTWARE_FB)))))) > + (!strcmp(engine, ELM_SOFTWARE_FB)))) > { > Evas_Object *o; > Evas_Coord mw = 1, mh = 1, hx = 0, hy = 0; > > -- > >
-- Gustavo Sverzut Barbieri -------------------------------------- Mobile: +55 (19) 99225-2202 Contact: http://www.gustavobarbieri.com.br/contact ------------------------------------------------------------------------------ Subversion Kills Productivity. Get off Subversion & Make the Move to Perforce. With Perforce, you get hassle-free workflows. Merge that actually works. Faster operations. Version large binaries. Built-in WAN optimization and the freedom to use Git, Perforce or both. Make the move to Perforce. http://pubads.g.doubleclick.net/gampad/clk?id=122218951&iu=/4140/ostg.clktrk _______________________________________________ enlightenment-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
