summaryrefslogtreecommitdiffstats
path: root/common/region.h
diff options
context:
space:
mode:
Diffstat (limited to 'common/region.h')
-rw-r--r--common/region.h75
1 files changed, 75 insertions, 0 deletions
diff --git a/common/region.h b/common/region.h
new file mode 100644
index 00000000..29a58223
--- /dev/null
+++ b/common/region.h
@@ -0,0 +1,75 @@
+/*
+ Copyright (C) 2009 Red Hat, Inc.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of
+ the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef _H_REGION
+#define _H_REGION
+
+#include <stdint.h>
+#include "draw.h"
+
+#define REGION_USE_IMPROVED
+
+#define RECTS_BUF_SIZE 4
+
+typedef struct QRegion {
+ uint32_t num_rects;
+ Rect bbox;
+ Rect *rects;
+ uint32_t rects_size;
+ Rect buf[RECTS_BUF_SIZE];
+} QRegion;
+
+#ifdef REGION_USE_IMPROVED
+
+#define REGION_TEST_LEFT_EXCLUSIVE (1 << 0)
+#define REGION_TEST_RIGHT_EXCLUSIVE (1 << 1)
+#define REGION_TEST_SHARED (1 << 2)
+#define REGION_TEST_ALL \
+ (REGION_TEST_LEFT_EXCLUSIVE | REGION_TEST_RIGHT_EXCLUSIVE | REGION_TEST_SHARED)
+
+#endif
+
+void region_init(QRegion *rgn);
+void region_clear(QRegion *rgn);
+void region_destroy(QRegion *rgn);
+void region_clone(QRegion *dest, const QRegion *src);
+
+#ifdef REGION_USE_IMPROVED
+int region_test(const QRegion *rgn, const QRegion *other_rgn, int query);
+#endif
+int region_is_valid(const QRegion *rgn);
+int region_is_empty(const QRegion *rgn);
+int region_is_equal(const QRegion *rgn1, const QRegion *rgn2);
+int region_intersects(const QRegion *rgn1, const QRegion *rgn2);
+int region_bounds_intersects(const QRegion *rgn1, const QRegion *rgn2);
+int region_contains(const QRegion *rgn, const QRegion *other);
+int region_contains_point(const QRegion *rgn, int32_t x, int32_t y);
+
+void region_or(QRegion *rgn, const QRegion *other_rgn);
+void region_and(QRegion *rgn, const QRegion *other_rgn);
+void region_xor(QRegion *rgn, const QRegion *other_rgn);
+void region_exclude(QRegion *rgn, const QRegion *other_rgn);
+
+void region_add(QRegion *rgn, const Rect *r);
+void region_remove(QRegion *rgn, const Rect *r);
+
+void region_offset(QRegion *rgn, int32_t dx, int32_t dy);
+
+void region_dump(const QRegion *rgn, const char *prefix);
+
+#endif
+