#include <simgear/canvas/Canvas.hxx>
#include <simgear/canvas/elements/CanvasElement.hxx>
+#include <simgear/canvas/elements/CanvasText.hxx>
#include <simgear/canvas/MouseEvent.hxx>
#include <simgear/nasal/cppbind/from_nasal.hxx>
typedef nasal::Ghost<sc::CanvasPtr> NasalCanvas;
typedef nasal::Ghost<sc::ElementPtr> NasalElement;
typedef nasal::Ghost<sc::GroupPtr> NasalGroup;
+typedef nasal::Ghost<sc::TextPtr> NasalText;
SGPropertyNode* from_nasal_helper(naContext c, naRef ref, SGPropertyNode**)
{
);
}
+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
);
}
+naRef f_textGetNearestCursor(sc::Text& text, const nasal::CallContext& ctx)
+{
+ return nasal::to_nasal
+ (
+ ctx.c,
+ text.getNearestCursor( ctx.requireArg<osg::Vec2>(0) )
+ );
+}
+
+naRef f_eventGetTarget(naContext c, sc::Event& event)
+{
+ return NasalElement::create(c, event.getTarget().lock());
+}
+
// TODO allow directly exposing functions without parameters and return type
naRef f_eventStopPropagation(sc::Event& event, const nasal::CallContext& ctx)
{
{
NasalEvent::init("canvas.Event")
.member("type", &sc::Event::getTypeString)
+ .member("target", &f_eventGetTarget)
.method_func<&f_eventStopPropagation>("stopPropagation");
NasalMouseEvent::init("canvas.MouseEvent")
.bases<NasalEvent>()
- .member("x", &sc::MouseEvent::getPosX)
- .member("y", &sc::MouseEvent::getPosY)
+ .member("screenX", &sc::MouseEvent::getScreenX)
+ .member("screenY", &sc::MouseEvent::getScreenY)
+ .member("clientX", &sc::MouseEvent::getClientX)
+ .member("clientY", &sc::MouseEvent::getClientY)
.member("deltaX", &sc::MouseEvent::getDeltaX)
- .member("deltaY", &sc::MouseEvent::getDeltaY);
+ .member("deltaY", &sc::MouseEvent::getDeltaY)
+ .member("click_count", &sc::MouseEvent::getCurrentClickCount);
NasalCanvas::init("Canvas")
.member("_node_ghost", &elementGetNode<sc::Canvas>)
.member("size_x", &sc::Canvas::getSizeX)
.method<&sc::Canvas::addEventListener>("addEventListener");
NasalElement::init("canvas.Element")
.member("_node_ghost", &elementGetNode<sc::Element>)
- .method<&sc::Element::addEventListener>("addEventListener");
+ .method<&sc::Element::addEventListener>("addEventListener")
+ .method_func<&f_elementGetTransformedBounds>("getTransformedBounds");
NasalGroup::init("canvas.Group")
.bases<NasalElement>()
.method_func<&f_groupCreateChild>("_createChild")
.method_func<&f_groupGetChild>("_getChild")
.method_func<&f_groupGetElementById>("_getElementById");
+ NasalText::init("canvas.Text")
+ .bases<NasalElement>()
+ .method_func<&f_textGetNearestCursor>("getNearestCursor");
nasal::Hash globals_module(globals, c),
canvas_module = globals_module.createHash("canvas");