123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200 |
- #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
|