diff --git a/SDK/include/NDK/BaseWidget.hpp b/SDK/include/NDK/BaseWidget.hpp index 9d13499d9..a3780263f 100644 --- a/SDK/include/NDK/BaseWidget.hpp +++ b/SDK/include/NDK/BaseWidget.hpp @@ -15,6 +15,7 @@ #include #include #include +#include namespace Ndk { @@ -95,11 +96,14 @@ namespace Ndk inline void DestroyChild(BaseWidget* widget); void DestroyChildren(); - void RegisterToCanvas(); + inline bool IsRegisteredToCanvas() const; inline void NotifyParentResized(const Nz::Vector2f& newSize); + void RegisterToCanvas(); inline void UpdateCanvasIndex(std::size_t index); void UnregisterFromCanvas(); + static constexpr std::size_t InvalidCanvasIndex = std::numeric_limits::max(); + std::size_t m_canvasIndex; std::vector m_entities; std::vector> m_children; diff --git a/SDK/include/NDK/BaseWidget.inl b/SDK/include/NDK/BaseWidget.inl index 8ad0521a2..ad6a6ca3b 100644 --- a/SDK/include/NDK/BaseWidget.inl +++ b/SDK/include/NDK/BaseWidget.inl @@ -5,12 +5,11 @@ #include #include #include -#include namespace Ndk { inline BaseWidget::BaseWidget() : - m_canvasIndex(std::numeric_limits::max()), + m_canvasIndex(InvalidCanvasIndex), m_backgroundColor(Nz::Color(230, 230, 230, 255)), m_canvas(nullptr), m_contentSize(50.f, 50.f), @@ -98,6 +97,11 @@ namespace Ndk Layout(); } + inline bool BaseWidget::IsRegisteredToCanvas() const + { + return m_canvas && m_canvasIndex != InvalidCanvasIndex; + } + inline void BaseWidget::NotifyParentResized(const Nz::Vector2f& newSize) { for (const auto& widgetPtr : m_children) diff --git a/SDK/include/NDK/Canvas.inl b/SDK/include/NDK/Canvas.inl index 9fc19ed56..abe2dee0b 100644 --- a/SDK/include/NDK/Canvas.inl +++ b/SDK/include/NDK/Canvas.inl @@ -36,7 +36,7 @@ namespace Ndk DestroyChildren(); // Prevent our parent from trying to call us - m_canvasIndex = std::numeric_limits::max(); + m_canvasIndex = InvalidCanvasIndex; } inline const WorldHandle& Canvas::GetWorld() const diff --git a/SDK/src/NDK/BaseWidget.cpp b/SDK/src/NDK/BaseWidget.cpp index a971139eb..30ceaa86b 100644 --- a/SDK/src/NDK/BaseWidget.cpp +++ b/SDK/src/NDK/BaseWidget.cpp @@ -76,6 +76,14 @@ namespace Ndk } } + void BaseWidget::SetCursor(Nz::SystemCursor systemCursor) + { + m_cursor = systemCursor; + + if (IsRegisteredToCanvas()) + m_canvas->NotifyWidgetCursorUpdate(m_canvasIndex); + } + void BaseWidget::SetSize(const Nz::Vector2f& size) { SetContentSize({std::max(size.x - m_padding.left - m_padding.right, 0.f), std::max(size.y - m_padding.top - m_padding.bottom, 0.f)}); @@ -119,8 +127,8 @@ namespace Ndk void BaseWidget::Layout() { - if (m_canvas) - m_canvas->NotifyWidgetUpdate(m_canvasIndex); + if (IsRegisteredToCanvas()) + m_canvas->NotifyWidgetBoxUpdate(m_canvasIndex); if (m_backgroundEntity) m_backgroundSprite->SetSize(m_contentSize.x + m_padding.left + m_padding.right, m_contentSize.y + m_padding.top + m_padding.bottom); @@ -130,8 +138,8 @@ namespace Ndk { Node::InvalidateNode(); - if (m_canvas) - m_canvas->NotifyWidgetUpdate(m_canvasIndex); + if (IsRegisteredToCanvas()) + m_canvas->NotifyWidgetBoxUpdate(m_canvasIndex); } void BaseWidget::OnKeyPressed(const Nz::WindowEvent::KeyEvent& key) @@ -189,17 +197,17 @@ namespace Ndk void BaseWidget::RegisterToCanvas() { - NazaraAssert(m_canvasIndex == std::numeric_limits::max(), "Widget is already registered to canvas"); + NazaraAssert(!IsRegisteredToCanvas(), "Widget is already registered to canvas"); m_canvasIndex = m_canvas->RegisterWidget(this); } void BaseWidget::UnregisterFromCanvas() { - if (m_canvasIndex != std::numeric_limits::max()) + if (IsRegisteredToCanvas()) { m_canvas->UnregisterWidget(m_canvasIndex); - m_canvasIndex = std::numeric_limits::max(); + m_canvasIndex = InvalidCanvasIndex; } } }