forked from enlightenment/efl
From: Doyun Kang <doyoun.kang@samsung.com>
Add support for shape input setting and modification (with fixes/modifications and extensions added tomake it more complete). SVN revision: 58621
This commit is contained in:
parent
1dac813ace
commit
631f94a523
|
@ -127,3 +127,7 @@
|
||||||
2011-04-11 Hannes Janetzek
|
2011-04-11 Hannes Janetzek
|
||||||
|
|
||||||
* Fix removal of windows from ignore_list with ecore_x_window_ignore_set
|
* Fix removal of windows from ignore_list with ecore_x_window_ignore_set
|
||||||
|
|
||||||
|
2011-04-13 Doyun Kang
|
||||||
|
|
||||||
|
* Ecore_X + Ecore_Evas: Add more support for shape input setting
|
||||||
|
|
|
@ -363,7 +363,13 @@ EAPI Eina_List *ecore_evas_ecore_evas_list_get(void);
|
||||||
EAPI void ecore_evas_x11_leader_set(Ecore_Evas *ee, Ecore_X_Window win);
|
EAPI void ecore_evas_x11_leader_set(Ecore_Evas *ee, Ecore_X_Window win);
|
||||||
EAPI Ecore_X_Window ecore_evas_x11_leader_get(Ecore_Evas *ee);
|
EAPI Ecore_X_Window ecore_evas_x11_leader_get(Ecore_Evas *ee);
|
||||||
EAPI void ecore_evas_x11_leader_default_set(Ecore_Evas *ee);
|
EAPI void ecore_evas_x11_leader_default_set(Ecore_Evas *ee);
|
||||||
|
EAPI void ecore_evas_x11_shape_input_rectangle_set(Ecore_Evas *ee, int x, int y, int w, int h);
|
||||||
|
EAPI void ecore_evas_x11_shape_input_rectangle_add(Ecore_Evas *ee, int x, int y, int w, int h);
|
||||||
|
EAPI void ecore_evas_x11_shape_input_rectangle_subtract(Ecore_Evas *ee, int x, int y, int w, int h);
|
||||||
|
EAPI void ecore_evas_x11_shape_input_empty(Ecore_Evas *ee);
|
||||||
|
EAPI void ecore_evas_x11_shape_input_reset(Ecore_Evas *ee);
|
||||||
|
EAPI void ecore_evas_x11_shape_input_apply(Ecore_Evas *ee);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -226,6 +226,7 @@ struct _Ecore_Evas_Engine
|
||||||
unsigned char above : 1;
|
unsigned char above : 1;
|
||||||
unsigned char below : 1;
|
unsigned char below : 1;
|
||||||
} state;
|
} state;
|
||||||
|
Ecore_X_Window win_shaped_input;
|
||||||
} x;
|
} x;
|
||||||
#endif
|
#endif
|
||||||
#ifdef BUILD_ECORE_EVAS_FB
|
#ifdef BUILD_ECORE_EVAS_FB
|
||||||
|
|
|
@ -1297,6 +1297,7 @@ _ecore_evas_x_free(Ecore_Evas *ee)
|
||||||
{
|
{
|
||||||
_ecore_evas_x_group_leader_unset(ee);
|
_ecore_evas_x_group_leader_unset(ee);
|
||||||
_ecore_evas_x_sync_set(ee);
|
_ecore_evas_x_sync_set(ee);
|
||||||
|
if (ee->engine.x.win_shaped_input) ecore_x_window_free(ee->engine.x.win_shaped_input);
|
||||||
ecore_x_window_free(ee->prop.window);
|
ecore_x_window_free(ee->prop.window);
|
||||||
if (ee->engine.x.pmap) ecore_x_pixmap_free(ee->engine.x.pmap);
|
if (ee->engine.x.pmap) ecore_x_pixmap_free(ee->engine.x.pmap);
|
||||||
if (ee->engine.x.mask) ecore_x_pixmap_free(ee->engine.x.mask);
|
if (ee->engine.x.mask) ecore_x_pixmap_free(ee->engine.x.mask);
|
||||||
|
@ -4572,3 +4573,221 @@ ecore_evas_x11_leader_default_set(Ecore_Evas *ee)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Eina_Bool
|
||||||
|
_ecore_evas_x11_convert_rectangle_with_angle(Ecore_Evas *ee, Ecore_X_Rectangle *dst_rect, Ecore_X_Rectangle *src_rect)
|
||||||
|
{
|
||||||
|
#ifdef BUILD_ECORE_EVAS_X11
|
||||||
|
if (!src_rect || !dst_rect) return 0;
|
||||||
|
|
||||||
|
if (ee->rotation == 0)
|
||||||
|
{
|
||||||
|
dst_rect->x = src_rect->x;
|
||||||
|
dst_rect->y = src_rect->y;
|
||||||
|
dst_rect->width = src_rect->width;
|
||||||
|
dst_rect->height = src_rect->height;
|
||||||
|
}
|
||||||
|
else if (ee->rotation == 90)
|
||||||
|
{
|
||||||
|
dst_rect->x = src_rect->y;
|
||||||
|
dst_rect->y = ee->req.h - src_rect->x - src_rect->width;
|
||||||
|
dst_rect->width = src_rect->height;
|
||||||
|
dst_rect->height = src_rect->width;
|
||||||
|
}
|
||||||
|
else if (ee->rotation == 180)
|
||||||
|
{
|
||||||
|
dst_rect->x = ee->req.w - src_rect->x - src_rect->width;
|
||||||
|
dst_rect->y = ee->req.h - src_rect->y - src_rect->height;
|
||||||
|
dst_rect->width = src_rect->width;
|
||||||
|
dst_rect->height = src_rect->height;
|
||||||
|
}
|
||||||
|
else if (ee->rotation == 270)
|
||||||
|
{
|
||||||
|
dst_rect->x = ee->req.w - src_rect->y - src_rect->height;
|
||||||
|
dst_rect->y = src_rect->x;
|
||||||
|
dst_rect->width = src_rect->height;
|
||||||
|
dst_rect->height = src_rect->width;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
#else
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
EAPI void
|
||||||
|
ecore_evas_x11_shape_input_rectangle_set(Ecore_Evas *ee, int x, int y, int w, int h)
|
||||||
|
{
|
||||||
|
#ifdef BUILD_ECORE_EVAS_X11
|
||||||
|
Eina_Bool ret;
|
||||||
|
Ecore_X_Rectangle src_rect;
|
||||||
|
Ecore_X_Rectangle dst_rect;
|
||||||
|
|
||||||
|
if (!ECORE_MAGIC_CHECK(ee, ECORE_MAGIC_EVAS))
|
||||||
|
{
|
||||||
|
ECORE_MAGIC_FAIL(ee, ECORE_MAGIC_EVAS,
|
||||||
|
"ecore_evas_x11_shape_input_rectangle_set");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
src_rect.x = x;
|
||||||
|
src_rect.y = y;
|
||||||
|
src_rect.width = w;
|
||||||
|
src_rect.height = h;
|
||||||
|
|
||||||
|
ret = _ecore_evas_x11_convert_rectangle_with_angle(ee, &dst_rect, &src_rect);
|
||||||
|
|
||||||
|
if (!ee->engine.x.win_shaped_input)
|
||||||
|
ee->engine.x.win_shaped_input = ecore_x_window_override_new(ee->engine.x.win_root, 0, 0, 1, 1);
|
||||||
|
|
||||||
|
if (ret)
|
||||||
|
ecore_x_window_shape_input_rectangle_set(ee->engine.x.win_shaped_input, dst_rect.x, dst_rect.y, dst_rect.width, dst_rect.height);
|
||||||
|
#else
|
||||||
|
return;
|
||||||
|
ee = NULL;
|
||||||
|
x = 0;
|
||||||
|
y = 0;
|
||||||
|
w = 0;
|
||||||
|
h = 0;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
EAPI void
|
||||||
|
ecore_evas_x11_shape_input_rectangle_add(Ecore_Evas *ee, int x, int y, int w, int h)
|
||||||
|
{
|
||||||
|
#ifdef BUILD_ECORE_EVAS_X11
|
||||||
|
Eina_Bool ret;
|
||||||
|
Ecore_X_Rectangle src_rect;
|
||||||
|
Ecore_X_Rectangle dst_rect;
|
||||||
|
|
||||||
|
if (!ECORE_MAGIC_CHECK(ee, ECORE_MAGIC_EVAS))
|
||||||
|
{
|
||||||
|
ECORE_MAGIC_FAIL(ee, ECORE_MAGIC_EVAS,
|
||||||
|
"ecore_evas_x11_shape_input_rectangle_add");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
src_rect.x = x;
|
||||||
|
src_rect.y = y;
|
||||||
|
src_rect.width = w;
|
||||||
|
src_rect.height = h;
|
||||||
|
|
||||||
|
ret = _ecore_evas_x11_convert_rectangle_with_angle(ee, &dst_rect, &src_rect);
|
||||||
|
|
||||||
|
if (!ee->engine.x.win_shaped_input)
|
||||||
|
ee->engine.x.win_shaped_input = ecore_x_window_override_new(ee->engine.x.win_root, 0, 0, 1, 1);
|
||||||
|
|
||||||
|
if (ret)
|
||||||
|
ecore_x_window_shape_input_rectangle_add(ee->engine.x.win_shaped_input, dst_rect.x, dst_rect.y, dst_rect.width, dst_rect.height);
|
||||||
|
#else
|
||||||
|
return;
|
||||||
|
ee = NULL;
|
||||||
|
x = 0;
|
||||||
|
y = 0;
|
||||||
|
w = 0;
|
||||||
|
h = 0;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
EAPI void
|
||||||
|
ecore_evas_x11_shape_input_rectangle_subtract(Ecore_Evas *ee, int x, int y, int w, int h)
|
||||||
|
{
|
||||||
|
#ifdef BUILD_ECORE_EVAS_X11
|
||||||
|
Eina_Bool ret;
|
||||||
|
Ecore_X_Rectangle src_rect;
|
||||||
|
Ecore_X_Rectangle dst_rect;
|
||||||
|
|
||||||
|
if (!ECORE_MAGIC_CHECK(ee, ECORE_MAGIC_EVAS))
|
||||||
|
{
|
||||||
|
ECORE_MAGIC_FAIL(ee, ECORE_MAGIC_EVAS,
|
||||||
|
"ecore_evas_x11_shape_input_rectangle_subtract");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
src_rect.x = x;
|
||||||
|
src_rect.y = y;
|
||||||
|
src_rect.width = w;
|
||||||
|
src_rect.height = h;
|
||||||
|
|
||||||
|
ret = _ecore_evas_x11_convert_rectangle_with_angle(ee, &dst_rect, &src_rect);
|
||||||
|
|
||||||
|
if (!ee->engine.x.win_shaped_input)
|
||||||
|
ee->engine.x.win_shaped_input = ecore_x_window_override_new(ee->engine.x.win_root, 0, 0, 1, 1);
|
||||||
|
|
||||||
|
if (ret)
|
||||||
|
ecore_x_window_shape_input_rectangle_subtract(ee->engine.x.win_shaped_input, dst_rect.x, dst_rect.y, dst_rect.width, dst_rect.height);
|
||||||
|
#else
|
||||||
|
return;
|
||||||
|
ee = NULL;
|
||||||
|
x = 0;
|
||||||
|
y = 0;
|
||||||
|
w = 0;
|
||||||
|
h = 0;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
EAPI void
|
||||||
|
ecore_evas_x11_shape_input_empty(Ecore_Evas *ee)
|
||||||
|
{
|
||||||
|
#ifdef BUILD_ECORE_EVAS_X11
|
||||||
|
if (!ECORE_MAGIC_CHECK(ee, ECORE_MAGIC_EVAS))
|
||||||
|
{
|
||||||
|
ECORE_MAGIC_FAIL(ee, ECORE_MAGIC_EVAS,
|
||||||
|
"ecore_evas_x11_shape_input_empty");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!ee->engine.x.win_shaped_input)
|
||||||
|
ee->engine.x.win_shaped_input = ecore_x_window_override_new(ee->engine.x.win_root, 0, 0, 1, 1);
|
||||||
|
|
||||||
|
ecore_x_window_shape_input_rectangle_set(ee->engine.x.win_shaped_input, 0, 0, 0, 0);
|
||||||
|
#else
|
||||||
|
return;
|
||||||
|
ee = NULL;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
EAPI void
|
||||||
|
ecore_evas_x11_shape_input_reset(Ecore_Evas *ee)
|
||||||
|
{
|
||||||
|
#ifdef BUILD_ECORE_EVAS_X11
|
||||||
|
if (!ECORE_MAGIC_CHECK(ee, ECORE_MAGIC_EVAS))
|
||||||
|
{
|
||||||
|
ECORE_MAGIC_FAIL(ee, ECORE_MAGIC_EVAS,
|
||||||
|
"ecore_evas_x11_shape_input_reset");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!ee->engine.x.win_shaped_input)
|
||||||
|
ee->engine.x.win_shaped_input = ecore_x_window_override_new(ee->engine.x.win_root, 0, 0, 1, 1);
|
||||||
|
|
||||||
|
ecore_x_window_shape_input_rectangle_set(ee->engine.x.win_shaped_input, 0, 0, 65535, 65535);
|
||||||
|
#else
|
||||||
|
return;
|
||||||
|
ee = NULL;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
EAPI void
|
||||||
|
ecore_evas_x11_shape_input_apply(Ecore_Evas *ee)
|
||||||
|
{
|
||||||
|
#ifdef BUILD_ECORE_EVAS_X11
|
||||||
|
if (!ECORE_MAGIC_CHECK(ee, ECORE_MAGIC_EVAS))
|
||||||
|
{
|
||||||
|
ECORE_MAGIC_FAIL(ee, ECORE_MAGIC_EVAS,
|
||||||
|
"ecore_evas_x11_shape_input_apply");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!ee->engine.x.win_shaped_input) return;
|
||||||
|
|
||||||
|
ecore_x_window_shape_input_window_set(ee->prop.window, ee->engine.x.win_shaped_input);
|
||||||
|
#else
|
||||||
|
return;
|
||||||
|
ee = NULL;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -1505,6 +1505,11 @@ EAPI void ecore_x_window_shape_window_set_xy(
|
||||||
Ecore_X_Window shape_win,
|
Ecore_X_Window shape_win,
|
||||||
int x,
|
int x,
|
||||||
int y);
|
int y);
|
||||||
|
EAPI void ecore_x_window_shape_window_set_xy(
|
||||||
|
Ecore_X_Window win,
|
||||||
|
Ecore_X_Window shape_win,
|
||||||
|
int x,
|
||||||
|
int y);
|
||||||
EAPI void ecore_x_window_shape_rectangle_set(
|
EAPI void ecore_x_window_shape_rectangle_set(
|
||||||
Ecore_X_Window win,
|
Ecore_X_Window win,
|
||||||
int x,
|
int x,
|
||||||
|
@ -1515,6 +1520,42 @@ EAPI void ecore_x_window_shape_rectangles_set(
|
||||||
Ecore_X_Window win,
|
Ecore_X_Window win,
|
||||||
Ecore_X_Rectangle *rects,
|
Ecore_X_Rectangle *rects,
|
||||||
int num);
|
int num);
|
||||||
|
EAPI void ecore_x_window_shape_input_rectangle_set(
|
||||||
|
Ecore_X_Window win,
|
||||||
|
int x,
|
||||||
|
int y,
|
||||||
|
int w,
|
||||||
|
int h);
|
||||||
|
EAPI void ecore_x_window_shape_input_rectangles_set(
|
||||||
|
Ecore_X_Window win,
|
||||||
|
Ecore_X_Rectangle *rects,
|
||||||
|
int num);
|
||||||
|
EAPI void ecore_x_window_shape_input_rectangle_add(
|
||||||
|
Ecore_X_Window win,
|
||||||
|
int x,
|
||||||
|
int y,
|
||||||
|
int w,
|
||||||
|
int h);
|
||||||
|
EAPI void ecore_x_window_shape_rectangle_subtract(
|
||||||
|
Ecore_X_Window win,
|
||||||
|
int x,
|
||||||
|
int y,
|
||||||
|
int w,
|
||||||
|
int h);
|
||||||
|
EAPI void ecore_x_window_shape_input_rectangle_subtract(
|
||||||
|
Ecore_X_Window win,
|
||||||
|
int x,
|
||||||
|
int y,
|
||||||
|
int w,
|
||||||
|
int h);
|
||||||
|
EAPI void ecore_x_window_shape_input_window_set_xy(
|
||||||
|
Ecore_X_Window win,
|
||||||
|
Ecore_X_Window shape_win,
|
||||||
|
int x,
|
||||||
|
int y);
|
||||||
|
EAPI void ecore_x_window_shape_input_window_set(
|
||||||
|
Ecore_X_Window win,
|
||||||
|
Ecore_X_Window shape_win);
|
||||||
EAPI void ecore_x_window_shape_window_add(
|
EAPI void ecore_x_window_shape_window_add(
|
||||||
Ecore_X_Window win,
|
Ecore_X_Window win,
|
||||||
Ecore_X_Window shape_win);
|
Ecore_X_Window shape_win);
|
||||||
|
@ -1523,6 +1564,11 @@ EAPI void ecore_x_window_shape_window_add_xy(
|
||||||
Ecore_X_Window shape_win,
|
Ecore_X_Window shape_win,
|
||||||
int x,
|
int x,
|
||||||
int y);
|
int y);
|
||||||
|
EAPI void ecore_x_window_shape_input_window_add_xy(
|
||||||
|
Ecore_X_Window win,
|
||||||
|
Ecore_X_Window shape_win,
|
||||||
|
int x,
|
||||||
|
int y);
|
||||||
EAPI void ecore_x_window_shape_rectangle_add(
|
EAPI void ecore_x_window_shape_rectangle_add(
|
||||||
Ecore_X_Window win,
|
Ecore_X_Window win,
|
||||||
int x,
|
int x,
|
||||||
|
@ -1535,16 +1581,29 @@ EAPI void ecore_x_window_shape_rectangle_clip(
|
||||||
int y,
|
int y,
|
||||||
int w,
|
int w,
|
||||||
int h);
|
int h);
|
||||||
|
EAPI void ecore_x_window_shape_input_rectangle_clip(
|
||||||
|
Ecore_X_Window win,
|
||||||
|
int x,
|
||||||
|
int y,
|
||||||
|
int w,
|
||||||
|
int h);
|
||||||
EAPI void ecore_x_window_shape_rectangles_add(
|
EAPI void ecore_x_window_shape_rectangles_add(
|
||||||
Ecore_X_Window win,
|
Ecore_X_Window win,
|
||||||
Ecore_X_Rectangle *rects,
|
Ecore_X_Rectangle *rects,
|
||||||
int num);
|
int num);
|
||||||
|
EAPI void ecore_x_window_shape_input_rectangles_add(
|
||||||
|
Ecore_X_Window win,
|
||||||
|
Ecore_X_Rectangle *rects,
|
||||||
|
int num);
|
||||||
EAPI void ecore_x_window_shape_rectangles_get_prefetch(
|
EAPI void ecore_x_window_shape_rectangles_get_prefetch(
|
||||||
Ecore_X_Window window);
|
Ecore_X_Window window);
|
||||||
EAPI void ecore_x_window_shape_rectangles_get_fetch(void);
|
EAPI void ecore_x_window_shape_rectangles_get_fetch(void);
|
||||||
EAPI Ecore_X_Rectangle * ecore_x_window_shape_rectangles_get(
|
EAPI Ecore_X_Rectangle * ecore_x_window_shape_rectangles_get(
|
||||||
Ecore_X_Window win,
|
Ecore_X_Window win,
|
||||||
int *num_ret);
|
int *num_ret);
|
||||||
|
EAPI Ecore_X_Rectangle * ecore_x_window_shape_input_rectangles_get(
|
||||||
|
Ecore_X_Window win,
|
||||||
|
int *num_ret);
|
||||||
EAPI void ecore_x_window_shape_events_select(
|
EAPI void ecore_x_window_shape_events_select(
|
||||||
Ecore_X_Window win,
|
Ecore_X_Window win,
|
||||||
Eina_Bool on);
|
Eina_Bool on);
|
||||||
|
|
|
@ -131,12 +131,10 @@ EAPI Ecore_X_Pixmap
|
||||||
ecore_x_composite_name_window_pixmap_get(Ecore_X_Window win)
|
ecore_x_composite_name_window_pixmap_get(Ecore_X_Window win)
|
||||||
{
|
{
|
||||||
Ecore_X_Pixmap pixmap = None;
|
Ecore_X_Pixmap pixmap = None;
|
||||||
|
|
||||||
#ifdef ECORE_XCOMPOSITE
|
#ifdef ECORE_XCOMPOSITE
|
||||||
LOGFN(__FILE__, __LINE__, __FUNCTION__);
|
LOGFN(__FILE__, __LINE__, __FUNCTION__);
|
||||||
pixmap = XCompositeNameWindowPixmap(_ecore_x_disp, win);
|
pixmap = XCompositeNameWindowPixmap(_ecore_x_disp, win);
|
||||||
#endif /* ifdef ECORE_XCOMPOSITE */
|
#endif /* ifdef ECORE_XCOMPOSITE */
|
||||||
|
|
||||||
return pixmap;
|
return pixmap;
|
||||||
} /* ecore_x_composite_name_window_pixmap_get */
|
} /* ecore_x_composite_name_window_pixmap_get */
|
||||||
|
|
||||||
|
@ -144,13 +142,7 @@ EAPI void
|
||||||
ecore_x_composite_window_events_disable(Ecore_X_Window win)
|
ecore_x_composite_window_events_disable(Ecore_X_Window win)
|
||||||
{
|
{
|
||||||
#ifdef ECORE_XCOMPOSITE
|
#ifdef ECORE_XCOMPOSITE
|
||||||
XRectangle rect;
|
ecore_x_window_shape_input_rectangle_set(win, -1, -1, 1, 1);
|
||||||
rect.x = -1;
|
|
||||||
rect.y = -1;
|
|
||||||
rect.width = 1;
|
|
||||||
rect.height = 1;
|
|
||||||
XShapeCombineRectangles(_ecore_x_disp, win, ShapeInput, 0, 0, &rect, 1,
|
|
||||||
ShapeSet, Unsorted);
|
|
||||||
#endif /* ifdef ECORE_XCOMPOSITE */
|
#endif /* ifdef ECORE_XCOMPOSITE */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -158,13 +150,7 @@ EAPI void
|
||||||
ecore_x_composite_window_events_enable(Ecore_X_Window win)
|
ecore_x_composite_window_events_enable(Ecore_X_Window win)
|
||||||
{
|
{
|
||||||
#ifdef ECORE_XCOMPOSITE
|
#ifdef ECORE_XCOMPOSITE
|
||||||
XRectangle rect;
|
ecore_x_window_shape_input_rectangle_set(win, 0, 0, 65535, 65535);
|
||||||
rect.x = 0;
|
|
||||||
rect.y = 0;
|
|
||||||
rect.width = 65535;
|
|
||||||
rect.height = 65535;
|
|
||||||
XShapeCombineRectangles(_ecore_x_disp, win, ShapeInput, 0, 0, &rect, 1,
|
|
||||||
ShapeSet, Unsorted);
|
|
||||||
#endif /* ifdef ECORE_XCOMPOSITE */
|
#endif /* ifdef ECORE_XCOMPOSITE */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -173,16 +159,8 @@ ecore_x_composite_render_window_enable(Ecore_X_Window root)
|
||||||
{
|
{
|
||||||
Ecore_X_Window win = 0;
|
Ecore_X_Window win = 0;
|
||||||
#ifdef ECORE_XCOMPOSITE
|
#ifdef ECORE_XCOMPOSITE
|
||||||
XRectangle rect;
|
|
||||||
|
|
||||||
LOGFN(__FILE__, __LINE__, __FUNCTION__);
|
|
||||||
win = XCompositeGetOverlayWindow(_ecore_x_disp, root);
|
win = XCompositeGetOverlayWindow(_ecore_x_disp, root);
|
||||||
rect.x = -1;
|
ecore_x_composite_window_events_disable(win);
|
||||||
rect.y = -1;
|
|
||||||
rect.width = 1;
|
|
||||||
rect.height = 1;
|
|
||||||
XShapeCombineRectangles(_ecore_x_disp, win, ShapeInput, 0, 0, &rect, 1,
|
|
||||||
ShapeSet, Unsorted);
|
|
||||||
#endif /* ifdef ECORE_XCOMPOSITE */
|
#endif /* ifdef ECORE_XCOMPOSITE */
|
||||||
return win;
|
return win;
|
||||||
} /* ecore_x_composite_render_window_enable */
|
} /* ecore_x_composite_render_window_enable */
|
||||||
|
|
|
@ -29,6 +29,25 @@ ecore_x_window_shape_mask_set(Ecore_X_Window win, Ecore_X_Pixmap mask)
|
||||||
XShapeCombineMask(_ecore_x_disp, win, ShapeBounding, 0, 0, mask, ShapeSet);
|
XShapeCombineMask(_ecore_x_disp, win, ShapeBounding, 0, 0, mask, ShapeSet);
|
||||||
} /* ecore_x_window_shape_mask_set */
|
} /* ecore_x_window_shape_mask_set */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the input shape of the given window to that given by the pixmap @p mask.
|
||||||
|
* @param win The given window.
|
||||||
|
* @param mask A 1-bit depth pixmap that provides the new input shape of the
|
||||||
|
* window.
|
||||||
|
* @ingroup Ecore_X_Window_Shape
|
||||||
|
*/
|
||||||
|
EAPI void
|
||||||
|
ecore_x_window_shape_input_mask_set(Ecore_X_Window win, Ecore_X_Pixmap mask)
|
||||||
|
{
|
||||||
|
LOGFN(__FILE__, __LINE__, __FUNCTION__);
|
||||||
|
#ifdef ShapeInput
|
||||||
|
XShapeCombineMask(_ecore_x_disp, win, ShapeInput, 0, 0, mask, ShapeSet);
|
||||||
|
#else /* ifdef ShapeInput */
|
||||||
|
return;
|
||||||
|
win = mask = 0;
|
||||||
|
#endif /* ifdef ShapeInput */
|
||||||
|
} /* ecore_x_window_shape_input_mask_set */
|
||||||
|
|
||||||
EAPI void
|
EAPI void
|
||||||
ecore_x_window_shape_window_set(Ecore_X_Window win, Ecore_X_Window shape_win)
|
ecore_x_window_shape_window_set(Ecore_X_Window win, Ecore_X_Window shape_win)
|
||||||
{
|
{
|
||||||
|
@ -43,6 +62,26 @@ ecore_x_window_shape_window_set(Ecore_X_Window win, Ecore_X_Window shape_win)
|
||||||
ShapeSet);
|
ShapeSet);
|
||||||
} /* ecore_x_window_shape_window_set */
|
} /* ecore_x_window_shape_window_set */
|
||||||
|
|
||||||
|
EAPI void
|
||||||
|
ecore_x_window_shape_input_window_set(Ecore_X_Window win,
|
||||||
|
Ecore_X_Window shape_win)
|
||||||
|
{
|
||||||
|
#ifdef ShapeInput
|
||||||
|
LOGFN(__FILE__, __LINE__, __FUNCTION__);
|
||||||
|
XShapeCombineShape(_ecore_x_disp,
|
||||||
|
win,
|
||||||
|
ShapeInput,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
shape_win,
|
||||||
|
ShapeInput,
|
||||||
|
ShapeSet);
|
||||||
|
#else
|
||||||
|
return;
|
||||||
|
win = shape_win = 0;
|
||||||
|
#endif
|
||||||
|
} /* ecore_x_window_shape_input_window_set */
|
||||||
|
|
||||||
EAPI void
|
EAPI void
|
||||||
ecore_x_window_shape_window_set_xy(Ecore_X_Window win,
|
ecore_x_window_shape_window_set_xy(Ecore_X_Window win,
|
||||||
Ecore_X_Window shape_win,
|
Ecore_X_Window shape_win,
|
||||||
|
@ -60,6 +99,28 @@ ecore_x_window_shape_window_set_xy(Ecore_X_Window win,
|
||||||
ShapeSet);
|
ShapeSet);
|
||||||
} /* ecore_x_window_shape_window_set_xy */
|
} /* ecore_x_window_shape_window_set_xy */
|
||||||
|
|
||||||
|
EAPI void
|
||||||
|
ecore_x_window_shape_input_window_set_xy(Ecore_X_Window win,
|
||||||
|
Ecore_X_Window shape_win,
|
||||||
|
int x,
|
||||||
|
int y)
|
||||||
|
{
|
||||||
|
#ifdef ShapeInput
|
||||||
|
LOGFN(__FILE__, __LINE__, __FUNCTION__);
|
||||||
|
XShapeCombineShape(_ecore_x_disp,
|
||||||
|
win,
|
||||||
|
ShapeInput,
|
||||||
|
x,
|
||||||
|
y,
|
||||||
|
shape_win,
|
||||||
|
ShapeInput,
|
||||||
|
ShapeSet);
|
||||||
|
#else
|
||||||
|
return;
|
||||||
|
win = shape_win = x = y = 0;
|
||||||
|
#endif
|
||||||
|
} /* ecore_x_window_shape_input_window_set_xy */
|
||||||
|
|
||||||
EAPI void
|
EAPI void
|
||||||
ecore_x_window_shape_rectangle_set(Ecore_X_Window win,
|
ecore_x_window_shape_rectangle_set(Ecore_X_Window win,
|
||||||
int x,
|
int x,
|
||||||
|
@ -85,30 +146,59 @@ ecore_x_window_shape_rectangle_set(Ecore_X_Window win,
|
||||||
Unsorted);
|
Unsorted);
|
||||||
} /* ecore_x_window_shape_rectangle_set */
|
} /* ecore_x_window_shape_rectangle_set */
|
||||||
|
|
||||||
|
EAPI void
|
||||||
|
ecore_x_window_shape_input_rectangle_set(Ecore_X_Window win,
|
||||||
|
int x,
|
||||||
|
int y,
|
||||||
|
int w,
|
||||||
|
int h)
|
||||||
|
{
|
||||||
|
#ifdef ShapeInput
|
||||||
|
XRectangle rect;
|
||||||
|
|
||||||
|
LOGFN(__FILE__, __LINE__, __FUNCTION__);
|
||||||
|
rect.x = x;
|
||||||
|
rect.y = y;
|
||||||
|
rect.width = w;
|
||||||
|
rect.height = h;
|
||||||
|
XShapeCombineRectangles(_ecore_x_disp,
|
||||||
|
win,
|
||||||
|
ShapeInput,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
&rect,
|
||||||
|
1,
|
||||||
|
ShapeSet,
|
||||||
|
Unsorted);
|
||||||
|
#else
|
||||||
|
return;
|
||||||
|
win = x = y = w = h = 0;
|
||||||
|
#endif
|
||||||
|
} /* ecore_x_window_shape_input_rectangle_set */
|
||||||
|
|
||||||
EAPI void
|
EAPI void
|
||||||
ecore_x_window_shape_rectangles_set(Ecore_X_Window win,
|
ecore_x_window_shape_rectangles_set(Ecore_X_Window win,
|
||||||
Ecore_X_Rectangle *rects,
|
Ecore_X_Rectangle *rects,
|
||||||
int num)
|
int num)
|
||||||
{
|
{
|
||||||
|
#ifdef ShapeInput
|
||||||
XRectangle *rect = NULL;
|
XRectangle *rect = NULL;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
LOGFN(__FILE__, __LINE__, __FUNCTION__);
|
LOGFN(__FILE__, __LINE__, __FUNCTION__);
|
||||||
|
if (!rects) return;
|
||||||
if (num > 0)
|
if (num > 0)
|
||||||
{
|
{
|
||||||
rect = malloc(sizeof(XRectangle) * num);
|
rect = malloc(sizeof(XRectangle) * num);
|
||||||
if (rect)
|
if (!rect) return;
|
||||||
for (i = 0; i < num; i++)
|
for (i = 0; i < num; i++)
|
||||||
{
|
{
|
||||||
rect[i].x = rects[i].x;
|
rect[i].x = rects[i].x;
|
||||||
rect[i].y = rects[i].y;
|
rect[i].y = rects[i].y;
|
||||||
rect[i].width = rects[i].width;
|
rect[i].width = rects[i].width;
|
||||||
rect[i].height = rects[i].height;
|
rect[i].height = rects[i].height;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
num = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
XShapeCombineRectangles(_ecore_x_disp,
|
XShapeCombineRectangles(_ecore_x_disp,
|
||||||
win,
|
win,
|
||||||
ShapeBounding,
|
ShapeBounding,
|
||||||
|
@ -118,10 +208,107 @@ ecore_x_window_shape_rectangles_set(Ecore_X_Window win,
|
||||||
num,
|
num,
|
||||||
ShapeSet,
|
ShapeSet,
|
||||||
Unsorted);
|
Unsorted);
|
||||||
if (rect)
|
if (rect) free(rect);
|
||||||
free(rect);
|
#else
|
||||||
|
return;
|
||||||
|
win = rects = num = 0;
|
||||||
|
#endif
|
||||||
} /* ecore_x_window_shape_rectangles_set */
|
} /* ecore_x_window_shape_rectangles_set */
|
||||||
|
|
||||||
|
EAPI void
|
||||||
|
ecore_x_window_shape_input_rectangles_set(Ecore_X_Window win,
|
||||||
|
Ecore_X_Rectangle *rects,
|
||||||
|
int num)
|
||||||
|
{
|
||||||
|
#ifdef ShapeInput
|
||||||
|
XRectangle *rect = NULL;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
LOGFN(__FILE__, __LINE__, __FUNCTION__);
|
||||||
|
if (!rects) return;
|
||||||
|
if (num > 0)
|
||||||
|
{
|
||||||
|
rect = malloc(sizeof(XRectangle) * num);
|
||||||
|
if (!rect) return;
|
||||||
|
for (i = 0; i < num; i++)
|
||||||
|
{
|
||||||
|
rect[i].x = rects[i].x;
|
||||||
|
rect[i].y = rects[i].y;
|
||||||
|
rect[i].width = rects[i].width;
|
||||||
|
rect[i].height = rects[i].height;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
XShapeCombineRectangles(_ecore_x_disp,
|
||||||
|
win,
|
||||||
|
ShapeInput,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
rect,
|
||||||
|
num,
|
||||||
|
ShapeSet,
|
||||||
|
Unsorted);
|
||||||
|
if (rect) free(rect);
|
||||||
|
#else
|
||||||
|
return;
|
||||||
|
win = rects = num = 0;
|
||||||
|
#endif
|
||||||
|
} /* ecore_x_window_shape_input_rectangles_set */
|
||||||
|
|
||||||
|
EAPI void
|
||||||
|
ecore_x_window_shape_rectangle_subtract(Ecore_X_Window win,
|
||||||
|
int x,
|
||||||
|
int y,
|
||||||
|
int w,
|
||||||
|
int h)
|
||||||
|
{
|
||||||
|
XRectangle rect;
|
||||||
|
|
||||||
|
LOGFN(__FILE__, __LINE__, __FUNCTION__);
|
||||||
|
rect.x = x;
|
||||||
|
rect.y = y;
|
||||||
|
rect.width = w;
|
||||||
|
rect.height = h;
|
||||||
|
XShapeCombineRectangles(_ecore_x_disp,
|
||||||
|
win,
|
||||||
|
ShapeBounding,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
&rect,
|
||||||
|
1,
|
||||||
|
ShapeSubtract,
|
||||||
|
Unsorted);
|
||||||
|
} /* ecore_x_window_shape_rectangle_subtract */
|
||||||
|
|
||||||
|
EAPI void
|
||||||
|
ecore_x_window_shape_input_rectangle_subtract(Ecore_X_Window win,
|
||||||
|
int x,
|
||||||
|
int y,
|
||||||
|
int w,
|
||||||
|
int h)
|
||||||
|
{
|
||||||
|
#ifdef ShapeInput
|
||||||
|
XRectangle rect;
|
||||||
|
|
||||||
|
LOGFN(__FILE__, __LINE__, __FUNCTION__);
|
||||||
|
rect.x = x;
|
||||||
|
rect.y = y;
|
||||||
|
rect.width = w;
|
||||||
|
rect.height = h;
|
||||||
|
XShapeCombineRectangles(_ecore_x_disp,
|
||||||
|
win,
|
||||||
|
ShapeInput,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
&rect,
|
||||||
|
1,
|
||||||
|
ShapeSubtract,
|
||||||
|
Unsorted);
|
||||||
|
#else
|
||||||
|
return;
|
||||||
|
win = x = y = w = h = 0;
|
||||||
|
#endif
|
||||||
|
} /* ecore_x_window_shape_input_rectangle_subtract */
|
||||||
|
|
||||||
EAPI void
|
EAPI void
|
||||||
ecore_x_window_shape_window_add(Ecore_X_Window win, Ecore_X_Window shape_win)
|
ecore_x_window_shape_window_add(Ecore_X_Window win, Ecore_X_Window shape_win)
|
||||||
{
|
{
|
||||||
|
@ -153,6 +340,28 @@ ecore_x_window_shape_window_add_xy(Ecore_X_Window win,
|
||||||
ShapeUnion);
|
ShapeUnion);
|
||||||
} /* ecore_x_window_shape_window_add_xy */
|
} /* ecore_x_window_shape_window_add_xy */
|
||||||
|
|
||||||
|
EAPI void
|
||||||
|
ecore_x_window_shape_input_window_add_xy(Ecore_X_Window win,
|
||||||
|
Ecore_X_Window shape_win,
|
||||||
|
int x,
|
||||||
|
int y)
|
||||||
|
{
|
||||||
|
#ifdef ShapeInput
|
||||||
|
LOGFN(__FILE__, __LINE__, __FUNCTION__);
|
||||||
|
XShapeCombineShape(_ecore_x_disp,
|
||||||
|
win,
|
||||||
|
ShapeInput,
|
||||||
|
x,
|
||||||
|
y,
|
||||||
|
shape_win,
|
||||||
|
ShapeInput,
|
||||||
|
ShapeUnion);
|
||||||
|
#else
|
||||||
|
return;
|
||||||
|
win = shape_win = x = y = 0;
|
||||||
|
#endif
|
||||||
|
} /* ecore_x_window_shape_input_window_add_xy */
|
||||||
|
|
||||||
EAPI void
|
EAPI void
|
||||||
ecore_x_window_shape_rectangle_add(Ecore_X_Window win,
|
ecore_x_window_shape_rectangle_add(Ecore_X_Window win,
|
||||||
int x,
|
int x,
|
||||||
|
@ -178,6 +387,36 @@ ecore_x_window_shape_rectangle_add(Ecore_X_Window win,
|
||||||
Unsorted);
|
Unsorted);
|
||||||
} /* ecore_x_window_shape_rectangle_add */
|
} /* ecore_x_window_shape_rectangle_add */
|
||||||
|
|
||||||
|
EAPI void
|
||||||
|
ecore_x_window_shape_input_rectangle_add(Ecore_X_Window win,
|
||||||
|
int x,
|
||||||
|
int y,
|
||||||
|
int w,
|
||||||
|
int h)
|
||||||
|
{
|
||||||
|
#ifdef ShapeInput
|
||||||
|
XRectangle rect;
|
||||||
|
|
||||||
|
LOGFN(__FILE__, __LINE__, __FUNCTION__);
|
||||||
|
rect.x = x;
|
||||||
|
rect.y = y;
|
||||||
|
rect.width = w;
|
||||||
|
rect.height = h;
|
||||||
|
XShapeCombineRectangles(_ecore_x_disp,
|
||||||
|
win,
|
||||||
|
ShapeInput,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
&rect,
|
||||||
|
1,
|
||||||
|
ShapeUnion,
|
||||||
|
Unsorted);
|
||||||
|
#else
|
||||||
|
return;
|
||||||
|
win = x = y = w = h = 0;
|
||||||
|
#endif
|
||||||
|
} /* ecore_x_window_shape_input_rectangle_add */
|
||||||
|
|
||||||
EAPI void
|
EAPI void
|
||||||
ecore_x_window_shape_rectangle_clip(Ecore_X_Window win,
|
ecore_x_window_shape_rectangle_clip(Ecore_X_Window win,
|
||||||
int x,
|
int x,
|
||||||
|
@ -203,6 +442,36 @@ ecore_x_window_shape_rectangle_clip(Ecore_X_Window win,
|
||||||
Unsorted);
|
Unsorted);
|
||||||
} /* ecore_x_window_shape_rectangle_clip */
|
} /* ecore_x_window_shape_rectangle_clip */
|
||||||
|
|
||||||
|
EAPI void
|
||||||
|
ecore_x_window_shape_input_rectangle_clip(Ecore_X_Window win,
|
||||||
|
int x,
|
||||||
|
int y,
|
||||||
|
int w,
|
||||||
|
int h)
|
||||||
|
{
|
||||||
|
#ifdef ShapeInput
|
||||||
|
XRectangle rect;
|
||||||
|
|
||||||
|
LOGFN(__FILE__, __LINE__, __FUNCTION__);
|
||||||
|
rect.x = x;
|
||||||
|
rect.y = y;
|
||||||
|
rect.width = w;
|
||||||
|
rect.height = h;
|
||||||
|
XShapeCombineRectangles(_ecore_x_disp,
|
||||||
|
win,
|
||||||
|
ShapeInput,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
&rect,
|
||||||
|
1,
|
||||||
|
ShapeIntersect,
|
||||||
|
Unsorted);
|
||||||
|
#else
|
||||||
|
return;
|
||||||
|
win = x = y = w = h = 0;
|
||||||
|
#endif
|
||||||
|
} /* ecore_x_window_shape_input_rectangle_clip */
|
||||||
|
|
||||||
EAPI void
|
EAPI void
|
||||||
ecore_x_window_shape_rectangles_add(Ecore_X_Window win,
|
ecore_x_window_shape_rectangles_add(Ecore_X_Window win,
|
||||||
Ecore_X_Rectangle *rects,
|
Ecore_X_Rectangle *rects,
|
||||||
|
@ -215,18 +484,16 @@ ecore_x_window_shape_rectangles_add(Ecore_X_Window win,
|
||||||
if (num > 0)
|
if (num > 0)
|
||||||
{
|
{
|
||||||
rect = malloc(sizeof(XRectangle) * num);
|
rect = malloc(sizeof(XRectangle) * num);
|
||||||
if (rect)
|
if (!rect) return;
|
||||||
for (i = 0; i < num; i++)
|
for (i = 0; i < num; i++)
|
||||||
{
|
{
|
||||||
rect[i].x = rects[i].x;
|
rect[i].x = rects[i].x;
|
||||||
rect[i].y = rects[i].y;
|
rect[i].y = rects[i].y;
|
||||||
rect[i].width = rects[i].width;
|
rect[i].width = rects[i].width;
|
||||||
rect[i].height = rects[i].height;
|
rect[i].height = rects[i].height;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
num = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
XShapeCombineRectangles(_ecore_x_disp,
|
XShapeCombineRectangles(_ecore_x_disp,
|
||||||
win,
|
win,
|
||||||
ShapeBounding,
|
ShapeBounding,
|
||||||
|
@ -236,10 +503,48 @@ ecore_x_window_shape_rectangles_add(Ecore_X_Window win,
|
||||||
num,
|
num,
|
||||||
ShapeUnion,
|
ShapeUnion,
|
||||||
Unsorted);
|
Unsorted);
|
||||||
if (rect)
|
if (rect) free(rect);
|
||||||
free(rect);
|
|
||||||
} /* ecore_x_window_shape_rectangles_add */
|
} /* ecore_x_window_shape_rectangles_add */
|
||||||
|
|
||||||
|
EAPI void
|
||||||
|
ecore_x_window_shape_input_rectangles_add(Ecore_X_Window win,
|
||||||
|
Ecore_X_Rectangle *rects,
|
||||||
|
int num)
|
||||||
|
{
|
||||||
|
#ifdef ShapeInput
|
||||||
|
XRectangle *rect = NULL;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
LOGFN(__FILE__, __LINE__, __FUNCTION__);
|
||||||
|
if (num > 0)
|
||||||
|
{
|
||||||
|
rect = malloc(sizeof(XRectangle) * num);
|
||||||
|
if (!rect) return;
|
||||||
|
for (i = 0; i < num; i++)
|
||||||
|
{
|
||||||
|
rect[i].x = rects[i].x;
|
||||||
|
rect[i].y = rects[i].y;
|
||||||
|
rect[i].width = rects[i].width;
|
||||||
|
rect[i].height = rects[i].height;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
XShapeCombineRectangles(_ecore_x_disp,
|
||||||
|
win,
|
||||||
|
ShapeBounding,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
rect,
|
||||||
|
num,
|
||||||
|
ShapeUnion,
|
||||||
|
Unsorted);
|
||||||
|
if (rect) free(rect);
|
||||||
|
#else
|
||||||
|
return;
|
||||||
|
win = rects = num = 0;
|
||||||
|
#endif
|
||||||
|
} /* ecore_x_window_shape_input_rectangles_add */
|
||||||
|
|
||||||
EAPI Ecore_X_Rectangle *
|
EAPI Ecore_X_Rectangle *
|
||||||
ecore_x_window_shape_rectangles_get(Ecore_X_Window win, int *num_ret)
|
ecore_x_window_shape_rectangles_get(Ecore_X_Window win, int *num_ret)
|
||||||
{
|
{
|
||||||
|
@ -251,25 +556,75 @@ ecore_x_window_shape_rectangles_get(Ecore_X_Window win, int *num_ret)
|
||||||
rect = XShapeGetRectangles(_ecore_x_disp, win, ShapeBounding, &num, &ord);
|
rect = XShapeGetRectangles(_ecore_x_disp, win, ShapeBounding, &num, &ord);
|
||||||
if (rect)
|
if (rect)
|
||||||
{
|
{
|
||||||
|
if (num < 1)
|
||||||
|
{
|
||||||
|
XFree(rect);
|
||||||
|
if (num_ret) *num_ret = 0;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
rects = malloc(sizeof(Ecore_X_Rectangle) * num);
|
rects = malloc(sizeof(Ecore_X_Rectangle) * num);
|
||||||
if (rects)
|
if (!rects)
|
||||||
for (i = 0; i < num; i++)
|
{
|
||||||
{
|
XFree(rect);
|
||||||
rects[i].x = rect[i].x;
|
if (num_ret) *num_ret = 0;
|
||||||
rects[i].y = rect[i].y;
|
return NULL;
|
||||||
rects[i].width = rect[i].width;
|
}
|
||||||
rects[i].height = rect[i].height;
|
for (i = 0; i < num; i++)
|
||||||
}
|
{
|
||||||
|
rects[i].x = rect[i].x;
|
||||||
|
rects[i].y = rect[i].y;
|
||||||
|
rects[i].width = rect[i].width;
|
||||||
|
rects[i].height = rect[i].height;
|
||||||
|
}
|
||||||
XFree(rect);
|
XFree(rect);
|
||||||
}
|
}
|
||||||
|
if (num_ret) *num_ret = num;
|
||||||
if (num_ret)
|
|
||||||
*num_ret = num;
|
|
||||||
|
|
||||||
return rects;
|
return rects;
|
||||||
} /* ecore_x_window_shape_rectangles_get */
|
} /* ecore_x_window_shape_rectangles_get */
|
||||||
|
|
||||||
|
EAPI Ecore_X_Rectangle *
|
||||||
|
ecore_x_window_shape_input_rectangles_get(Ecore_X_Window win, int *num_ret)
|
||||||
|
{
|
||||||
|
#ifdef ShapeInput
|
||||||
|
XRectangle *rect;
|
||||||
|
Ecore_X_Rectangle *rects = NULL;
|
||||||
|
int i, num = 0, ord;
|
||||||
|
|
||||||
|
LOGFN(__FILE__, __LINE__, __FUNCTION__);
|
||||||
|
rect = XShapeGetRectangles(_ecore_x_disp, win, ShapeInput, &num, &ord);
|
||||||
|
if (rect)
|
||||||
|
{
|
||||||
|
if (num < 1)
|
||||||
|
{
|
||||||
|
XFree(rect);
|
||||||
|
if (num_ret) *num_ret = 0;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
rects = malloc(sizeof(Ecore_X_Rectangle) * num);
|
||||||
|
if (!rects)
|
||||||
|
{
|
||||||
|
XFree(rect);
|
||||||
|
if (num_ret) *num_ret = 0;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
for (i = 0; i < num; i++)
|
||||||
|
{
|
||||||
|
rects[i].x = rect[i].x;
|
||||||
|
rects[i].y = rect[i].y;
|
||||||
|
rects[i].width = rect[i].width;
|
||||||
|
rects[i].height = rect[i].height;
|
||||||
|
}
|
||||||
|
XFree(rect);
|
||||||
|
}
|
||||||
|
if (num_ret) *num_ret = num;
|
||||||
|
return rects;
|
||||||
|
#else
|
||||||
|
if (num_ret) *num_ret = 0;
|
||||||
|
return NULL;
|
||||||
|
win = 0;
|
||||||
|
#endif
|
||||||
|
} /* ecore_x_window_shape_input_rectangles_get */
|
||||||
|
|
||||||
EAPI void
|
EAPI void
|
||||||
ecore_x_window_shape_events_select(Ecore_X_Window win, Eina_Bool on)
|
ecore_x_window_shape_events_select(Ecore_X_Window win, Eina_Bool on)
|
||||||
{
|
{
|
||||||
|
@ -279,22 +634,3 @@ ecore_x_window_shape_events_select(Ecore_X_Window win, Eina_Bool on)
|
||||||
else
|
else
|
||||||
XShapeSelectInput(_ecore_x_disp, win, 0);
|
XShapeSelectInput(_ecore_x_disp, win, 0);
|
||||||
} /* ecore_x_window_shape_events_select */
|
} /* ecore_x_window_shape_events_select */
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the input shape of the given window to that given by the pixmap @p mask.
|
|
||||||
* @param win The given window.
|
|
||||||
* @param mask A 2-bit depth pixmap that provides the new input shape of the
|
|
||||||
* window.
|
|
||||||
* @ingroup Ecore_X_Window_Shape
|
|
||||||
*/
|
|
||||||
EAPI void
|
|
||||||
ecore_x_window_shape_input_mask_set(Ecore_X_Window win, Ecore_X_Pixmap mask)
|
|
||||||
{
|
|
||||||
LOGFN(__FILE__, __LINE__, __FUNCTION__);
|
|
||||||
#ifdef ShapeInput
|
|
||||||
XShapeCombineMask(_ecore_x_disp, win, ShapeInput, 0, 0, mask, ShapeSet);
|
|
||||||
#else /* ifdef ShapeInput */
|
|
||||||
XShapeCombineMask(_ecore_x_disp, win, ShapeBounding, 0, 0, mask, ShapeSet);
|
|
||||||
#endif /* ifdef ShapeInput */
|
|
||||||
} /* ecore_x_window_shape_input_mask_set */
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue