forked from enlightenment/enlightenment
1. centralise canvas creation.
2. allow xrender to be (*hard-coded) chosen. SVN revision: 17126
This commit is contained in:
parent
e338215561
commit
9f9468645d
|
@ -226,23 +226,9 @@ e_border_new(E_Container *con, Ecore_X_Window win, int first_map)
|
|||
e_bindings_mouse_grab(E_BINDING_CONTEXT_BORDER, bd->win);
|
||||
e_bindings_wheel_grab(E_BINDING_CONTEXT_BORDER, bd->win);
|
||||
e_focus_setup(bd);
|
||||
if (e_canvas_engine_decide(e_config->evas_engine_borders) ==
|
||||
E_EVAS_ENGINE_GL_X11)
|
||||
{
|
||||
bd->bg_ecore_evas = ecore_evas_gl_x11_new(NULL, bd->win,
|
||||
0, 0, bd->w, bd->h);
|
||||
ecore_evas_gl_x11_direct_resize_set(bd->bg_ecore_evas, 1);
|
||||
bd->bg_win = ecore_evas_gl_x11_window_get(bd->bg_ecore_evas);
|
||||
bd->bg_subwin = ecore_evas_gl_x11_subwindow_get(bd->bg_ecore_evas);
|
||||
}
|
||||
else
|
||||
{
|
||||
bd->bg_ecore_evas = ecore_evas_software_x11_new(NULL, bd->win,
|
||||
0, 0, bd->w, bd->h);
|
||||
ecore_evas_software_x11_direct_resize_set(bd->bg_ecore_evas, 1);
|
||||
bd->bg_win = ecore_evas_software_x11_window_get(bd->bg_ecore_evas);
|
||||
bd->bg_subwin = ecore_evas_software_x11_subwindow_get(bd->bg_ecore_evas);
|
||||
}
|
||||
bd->bg_ecore_evas = e_canvas_new(e_config->evas_engine_borders, bd->win,
|
||||
0, 0, bd->w, bd->h, 1, 0,
|
||||
&(bd->bg_win), &(bd->bg_subwin));
|
||||
e_canvas_add(bd->bg_ecore_evas);
|
||||
bd->event_win = ecore_x_window_input_new(bd->win, 0, 0, bd->w, bd->h);
|
||||
bd->bg_evas = ecore_evas_get(bd->bg_ecore_evas);
|
||||
|
|
|
@ -94,3 +94,46 @@ e_canvas_cache_reload(void)
|
|||
evas_image_cache_reload(e);
|
||||
}
|
||||
}
|
||||
|
||||
Ecore_Evas *
|
||||
e_canvas_new(int engine_hint, Ecore_X_Window win, int x, int y, int w, int h,
|
||||
int direct_resize, int override, Ecore_X_Window *win_ret,
|
||||
Ecore_X_Window *subwin_ret)
|
||||
{
|
||||
Ecore_Evas *ee;
|
||||
|
||||
if (e_canvas_engine_decide(engine_hint) == E_EVAS_ENGINE_GL_X11)
|
||||
{
|
||||
ee = ecore_evas_gl_x11_new(NULL, win, x, y, w, h);
|
||||
if (ee)
|
||||
{
|
||||
ecore_evas_override_set(ee, override);
|
||||
if (direct_resize) ecore_evas_gl_x11_direct_resize_set(ee, 1);
|
||||
if (win_ret) *win_ret = ecore_evas_gl_x11_window_get(ee);
|
||||
if (subwin_ret) *subwin_ret = ecore_evas_gl_x11_subwindow_get(ee);
|
||||
}
|
||||
}
|
||||
else if (e_canvas_engine_decide(engine_hint) == E_EVAS_ENGINE_XRENDER_X11)
|
||||
{
|
||||
ee = ecore_evas_xrender_x11_new(NULL, win, x, y, w, h);
|
||||
if (ee)
|
||||
{
|
||||
ecore_evas_override_set(ee, override);
|
||||
if (direct_resize) ecore_evas_xrender_x11_direct_resize_set(ee, 1);
|
||||
if (win_ret) *win_ret = ecore_evas_xrender_x11_window_get(ee);
|
||||
if (subwin_ret) *subwin_ret = ecore_evas_xrender_x11_subwindow_get(ee);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ee = ecore_evas_software_x11_new(NULL, win, x, y, w, h);
|
||||
if (ee)
|
||||
{
|
||||
ecore_evas_override_set(ee, override);
|
||||
if (direct_resize) ecore_evas_software_x11_direct_resize_set(ee, 1);
|
||||
if (win_ret) *win_ret = ecore_evas_software_x11_window_get(ee);
|
||||
if (subwin_ret) *subwin_ret = ecore_evas_software_x11_subwindow_get(ee);
|
||||
}
|
||||
}
|
||||
return ee;
|
||||
}
|
||||
|
|
|
@ -6,12 +6,13 @@
|
|||
#ifndef E_CANVAS_H
|
||||
#define E_CANVAS_H
|
||||
|
||||
EAPI void e_canvas_add(Ecore_Evas *ee);
|
||||
EAPI void e_canvas_del(Ecore_Evas *ee);
|
||||
EAPI int e_canvas_engine_decide(int engine);
|
||||
EAPI void e_canvas_recache(void);
|
||||
EAPI void e_canvas_cache_flush(void);
|
||||
EAPI void e_canvas_cache_reload(void);
|
||||
|
||||
EAPI void e_canvas_add(Ecore_Evas *ee);
|
||||
EAPI void e_canvas_del(Ecore_Evas *ee);
|
||||
EAPI int e_canvas_engine_decide(int engine);
|
||||
EAPI void e_canvas_recache(void);
|
||||
EAPI void e_canvas_cache_flush(void);
|
||||
EAPI void e_canvas_cache_reload(void);
|
||||
EAPI Ecore_Evas *e_canvas_new(int engine_hint, Ecore_X_Window win, int x, int y, int w, int h, int direct_resize, int override, Ecore_X_Window *win_ret, Ecore_X_Window *subwin_ret);
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
|
|
@ -408,6 +408,8 @@ e_config_init(void)
|
|||
e_config->evas_engine_errors = E_EVAS_ENGINE_DEFAULT;
|
||||
e_config->evas_engine_popups = E_EVAS_ENGINE_DEFAULT;
|
||||
e_config->evas_engine_drag = E_EVAS_ENGINE_DEFAULT;
|
||||
e_config->evas_engine_win = E_EVAS_ENGINE_DEFAULT;
|
||||
e_config->evas_engine_zone = E_EVAS_ENGINE_DEFAULT;
|
||||
e_config->language = strdup("");
|
||||
e_config->window_placement_policy = E_WINDOW_PLACEMENT_SMART;
|
||||
e_config->focus_policy = E_FOCUS_MOUSE;
|
||||
|
|
|
@ -55,6 +55,7 @@ typedef Eet_Data_Descriptor E_Config_DD;
|
|||
#define E_EVAS_ENGINE_DEFAULT 0
|
||||
#define E_EVAS_ENGINE_SOFTWARE_X11 1
|
||||
#define E_EVAS_ENGINE_GL_X11 2
|
||||
#define E_EVAS_ENGINE_XRENDER_X11 3
|
||||
|
||||
struct _E_Config
|
||||
{
|
||||
|
@ -86,6 +87,8 @@ struct _E_Config
|
|||
int evas_engine_errors;
|
||||
int evas_engine_popups;
|
||||
int evas_engine_drag;
|
||||
int evas_engine_win;
|
||||
int evas_engine_zone;
|
||||
char *language;
|
||||
Evas_List *modules;
|
||||
Evas_List *font_fallbacks;
|
||||
|
|
|
@ -88,24 +88,12 @@ e_container_new(E_Manager *man)
|
|||
{
|
||||
con->win = con->manager->win;
|
||||
}
|
||||
if (e_canvas_engine_decide(e_config->evas_engine_container) ==
|
||||
E_EVAS_ENGINE_GL_X11)
|
||||
{
|
||||
con->bg_ecore_evas = ecore_evas_gl_x11_new(NULL, con->win, 0, 0, con->w, con->h);
|
||||
ecore_evas_gl_x11_direct_resize_set(con->bg_ecore_evas, 1);
|
||||
ecore_evas_override_set(con->bg_ecore_evas, 1);
|
||||
con->bg_win = ecore_evas_gl_x11_window_get(con->bg_ecore_evas);
|
||||
}
|
||||
else
|
||||
{
|
||||
con->bg_ecore_evas = ecore_evas_software_x11_new(NULL, con->win, 0, 0, con->w, con->h);
|
||||
ecore_evas_software_x11_direct_resize_set(con->bg_ecore_evas, 1);
|
||||
ecore_evas_override_set(con->bg_ecore_evas, 1);
|
||||
con->bg_win = ecore_evas_software_x11_window_get(con->bg_ecore_evas);
|
||||
}
|
||||
con->bg_ecore_evas = e_canvas_new(e_config->evas_engine_container, con->win,
|
||||
0, 0, con->w, con->h, 1, 1,
|
||||
&(con->bg_win), NULL);
|
||||
e_canvas_add(con->bg_ecore_evas);
|
||||
con->event_win = ecore_x_window_input_new(con->bg_win, 0, 0, con->w, con->h);
|
||||
ecore_x_window_show(con->event_win);
|
||||
e_canvas_add(con->bg_ecore_evas);
|
||||
con->bg_evas = ecore_evas_get(con->bg_ecore_evas);
|
||||
ecore_evas_name_class_set(con->bg_ecore_evas, "E", "Background_Window");
|
||||
ecore_evas_title_set(con->bg_ecore_evas, "Enlightenment Background");
|
||||
|
|
|
@ -151,25 +151,9 @@ e_drag_new(E_Container *container, int x, int y,
|
|||
drag->layer = 250;
|
||||
drag->container = container;
|
||||
e_object_ref(E_OBJECT(drag->container));
|
||||
if (e_canvas_engine_decide(e_config->evas_engine_drag) ==
|
||||
E_EVAS_ENGINE_GL_X11)
|
||||
{
|
||||
drag->ecore_evas = ecore_evas_gl_x11_new(NULL,
|
||||
drag->container->win,
|
||||
drag->x, drag->y,
|
||||
drag->w, drag->h);
|
||||
ecore_evas_gl_x11_direct_resize_set(drag->ecore_evas, 1);
|
||||
drag->evas_win = ecore_evas_gl_x11_window_get(drag->ecore_evas);
|
||||
}
|
||||
else
|
||||
{
|
||||
drag->ecore_evas = ecore_evas_software_x11_new(NULL,
|
||||
drag->container->win,
|
||||
drag->x, drag->y,
|
||||
drag->w, drag->h);
|
||||
ecore_evas_software_x11_direct_resize_set(drag->ecore_evas, 1);
|
||||
drag->evas_win = ecore_evas_software_x11_window_get(drag->ecore_evas);
|
||||
}
|
||||
drag->ecore_evas = e_canvas_new(e_config->evas_engine_drag, drag->container->win,
|
||||
drag->x, drag->y, drag->w, drag->h, 1, 1,
|
||||
&(drag->evas_win), NULL);
|
||||
e_canvas_add(drag->ecore_evas);
|
||||
drag->shape = e_container_shape_add(drag->container);
|
||||
e_container_shape_move(drag->shape, drag->x, drag->y);
|
||||
|
|
|
@ -70,24 +70,12 @@ e_error_message_manager_show(E_Manager *man, char *title, char *txt)
|
|||
error_h = 200;
|
||||
x = (man->w - error_w) / 2;
|
||||
y = (man->h - error_h) / 2;
|
||||
if (e_canvas_engine_decide(e_config->evas_engine_errors) ==
|
||||
E_EVAS_ENGINE_GL_X11)
|
||||
{
|
||||
ee = ecore_evas_gl_x11_new(NULL, man->win, x, y, error_w, error_h);
|
||||
ecore_evas_gl_x11_direct_resize_set(ee, 1);
|
||||
ecore_evas_override_set(ee, 1);
|
||||
win = ecore_evas_gl_x11_window_get(ee);
|
||||
e_container_window_raise(con, win, 999);
|
||||
}
|
||||
else
|
||||
{
|
||||
ee = ecore_evas_software_x11_new(NULL, man->win, x, y, error_w, error_h);
|
||||
ecore_evas_software_x11_direct_resize_set(ee, 1);
|
||||
ecore_evas_override_set(ee, 1);
|
||||
win = ecore_evas_software_x11_window_get(ee);
|
||||
e_container_window_raise(con, win, 999);
|
||||
}
|
||||
ee = e_canvas_new(e_config->evas_engine_errors, man->win,
|
||||
x, y, error_w, error_h, 1, 0,
|
||||
&win, NULL);
|
||||
e_canvas_add(ee);
|
||||
ecore_evas_override_set(ee, 1);
|
||||
e_container_window_raise(con, win, 999);
|
||||
|
||||
ecore_evas_name_class_set(ee, "E", "Low_Level_Dialog");
|
||||
ecore_evas_title_set(ee, "Enlightenment: Low Level Dialog");
|
||||
|
|
|
@ -42,21 +42,9 @@ e_init_init(void)
|
|||
root = roots[0];
|
||||
|
||||
ecore_x_window_size_get(root, &w, &h);
|
||||
if (e_canvas_engine_decide(e_config->evas_engine_init) ==
|
||||
E_EVAS_ENGINE_GL_X11)
|
||||
{
|
||||
_e_init_ecore_evas = ecore_evas_gl_x11_new(NULL, root, 0, 0, w, h);
|
||||
ecore_evas_gl_x11_direct_resize_set(_e_init_ecore_evas, 1);
|
||||
ecore_evas_override_set(_e_init_ecore_evas, 1);
|
||||
_e_init_win = ecore_evas_gl_x11_window_get(_e_init_ecore_evas);
|
||||
}
|
||||
else
|
||||
{
|
||||
_e_init_ecore_evas = ecore_evas_software_x11_new(NULL, root, 0, 0, w, h);
|
||||
ecore_evas_software_x11_direct_resize_set(_e_init_ecore_evas, 1);
|
||||
ecore_evas_override_set(_e_init_ecore_evas, 1);
|
||||
_e_init_win = ecore_evas_software_x11_window_get(_e_init_ecore_evas);
|
||||
}
|
||||
_e_init_ecore_evas = e_canvas_new(e_config->evas_engine_init, root,
|
||||
0, 0, w, h, 1, 1,
|
||||
&(_e_init_win), NULL);
|
||||
e_canvas_add(_e_init_ecore_evas);
|
||||
_e_init_evas = ecore_evas_get(_e_init_ecore_evas);
|
||||
ecore_evas_name_class_set(_e_init_ecore_evas, "E", "Init_Window");
|
||||
|
|
|
@ -1157,23 +1157,9 @@ _e_menu_realize(E_Menu *m)
|
|||
|
||||
if (m->realized) return;
|
||||
m->realized = 1;
|
||||
if (e_canvas_engine_decide(e_config->evas_engine_menus) ==
|
||||
E_EVAS_ENGINE_GL_X11)
|
||||
{
|
||||
m->ecore_evas = ecore_evas_gl_x11_new(NULL, m->zone->container->win,
|
||||
m->cur.x, m->cur.y,
|
||||
m->cur.w, m->cur.h);
|
||||
ecore_evas_gl_x11_direct_resize_set(m->ecore_evas, 1);
|
||||
m->evas_win = ecore_evas_gl_x11_window_get(m->ecore_evas);
|
||||
}
|
||||
else
|
||||
{
|
||||
m->ecore_evas = ecore_evas_software_x11_new(NULL, m->zone->container->win,
|
||||
m->cur.x, m->cur.y,
|
||||
m->cur.w, m->cur.h);
|
||||
ecore_evas_software_x11_direct_resize_set(m->ecore_evas, 1);
|
||||
m->evas_win = ecore_evas_software_x11_window_get(m->ecore_evas);
|
||||
}
|
||||
m->ecore_evas = e_canvas_new(e_config->evas_engine_menus, m->zone->container->win,
|
||||
m->cur.x, m->cur.y, m->cur.w, m->cur.h, 1, 1,
|
||||
&(m->evas_win), NULL);
|
||||
e_canvas_add(m->ecore_evas);
|
||||
m->shape = e_container_shape_add(m->zone->container);
|
||||
e_container_shape_move(m->shape, m->cur.x, m->cur.y);
|
||||
|
|
|
@ -57,27 +57,9 @@ e_popup_new(E_Zone *zone, int x, int y, int w, int h)
|
|||
pop->w = w;
|
||||
pop->h = h;
|
||||
pop->layer = 250;
|
||||
if (e_canvas_engine_decide(e_config->evas_engine_popups) ==
|
||||
E_EVAS_ENGINE_GL_X11)
|
||||
{
|
||||
pop->ecore_evas = ecore_evas_gl_x11_new(NULL,
|
||||
pop->zone->container->win,
|
||||
pop->zone->x + pop->x,
|
||||
pop->zone->y + pop->y,
|
||||
pop->w, pop->h);
|
||||
ecore_evas_gl_x11_direct_resize_set(pop->ecore_evas, 1);
|
||||
pop->evas_win = ecore_evas_gl_x11_window_get(pop->ecore_evas);
|
||||
}
|
||||
else
|
||||
{
|
||||
pop->ecore_evas = ecore_evas_software_x11_new(NULL,
|
||||
pop->zone->container->win,
|
||||
pop->zone->x + pop->x,
|
||||
pop->zone->y + pop->y,
|
||||
pop->w, pop->h);
|
||||
ecore_evas_software_x11_direct_resize_set(pop->ecore_evas, 1);
|
||||
pop->evas_win = ecore_evas_software_x11_window_get(pop->ecore_evas);
|
||||
}
|
||||
pop->ecore_evas = e_canvas_new(e_config->evas_engine_popups, pop->zone->container->win,
|
||||
pop->zone->x + pop->x, pop->zone->y + pop->y, pop->w, pop->h, 1, 1,
|
||||
&(pop->evas_win), NULL);
|
||||
e_canvas_add(pop->ecore_evas);
|
||||
pop->shape = e_container_shape_add(pop->zone->container);
|
||||
e_container_shape_move(pop->shape, pop->zone->x + pop->x, pop->zone->y + pop->y);
|
||||
|
|
|
@ -43,24 +43,15 @@ e_win_new(E_Container *con)
|
|||
win->container = con;
|
||||
/* TODO: Maybe use an own config for windows? */
|
||||
win->engine = e_canvas_engine_decide(e_config->evas_engine_errors);
|
||||
if (win->engine == E_EVAS_ENGINE_GL_X11)
|
||||
{
|
||||
win->ecore_evas = ecore_evas_gl_x11_new(NULL, con->manager->root,
|
||||
0, 0, 1, 1);
|
||||
win->evas_win = ecore_evas_gl_x11_window_get(win->ecore_evas);
|
||||
}
|
||||
else
|
||||
{
|
||||
win->ecore_evas = ecore_evas_software_x11_new(NULL, con->manager->root,
|
||||
0, 0, 1, 1);
|
||||
win->evas_win = ecore_evas_software_x11_window_get(win->ecore_evas);
|
||||
}
|
||||
win->ecore_evas = e_canvas_new(e_config->evas_engine_win, con->manager->root,
|
||||
0, 0, 1, 1, 0, 0,
|
||||
&(win->evas_win), NULL);
|
||||
e_canvas_add(win->ecore_evas);
|
||||
ecore_evas_data_set(win->ecore_evas, "E_Win", win);
|
||||
ecore_evas_callback_move_set(win->ecore_evas, _e_win_cb_move);
|
||||
ecore_evas_callback_resize_set(win->ecore_evas, _e_win_cb_resize);
|
||||
ecore_evas_callback_delete_request_set(win->ecore_evas, _e_win_cb_delete);
|
||||
win->evas = ecore_evas_get(win->ecore_evas);
|
||||
e_canvas_add(win->ecore_evas);
|
||||
ecore_evas_name_class_set(win->ecore_evas, "E", "_e_internal_window");
|
||||
ecore_evas_title_set(win->ecore_evas, "E");
|
||||
win->x = 0;
|
||||
|
|
|
@ -106,13 +106,11 @@ e_zone_new(E_Container *con, int num, int x, int y, int w, int h)
|
|||
evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_MOVE, _e_zone_cb_bg_mouse_move, zone);
|
||||
|
||||
/* TODO: config the ecore_evas type. */
|
||||
zone->black_ecore_evas = ecore_evas_software_x11_new(NULL, zone->container->win,
|
||||
0, 0, zone->w, zone->h);
|
||||
ecore_evas_software_x11_direct_resize_set(zone->black_ecore_evas, 1);
|
||||
ecore_evas_override_set(zone->black_ecore_evas, 1);
|
||||
zone->black_ecore_evas = e_canvas_new(e_config->evas_engine_zone, zone->container->win,
|
||||
0, 0, zone->w, zone->h, 1, 1,
|
||||
&(zone->black_win), NULL);
|
||||
e_canvas_add(zone->black_ecore_evas);
|
||||
ecore_evas_layer_set(zone->black_ecore_evas, 6);
|
||||
|
||||
zone->black_win = ecore_evas_software_x11_window_get(zone->black_ecore_evas);
|
||||
zone->black_evas = ecore_evas_get(zone->black_ecore_evas);
|
||||
|
||||
o = evas_object_rectangle_add(zone->black_evas);
|
||||
|
@ -628,6 +626,11 @@ _e_zone_free(E_Zone *zone)
|
|||
Evas_List *l;
|
||||
int x, y;
|
||||
|
||||
if (zone->black_ecore_evas)
|
||||
{
|
||||
e_canvas_del(zone->black_ecore_evas);
|
||||
ecore_evas_free(zone->black_ecore_evas);
|
||||
}
|
||||
if (zone->cur_mouse_action)
|
||||
{
|
||||
e_object_unref(E_OBJECT(zone->cur_mouse_action));
|
||||
|
|
Loading…
Reference in New Issue