summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJay Sorg <jay.sorg@gmail.com>2016-08-08 23:12:52 -0700
committerJay Sorg <jay.sorg@gmail.com>2016-08-08 23:12:52 -0700
commitbb7bac2d9bfefc739b68f455e92c869c41685c5d (patch)
tree7dc443f94be010ebc2a853f297e87fe396835dd7
parent58c777783bc19e7288743a49d839b1ed14a9452f (diff)
downloadxrdp-proprietary-bb7bac2d9bfefc739b68f455e92c869c41685c5d.tar.gz
xrdp-proprietary-bb7bac2d9bfefc739b68f455e92c869c41685c5d.zip
add region intersect
-rw-r--r--common/pixman-region.h3
-rw-r--r--xrdp/xrdp.h5
-rw-r--r--xrdp/xrdp_region.c20
3 files changed, 26 insertions, 2 deletions
diff --git a/common/pixman-region.h b/common/pixman-region.h
index 4f781819..9c82c4d9 100644
--- a/common/pixman-region.h
+++ b/common/pixman-region.h
@@ -67,6 +67,9 @@ pixman_bool_t pixman_region_union (pixman_region16_t *new
pixman_bool_t pixman_region_subtract (pixman_region16_t *reg_d,
pixman_region16_t *reg_m,
pixman_region16_t *reg_s);
+pixman_bool_t pixman_region_intersect (pixman_region16_t *new_reg,
+ pixman_region16_t *reg1,
+ pixman_region16_t *reg2);
pixman_box16_t * pixman_region_rectangles (pixman_region16_t *region,
int *n_rects);
diff --git a/xrdp/xrdp.h b/xrdp/xrdp.h
index 4e36f0c7..edf88cc4 100644
--- a/xrdp/xrdp.h
+++ b/xrdp/xrdp.h
@@ -175,8 +175,9 @@ xrdp_region_delete(struct xrdp_region* self);
int APP_CC
xrdp_region_add_rect(struct xrdp_region* self, struct xrdp_rect* rect);
int APP_CC
-xrdp_region_subtract_rect(struct xrdp_region* self,
- struct xrdp_rect* rect);
+xrdp_region_subtract_rect(struct xrdp_region* self, struct xrdp_rect* rect);
+int APP_CC
+xrdp_region_intersect_rect(struct xrdp_region* self, struct xrdp_rect* rect);
int APP_CC
xrdp_region_get_rect(struct xrdp_region* self, int index,
struct xrdp_rect* rect);
diff --git a/xrdp/xrdp_region.c b/xrdp/xrdp_region.c
index f943e14f..4da30f9d 100644
--- a/xrdp/xrdp_region.c
+++ b/xrdp/xrdp_region.c
@@ -94,6 +94,26 @@ xrdp_region_subtract_rect(struct xrdp_region *self, struct xrdp_rect *rect)
/*****************************************************************************/
/* returns error */
int APP_CC
+xrdp_region_intersect_rect(struct xrdp_region* self, struct xrdp_rect* rect)
+{
+ struct pixman_region16 lreg;
+
+ pixman_region_init_rect(&lreg, rect->left, rect->top,
+ rect->right - rect->left,
+ rect->bottom - rect->top);
+ if (!pixman_region_intersect(self->reg, self->reg, &lreg))
+ {
+ pixman_region_fini(&lreg);
+ return 1;
+ }
+ pixman_region_fini(&lreg);
+ return 0;
+}
+
+
+/*****************************************************************************/
+/* returns error */
+int APP_CC
xrdp_region_get_rect(struct xrdp_region *self, int index,
struct xrdp_rect *rect)
{