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);
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
);
}
+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());
naRef initNasalCanvas(naRef globals, naContext c)
{
+ using osgGA::GUIEventAdapter;
NasalEvent::init("canvas.Event")
.member("type", &sc::Event::getTypeString)
.member("target", &sc::Event::getTarget)
.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>)
.member("size_y", &sc::Canvas::getSizeY)
.method("_createGroup", &f_canvasCreateGroup)
.method("_getGroup", &sc::Canvas::getGroup)
- .method("addEventListener", &sc::Canvas::addNasalEventListener);
+ .method("addEventListener", &sc::Canvas::addEventListener);
NasalElement::init("canvas.Element")
.member("_node_ghost", &elementGetNode<sc::Element>)
- .method("addEventListener", &sc::Element::addNasalEventListener)
- .method("getTransformedBounds", &f_elementGetTransformedBounds);
+ .method("_getParent", &sc::Element::getParent)
+ .method("addEventListener", &sc::Element::addEventListener)
+ .method("getBoundingBox", &sc::Element::getBoundingBox)
+ .method("getTightBoundingBox", &sc::Element::getTightBoundingBox);
NasalGroup::init("canvas.Group")
.bases<NasalElement>()
.method("_createChild", &f_groupCreateChild)
.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");