123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256 |
- #include <precomp.h>
- #include "sregion.h"
- #include <api/script/script.h>
- #include <api/script/scriptmgr.h>
- RegionScriptController _regionController;
- RegionScriptController *regionController=&_regionController;
- // -- Functions table -------------------------------------
- function_descriptor_struct RegionScriptController::exportedFunction[] = {
- {L"add", 1, (void*)SRegion::script_vcpu_add },
- {L"sub", 1, (void*)SRegion::script_vcpu_sub },
- {L"offset", 2, (void*)SRegion::script_vcpu_offset },
- {L"stretch", 1, (void*)SRegion::script_vcpu_stretch },
- {L"copy", 1, (void*)SRegion::script_vcpu_copy },
- {L"loadFromMap", 3, (void*)SRegion::script_vcpu_loadFromMap },
- {L"loadFromBitmap", 1, (void*)SRegion::script_vcpu_loadFromBitmap },
- {L"getBoundingBoxX", 0, (void*)SRegion::script_vcpu_getBoundX },
- {L"getBoundingBoxY", 0, (void*)SRegion::script_vcpu_getBoundY },
- {L"getBoundingBoxW", 0, (void*)SRegion::script_vcpu_getBoundW },
- {L"getBoundingBoxH", 0, (void*)SRegion::script_vcpu_getBoundH },
- };
- // --------------------------------------------------------
- const wchar_t *RegionScriptController::getClassName() {
- return L"Region";
- }
- const wchar_t *RegionScriptController::getAncestorClassName() {
- return L"Object";
- }
- ScriptObjectController *RegionScriptController::getAncestorController() { return rootScriptObjectController; }
- ScriptObject *RegionScriptController::instantiate() {
- SRegion *r = new SRegion;
- ASSERT(r != NULL);
- return r->getScriptObject();
- }
- void RegionScriptController::destroy(ScriptObject *o) {
- SRegion *r = static_cast<SRegion *>(o->vcpu_getInterface(regionGuid));
- ASSERT(r != NULL);
- delete r;
- }
- void *RegionScriptController::encapsulate(ScriptObject *o) {
- return NULL; // no encapsulation for regions yet
- }
- void RegionScriptController::deencapsulate(void *o) {
- }
- int RegionScriptController::getNumFunctions() {
- return sizeof(exportedFunction) / sizeof(function_descriptor_struct);
- }
- const function_descriptor_struct *RegionScriptController::getExportedFunctions() {
- return exportedFunction;
- }
- GUID RegionScriptController::getClassGuid() {
- return regionGuid;
- }
- SRegion::SRegion() {
- getScriptObject()->vcpu_setInterface(regionGuid, (void *)static_cast<SRegion*>(this));
- getScriptObject()->vcpu_setClassName(L"Region");
- getScriptObject()->vcpu_setController(regionController);
- reg = new RegionI;
- }
- SRegion::~SRegion() {
- delete reg;
- }
- int SRegion::inRegion(int x, int y) {
- if (!reg) return 0;
- POINT pt={x,y};
- return reg->ptInRegion(&pt);
- }
- int SRegion::getBoundX() {
- if (!reg) return 0;
- RECT r;
- reg->getBox(&r);
- return r.left;
- }
- int SRegion::getBoundY() {
- if (!reg) return 0;
- RECT r;
- reg->getBox(&r);
- return r.top;
- }
- int SRegion::getBoundW() {
- if (!reg) return 0;
- RECT r;
- reg->getBox(&r);
- return r.right-r.left;
- }
- int SRegion::getBoundH() {
- if (!reg) return 0;
- RECT r;
- reg->getBox(&r);
- return r.bottom-r.top;
- }
- api_region *SRegion::getRegion() {
- return reg;
- }
- void SRegion::addRegion(SRegion *s) {
- if (!reg) reg = new RegionI;
- reg->addRegion(s->getRegion());
- }
- void SRegion::subRegion(SRegion *s) {
- if (!reg) return;
- reg->subtractRgn(s->getRegion());
- }
- void SRegion::offset(int x, int y) {
- if (!reg) return;
- reg->offset(x, y);
- }
- void SRegion::stretch(double s) {
- if (!reg) return;
- reg->scale(s, s);
- }
- void SRegion::copy(SRegion *s) {
- if (!reg) reg = new RegionI;
- else reg->empty();
- reg->addRegion(s->getRegion());
- }
- void SRegion::loadFromMap(SMap *m, int byte, int inverted) {
- delete reg;
- RECT r={m->getBitmap()->getX(), m->getBitmap()->getY(), m->getBitmap()->getWidth(), m->getBitmap()->getHeight()};
- reg = new RegionI(m->getBitmap(), &r, 0, 0, FALSE, 1, byte, inverted);
- }
- void SRegion::loadFromBitmap(const wchar_t *p)
- {
- delete reg;
- SkinBitmap *b = new SkinBitmap(p);
- ASSERT(b); // TODO: should be guru
- reg = new RegionI(b);
- delete b;
- }
- // -----------------------------------------------------------------------
- scriptVar SRegion::script_vcpu_loadFromMap(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar map, scriptVar byte, scriptVar inv) {
- SCRIPT_FUNCTION_INIT;
- ASSERT(SOM::isNumeric(&byte));
- ASSERT(SOM::isNumeric(&inv));
- SRegion *r = static_cast<SRegion *>(o->vcpu_getInterface(regionGuid));
- SMap *m = static_cast<SMap *>(GET_SCRIPT_OBJECT_AS(map, mapGuid));
- if (r) r->loadFromMap(m, GET_SCRIPT_INT(byte), GET_SCRIPT_BOOLEAN(inv));
- RETURN_SCRIPT_VOID;
- }
- scriptVar SRegion::script_vcpu_loadFromBitmap(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar b)
- {
- SCRIPT_FUNCTION_INIT;
- ASSERT(b.type == SCRIPT_STRING);
- SRegion *r = static_cast<SRegion *>(o->vcpu_getInterface(regionGuid));
- if (r) r->loadFromBitmap(GET_SCRIPT_STRING(b));
- RETURN_SCRIPT_VOID;
- }
- scriptVar SRegion::script_vcpu_inRegion(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar x, scriptVar y) {
- SCRIPT_FUNCTION_INIT;
- ASSERT(SOM::isNumeric(&x));
- ASSERT(SOM::isNumeric(&y));
- SRegion *r = static_cast<SRegion *>(o->vcpu_getInterface(regionGuid));
- if (r) return MAKE_SCRIPT_INT(r->inRegion(GET_SCRIPT_INT(x), GET_SCRIPT_INT(y)));
- RETURN_SCRIPT_ZERO;
- }
- scriptVar SRegion::script_vcpu_add(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar r) {
- SCRIPT_FUNCTION_INIT;
- SRegion *r1 = static_cast<SRegion *>(o->vcpu_getInterface(regionGuid));
- SRegion *r2 = static_cast<SRegion *>(GET_SCRIPT_OBJECT_AS(r, regionGuid));
- if (r1) r1->addRegion(r2);
- RETURN_SCRIPT_VOID;
- }
- scriptVar SRegion::script_vcpu_sub(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar r) {
- SCRIPT_FUNCTION_INIT;
- SRegion *r1 = static_cast<SRegion *>(o->vcpu_getInterface(regionGuid));
- SRegion *r2 = static_cast<SRegion *>(GET_SCRIPT_OBJECT_AS(r, regionGuid));
- if (r1) r1->subRegion(r2);
- RETURN_SCRIPT_VOID;
- }
- scriptVar SRegion::script_vcpu_offset(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar x, scriptVar y) {
- SCRIPT_FUNCTION_INIT;
- ASSERT(SOM::isNumeric(&x));
- ASSERT(SOM::isNumeric(&y));
- SRegion *r = static_cast<SRegion *>(o->vcpu_getInterface(regionGuid));
- if (r) r->offset(GET_SCRIPT_INT(x), GET_SCRIPT_INT(y));
- RETURN_SCRIPT_VOID;
- }
- scriptVar SRegion::script_vcpu_stretch(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar s) {
- SCRIPT_FUNCTION_INIT;
- ASSERT(SOM::isNumeric(&s));
- SRegion *r = static_cast<SRegion *>(o->vcpu_getInterface(regionGuid));
- if (r) r->stretch(SOM::makeDouble(&s));
- RETURN_SCRIPT_VOID;
- }
- scriptVar SRegion::script_vcpu_getBoundX(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
- SCRIPT_FUNCTION_INIT;
- SRegion *r = static_cast<SRegion *>(o->vcpu_getInterface(regionGuid));
- if (r) return MAKE_SCRIPT_INT(r->getBoundX());
- RETURN_SCRIPT_ZERO;
- }
- scriptVar SRegion::script_vcpu_getBoundY(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
- SCRIPT_FUNCTION_INIT;
- SRegion *r = static_cast<SRegion *>(o->vcpu_getInterface(regionGuid));
- if (r) return MAKE_SCRIPT_INT(r->getBoundY());
- RETURN_SCRIPT_ZERO;
- }
- scriptVar SRegion::script_vcpu_getBoundW(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
- SCRIPT_FUNCTION_INIT;
- SRegion *r = static_cast<SRegion *>(o->vcpu_getInterface(regionGuid));
- if (r) return MAKE_SCRIPT_INT(r->getBoundW());
- RETURN_SCRIPT_ZERO;
- }
- scriptVar SRegion::script_vcpu_getBoundH(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) {
- SCRIPT_FUNCTION_INIT;
- SRegion *r = static_cast<SRegion *>(o->vcpu_getInterface(regionGuid));
- if (r) return MAKE_SCRIPT_INT(r->getBoundH());
- RETURN_SCRIPT_ZERO;
- }
- scriptVar SRegion::script_vcpu_copy(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar r) {
- SCRIPT_FUNCTION_INIT;
- SRegion *r1 = static_cast<SRegion *>(o->vcpu_getInterface(regionGuid));
- SRegion *r2 = static_cast<SRegion *>(GET_SCRIPT_OBJECT_AS(r, regionGuid));
- if (r1) r1->copy(r2);
- RETURN_SCRIPT_VOID;
- }
|