diff --git a/src/modules/comp/e_mod_comp.c b/src/modules/comp/e_mod_comp.c index 94ee3d19c..b5d261391 100644 --- a/src/modules/comp/e_mod_comp.c +++ b/src/modules/comp/e_mod_comp.c @@ -34,6 +34,8 @@ struct _E_Comp Eina_Inlist *wins; Eina_List *updates; Ecore_Animator *render_animator; + + Eina_Bool gl : 1; // is visible }; struct _E_Comp_Win @@ -908,7 +910,15 @@ _e_mod_comp_add(E_Manager *man) } if (c->man->num == 0) e_alert_composite_win = c->win; - c->ee = ecore_evas_software_x11_new(NULL, c->win, 0, 0, man->w, man->h); + + if (_comp_mod->conf->engine == E_EVAS_ENGINE_GL_X11) + { + c->ee = ecore_evas_gl_x11_new(NULL, c->win, 0, 0, man->w, man->h); + if (c->ee) c->gl = 1; + } + if (!c->ee) + c->ee = ecore_evas_software_x11_new(NULL, c->win, 0, 0, man->w, man->h); + ecore_evas_manual_render_set(c->ee, 1); c->evas = ecore_evas_get(c->ee); ecore_evas_show(c->ee); diff --git a/src/modules/comp/e_mod_config.c b/src/modules/comp/e_mod_config.c index 86d9f8ce9..e8dd57e9b 100644 --- a/src/modules/comp/e_mod_config.c +++ b/src/modules/comp/e_mod_config.c @@ -7,6 +7,7 @@ struct _E_Config_Dialog_Data { int use_shadow; + int engine; }; /* Protos */ @@ -49,7 +50,11 @@ _create_data(E_Config_Dialog *cfd) cfdata = E_NEW(E_Config_Dialog_Data, 1); cfdata->use_shadow = _comp_mod->conf->use_shadow; - + cfdata->engine = _comp_mod->conf->engine; + if ((cfdata->engine != E_EVAS_ENGINE_SOFTWARE_X11) && + (cfdata->engine != E_EVAS_ENGINE_GL_X11)) + cfdata->engine = E_EVAS_ENGINE_SOFTWARE_X11; + return cfdata; } @@ -65,6 +70,7 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cf { Evas_Object *o, *ob, *of, *ot; E_Radio_Group *rg; + int engine; o = e_widget_list_add(evas, 0, 0); ot = e_widget_table_add(evas, 1); @@ -75,6 +81,24 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cf e_widget_framelist_object_append(of, ob); e_widget_table_object_append(ot, of, 0, 0, 1, 1, 1, 1, 1, 1); + of = e_widget_framelist_add(evas, _("Engine"), 0); + e_widget_framelist_content_align_set(of, 0.5, 0.0); + + rg = e_widget_radio_group_new(&(cfdata->engine)); + + engine = E_EVAS_ENGINE_SOFTWARE_X11; + ob = e_widget_radio_add(evas, _("Software"), engine, rg); + e_widget_framelist_object_append(of, ob); + + if (ecore_evas_engine_type_supported_get(ECORE_EVAS_ENGINE_OPENGL_X11)) + { + engine = E_EVAS_ENGINE_GL_X11; + ob = e_widget_radio_add(evas, _("OpenGL"), engine, rg); + e_widget_framelist_object_append(of, ob); + } + + e_widget_table_object_append(ot, of, 0, 1, 1, 1, 1, 1, 1, 1); + e_widget_list_object_append(o, ot, 1, 1, 0.5); return o; @@ -88,7 +112,12 @@ _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata) _comp_mod->conf->use_shadow = cfdata->use_shadow; e_mod_comp_shadow_set(); } - + if (_comp_mod->conf->engine != cfdata->engine) + { + _comp_mod->conf->engine = cfdata->engine; + e_mod_comp_shutdown(); + e_mod_comp_init(); + } e_config_save_queue(); return 1; } diff --git a/src/modules/comp/e_mod_main.c b/src/modules/comp/e_mod_main.c index b322104fa..984c6a740 100644 --- a/src/modules/comp/e_mod_main.c +++ b/src/modules/comp/e_mod_main.c @@ -32,6 +32,7 @@ e_modapi_init(E_Module *m) #define D mod->conf_edd E_CONFIG_VAL(D, T, use_shadow, UCHAR); E_CONFIG_VAL(D, T, shadow_file, STR); + E_CONFIG_VAL(D, T, engine, INT); mod->conf = e_config_domain_load("module.comp", mod->conf_edd); if (!mod->conf) @@ -39,6 +40,7 @@ e_modapi_init(E_Module *m) mod->conf = E_NEW(Config, 1); mod->conf->use_shadow = 1; mod->conf->shadow_file = NULL; + mod->conf->engine = E_EVAS_ENGINE_SOFTWARE_X11; } _comp_mod = mod; diff --git a/src/modules/comp/e_mod_main.h b/src/modules/comp/e_mod_main.h index 8ac0b17c5..c32a9134f 100644 --- a/src/modules/comp/e_mod_main.h +++ b/src/modules/comp/e_mod_main.h @@ -9,6 +9,7 @@ struct _Config { unsigned char use_shadow; const char *shadow_file; + int engine; }; struct _Mod diff --git a/x-ui.sh b/x-ui.sh index 9e2958003..73f5ac2c2 100755 --- a/x-ui.sh +++ b/x-ui.sh @@ -12,9 +12,9 @@ #Xephyr :1 -noreset -ac -br -dpi 284 -screen 480x640x16 & #Xephyr :1 -noreset -ac -br -dpi 284 -screen 640x480x16 -host-cursor & -Xephyr :1 -noreset -ac -br -dpi 183 -screen 960x400x16 -host-cursor & +#Xephyr :1 -noreset -ac -br -dpi 183 -screen 960x400x16 -host-cursor & -#Xephyr :1 -noreset -ac -br -dpi 284 -screen 480x800 -host-cursor & +Xephyr :1 -noreset -ac -br -dpi 284 -screen 480x800 -host-cursor & #Xephyr :1 -noreset -ac -br -dpi 284 -screen 480x640 & #Xephyr :1 -noreset -ac -br -dpi 284 -screen 640x480 & #Xephyr :1 -noreset -ac -br -dpi 181 -screen 320x320 & @@ -30,6 +30,7 @@ unset E_RESTART E_START E_IPC_SOCKET E_START_TIME E_CONF_PROFILE enlightenment_start \ -no-precache \ -i-really-know-what-i-am-doing-and-accept-full-responsibility-for-it \ --profile illume-home \ --fake-xinerama-screen 480x400+0+0 \ --fake-xinerama-screen 480x400+480+0 +-profile illume-home + +#-fake-xinerama-screen 480x400+0+0 \ +#$-fake-xinerama-screen 480x400+480+0