diff --git a/SDK/include/NDK/BaseWidget.hpp b/SDK/include/NDK/BaseWidget.hpp index 4cd41cd65..1e6fe7c64 100644 --- a/SDK/include/NDK/BaseWidget.hpp +++ b/SDK/include/NDK/BaseWidget.hpp @@ -12,6 +12,7 @@ #include #include #include +#include #include #include @@ -70,6 +71,8 @@ namespace Ndk virtual void Layout(); void InvalidateNode() override; + virtual void OnKeyPressed(const Nz::WindowEvent::KeyEvent& key); + virtual void OnKeyReleased(const Nz::WindowEvent::KeyEvent& key); virtual void OnMouseEnter(); virtual void OnMouseMoved(int x, int y, int deltaX, int deltaY); virtual void OnMouseButtonPress(int x, int y, Nz::Mouse::Button button); diff --git a/SDK/include/NDK/Canvas.hpp b/SDK/include/NDK/Canvas.hpp index b88901360..a8da5d04e 100644 --- a/SDK/include/NDK/Canvas.hpp +++ b/SDK/include/NDK/Canvas.hpp @@ -36,7 +36,7 @@ namespace Ndk void Layout() override; void NotifyWidgetUpdate(std::size_t index); - + std::size_t RegisterWidget(BaseWidget* widget); inline void SetKeyboardOwner(BaseWidget* widget); @@ -48,6 +48,8 @@ namespace Ndk void OnMouseButtonRelease(const Nz::EventHandler* eventHandler, const Nz::WindowEvent::MouseButtonEvent& event); void OnMouseMoved(const Nz::EventHandler* eventHandler, const Nz::WindowEvent::MouseMoveEvent& event); void OnMouseLeft(const Nz::EventHandler* eventHandler); + void OnKeyPressed(const Nz::EventHandler* eventHandler, const Nz::WindowEvent::KeyEvent& event); + void OnKeyReleased(const Nz::EventHandler* eventHandler, const Nz::WindowEvent::KeyEvent& event); void OnTextEntered(const Nz::EventHandler* eventHandler, const Nz::WindowEvent::TextEvent& event); struct WidgetBox @@ -56,6 +58,8 @@ namespace Ndk Nz::Boxf box; }; + NazaraSlot(Nz::EventHandler, OnKeyPressed, m_keyPressedSlot); + NazaraSlot(Nz::EventHandler, OnKeyReleased, m_keyReleasedSlot); NazaraSlot(Nz::EventHandler, OnMouseButtonPressed, m_mouseButtonPressedSlot); NazaraSlot(Nz::EventHandler, OnMouseButtonReleased, m_mouseButtonReleasedSlot); NazaraSlot(Nz::EventHandler, OnMouseMoved, m_mouseMovedSlot); diff --git a/SDK/include/NDK/Canvas.inl b/SDK/include/NDK/Canvas.inl index 37edcb2e6..d0d05bf12 100644 --- a/SDK/include/NDK/Canvas.inl +++ b/SDK/include/NDK/Canvas.inl @@ -13,6 +13,8 @@ namespace Ndk { m_canvas = this; + m_keyPressedSlot.Connect(eventHandler.OnKeyPressed, this, &Canvas::OnKeyPressed); + m_keyReleasedSlot.Connect(eventHandler.OnKeyReleased, this, &Canvas::OnKeyReleased); m_mouseButtonPressedSlot.Connect(eventHandler.OnMouseButtonPressed, this, &Canvas::OnMouseButtonPressed); m_mouseButtonReleasedSlot.Connect(eventHandler.OnMouseButtonReleased, this, &Canvas::OnMouseButtonRelease); m_mouseMovedSlot.Connect(eventHandler.OnMouseMoved, this, &Canvas::OnMouseMoved); diff --git a/SDK/src/NDK/BaseWidget.cpp b/SDK/src/NDK/BaseWidget.cpp index 939fdedfd..43ffbeb52 100644 --- a/SDK/src/NDK/BaseWidget.cpp +++ b/SDK/src/NDK/BaseWidget.cpp @@ -98,6 +98,14 @@ namespace Ndk m_canvas->NotifyWidgetUpdate(m_canvasIndex); } + void BaseWidget::OnKeyPressed(const Nz::WindowEvent::KeyEvent& key) + { + } + + void BaseWidget::OnKeyReleased(const Nz::WindowEvent::KeyEvent& key) + { + } + void BaseWidget::OnMouseEnter() { } @@ -121,4 +129,4 @@ namespace Ndk void BaseWidget::OnTextEntered(char32_t character, bool repeated) { } -} \ No newline at end of file +} diff --git a/SDK/src/NDK/Canvas.cpp b/SDK/src/NDK/Canvas.cpp index 5aa7cfc4a..c06d320c1 100644 --- a/SDK/src/NDK/Canvas.cpp +++ b/SDK/src/NDK/Canvas.cpp @@ -66,7 +66,7 @@ namespace Ndk } } - void Canvas::OnMouseButtonPressed(const Nz::EventHandler* eventHandler, const Nz::WindowEvent::MouseButtonEvent& event) + void Canvas::OnMouseButtonPressed(const Nz::EventHandler* /*eventHandler*/, const Nz::WindowEvent::MouseButtonEvent& event) { if (m_hoveredWidget) { @@ -77,7 +77,7 @@ namespace Ndk } } - void Canvas::OnMouseButtonRelease(const Nz::EventHandler * eventHandler, const Nz::WindowEvent::MouseButtonEvent & event) + void Canvas::OnMouseButtonRelease(const Nz::EventHandler* /*eventHandler*/, const Nz::WindowEvent::MouseButtonEvent & event) { if (m_hoveredWidget) { @@ -88,7 +88,7 @@ namespace Ndk } } - void Canvas::OnMouseMoved(const Nz::EventHandler* eventHandler, const Nz::WindowEvent::MouseMoveEvent& event) + void Canvas::OnMouseMoved(const Nz::EventHandler* /*eventHandler*/, const Nz::WindowEvent::MouseMoveEvent& event) { const WidgetBox* bestEntry = nullptr; float bestEntryArea = std::numeric_limits::infinity(); @@ -131,7 +131,7 @@ namespace Ndk } } - void Canvas::OnMouseLeft(const Nz::EventHandler* eventHandler) + void Canvas::OnMouseLeft(const Nz::EventHandler* /*eventHandler*/) { if (m_hoveredWidget) { @@ -140,9 +140,21 @@ namespace Ndk } } - void Canvas::OnTextEntered(const Nz::EventHandler* eventHandler, const Nz::WindowEvent::TextEvent& event) + void Canvas::OnKeyPressed(const Nz::EventHandler* /*eventHandler*/, const Nz::WindowEvent::KeyEvent& event) + { + if (m_keyboardOwner) + m_keyboardOwner->OnKeyPressed(event); + } + + void Canvas::OnKeyReleased(const Nz::EventHandler* /*eventHandler*/, const Nz::WindowEvent::KeyEvent& event) + { + if (m_keyboardOwner) + m_keyboardOwner->OnKeyReleased(event); + } + + void Canvas::OnTextEntered(const Nz::EventHandler* /*eventHandler*/, const Nz::WindowEvent::TextEvent& event) { if (m_keyboardOwner) m_keyboardOwner->OnTextEntered(event.character, event.repeated); } -} \ No newline at end of file +}