/* ** viewport-binding.cpp ** ** This file is part of mkxp. ** ** Copyright (C) 2013 Jonas Kulla ** ** mkxp is free software: you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation, either version 2 of the License, or ** (at your option) any later version. ** ** mkxp is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with mkxp. If not, see . */ #include "binding-types.h" #include "binding-util.h" #include "disposable-binding.h" #include "flashable-binding.h" #include "sceneelement-binding.h" #include "sharedstate.h" #include "viewport.h" #if RAPI_FULL > 187 DEF_TYPE(Viewport); #else DEF_ALLOCFUNC(Viewport); #endif RB_METHOD(viewportInitialize) { Viewport *v; if (argc == 0 && rgssVer >= 3) { GFX_LOCK; v = new Viewport(); } else if (argc == 1) { /* The rect arg is only used to init the viewport, * and does NOT replace its 'rect' property */ VALUE rectObj; Rect *rect; rb_get_args(argc, argv, "o", &rectObj RB_ARG_END); rect = getPrivateDataCheck(rectObj, RectType); GFX_LOCK; v = new Viewport(rect); } else { int x, y, width, height; rb_get_args(argc, argv, "iiii", &x, &y, &width, &height RB_ARG_END); GFX_LOCK; v = new Viewport(x, y, width, height); } setPrivateData(self, v); /* Wrap property objects */ v->initDynAttribs(); wrapProperty(self, &v->getRect(), "rect", RectType); wrapProperty(self, &v->getColor(), "color", ColorType); wrapProperty(self, &v->getTone(), "tone", ToneType); /* 'elements' holds all SceneElements that become children * of this viewport, so we can dispose them when the viewport * is disposed */ rb_iv_set(self, "elements", rb_ary_new()); GFX_UNLOCK; return self; } DEF_GFX_PROP_OBJ_VAL(Viewport, Rect, Rect, "rect") DEF_GFX_PROP_OBJ_VAL(Viewport, Color, Color, "color") DEF_GFX_PROP_OBJ_VAL(Viewport, Tone, Tone, "tone") DEF_GFX_PROP_I(Viewport, OX) DEF_GFX_PROP_I(Viewport, OY) void viewportBindingInit() { VALUE klass = rb_define_class("Viewport", rb_cObject); #if RAPI_FULL > 187 rb_define_alloc_func(klass, classAllocate<&ViewportType>); #else rb_define_alloc_func(klass, ViewportAllocate); #endif disposableBindingInit(klass); flashableBindingInit(klass); sceneElementBindingInit(klass); _rb_define_method(klass, "initialize", viewportInitialize); INIT_PROP_BIND(Viewport, Rect, "rect"); INIT_PROP_BIND(Viewport, OX, "ox"); INIT_PROP_BIND(Viewport, OY, "oy"); INIT_PROP_BIND(Viewport, Color, "color"); INIT_PROP_BIND(Viewport, Tone, "tone"); }