#include <simgear/canvas/layout/BoxLayout.hxx>
#include <simgear/canvas/layout/NasalWidget.hxx>
#include <simgear/canvas/events/CustomEvent.hxx>
+#include <simgear/canvas/events/KeyboardEvent.hxx>
#include <simgear/canvas/events/MouseEvent.hxx>
#include <simgear/nasal/cppbind/from_nasal.hxx>
typedef nasal::Ghost<sc::EventPtr> NasalEvent;
typedef nasal::Ghost<sc::CustomEventPtr> NasalCustomEvent;
+typedef nasal::Ghost<sc::DeviceEventPtr> NasalDeviceEvent;
+typedef nasal::Ghost<sc::KeyboardEventPtr> NasalKeyboardEvent;
typedef nasal::Ghost<sc::MouseEventPtr> NasalMouseEvent;
struct CustomEventDetailWrapper;
return nasal::to_nasal(c, requireGUIMgr(c).getDesktop());
}
+naRef f_setInputFocus(const nasal::CallContext& ctx)
+{
+ requireGUIMgr(ctx.c).setInputFocus(ctx.requireArg<sc::WindowPtr>(0));
+ return naNil();
+}
+
+naRef f_grabPointer(const nasal::CallContext& ctx)
+{
+ return ctx.to_nasal(
+ requireGUIMgr(ctx.c).grabPointer(ctx.requireArg<sc::WindowPtr>(0))
+ );
+}
+
+naRef f_ungrabPointer(const nasal::CallContext& ctx)
+{
+ requireGUIMgr(ctx.c).ungrabPointer(ctx.requireArg<sc::WindowPtr>(0));
+ return naNil();
+}
+
static naRef f_groupCreateChild(sc::Group& group, const nasal::CallContext& ctx)
{
return ctx.to_nasal( group.createChild( ctx.requireArg<std::string>(0),
return naNil();
}
-template<int Mask>
-naRef f_eventGetModifier(sc::MouseEvent& event, naContext)
-{
- return naNum((event.getModifiers() & Mask) != 0);
-}
-
static naRef f_createCustomEvent(const nasal::CallContext& ctx)
{
std::string const& type = ctx.requireArg<std::string>(0);
const nasal::CallContext& ctx )
{
box.addItem( ctx.requireArg<sc::LayoutItemRef>(0),
- ctx.getArg<int>(1) );
+ ctx.getArg<int>(1),
+ ctx.getArg<int>(2, sc::AlignFill) );
return naNil();
}
static naRef f_boxLayoutInsertItem( sc::BoxLayout& box,
{
box.insertItem( ctx.requireArg<int>(0),
ctx.requireArg<sc::LayoutItemRef>(1),
- ctx.getArg<int>(2) );
+ ctx.getArg<int>(2),
+ ctx.getArg<int>(3, sc::AlignFill) );
return naNil();
}
.member("type", &sc::Event::getTypeString)
.member("target", &sc::Event::getTarget)
.member("currentTarget", &sc::Event::getCurrentTarget)
- .method("stopPropagation", &sc::Event::stopPropagation);
+ .member("defaultPrevented", &sc::Event::defaultPrevented)
+ .method("stopPropagation", &sc::Event::stopPropagation)
+ .method("preventDefault", &sc::Event::preventDefault);
NasalCustomEvent::init("canvas.CustomEvent")
.bases<NasalEvent>()
canvas_module.createHash("CustomEvent")
.set("new", &f_createCustomEvent);
- NasalMouseEvent::init("canvas.MouseEvent")
+ NasalDeviceEvent::init("canvas.DeviceEvent")
.bases<NasalEvent>()
+ .member("modifiers", &sc::DeviceEvent::getModifiers)
+ .member("ctrlKey", &sc::DeviceEvent::ctrlKey)
+ .member("shiftKey", &sc::DeviceEvent::shiftKey)
+ .member("altKey", &sc::DeviceEvent::altKey)
+ .member("metaKey", &sc::DeviceEvent::metaKey);
+
+ NasalKeyboardEvent::init("canvas.KeyboardEvent")
+ .bases<NasalDeviceEvent>()
+ .member("key", &sc::KeyboardEvent::key)
+ .member("location", &sc::KeyboardEvent::location)
+ .member("repeat", &sc::KeyboardEvent::repeat)
+ .member("charCode", &sc::KeyboardEvent::charCode)
+ .member("keyCode", &sc::KeyboardEvent::keyCode);
+
+ NasalMouseEvent::init("canvas.MouseEvent")
+ .bases<NasalDeviceEvent>()
.member("screenX", &sc::MouseEvent::getScreenX)
.member("screenY", &sc::MouseEvent::getScreenY)
.member("clientX", &sc::MouseEvent::getClientX)
.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);
//----------------------------------------------------------------------------
const sc::EventListener& )>
(&sc::Canvas::addEventListener) )
.method("dispatchEvent", &sc::Canvas::dispatchEvent)
- .method("setLayout", &sc::Canvas::setLayout);
+ .method("setLayout", &sc::Canvas::setLayout)
+ .method("setFocusElement", &sc::Canvas::setFocusElement)
+ .method("clearFocusElement", &sc::Canvas::clearFocusElement);
canvas_module.set("_newCanvasGhost", f_createCanvas);
canvas_module.set("_getCanvasGhost", f_getCanvas);
.method("_getParent", &sc::Element::getParent)
.method("_getCanvas", &sc::Element::getCanvas)
.method("addEventListener", &sc::Element::addEventListener)
+ .method("setFocus", &sc::Element::setFocus)
.method("dispatchEvent", &sc::Element::dispatchEvent)
.method("getBoundingBox", &sc::Element::getBoundingBox)
.method("getTightBoundingBox", &sc::Element::getTightBoundingBox);
.bases<NasalElement>()
.method("heightForWidth", &sc::Text::heightForWidth)
.method("maxWidth", &sc::Text::maxWidth)
- .method("getNearestCursor", &sc::Text::getNearestCursor);
+ .method("lineCount", &sc::Text::lineCount)
+ .method("lineLength", &sc::Text::lineLength)
+ .method("getNearestCursor", &sc::Text::getNearestCursor)
+ .method("getCursorPos", &sc::Text::getCursorPos);
//----------------------------------------------------------------------------
// Layouting
+#define ALIGN_ENUM_MAPPING(key, val, comment) canvas_module.set(#key, sc::key);
+# include <simgear/canvas/layout/AlignFlag_values.hxx>
+#undef ALIGN_ENUM_MAPPING
+
+ void (sc::LayoutItem::*f_layoutItemSetContentsMargins)(int, int, int, int)
+ = &sc::LayoutItem::setContentsMargins;
+
NasalLayoutItem::init("canvas.LayoutItem")
.method("getCanvas", &sc::LayoutItem::getCanvas)
.method("setCanvas", &sc::LayoutItem::setCanvas)
.method("getParent", &sc::LayoutItem::getParent)
.method("setParent", &sc::LayoutItem::setParent)
+ .method("setContentsMargins", f_layoutItemSetContentsMargins)
+ .method("setContentsMargin", &sc::LayoutItem::setContentsMargin)
.method("sizeHint", &sc::LayoutItem::sizeHint)
.method("minimumSize", &sc::LayoutItem::minimumSize)
.method("maximumSize", &sc::LayoutItem::maximumSize)
.method("hasHeightForWidth", &sc::LayoutItem::hasHeightForWidth)
.method("heightForWidth", &sc::LayoutItem::heightForWidth)
.method("minimumHeightForWidth", &sc::LayoutItem::minimumHeightForWidth)
+ .method("setAlignment", &sc::LayoutItem::setAlignment)
+ .method("alignment", &sc::LayoutItem::alignment)
.method("setVisible", &sc::LayoutItem::setVisible)
.method("isVisible", &sc::LayoutItem::isVisible)
.method("isExplicitlyHidden", &sc::LayoutItem::isExplicitlyHidden)
canvas_module.set("_newWindowGhost", f_createWindow);
canvas_module.set("_getDesktopGhost", f_getDesktop);
+ canvas_module.set("setInputFocus", f_setInputFocus);
+ canvas_module.set("grabPointer", f_grabPointer);
+ canvas_module.set("ungrabPointer", f_ungrabPointer);
return naNil();
}