#include "ScriptSystem_Font.h" namespace BlueCore { //------------------------------------------------------------------------------ static weak_ptr gFontManager; //------------------------------------------------------------------------------ static SQInteger _font_releasehook(SQUserPointer p, SQInteger size) { Font *font = (Font *)p; if (font) font->removeReference(); return 1; } //------------------------------------------------------------------------------ static SQInteger _font_constructor(HSQUIRRELVM vm) { SQInteger argc = sq_gettop (vm ); Font *font = 0; if (argc < 3) { if (gFontManager.valid()) font = gFontManager->getDefaultFont(); } else { const SQChar *name = 0; SQInteger size = 1; SQBool hinting = SQFalse; sq_getstring (vm, 2, &name ); sq_getinteger (vm, 3, &size ); if (argc > 3) sq_getbool(vm, 4, &hinting ); if (gFontManager.valid()) { font = gFontManager->loadFont(name, size, hinting == SQTrue ); if (font) font->addReference(); } } sq_setinstanceup(vm, 1, (void *)font ); sq_setreleasehook (vm, 1, _font_releasehook ); return 0; } //------------------------------------------------------------------------------ static SQInteger _font_print(HSQUIRRELVM vm) { int argc = sq_gettop (vm ); if (argc < 4) return 0; const Font *font = 0; sq_getinstanceup (vm, 1, ( void ** ) &font, 0); if (font) { SQFloat x, y; const char *text; SQInteger halign = 0, valign = 0; sq_getfloat (vm, 2, &x ); sq_getfloat (vm, 3, &y ); sq_getstring(vm, 4, &text); if (argc > 4) { sq_getinteger(vm, 5, &halign ); } if (argc > 5) { sq_getinteger(vm, 6, &valign ); } font->print( (float)x, (float)y, text, halign, valign ); } return 0; } //------------------------------------------------------------------------------ void setupScriptSystem_Font (ScriptSystem* scriptsystem, FontManager* fontmanager) { if (scriptsystem && fontmanager) { HSQUIRRELVM vm = scriptsystem->getVM(); gFontManager = fontmanager; sq_pushroottable (vm ); // push class sq_pushstring (vm, "Font", -1); if (SQ_SUCCEEDED (sq_newclass (vm, SQFalse ) ) ) { // register constructor sq_pushstring (vm, "constructor", -1); sq_newclosure (vm, _font_constructor, 0); sq_newslot (vm, -3, false); sq_pushstring (vm, "print", -1); sq_newclosure (vm, _font_print, 0); sq_newslot (vm, -3, false); // create class sq_newslot (vm, -3, false); } sq_poptop (vm ); } } }