aboutsummaryrefslogtreecommitdiff
path: root/Src/Wasabi/api/wnd/api_region.h
diff options
context:
space:
mode:
Diffstat (limited to 'Src/Wasabi/api/wnd/api_region.h')
-rw-r--r--Src/Wasabi/api/wnd/api_region.h200
1 files changed, 200 insertions, 0 deletions
diff --git a/Src/Wasabi/api/wnd/api_region.h b/Src/Wasabi/api/wnd/api_region.h
new file mode 100644
index 00000000..df184246
--- /dev/null
+++ b/Src/Wasabi/api/wnd/api_region.h
@@ -0,0 +1,200 @@
+#ifndef __WASABI_API_REGION_H
+#define __WASABI_API_REGION_H
+
+#include <bfc/dispatch.h>
+
+class api_region : public Dispatchable
+{
+protected:
+ api_region() {}
+ virtual ~api_region() {}
+
+public:
+ DISPATCH_CODES
+ {
+ REGION_GETOSHANDLE = 50,
+ REGION_CLONE = 100,
+ REGION_DISPOSECLONE = 110,
+ REGION_PTINREGION = 120,
+ REGION_OFFSET = 130,
+ REGION_GETBOX = 140,
+ REGION_SUBTRACTRGN = 150,
+ REGION_SUBTRACTRECT = 160,
+ REGION_ADDRECT = 170,
+ REGION_ADD = 180,
+ REGION_AND = 190,
+ REGION_SETRECT = 200,
+ REGION_EMPTY = 210,
+ REGION_ISEMPTY = 220,
+ REGION_EQUALS = 230,
+ REGION_ENCLOSED = 240,
+ REGION_INTERSECTRGN = 250,
+ REGION_DOESINTERSECTRGN = 251,
+ REGION_INTERSECTRECT = 260,
+ REGION_ISRECT = 270,
+ REGION_SCALE = 280,
+ REGION_DEBUG = 290,
+ REGION_MAKEWNDREGION = 300,
+ REGION_GETNUMRECTS = 310,
+ REGION_ENUMRECT = 320,
+ };
+public:
+ OSREGIONHANDLE getOSHandle(); // avoid as much as you can, should be used only when you need to call the OS api
+
+ api_region *clone();
+ void disposeClone(api_region *r);
+ bool ptInRegion(const POINT *pt);
+ void offset(int x, int y);
+ void getBox(RECT *r);
+ void subtractRegion(const api_region *r);
+ void subtractRgn(const api_region *r) { subtractRegion(r); } //DEPRECATED
+ void subtractRect(const RECT *r);
+ void addRect(const RECT *r);
+ void addRegion(const api_region *r);
+ void andRegion(const api_region *r);
+ void setRect(const RECT *r);
+ void empty();
+ int isEmpty();
+ int equals(const api_region *r);
+ int enclosed(const api_region *r, api_region *outside = NULL);
+ int intersectRgn(const api_region *r, api_region *intersection);
+ int doesIntersectRgn(const api_region *r);
+ int intersectRect(const RECT *r, api_region *intersection);
+
+ int isRect();
+ void scale(double sx, double sy, bool round = 0);
+ void debug(int async = 0);
+ OSREGIONHANDLE makeWindowRegion(); // gives you a handle to a clone of the OSREGION object so you can insert it into a window's region with SetWindowRgn. ANY other use is prohibited
+
+ // this is how you can enumerate the subrects that compose to make up the
+ // entire region
+ int getNumRects();
+ int enumRect(int n, RECT *r);
+};
+
+inline OSREGIONHANDLE api_region::getOSHandle()
+{
+ return _call(REGION_GETOSHANDLE, (OSREGIONHANDLE)NULL);
+}
+
+inline api_region *api_region::clone()
+{
+ return _call(REGION_CLONE, (api_region *)NULL);
+}
+
+inline void api_region::disposeClone(api_region *r)
+{
+ _voidcall(REGION_DISPOSECLONE, r);
+}
+
+inline bool api_region::ptInRegion(const POINT *pt)
+{
+ return _call(REGION_PTINREGION, false, pt);
+}
+
+inline void api_region::offset(int x, int y)
+{
+ _voidcall(REGION_OFFSET, x, y);
+}
+
+inline void api_region::getBox(RECT *r)
+{
+ _voidcall(REGION_GETBOX, r);
+}
+
+inline void api_region::subtractRegion(const api_region *reg)
+{
+ _voidcall(REGION_SUBTRACTRGN, reg);
+}
+
+inline void api_region::subtractRect(const RECT *r)
+{
+ _voidcall(REGION_SUBTRACTRECT, r);
+}
+
+inline void api_region::addRect(const RECT *r)
+{
+ _voidcall(REGION_ADDRECT, r);
+}
+
+inline void api_region::addRegion(const api_region *r)
+{
+ _voidcall(REGION_ADD, r);
+}
+
+inline void api_region::andRegion(const api_region *r)
+{
+ _voidcall(REGION_AND, r);
+}
+
+inline void api_region::setRect(const RECT *r)
+{
+ _voidcall(REGION_SETRECT, r);
+}
+
+inline void api_region::empty()
+{
+ _voidcall(REGION_EMPTY);
+}
+
+inline int api_region::isEmpty()
+{
+ return _call(REGION_ISEMPTY, 0);
+}
+
+inline int api_region::equals(const api_region *r)
+{
+ return _call(REGION_EQUALS, 0, r);
+}
+
+inline int api_region::enclosed(const api_region *r, api_region *outside)
+{
+ return _call(REGION_ENCLOSED, 0, r, outside);
+}
+
+inline int api_region::intersectRgn(const api_region *r, api_region *intersection)
+{
+ return _call(REGION_INTERSECTRGN, 0, r, intersection);
+}
+
+inline int api_region::doesIntersectRgn(const api_region *r)
+{
+ return _call(REGION_DOESINTERSECTRGN, 0, r);
+}
+
+inline int api_region::intersectRect(const RECT *r, api_region *intersection)
+{
+ return _call(REGION_INTERSECTRECT, 0, r, intersection);
+}
+
+inline int api_region::isRect()
+{
+ return _call(REGION_ISRECT, 0);
+}
+
+inline void api_region::scale(double sx, double sy, bool round)
+{
+ _voidcall(REGION_SCALE, sx, sy, round);
+}
+
+inline void api_region::debug(int async)
+{
+ _voidcall(REGION_DEBUG, async);
+}
+
+inline OSREGIONHANDLE api_region::makeWindowRegion()
+{
+ return _call(REGION_MAKEWNDREGION, (OSREGIONHANDLE)NULL);
+}
+
+inline int api_region::getNumRects()
+{
+ return _call(REGION_GETNUMRECTS, 0);
+}
+
+inline int api_region::enumRect(int n, RECT *r)
+{
+ return _call(REGION_ENUMRECT, 0, n, r);
+}
+
+#endif