From 3b4bb10e4f0e51f0664298cb8444c5044b4dae38 Mon Sep 17 00:00:00 2001 From: Thomas Geymayer Date: Sat, 31 May 2014 02:43:03 +0200 Subject: [PATCH] Canvas: expose layouting to Nasal. --- src/Main/fg_props.cxx | 2 +- src/Scripting/NasalCanvas.cxx | 55 ++++++++++++++++++++++++++++++----- 2 files changed, 48 insertions(+), 9 deletions(-) diff --git a/src/Main/fg_props.cxx b/src/Main/fg_props.cxx index a93529dff..7cedc3064 100644 --- a/src/Main/fg_props.cxx +++ b/src/Main/fg_props.cxx @@ -44,7 +44,6 @@ static bool winding_ccw = true; // FIXME: temporary static bool frozen = false; // FIXME: temporary using std::string; - //////////////////////////////////////////////////////////////////////// // Default property bindings (not yet handled by any module). //////////////////////////////////////////////////////////////////////// @@ -80,6 +79,7 @@ LogClassMapping log_class_mappings [] = { LogClassMapping(SG_ENVIRONMENT, "environment"), LogClassMapping(SG_SOUND, "sound"), LogClassMapping(SG_NAVAID, "navaid"), + LogClassMapping(SG_GUI, "gui"), LogClassMapping(SG_UNDEFD, "") }; diff --git a/src/Scripting/NasalCanvas.cxx b/src/Scripting/NasalCanvas.cxx index 2e0b0c034..dea2430be 100644 --- a/src/Scripting/NasalCanvas.cxx +++ b/src/Scripting/NasalCanvas.cxx @@ -36,6 +36,8 @@ #include #include #include +#include +#include #include #include @@ -67,6 +69,10 @@ typedef nasal::Ghost NasalCanvas; typedef nasal::Ghost NasalElement; typedef nasal::Ghost NasalGroup; typedef nasal::Ghost NasalText; + +typedef nasal::Ghost NasalLayoutItem; +typedef nasal::Ghost NasalLayout; + typedef nasal::Ghost NasalWindow; naRef to_nasal_helper(naContext c, const osg::BoundingBox& bb) @@ -374,8 +380,20 @@ naRef to_nasal_helper(naContext c, const sc::CanvasWeakPtr& canvas) return NasalCanvas::create(c, canvas.lock()); } +template +static naRef f_newAsBase(const nasal::CallContext& ctx) +{ + return ctx.to_nasal(new Type()); +} + naRef initNasalCanvas(naRef globals, naContext c) { + nasal::Hash globals_module(globals, c), + canvas_module = globals_module.createHash("canvas"); + + //---------------------------------------------------------------------------- + // Events + using osgGA::GUIEventAdapter; NasalEvent::init("canvas.Event") .member("type", &sc::Event::getTypeString) @@ -390,6 +408,9 @@ naRef initNasalCanvas(naRef globals, naContext c) ._get(&CustomEventDetailWrapper::_get) ._set(&CustomEventDetailWrapper::_set); + canvas_module.createHash("CustomEvent") + .set("new", &f_createCustomEvent); + NasalMouseEvent::init("canvas.MouseEvent") .bases() .member("screenX", &sc::MouseEvent::getScreenX) @@ -409,6 +430,9 @@ naRef initNasalCanvas(naRef globals, naContext c) .member("metaKey", &f_eventGetModifier) .member("click_count", &sc::MouseEvent::getCurrentClickCount); + //---------------------------------------------------------------------------- + // Canvas & elements + NasalPropertyBasedElement::init("PropertyBasedElement") .method("data", &f_propElementData); NasalCanvas::init("Canvas") @@ -420,6 +444,10 @@ naRef initNasalCanvas(naRef globals, naContext c) .method("_getGroup", &sc::Canvas::getGroup) .method("addEventListener", &sc::Canvas::addEventListener) .method("dispatchEvent", &sc::Canvas::dispatchEvent); + + canvas_module.set("_newCanvasGhost", f_createCanvas); + canvas_module.set("_getCanvasGhost", f_getCanvas); + NasalElement::init("canvas.Element") .bases() .member("_node_ghost", &elementGetNode) @@ -438,20 +466,31 @@ naRef initNasalCanvas(naRef globals, naContext c) .bases() .method("getNearestCursor", &sc::Text::getNearestCursor); + //---------------------------------------------------------------------------- + // Layouting + + NasalLayoutItem::init("canvas.LayoutItem") + .method("setCanvas", &sc::LayoutItem::setCanvas); + sc::NasalWidget::setupGhost(canvas_module); + + NasalLayout::init("canvas.Layout") + .bases() + .method("addItem", &sc::Layout::addItem); + + canvas_module.createHash("HBoxLayout") + .set("new", &f_newAsBase); + + //---------------------------------------------------------------------------- + // Window + NasalWindow::init("canvas.Window") .bases() .member("_node_ghost", &elementGetNode) - .method("_getCanvasDecoration", &sc::Window::getCanvasDecoration); - - nasal::Hash globals_module(globals, c), - canvas_module = globals_module.createHash("canvas"); + .method("_getCanvasDecoration", &sc::Window::getCanvasDecoration) + .method("setLayout", &sc::Window::setLayout); - canvas_module.set("_newCanvasGhost", f_createCanvas); canvas_module.set("_newWindowGhost", f_createWindow); - canvas_module.set("_getCanvasGhost", f_getCanvas); canvas_module.set("_getDesktopGhost", f_getDesktop); - canvas_module.createHash("CustomEvent") - .set("new", &f_createCustomEvent); return naNil(); } -- 2.39.5