]> git.mxchange.org Git - flightgear.git/blobdiff - src/Scripting/NasalCanvas.cxx
Canvas: update for new bounding box getters.
[flightgear.git] / src / Scripting / NasalCanvas.cxx
index 8ea979998db848a6a5986c808781eabd76289d14..32aa4f84dba6dade91338c2f1c303bfff366777a 100644 (file)
@@ -61,6 +61,17 @@ typedef nasal::Ghost<sc::GroupPtr> NasalGroup;
 typedef nasal::Ghost<sc::TextPtr> NasalText;
 typedef nasal::Ghost<canvas::WindowWeakPtr> NasalWindow;
 
+naRef to_nasal_helper(naContext c, const osg::BoundingBox& bb)
+{
+  std::vector<float> bb_vec(4);
+  bb_vec[0] = bb._min.x();
+  bb_vec[1] = bb._min.y();
+  bb_vec[2] = bb._max.x();
+  bb_vec[3] = bb._max.y();
+
+  return nasal::to_nasal(c, bb_vec);
+}
+
 SGPropertyNode* from_nasal_helper(naContext c, naRef ref, SGPropertyNode**)
 {
   SGPropertyNode* props = ghostToPropNode(ref);
@@ -156,19 +167,6 @@ 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() );
-
-  std::vector<float> bb_vec(4);
-  bb_vec[0] = bb._min.x();
-  bb_vec[1] = bb._min.y();
-  bb_vec[2] = bb._max.x();
-  bb_vec[3] = bb._max.y();
-
-  return nasal::to_nasal(ctx.c, bb_vec);
-}
-
 naRef f_groupCreateChild(sc::Group& group, const nasal::CallContext& ctx)
 {
   return NasalElement::create
@@ -197,6 +195,12 @@ naRef f_groupGetElementById(sc::Group& group, const nasal::CallContext& ctx)
   );
 }
 
+template<int Mask>
+naRef f_eventGetModifier(naContext, sc::MouseEvent& event)
+{
+  return naNum((event.getModifiers() & Mask) != 0);
+}
+
 naRef to_nasal_helper(naContext c, const sc::ElementWeakPtr& el)
 {
   return NasalElement::create(c, el.lock());
@@ -204,9 +208,8 @@ naRef to_nasal_helper(naContext c, const sc::ElementWeakPtr& el)
 
 naRef initNasalCanvas(naRef globals, naContext c)
 {
-    if (!NasalEvent::isInit()) {
-    
-        NasalEvent::init("canvas.Event")
+  using osgGA::GUIEventAdapter;
+  NasalEvent::init("canvas.Event")
     .member("type", &sc::Event::getTypeString)
     .member("target", &sc::Event::getTarget)
     .member("currentTarget", &sc::Event::getCurrentTarget)
@@ -221,6 +224,13 @@ naRef initNasalCanvas(naRef globals, naContext c)
     .member("localY", &sc::MouseEvent::getLocalY)
     .member("deltaX", &sc::MouseEvent::getDeltaX)
     .member("deltaY", &sc::MouseEvent::getDeltaY)
+    .member("button", &sc::MouseEvent::getButton)
+    .member("buttons", &sc::MouseEvent::getButtonMask)
+    .member("modifiers", &sc::MouseEvent::getModifiers)
+    .member("ctrlKey", &f_eventGetModifier<GUIEventAdapter::MODKEY_CTRL>)
+    .member("shiftKey", &f_eventGetModifier<GUIEventAdapter::MODKEY_SHIFT>)
+    .member("altKey", &f_eventGetModifier<GUIEventAdapter::MODKEY_ALT>)
+    .member("metaKey", &f_eventGetModifier<GUIEventAdapter::MODKEY_META>)
     .member("click_count", &sc::MouseEvent::getCurrentClickCount);
   NasalCanvas::init("Canvas")
     .member("_node_ghost", &elementGetNode<sc::Canvas>)
@@ -233,7 +243,8 @@ naRef initNasalCanvas(naRef globals, naContext c)
     .member("_node_ghost", &elementGetNode<sc::Element>)
     .method("_getParent", &sc::Element::getParent)
     .method("addEventListener", &sc::Element::addEventListener)
-    .method("getTransformedBounds", &f_elementGetTransformedBounds);
+    .method("getBoundingBox", &sc::Element::getBoundingBox)
+    .method("getTightBoundingBox", &sc::Element::getTightBoundingBox);
   NasalGroup::init("canvas.Group")
     .bases<NasalElement>()
     .method("_createChild", &f_groupCreateChild)
@@ -247,7 +258,6 @@ naRef initNasalCanvas(naRef globals, naContext c)
     .bases<NasalElement>()
     .member("_node_ghost", &elementGetNode<canvas::Window>)
     .method("_getCanvasDecoration", &canvas::Window::getCanvasDecoration);
-    }
     
   nasal::Hash globals_module(globals, c),
               canvas_module = globals_module.createHash("canvas");