123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- #ifndef __REGION_H
- #define __REGION_H
- #include <Carbon/Carbon.h>
- #include <bfc/platform/platform.h>
- #include <tataki/region/api_region.h>
- class SkinBitmap;
- class RegionI : public api_region
- {
- public:
- RegionI();
- RegionI(const RECT *r);
- RegionI(RgnHandle qdrgn);
- RegionI(HIShapeRef _rgn);
- RegionI(SkinBitmap *bitmap);
- ~RegionI();
-
- // api_region
- OSREGIONHANDLE getOSHandle();
- 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 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);
-
-
- private:
- RegionI(HIMutableShapeRef _rgn);
- HIMutableShapeRef rgn;
-
- protected:
- RECVS_DISPATCH;
- };
- // TODO: we could take of advantage of HIShapeRef's built in reference counting to implement this
- class RegionServer : public Dispatchable {
-
- protected:
- RegionServer() {}
- virtual ~RegionServer() {}
-
- public:
-
- void addRef(void *client);
- void delRef(void *client);
- api_region *getRegion();
-
- enum {
- REGIONSERVER_ADDREF = 500,
- REGIONSERVER_DELREF = 550,
- REGIONSERVER_GETREGION = 600,
- };
- };
- inline void RegionServer::addRef(void *client) {
- _voidcall(REGIONSERVER_ADDREF, (api_region *)NULL, client);
- }
- inline void RegionServer::delRef(void *client) {
- _voidcall(REGIONSERVER_DELREF, client);
- }
- inline api_region * RegionServer::getRegion() {
- return _call(REGIONSERVER_GETREGION, (api_region *)NULL);
- }
- class RegionServerI : public RegionServer {
- public :
-
- RegionServerI() { numrefs = 0; }
- virtual ~RegionServerI() {}
-
- virtual void addRef(void *client) { numrefs++; }
- virtual void delRef(void *client) { numrefs--; }
- virtual api_region *getRegion()=0;
-
- virtual int getNumRefs() { return numrefs; }
-
- protected:
-
- RECVS_DISPATCH;
-
- private:
-
- int numrefs;
- };
- #endif
|