2 * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
9 #include "ecore_x_private.h"
22 * [x] XIntersectRegion
24 * [x] XUnionRectWithRegion
35 EAPI Ecore_X_XRegion *
38 pixman_region16_t *region;
40 region = (pixman_region16_t *)malloc (sizeof (pixman_region16_t));
44 pixman_region_init(region);
46 return (Ecore_X_XRegion *)region;
50 ecore_x_xregion_free(Ecore_X_XRegion *region)
55 pixman_region_fini(region);
60 ecore_x_xregion_set(Ecore_X_XRegion *region, Ecore_X_GC gc)
62 xcb_rectangle_t *rects;
63 pixman_box16_t *boxes;
69 boxes = pixman_region_rectangles ((pixman_region16_t *)region, &num);
71 if (!boxes || (num == 0))
74 rects = (xcb_rectangle_t *)malloc(sizeof(xcb_rectangle_t) * num);
78 for (i = 0; i < num; i++)
80 rects[i].x = boxes[i].x1;
81 rects[i].y = boxes[i].y1;
82 rects[i].width = boxes[i].x2 - boxes[i].x1 + 1;
83 rects[i].height = boxes[i].y2 - boxes[i].y1 + 1;
86 xcb_set_clip_rectangles(_ecore_x_connection,
87 XCB_CLIP_ORDERING_YX_BANDED,
96 ecore_x_xregion_translate(Ecore_X_XRegion *region, int x, int y)
101 pixman_region_translate((pixman_region16_t *)region, x, y);
105 ecore_x_xregion_intersect(Ecore_X_XRegion *dst, Ecore_X_XRegion *r1, Ecore_X_XRegion *r2)
107 return pixman_region_intersect((pixman_region16_t *)dst, (pixman_region16_t *)r1, (pixman_region16_t *)r2);
111 ecore_x_xregion_union(Ecore_X_XRegion *dst, Ecore_X_XRegion *r1, Ecore_X_XRegion *r2)
113 return pixman_region_union((pixman_region16_t *)dst, (pixman_region16_t *)r1, (pixman_region16_t *)r2);
117 ecore_x_xregion_union_rect(Ecore_X_XRegion *dst, Ecore_X_XRegion *src, Ecore_X_Rectangle *rect)
119 return pixman_region_union_rect((pixman_region16_t *)dst, (pixman_region16_t *)src,
120 rect->x, rect->y, rect->width, rect->height);
124 ecore_x_xregion_subtract(Ecore_X_XRegion *dst, Ecore_X_XRegion *r1, Ecore_X_XRegion *r2)
126 return pixman_region_subtract((pixman_region16_t *)dst, (pixman_region16_t *)rm, (pixman_region16_t *)rs);
130 ecore_x_xregion_is_empty(Ecore_X_XRegion *region)
135 return !pixman_region_not_empty((pixman_region16_t *)region);
139 ecore_x_xregion_is_equal(Ecore_X_XRegion *r1, Ecore_X_XRegion *r2)
144 return pixman_region_equal((pixman_region16_t *)r1, (pixman_region16_t *)r2);
148 ecore_x_xregion_point_contain(Ecore_X_XRegion *region, int x, int y)
153 return pixman_region_contains_point((pixman_region16_t *)region, x, y);
157 ecore_x_xregion_rect_contain(Ecore_X_XRegion *region, Ecore_X_Rectangle *rect)
161 if (!region || !rect)
166 box.x2 = rect->x + rect->width - 1;
167 box.y2 = rect->y + rect->height - 1;
169 return pixman_region_contains_rectangle((pixman_region16_t *)region, &box);