#else
# undef BUILD_ECORE_EVAS_OPENGL_X11
# undef BUILD_ECORE_EVAS_SOFTWARE_X11
-# undef BUILD_ECORE_EVAS_XRENDER_X11
#endif
#ifndef HAVE_ECORE_X_XCB
-# undef BUILD_ECORE_EVAS_XRENDER_XCB
# undef BUILD_ECORE_EVAS_SOFTWARE_XCB
#endif
}
#endif /* BUILD_ECORE_EVAS_SOFTWARE_X11 */
}
- else if (!strcmp(ee->driver, "xrender_x11"))
- {
-#if defined (BUILD_ECORE_EVAS_XRENDER_X11) || defined (BUILD_ECORE_EVAS_XRENDER_XCB)
- Evas_Engine_Info_XRender_X11 *einfo;
-
- einfo = (Evas_Engine_Info_XRender_X11 *)evas_engine_info_get(ee->evas);
- if (einfo)
- {
- unsigned int foreground;
- Ecore_X_GC gc;
-
- if (ee->engine.x.mask) ecore_x_pixmap_free(ee->engine.x.mask);
- ee->engine.x.mask = ecore_x_pixmap_new(ee->prop.window, ee->w, ee->h, 1);
- foreground = 0;
- gc = ecore_x_gc_new(ee->engine.x.mask,
- ECORE_X_GC_VALUE_MASK_FOREGROUND,
- &foreground);
- ecore_x_drawable_rectangle_fill(ee->engine.x.mask, gc,
- 0, 0, ee->w, ee->h);
- ecore_x_gc_free(gc);
- einfo->info.mask = ee->engine.x.mask;
- if (!evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo))
- {
- ERR("evas_engine_info_set() for engine '%s' failed.", ee->driver);
- }
- evas_damage_rectangle_add(ee->evas, 0, 0, ee->w, ee->h);
-
- }
-#endif /* BUILD_ECORE_EVAS_XRENDER_X11 || BUILD_ECORE_EVAS_XRENDER_XCB */
- }
else if (!strcmp(ee->driver, "software_16_x11"))
{
#if BUILD_ECORE_EVAS_SOFTWARE_16_X11
_ecore_evas_x_rotation_set(Ecore_Evas *ee, int rotation, int resize)
{
if (ee->rotation == rotation) return;
- if (!strcmp(ee->driver, "xrender_x11")) return;
if (!strcmp(ee->driver, "opengl_x11"))
{
#ifdef BUILD_ECORE_EVAS_OPENGL_X11
}
#endif /* BUILD_ECORE_EVAS_SOFTWARE_X11 */
}
- else if (!strcmp(ee->driver, "xrender_x11"))
- {
-#if defined (BUILD_ECORE_EVAS_XRENDER_X11) || defined (BUILD_ECORE_EVAS_XRENDER_XCB)
- Evas_Engine_Info_XRender_X11 *einfo;
-
- ee->shaped = shaped;
- einfo = (Evas_Engine_Info_XRender_X11 *)evas_engine_info_get(ee->evas);
- if (einfo)
- {
- if (ee->shaped)
- {
- unsigned int foreground;
- Ecore_X_GC gc;
-
- if (!ee->engine.x.mask)
- ee->engine.x.mask = ecore_x_pixmap_new(ee->prop.window, ee->w, ee->h, 1);
- foreground = 0;
- gc = ecore_x_gc_new(ee->engine.x.mask,
- ECORE_X_GC_VALUE_MASK_FOREGROUND,
- &foreground);
- ecore_x_drawable_rectangle_fill(ee->engine.x.mask, gc,
- 0, 0, ee->w, ee->h);
- ecore_x_gc_free(gc);
- einfo->info.mask = ee->engine.x.mask;
- if (!evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo))
- {
- ERR("evas_engine_info_set() for engine '%s' failed.", ee->driver);
- }
- evas_damage_rectangle_add(ee->evas, 0, 0, ee->w, ee->h);
- ecore_x_window_shape_input_mask_set(ee->prop.window, 0);
- }
- else
- {
- if (ee->engine.x.mask) ecore_x_pixmap_free(ee->engine.x.mask);
- ee->engine.x.mask = 0;
- einfo->info.mask = 0;
- if (!evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo))
- {
- ERR("evas_engine_info_set() for engine '%s' failed.", ee->driver);
- }
- ecore_x_window_shape_mask_set(ee->prop.window, 0);
- ecore_x_window_shape_input_mask_set(ee->prop.window, 0);
- }
- }
-#endif /* BUILD_ECORE_EVAS_XRENDER_X11 || BUILD_ECORE_EVAS_XRENDER_XCB */
- }
else if (!strcmp(ee->driver, "software_16_x11"))
{
#if BUILD_ECORE_EVAS_SOFTWARE_16_X11
// putenv((char*)"DESKTOP_STARTUP_ID=");
}
}
- else if (!strcmp(ee->driver, "xrender_x11"))
- {
-#if defined (BUILD_ECORE_EVAS_XRENDER_X11) || defined (BUILD_ECORE_EVAS_XRENDER_XCB)
- Evas_Engine_Info_XRender_X11 *einfo;
-
- einfo = (Evas_Engine_Info_XRender_X11 *)evas_engine_info_get(ee->evas);
- if (!einfo) return;
- if (!ecore_x_composite_query()) return;
-
- ee->shaped = 0;
- ee->alpha = alpha;
- ecore_x_window_free(ee->prop.window);
- ecore_event_window_unregister(ee->prop.window);
- if (ee->alpha)
- {
- if (ee->prop.override)
- ee->prop.window = ecore_x_window_override_argb_new(ee->engine.x.win_root, ee->req.x, ee->req.y, ee->req.w, ee->req.h);
- else
- ee->prop.window = ecore_x_window_argb_new(ee->engine.x.win_root, ee->req.x, ee->req.y, ee->req.w, ee->req.h);
- if (!ee->engine.x.mask)
- ee->engine.x.mask = ecore_x_pixmap_new(ee->prop.window, ee->req.w, ee->req.h, 1);
- }
- else
- {
- if (ee->prop.override)
- ee->prop.window = ecore_x_window_override_new(ee->engine.x.win_root, ee->req.x, ee->req.y, ee->req.w, ee->req.h);
- else
- ee->prop.window = ecore_x_window_new(ee->engine.x.win_root, ee->req.x, ee->req.y, ee->req.w, ee->req.h);
- if (ee->engine.x.mask) ecore_x_pixmap_free(ee->engine.x.mask);
- ee->engine.x.mask = 0;
- ecore_x_window_shape_input_mask_set(ee->prop.window, 0);
- }
-
- einfo->info.destination_alpha = alpha;
-
-# ifdef BUILD_ECORE_EVAS_XRENDER_XCB
- cookie_attr = xcb_get_window_attributes_unchecked(ecore_x_connection_get(), ee->prop.window);
- reply_attr = xcb_get_window_attributes_reply(ecore_x_connection_get(), cookie_attr, NULL);
-
- einfo->info.visual = reply_attr->visual;
- free(reply_attr);
-# else
- XGetWindowAttributes(ecore_x_display_get(), ee->prop.window, &att);
- einfo->info.visual = att.visual;
-# endif /* ! BUILD_ECORE_EVAS_XRENDER_XCB */
-
-// if (ee->engine.x.mask) ecore_x_pixmap_free(ee->engine.x.mask);
-// ee->engine.x.mask = 0;
- einfo->info.mask = ee->engine.x.mask;
- einfo->info.drawable = ee->prop.window;
- if (!evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo))
- {
- ERR("evas_engine_info_set() for engine '%s' failed.", ee->driver);
- }
- evas_damage_rectangle_add(ee->evas, 0, 0, ee->req.w, ee->req.h);
- ecore_x_window_shape_mask_set(ee->prop.window, 0);
- ecore_x_input_multi_select(ee->prop.window);
- ecore_event_window_register(ee->prop.window, ee, ee->evas,
- (Ecore_Event_Mouse_Move_Cb)_ecore_evas_mouse_move_process,
- (Ecore_Event_Multi_Move_Cb)_ecore_evas_mouse_multi_move_process,
- (Ecore_Event_Multi_Down_Cb)_ecore_evas_mouse_multi_down_process,
- (Ecore_Event_Multi_Up_Cb)_ecore_evas_mouse_multi_up_process);
- if (ee->prop.borderless)
- ecore_x_mwm_borderless_set(ee->prop.window, ee->prop.borderless);
- if (ee->visible) ecore_x_window_show(ee->prop.window);
- if (ee->prop.focused) ecore_x_window_focus(ee->prop.window);
- if (ee->prop.title)
- {
- ecore_x_icccm_title_set(ee->prop.window, ee->prop.title);
- ecore_x_netwm_name_set(ee->prop.window, ee->prop.title);
- }
- ecore_x_icccm_hints_set(ee->prop.window,
- 1 /* accepts_focus */,
- ECORE_X_WINDOW_STATE_HINT_NORMAL /* initial_state */,
- 0 /* icon_pixmap */,
- 0 /* icon_mask */,
- 0 /* icon_window */,
- 0 /* window_group */,
- 0 /* is_urgent */);
- _ecore_evas_x_group_leader_update(ee);
- ecore_x_window_defaults_set(ee->prop.window);
- _ecore_evas_x_protocols_set(ee);
- _ecore_evas_x_sync_set(ee);
-#endif /* BUILD_ECORE_EVAS_XRENDER_X11 || BUILD_ECORE_EVAS_XRENDER_XCB */
- if (getenv("DESKTOP_STARTUP_ID"))
- {
- ecore_x_netwm_startup_id_set(ee->prop.window,
- getenv("DESKTOP_STARTUP_ID"));
- /* NB: on linux this may simply empty the env as opposed to completely
- * unset it to being empty - unsure as solartis libc crashes looking
- * for the '=' char */
- // putenv((char*)"DESKTOP_STARTUP_ID=");
- }
- }
else if (!strcmp(ee->driver, "software_16_x11"))
{
#if BUILD_ECORE_EVAS_SOFTWARE_16_X11
}
#endif
}
- else if (!strcmp(ee->driver, "xrender_x11"))
- {
-#ifdef BUILD_ECORE_EVAS_XRENDER_X11
- Evas_Engine_Info_XRender_X11 *einfo;
-
- einfo = (Evas_Engine_Info_XRender_X11 *)evas_engine_info_get(ee->evas);
- if (einfo)
- {
- einfo->info.drawable = ee->prop.window;
- evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo);
- }
-#endif
- }
else if (!strcmp(ee->driver, "opengl_x11"))
{
#ifdef BUILD_ECORE_EVAS_OPENGL_X11
{
if (ee->prop.avoid_damage == on) return;
if (!strcmp(ee->driver, "opengl_x11")) return;
- if (!strcmp(ee->driver, "xrender_x11")) return;
if (!strcmp(ee->driver, "software_x11"))
{
* ecore_x_init in 2 functions and suppress some round trips.
*/
-#if defined (BUILD_ECORE_EVAS_SOFTWARE_X11) || defined (BUILD_ECORE_EVAS_OPENGL_X11) || defined (BUILD_ECORE_EVAS_XRENDER_X11) || defined (BUILD_ECORE_EVAS_XRENDER_XCB) || defined (BUILD_ECORE_EVAS_SOFTWARE_16_X11) || defined (BUILD_ECORE_EVAS_SOFTWARE_8_X11)
+#if defined (BUILD_ECORE_EVAS_SOFTWARE_X11) || defined (BUILD_ECORE_EVAS_OPENGL_X11) || defined (BUILD_ECORE_EVAS_SOFTWARE_16_X11) || defined (BUILD_ECORE_EVAS_SOFTWARE_8_X11)
static void
_ecore_evas_x_flush_pre(void *data, Evas *e __UNUSED__, void *event_info __UNUSED__)
{
/**
* To be documented.
*
- * FIXME: To be fixed.
+ * FIXME: To be fixed or maybe removed rather?
*/
-#if defined (BUILD_ECORE_EVAS_XRENDER_X11) || defined (BUILD_ECORE_EVAS_XRENDER_XCB)
-EAPI Ecore_Evas *
-ecore_evas_xrender_x11_new(const char *disp_name, Ecore_X_Window parent,
- int x, int y, int w, int h)
-{
- Evas_Engine_Info_XRender_X11 *einfo;
- Ecore_Evas *ee;
- int rmethod;
-
- rmethod = evas_render_method_lookup("xrender_x11");
- if (!rmethod) return NULL;
- if (!ecore_x_init(disp_name)) return NULL;
- ee = calloc(1, sizeof(Ecore_Evas));
- if (!ee) return NULL;
-
- ECORE_MAGIC_SET(ee, ECORE_MAGIC_EVAS);
-
- _ecore_evas_x_init();
-
- ee->engine.func = (Ecore_Evas_Engine_Func *)&_ecore_x_engine_func;
-
- ee->driver = "xrender_x11";
- if (disp_name) ee->name = strdup(disp_name);
-
- if (w < 1) w = 1;
- if (h < 1) h = 1;
- ee->x = x;
- ee->y = y;
- ee->w = w;
- ee->h = h;
- ee->req.x = ee->x;
- ee->req.y = ee->y;
- ee->req.w = ee->w;
- ee->req.h = ee->h;
-
- ee->prop.max.w = 32767;
- ee->prop.max.h = 32767;
- ee->prop.layer = 4;
- ee->prop.request_pos = 0;
- ee->prop.sticky = 0;
- ee->engine.x.state.sticky = 0;
-
- /* init evas here */
- ee->evas = evas_new();
- evas_event_callback_add(ee->evas, EVAS_CALLBACK_RENDER_FLUSH_PRE, _ecore_evas_x_flush_pre, ee);
- evas_event_callback_add(ee->evas, EVAS_CALLBACK_RENDER_FLUSH_POST, _ecore_evas_x_flush_post, ee);
- evas_data_attach_set(ee->evas, ee);
- evas_output_method_set(ee->evas, rmethod);
- evas_output_size_set(ee->evas, w, h);
- evas_output_viewport_set(ee->evas, 0, 0, w, h);
-
- ee->engine.x.win_root = parent;
- ee->prop.window = ecore_x_window_new(parent, x, y, w, h);
- if (getenv("DESKTOP_STARTUP_ID"))
- {
- ecore_x_netwm_startup_id_set(ee->prop.window,
- getenv("DESKTOP_STARTUP_ID"));
- /* NB: on linux this may simply empty the env as opposed to completely
- * unset it to being empty - unsure as solartis libc crashes looking
- * for the '=' char */
-// putenv((char*)"DESKTOP_STARTUP_ID=");
- }
- einfo = (Evas_Engine_Info_XRender_X11 *)evas_engine_info_get(ee->evas);
- if (einfo)
- {
-# ifdef BUILD_ECORE_EVAS_XRENDER_XCB
- xcb_screen_iterator_t iter;
- xcb_screen_t *screen;
-
- /* FIXME: this is inefficient as its a round trip */
- screen = ecore_x_default_screen_get();
- iter = xcb_setup_roots_iterator (xcb_get_setup (ecore_x_connection_get()));
- if (iter.rem > 1)
- {
- xcb_get_geometry_cookie_t cookie;
- xcb_get_geometry_reply_t *reply;
- Ecore_X_Window *roots;
- int num;
- uint8_t i;
-
- num = 0;
- cookie = xcb_get_geometry_unchecked(ecore_x_connection_get(), parent);
- roots = ecore_x_window_root_list(&num);
- if (roots)
- {
- reply = xcb_get_geometry_reply(ecore_x_connection_get(), cookie, NULL);
-
- if (reply)
- {
- for (i = 0; i < num; xcb_screen_next (&iter), i++)
- {
- if (reply->root == roots[i])
- {
- screen = iter.data;
- break;
- }
- }
- free(reply);
- }
- free(roots);
- }
- else
- {
- reply = xcb_get_geometry_reply(ecore_x_connection_get(), cookie, NULL);
- if (reply) free(reply);
- }
- }
- einfo->info.backend = EVAS_ENGINE_INFO_XRENDER_BACKEND_XCB;
- einfo->info.connection = ecore_x_connection_get();
- einfo->info.screen = screen;
- einfo->info.visual = screen->root_visual;
-# elif BUILD_ECORE_EVAS_XRENDER_X11
- int screen;
-
- /* FIXME: this is inefficient as its a round trip */
- screen = DefaultScreen(ecore_x_display_get());
- if (ScreenCount(ecore_x_display_get()) > 1)
- {
- Ecore_X_Window *roots;
- int num, i;
-
- num = 0;
- roots = ecore_x_window_root_list(&num);
- if (roots)
- {
- XWindowAttributes at;
-
- if (XGetWindowAttributes(ecore_x_display_get(),
- parent, &at))
- {
- for (i = 0; i < num; i++)
- {
- if (at.root == roots[i])
- {
- screen = i;
- break;
- }
- }
- }
- free(roots);
- }
- }
- einfo->info.backend = EVAS_ENGINE_INFO_XRENDER_BACKEND_XLIB;
- einfo->info.connection = ecore_x_display_get();
- einfo->info.screen = NULL;
- einfo->info.visual = DefaultVisual(ecore_x_display_get(), screen);
-# endif /* BUILD_ECORE_EVAS_XRENDER_(XCB|X11) */
- einfo->info.drawable = ee->prop.window;
- if (!evas_engine_info_set(ee->evas, (Evas_Engine_Info *)einfo))
- {
- ERR("evas_engine_info_set() init engine '%s' failed.", ee->driver);
- ecore_evas_free(ee);
- return NULL;
- }
- }
-
- ecore_x_icccm_hints_set(ee->prop.window,
- 1 /* accepts_focus */,
- ECORE_X_WINDOW_STATE_HINT_NORMAL /* initial_state */,
- 0 /* icon_pixmap */,
- 0 /* icon_mask */,
- 0 /* icon_window */,
- 0 /* window_group */,
- 0 /* is_urgent */);
- _ecore_evas_x_group_leader_set(ee);
- ecore_x_window_defaults_set(ee->prop.window);
- _ecore_evas_x_protocols_set(ee);
- _ecore_evas_x_sync_set(ee);
-
- ee->engine.func->fn_render = _ecore_evas_x_render;
- _ecore_evas_register(ee);
- ecore_x_input_multi_select(ee->prop.window);
- ecore_event_window_register(ee->prop.window, ee, ee->evas,
- (Ecore_Event_Mouse_Move_Cb)_ecore_evas_mouse_move_process,
- (Ecore_Event_Multi_Move_Cb)_ecore_evas_mouse_multi_move_process,
- (Ecore_Event_Multi_Down_Cb)_ecore_evas_mouse_multi_down_process,
- (Ecore_Event_Multi_Up_Cb)_ecore_evas_mouse_multi_up_process);
- return ee;
-}
-#else
EAPI Ecore_Evas *
ecore_evas_xrender_x11_new(const char *disp_name __UNUSED__, Ecore_X_Window parent __UNUSED__,
int x __UNUSED__, int y __UNUSED__, int w __UNUSED__, int h __UNUSED__)
{
return NULL;
}
-#endif /* ! BUILD_ECORE_EVAS_XRENDER_X11 && ! BUILD_ECORE_EVAS_XRENDER_XCB */
/**
* To be documented.
*
- * FIXME: To be fixed.
+ * FIXME: To be fixed or maybe removed rather?
*/
-#if defined (BUILD_ECORE_EVAS_XRENDER_X11) || defined (BUILD_ECORE_EVAS_XRENDER_XCB)
-EAPI Ecore_X_Window
-ecore_evas_xrender_x11_window_get(const Ecore_Evas *ee)
-{
- return (Ecore_X_Window) ecore_evas_window_get(ee);
-}
-#else
EAPI Ecore_X_Window
ecore_evas_xrender_x11_window_get(const Ecore_Evas *ee __UNUSED__)
{
return 0;
}
-#endif /* ! BUILD_ECORE_EVAS_XRENDER_X11 && ! BUILD_ECORE_EVAS_XRENDER_XCB */
/**
* To be documented.
*
* FIXME: To be fixed.
*/
-#if defined (BUILD_ECORE_EVAS_XRENDER_X11) || defined (BUILD_ECORE_EVAS_XRENDER_XCB)
-EAPI void
-ecore_evas_xrender_x11_direct_resize_set(Ecore_Evas *ee, Eina_Bool on)
-{
- ee->engine.x.direct_resize = on;
-}
-#else
EAPI void
ecore_evas_xrender_x11_direct_resize_set(Ecore_Evas *ee __UNUSED__, Eina_Bool on __UNUSED__)
{
}
-#endif /* ! BUILD_ECORE_EVAS_XRENDER_X11 && ! BUILD_ECORE_EVAS_XRENDER_XCB */
/**
* To be documented.
*
* FIXME: To be fixed.
*/
-#if defined (BUILD_ECORE_EVAS_XRENDER_X11) || defined (BUILD_ECORE_EVAS_XRENDER_XCB)
-EAPI Eina_Bool
-ecore_evas_xrender_x11_direct_resize_get(const Ecore_Evas *ee)
-{
- return ee->engine.x.direct_resize;
-}
-#else
EAPI Eina_Bool
ecore_evas_xrender_x11_direct_resize_get(const Ecore_Evas *ee __UNUSED__)
{
return 0;
}
-#endif /* ! BUILD_ECORE_EVAS_XRENDER_X11 && ! BUILD_ECORE_EVAS_XRENDER_XCB */
/**
* To be documented.
*
* FIXME: To be fixed.
*/
-#if defined (BUILD_ECORE_EVAS_XRENDER_X11) || defined (BUILD_ECORE_EVAS_XRENDER_XCB)
-EAPI void
-ecore_evas_xrender_x11_extra_event_window_add(Ecore_Evas *ee, Ecore_X_Window win)
-{
- ecore_evas_software_x11_extra_event_window_add(ee, win);
-}
-#else
EAPI void
ecore_evas_xrender_x11_extra_event_window_add(Ecore_Evas *ee __UNUSED__, Ecore_X_Window win __UNUSED__)
{
}
-#endif /* ! BUILD_ECORE_EVAS_XRENDER_X11 && ! BUILD_ECORE_EVAS_XRENDER_XCB */
/**
* To be documented.