X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FScripting%2FNasalCanvas.cxx;h=8ea979998db848a6a5986c808781eabd76289d14;hb=881df711ba5be8a8c0bc65f2126a0dcb63865df9;hp=8f6671d2875d6ee2aeb7d5aa92b3f58cae0f9b9f;hpb=3d3475e965970cbf6d107aebd82a54d31b4617a7;p=flightgear.git diff --git a/src/Scripting/NasalCanvas.cxx b/src/Scripting/NasalCanvas.cxx index 8f6671d28..8ea979998 100644 --- a/src/Scripting/NasalCanvas.cxx +++ b/src/Scripting/NasalCanvas.cxx @@ -24,6 +24,8 @@ #include "NasalCanvas.hxx" #include +#include +#include #include
#include @@ -57,6 +59,7 @@ typedef nasal::Ghost NasalCanvas; typedef nasal::Ghost NasalElement; typedef nasal::Ghost NasalGroup; typedef nasal::Ghost NasalText; +typedef nasal::Ghost NasalWindow; SGPropertyNode* from_nasal_helper(naContext c, naRef ref, SGPropertyNode**) { @@ -77,12 +80,34 @@ CanvasMgr& requireCanvasMgr(naContext c) return *canvas_mgr; } +GUIMgr& requireGUIMgr(naContext c) +{ + GUIMgr* mgr = + static_cast(globals->get_subsystem("CanvasGUI")); + if( !mgr ) + naRuntimeError(c, "Failed to get CanvasGUI subsystem"); + + return *mgr; +} + /** * Create new Canvas and get ghost for it. */ -static naRef f_createCanvas(naContext c, naRef me, int argc, naRef* args) +static naRef f_createCanvas(const nasal::CallContext& ctx) +{ + return NasalCanvas::create(ctx.c, requireCanvasMgr(ctx.c).createCanvas()); +} + +/** + * Create new Window and get ghost for it. + */ +static naRef f_createWindow(const nasal::CallContext& ctx) { - return NasalCanvas::create(c, requireCanvasMgr(c).createCanvas()); + return NasalWindow::create + ( + ctx.c, + requireGUIMgr(ctx.c).createWindow( ctx.getArg(0) ) + ); } /** @@ -123,6 +148,14 @@ naRef f_canvasCreateGroup(sc::Canvas& canvas, const nasal::CallContext& ctx) ); } +/** + * Get group containing all gui windows + */ +naRef f_getDesktop(naContext c, naRef me, int argc, naRef* args) +{ + return NasalGroup::create(c, requireGUIMgr(c).getDesktop()); +} + naRef f_elementGetTransformedBounds(sc::Element& el, const nasal::CallContext& ctx) { osg::BoundingBox bb = el.getTransformedBounds( osg::Matrix::identity() ); @@ -169,11 +202,14 @@ naRef to_nasal_helper(naContext c, const sc::ElementWeakPtr& el) return NasalElement::create(c, el.lock()); } -naRef initNasalCanvas(naRef globals, naContext c, naRef gcSave) +naRef initNasalCanvas(naRef globals, naContext c) { - NasalEvent::init("canvas.Event") + if (!NasalEvent::isInit()) { + + NasalEvent::init("canvas.Event") .member("type", &sc::Event::getTypeString) .member("target", &sc::Event::getTarget) + .member("currentTarget", &sc::Event::getCurrentTarget) .method("stopPropagation", &sc::Event::stopPropagation); NasalMouseEvent::init("canvas.MouseEvent") .bases() @@ -191,9 +227,11 @@ naRef initNasalCanvas(naRef globals, naContext c, naRef gcSave) .member("size_x", &sc::Canvas::getSizeX) .member("size_y", &sc::Canvas::getSizeY) .method("_createGroup", &f_canvasCreateGroup) + .method("_getGroup", &sc::Canvas::getGroup) .method("addEventListener", &sc::Canvas::addEventListener); NasalElement::init("canvas.Element") .member("_node_ghost", &elementGetNode) + .method("_getParent", &sc::Element::getParent) .method("addEventListener", &sc::Element::addEventListener) .method("getTransformedBounds", &f_elementGetTransformedBounds); NasalGroup::init("canvas.Group") @@ -205,11 +243,19 @@ naRef initNasalCanvas(naRef globals, naContext c, naRef gcSave) .bases() .method("getNearestCursor", &sc::Text::getNearestCursor); + NasalWindow::init("canvas.Window") + .bases() + .member("_node_ghost", &elementGetNode) + .method("_getCanvasDecoration", &canvas::Window::getCanvasDecoration); + } + nasal::Hash globals_module(globals, c), canvas_module = globals_module.createHash("canvas"); canvas_module.set("_newCanvasGhost", f_createCanvas); + canvas_module.set("_newWindowGhost", f_createWindow); canvas_module.set("_getCanvasGhost", f_getCanvas); + canvas_module.set("_getDesktopGhost", f_getDesktop); return naNil(); }