Widgets: Add support for render layer (fixes rendering)
This commit is contained in:
parent
653c9e0028
commit
8f897084d7
|
|
@ -109,6 +109,7 @@ namespace Nz
|
||||||
void OnMouseButtonTriplePress(int x, int y, Mouse::Button button) override;
|
void OnMouseButtonTriplePress(int x, int y, Mouse::Button button) override;
|
||||||
void OnMouseEnter() override;
|
void OnMouseEnter() override;
|
||||||
void OnMouseMoved(int x, int y, int deltaX, int deltaY) override;
|
void OnMouseMoved(int x, int y, int deltaX, int deltaY) override;
|
||||||
|
void OnRenderLayerUpdated(int baseRenderLayer) override;
|
||||||
void OnTextEntered(char32_t character, bool repeated) override;
|
void OnTextEntered(char32_t character, bool repeated) override;
|
||||||
|
|
||||||
virtual void PasteFromClipboard(const Vector2ui& targetPosition) = 0;
|
virtual void PasteFromClipboard(const Vector2ui& targetPosition) = 0;
|
||||||
|
|
|
||||||
|
|
@ -114,6 +114,7 @@ namespace Nz
|
||||||
entt::entity CreateEntity();
|
entt::entity CreateEntity();
|
||||||
void DestroyEntity(entt::entity entity);
|
void DestroyEntity(entt::entity entity);
|
||||||
|
|
||||||
|
inline int GetBaseRenderLayer() const;
|
||||||
inline entt::registry& GetRegistry();
|
inline entt::registry& GetRegistry();
|
||||||
inline const entt::registry& GetRegistry() const;
|
inline const entt::registry& GetRegistry() const;
|
||||||
|
|
||||||
|
|
@ -123,6 +124,7 @@ namespace Nz
|
||||||
|
|
||||||
virtual bool IsFocusable() const;
|
virtual bool IsFocusable() const;
|
||||||
inline bool IsInside(float x, float y) const;
|
inline bool IsInside(float x, float y) const;
|
||||||
|
|
||||||
virtual void OnFocusLost();
|
virtual void OnFocusLost();
|
||||||
virtual void OnFocusReceived();
|
virtual void OnFocusReceived();
|
||||||
virtual bool OnKeyPressed(const WindowEvent::KeyEvent& key);
|
virtual bool OnKeyPressed(const WindowEvent::KeyEvent& key);
|
||||||
|
|
@ -135,11 +137,14 @@ namespace Nz
|
||||||
virtual void OnMouseButtonTriplePress(int x, int y, Mouse::Button button);
|
virtual void OnMouseButtonTriplePress(int x, int y, Mouse::Button button);
|
||||||
virtual void OnMouseWheelMoved(int x, int y, float delta);
|
virtual void OnMouseWheelMoved(int x, int y, float delta);
|
||||||
virtual void OnMouseExit();
|
virtual void OnMouseExit();
|
||||||
|
virtual void OnRenderLayerUpdated(int baseRenderLayer);
|
||||||
virtual void OnParentResized(const Vector2f& newSize);
|
virtual void OnParentResized(const Vector2f& newSize);
|
||||||
virtual void OnTextEntered(char32_t character, bool repeated);
|
virtual void OnTextEntered(char32_t character, bool repeated);
|
||||||
virtual void OnTextEdited(const std::array<char, 32>& characters, int length);
|
virtual void OnTextEdited(const std::array<char, 32>& characters, int length);
|
||||||
|
|
||||||
|
inline void SetBaseRenderLayer(int baseRenderLayer);
|
||||||
inline void SetPreferredSize(const Vector2f& preferredSize);
|
inline void SetPreferredSize(const Vector2f& preferredSize);
|
||||||
|
inline void SetRenderLayerCount(int renderLayerCount);
|
||||||
|
|
||||||
virtual void ShowChildren(bool show);
|
virtual void ShowChildren(bool show);
|
||||||
|
|
||||||
|
|
@ -179,6 +184,8 @@ namespace Nz
|
||||||
Vector2f m_size;
|
Vector2f m_size;
|
||||||
BaseWidget* m_widgetParent;
|
BaseWidget* m_widgetParent;
|
||||||
bool m_visible;
|
bool m_visible;
|
||||||
|
int m_baseRenderLayer;
|
||||||
|
int m_renderLayerCount;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -23,12 +23,14 @@ namespace Nz
|
||||||
m_preferredSize(-1),
|
m_preferredSize(-1),
|
||||||
m_size(50.f, 50.f),
|
m_size(50.f, 50.f),
|
||||||
m_widgetParent(nullptr),
|
m_widgetParent(nullptr),
|
||||||
m_visible(true)
|
m_visible(true),
|
||||||
|
m_baseRenderLayer(0),
|
||||||
|
m_renderLayerCount(1)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T, typename... Args>
|
template<typename T, typename... Args>
|
||||||
inline T* BaseWidget::Add(Args&&... args)
|
T* BaseWidget::Add(Args&&... args)
|
||||||
{
|
{
|
||||||
std::unique_ptr<T> widget = std::make_unique<T>(this, std::forward<Args>(args)...);
|
std::unique_ptr<T> widget = std::make_unique<T>(this, std::forward<Args>(args)...);
|
||||||
T* widgetPtr = widget.get();
|
T* widgetPtr = widget.get();
|
||||||
|
|
@ -39,8 +41,10 @@ namespace Nz
|
||||||
|
|
||||||
inline void BaseWidget::AddChild(std::unique_ptr<BaseWidget>&& widget)
|
inline void BaseWidget::AddChild(std::unique_ptr<BaseWidget>&& widget)
|
||||||
{
|
{
|
||||||
widget->Show(m_visible);
|
|
||||||
widget->SetParent(this);
|
widget->SetParent(this);
|
||||||
|
widget->SetBaseRenderLayer(m_baseRenderLayer + m_renderLayerCount);
|
||||||
|
widget->Show(widget->IsVisible() && m_visible);
|
||||||
|
|
||||||
m_children.emplace_back(std::move(widget));
|
m_children.emplace_back(std::move(widget));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -264,11 +268,9 @@ namespace Nz
|
||||||
SetMinimumSize(minimumSize);
|
SetMinimumSize(minimumSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void BaseWidget::SetPreferredSize(const Vector2f& preferredSize)
|
inline int BaseWidget::GetBaseRenderLayer() const
|
||||||
{
|
{
|
||||||
m_preferredSize = preferredSize;
|
return m_baseRenderLayer + ((m_backgroundEntity.has_value()) ? 1 : 0);
|
||||||
|
|
||||||
//Resize(m_preferredSize);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
inline entt::registry& BaseWidget::GetRegistry()
|
inline entt::registry& BaseWidget::GetRegistry()
|
||||||
|
|
@ -283,6 +285,38 @@ namespace Nz
|
||||||
return *m_registry;
|
return *m_registry;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline void BaseWidget::SetBaseRenderLayer(int baseRenderLayer)
|
||||||
|
{
|
||||||
|
if (m_baseRenderLayer != baseRenderLayer)
|
||||||
|
{
|
||||||
|
m_baseRenderLayer = baseRenderLayer;
|
||||||
|
if (m_backgroundSprite)
|
||||||
|
m_backgroundSprite->UpdateRenderLayer(m_baseRenderLayer);
|
||||||
|
|
||||||
|
OnRenderLayerUpdated(GetBaseRenderLayer());
|
||||||
|
|
||||||
|
for (const auto& widgetPtr : m_children)
|
||||||
|
widgetPtr->SetBaseRenderLayer(m_baseRenderLayer + m_renderLayerCount);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void BaseWidget::SetPreferredSize(const Vector2f& preferredSize)
|
||||||
|
{
|
||||||
|
m_preferredSize = preferredSize;
|
||||||
|
|
||||||
|
//Resize(m_preferredSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void BaseWidget::SetRenderLayerCount(int renderLayerCount)
|
||||||
|
{
|
||||||
|
if (m_renderLayerCount != renderLayerCount)
|
||||||
|
{
|
||||||
|
m_renderLayerCount = renderLayerCount;
|
||||||
|
for (const auto& widgetPtr : m_children)
|
||||||
|
widgetPtr->SetBaseRenderLayer(m_baseRenderLayer + m_renderLayerCount);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
inline bool BaseWidget::IsRegisteredToCanvas() const
|
inline bool BaseWidget::IsRegisteredToCanvas() const
|
||||||
{
|
{
|
||||||
return m_canvas && m_canvasIndex != InvalidCanvasIndex;
|
return m_canvas && m_canvasIndex != InvalidCanvasIndex;
|
||||||
|
|
|
||||||
|
|
@ -41,6 +41,8 @@ namespace Nz
|
||||||
void OnMouseButtonRelease(int x, int y, Mouse::Button button) override;
|
void OnMouseButtonRelease(int x, int y, Mouse::Button button) override;
|
||||||
void OnMouseExit() override;
|
void OnMouseExit() override;
|
||||||
|
|
||||||
|
void OnRenderLayerUpdated(int baseRenderLayer) override;
|
||||||
|
|
||||||
std::unique_ptr<ButtonWidgetStyle> m_style;
|
std::unique_ptr<ButtonWidgetStyle> m_style;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ namespace Nz
|
||||||
friend BaseWidget;
|
friend BaseWidget;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Canvas(entt::registry& registry, EventHandler& eventHandler, CursorControllerHandle cursorController, UInt32 renderMask);
|
Canvas(entt::registry& registry, EventHandler& eventHandler, CursorControllerHandle cursorController, UInt32 renderMask, int initialRenderLayer = 0);
|
||||||
Canvas(const Canvas&) = delete;
|
Canvas(const Canvas&) = delete;
|
||||||
Canvas(Canvas&&) = delete;
|
Canvas(Canvas&&) = delete;
|
||||||
inline ~Canvas();
|
inline ~Canvas();
|
||||||
|
|
|
||||||
|
|
@ -48,6 +48,8 @@ namespace Nz
|
||||||
void OnMouseButtonRelease(int x, int y, Mouse::Button button) override;
|
void OnMouseButtonRelease(int x, int y, Mouse::Button button) override;
|
||||||
void OnMouseExit() override;
|
void OnMouseExit() override;
|
||||||
|
|
||||||
|
void OnRenderLayerUpdated(int baseRenderLayer) override;
|
||||||
|
|
||||||
std::unique_ptr<CheckboxWidgetStyle> m_style;
|
std::unique_ptr<CheckboxWidgetStyle> m_style;
|
||||||
CheckboxState m_state;
|
CheckboxState m_state;
|
||||||
bool m_isTristateEnabled;
|
bool m_isTristateEnabled;
|
||||||
|
|
|
||||||
|
|
@ -33,6 +33,8 @@ namespace Nz
|
||||||
void OnMouseEnter() override;
|
void OnMouseEnter() override;
|
||||||
void OnMouseExit() override;
|
void OnMouseExit() override;
|
||||||
|
|
||||||
|
void OnRenderLayerUpdated(int baseRenderLayer) override;
|
||||||
|
|
||||||
std::unique_ptr<LabelWidgetStyle> m_style;
|
std::unique_ptr<LabelWidgetStyle> m_style;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,7 @@ namespace Nz
|
||||||
void OnPress() override;
|
void OnPress() override;
|
||||||
void OnRelease() override;
|
void OnRelease() override;
|
||||||
|
|
||||||
|
void UpdateRenderLayer(int baseRenderLayer) override;
|
||||||
void UpdateText(const AbstractTextDrawer& drawer) override;
|
void UpdateText(const AbstractTextDrawer& drawer) override;
|
||||||
|
|
||||||
SimpleButtonWidgetStyle& operator=(const SimpleButtonWidgetStyle&) = delete;
|
SimpleButtonWidgetStyle& operator=(const SimpleButtonWidgetStyle&) = delete;
|
||||||
|
|
@ -78,6 +79,8 @@ namespace Nz
|
||||||
void OnHoverEnd() override;
|
void OnHoverEnd() override;
|
||||||
void OnNewState(CheckboxState newState) override;
|
void OnNewState(CheckboxState newState) override;
|
||||||
|
|
||||||
|
void UpdateRenderLayer(int baseRenderLayer) override;
|
||||||
|
|
||||||
SimpleCheckboxWidgetStyle& operator=(const SimpleCheckboxWidgetStyle&) = delete;
|
SimpleCheckboxWidgetStyle& operator=(const SimpleCheckboxWidgetStyle&) = delete;
|
||||||
SimpleCheckboxWidgetStyle& operator=(SimpleCheckboxWidgetStyle&&) = default;
|
SimpleCheckboxWidgetStyle& operator=(SimpleCheckboxWidgetStyle&&) = default;
|
||||||
|
|
||||||
|
|
@ -119,6 +122,7 @@ namespace Nz
|
||||||
void OnHoverBegin() override;
|
void OnHoverBegin() override;
|
||||||
void OnHoverEnd() override;
|
void OnHoverEnd() override;
|
||||||
|
|
||||||
|
void UpdateRenderLayer(int baseRenderLayer) override;
|
||||||
void UpdateText(const AbstractTextDrawer& drawer) override;
|
void UpdateText(const AbstractTextDrawer& drawer) override;
|
||||||
|
|
||||||
SimpleLabelWidgetStyle& operator=(const SimpleLabelWidgetStyle&) = delete;
|
SimpleLabelWidgetStyle& operator=(const SimpleLabelWidgetStyle&) = delete;
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,7 @@ namespace Nz
|
||||||
class NAZARA_WIDGETS_API BaseWidgetStyle
|
class NAZARA_WIDGETS_API BaseWidgetStyle
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
inline BaseWidgetStyle(BaseWidget* widget);
|
inline BaseWidgetStyle(BaseWidget* widget, int renderLayerCount);
|
||||||
BaseWidgetStyle(const BaseWidgetStyle&) = delete;
|
BaseWidgetStyle(const BaseWidgetStyle&) = delete;
|
||||||
BaseWidgetStyle(BaseWidgetStyle&&) = default;
|
BaseWidgetStyle(BaseWidgetStyle&&) = default;
|
||||||
virtual ~BaseWidgetStyle();
|
virtual ~BaseWidgetStyle();
|
||||||
|
|
@ -56,12 +56,16 @@ namespace Nz
|
||||||
inline entt::registry& GetRegistry();
|
inline entt::registry& GetRegistry();
|
||||||
inline const entt::registry& GetRegistry() const;
|
inline const entt::registry& GetRegistry() const;
|
||||||
UInt32 GetRenderMask() const;
|
UInt32 GetRenderMask() const;
|
||||||
|
inline int GetRenderLayerCount() const;
|
||||||
|
|
||||||
|
virtual void UpdateRenderLayer(int baseRenderLayer) = 0;
|
||||||
|
|
||||||
BaseWidgetStyle& operator=(const BaseWidgetStyle&) = delete;
|
BaseWidgetStyle& operator=(const BaseWidgetStyle&) = delete;
|
||||||
BaseWidgetStyle& operator=(BaseWidgetStyle&&) = default;
|
BaseWidgetStyle& operator=(BaseWidgetStyle&&) = default;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
BaseWidget* m_widgetOwner;
|
BaseWidget* m_widgetOwner;
|
||||||
|
int m_renderLayerCount;
|
||||||
};
|
};
|
||||||
|
|
||||||
class NAZARA_WIDGETS_API ButtonWidgetStyle : public BaseWidgetStyle
|
class NAZARA_WIDGETS_API ButtonWidgetStyle : public BaseWidgetStyle
|
||||||
|
|
|
||||||
|
|
@ -3,13 +3,16 @@
|
||||||
// For conditions of distribution and use, see copyright notice in Config.hpp
|
// For conditions of distribution and use, see copyright notice in Config.hpp
|
||||||
|
|
||||||
#include <Nazara/Widgets/WidgetTheme.hpp>
|
#include <Nazara/Widgets/WidgetTheme.hpp>
|
||||||
|
#include <cassert>
|
||||||
#include <Nazara/Widgets/Debug.hpp>
|
#include <Nazara/Widgets/Debug.hpp>
|
||||||
|
|
||||||
namespace Nz
|
namespace Nz
|
||||||
{
|
{
|
||||||
inline BaseWidgetStyle::BaseWidgetStyle(BaseWidget* widget) :
|
inline BaseWidgetStyle::BaseWidgetStyle(BaseWidget* widget, int renderLayerCount) :
|
||||||
m_widgetOwner(widget)
|
m_widgetOwner(widget),
|
||||||
|
m_renderLayerCount(renderLayerCount)
|
||||||
{
|
{
|
||||||
|
assert(m_renderLayerCount >= 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline entt::entity BaseWidgetStyle::CreateEntity()
|
inline entt::entity BaseWidgetStyle::CreateEntity()
|
||||||
|
|
@ -31,6 +34,11 @@ namespace Nz
|
||||||
{
|
{
|
||||||
return m_widgetOwner->GetRegistry();
|
return m_widgetOwner->GetRegistry();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline int BaseWidgetStyle::GetRenderLayerCount() const
|
||||||
|
{
|
||||||
|
return m_renderLayerCount;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#include <Nazara/Widgets/DebugOff.hpp>
|
#include <Nazara/Widgets/DebugOff.hpp>
|
||||||
|
|
|
||||||
|
|
@ -471,6 +471,13 @@ namespace Nz
|
||||||
SetSelection(m_selectionCursor, GetHoveredGlyph(float(x), float(y)));
|
SetSelection(m_selectionCursor, GetHoveredGlyph(float(x), float(y)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AbstractTextAreaWidget::OnRenderLayerUpdated(int baseRenderLayer)
|
||||||
|
{
|
||||||
|
m_textSprite->UpdateRenderLayer(baseRenderLayer);
|
||||||
|
for (Cursor& cursor : m_cursors)
|
||||||
|
cursor.sprite->UpdateRenderLayer(baseRenderLayer + 1);
|
||||||
|
}
|
||||||
|
|
||||||
void AbstractTextAreaWidget::OnTextEntered(char32_t character, bool /*repeated*/)
|
void AbstractTextAreaWidget::OnTextEntered(char32_t character, bool /*repeated*/)
|
||||||
{
|
{
|
||||||
if (m_readOnly)
|
if (m_readOnly)
|
||||||
|
|
@ -544,9 +551,10 @@ namespace Nz
|
||||||
for (std::size_t i = oldSpriteCount; i < m_cursors.size(); ++i)
|
for (std::size_t i = oldSpriteCount; i < m_cursors.size(); ++i)
|
||||||
{
|
{
|
||||||
m_cursors[i].sprite = std::make_shared<Sprite>(Widgets::Instance()->GetTransparentMaterial());
|
m_cursors[i].sprite = std::make_shared<Sprite>(Widgets::Instance()->GetTransparentMaterial());
|
||||||
|
m_cursors[i].sprite->UpdateRenderLayer(GetBaseRenderLayer() + 1);
|
||||||
|
|
||||||
m_cursors[i].entity = CreateEntity();
|
m_cursors[i].entity = CreateEntity();
|
||||||
registry.emplace<GraphicsComponent>(m_cursors[i].entity, HasFocus()).AttachRenderable(m_cursors[i].sprite);
|
registry.emplace<GraphicsComponent>(m_cursors[i].entity, IsVisible() && HasFocus()).AttachRenderable(m_cursors[i].sprite, GetCanvas()->GetRenderMask());
|
||||||
registry.emplace<NodeComponent>(m_cursors[i].entity).SetParent(textNode);
|
registry.emplace<NodeComponent>(m_cursors[i].entity).SetParent(textNode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -91,6 +91,7 @@ namespace Nz
|
||||||
{
|
{
|
||||||
m_backgroundSprite = std::make_shared<Sprite>((m_backgroundColor.IsOpaque()) ? Widgets::Instance()->GetOpaqueMaterial() : Widgets::Instance()->GetTransparentMaterial());
|
m_backgroundSprite = std::make_shared<Sprite>((m_backgroundColor.IsOpaque()) ? Widgets::Instance()->GetOpaqueMaterial() : Widgets::Instance()->GetTransparentMaterial());
|
||||||
m_backgroundSprite->SetColor(m_backgroundColor);
|
m_backgroundSprite->SetColor(m_backgroundColor);
|
||||||
|
m_backgroundSprite->UpdateRenderLayer(m_baseRenderLayer);
|
||||||
|
|
||||||
entt::entity backgroundEntity = CreateEntity();
|
entt::entity backgroundEntity = CreateEntity();
|
||||||
m_registry->emplace<GraphicsComponent>(backgroundEntity).AttachRenderable(m_backgroundSprite, GetCanvas()->GetRenderMask());
|
m_registry->emplace<GraphicsComponent>(backgroundEntity).AttachRenderable(m_backgroundSprite, GetCanvas()->GetRenderMask());
|
||||||
|
|
@ -107,6 +108,11 @@ namespace Nz
|
||||||
DestroyEntity(*m_backgroundEntity);
|
DestroyEntity(*m_backgroundEntity);
|
||||||
m_backgroundSprite.reset();
|
m_backgroundSprite.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
OnRenderLayerUpdated(GetBaseRenderLayer());
|
||||||
|
|
||||||
|
for (const auto& widgetPtr : m_children)
|
||||||
|
widgetPtr->SetBaseRenderLayer(m_baseRenderLayer + m_renderLayerCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
|
@ -306,6 +312,10 @@ namespace Nz
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void BaseWidget::OnRenderLayerUpdated(int /*firstRenderLayer*/)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
void BaseWidget::OnParentResized(const Vector2f& /*newSize*/)
|
void BaseWidget::OnParentResized(const Vector2f& /*newSize*/)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@ namespace Nz
|
||||||
BaseWidget(parent)
|
BaseWidget(parent)
|
||||||
{
|
{
|
||||||
m_style = GetTheme()->CreateStyle(this);
|
m_style = GetTheme()->CreateStyle(this);
|
||||||
|
SetRenderLayerCount(m_style->GetRenderLayerCount());
|
||||||
|
|
||||||
Layout();
|
Layout();
|
||||||
}
|
}
|
||||||
|
|
@ -69,4 +70,9 @@ namespace Nz
|
||||||
{
|
{
|
||||||
m_style->OnHoverEnd();
|
m_style->OnHoverEnd();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ButtonWidget::OnRenderLayerUpdated(int baseRenderLayer)
|
||||||
|
{
|
||||||
|
m_style->UpdateRenderLayer(baseRenderLayer);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@
|
||||||
|
|
||||||
namespace Nz
|
namespace Nz
|
||||||
{
|
{
|
||||||
Canvas::Canvas(entt::registry& registry, Nz::EventHandler& eventHandler, Nz::CursorControllerHandle cursorController, UInt32 renderMask) :
|
Canvas::Canvas(entt::registry& registry, Nz::EventHandler& eventHandler, Nz::CursorControllerHandle cursorController, UInt32 renderMask, int initialRenderLayer) :
|
||||||
BaseWidget(std::make_shared<DefaultWidgetTheme>()),
|
BaseWidget(std::make_shared<DefaultWidgetTheme>()),
|
||||||
m_renderMask(renderMask),
|
m_renderMask(renderMask),
|
||||||
m_keyboardOwner(InvalidCanvasIndex),
|
m_keyboardOwner(InvalidCanvasIndex),
|
||||||
|
|
@ -21,6 +21,8 @@ namespace Nz
|
||||||
m_canvas = this;
|
m_canvas = this;
|
||||||
m_widgetParent = nullptr;
|
m_widgetParent = nullptr;
|
||||||
|
|
||||||
|
SetBaseRenderLayer(initialRenderLayer);
|
||||||
|
|
||||||
// Register ourselves as a widget to handle cursor change
|
// Register ourselves as a widget to handle cursor change
|
||||||
RegisterToCanvas();
|
RegisterToCanvas();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,7 @@ namespace Nz
|
||||||
m_isTristateEnabled(false)
|
m_isTristateEnabled(false)
|
||||||
{
|
{
|
||||||
m_style = GetTheme()->CreateStyle(this);
|
m_style = GetTheme()->CreateStyle(this);
|
||||||
|
SetRenderLayerCount(m_style->GetRenderLayerCount());
|
||||||
|
|
||||||
Layout();
|
Layout();
|
||||||
}
|
}
|
||||||
|
|
@ -68,4 +69,9 @@ namespace Nz
|
||||||
{
|
{
|
||||||
m_style->OnHoverEnd();
|
m_style->OnHoverEnd();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CheckboxWidget::OnRenderLayerUpdated(int baseRenderLayer)
|
||||||
|
{
|
||||||
|
m_style->UpdateRenderLayer(baseRenderLayer);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@ namespace Nz
|
||||||
BaseWidget(parent)
|
BaseWidget(parent)
|
||||||
{
|
{
|
||||||
m_style = GetTheme()->CreateStyle(this);
|
m_style = GetTheme()->CreateStyle(this);
|
||||||
|
SetRenderLayerCount(m_style->GetRenderLayerCount());
|
||||||
|
|
||||||
Layout();
|
Layout();
|
||||||
}
|
}
|
||||||
|
|
@ -41,4 +42,9 @@ namespace Nz
|
||||||
{
|
{
|
||||||
m_style->OnHoverEnd();
|
m_style->OnHoverEnd();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LabelWidget::OnRenderLayerUpdated(int baseRenderLayer)
|
||||||
|
{
|
||||||
|
m_style->UpdateRenderLayer(baseRenderLayer);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@
|
||||||
namespace Nz
|
namespace Nz
|
||||||
{
|
{
|
||||||
SimpleButtonWidgetStyle::SimpleButtonWidgetStyle(ButtonWidget* buttonWidget, StyleConfig config) :
|
SimpleButtonWidgetStyle::SimpleButtonWidgetStyle(ButtonWidget* buttonWidget, StyleConfig config) :
|
||||||
ButtonWidgetStyle(buttonWidget),
|
ButtonWidgetStyle(buttonWidget, 2),
|
||||||
m_hoveredMaterial(std::move(config.hoveredMaterial)),
|
m_hoveredMaterial(std::move(config.hoveredMaterial)),
|
||||||
m_material(std::move(config.material)),
|
m_material(std::move(config.material)),
|
||||||
m_pressedMaterial(std::move(config.pressedMaterial)),
|
m_pressedMaterial(std::move(config.pressedMaterial)),
|
||||||
|
|
@ -78,6 +78,12 @@ namespace Nz
|
||||||
UpdateMaterial(m_isHovered, m_isPressed);
|
UpdateMaterial(m_isHovered, m_isPressed);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SimpleButtonWidgetStyle::UpdateRenderLayer(int baseRenderLayer)
|
||||||
|
{
|
||||||
|
m_sprite->UpdateRenderLayer(baseRenderLayer);
|
||||||
|
m_textSprite->UpdateRenderLayer(baseRenderLayer + 1);
|
||||||
|
}
|
||||||
|
|
||||||
void SimpleButtonWidgetStyle::UpdateText(const AbstractTextDrawer& drawer)
|
void SimpleButtonWidgetStyle::UpdateText(const AbstractTextDrawer& drawer)
|
||||||
{
|
{
|
||||||
m_textSprite->Update(drawer);
|
m_textSprite->Update(drawer);
|
||||||
|
|
@ -97,7 +103,7 @@ namespace Nz
|
||||||
|
|
||||||
|
|
||||||
SimpleCheckboxWidgetStyle::SimpleCheckboxWidgetStyle(CheckboxWidget* buttonWidget, StyleConfig config) :
|
SimpleCheckboxWidgetStyle::SimpleCheckboxWidgetStyle(CheckboxWidget* buttonWidget, StyleConfig config) :
|
||||||
CheckboxWidgetStyle(buttonWidget),
|
CheckboxWidgetStyle(buttonWidget, 2),
|
||||||
m_checkMaterial(std::move(config.checkMaterial)),
|
m_checkMaterial(std::move(config.checkMaterial)),
|
||||||
m_hoveredMaterial(std::move(config.backgroundHoveredMaterial)),
|
m_hoveredMaterial(std::move(config.backgroundHoveredMaterial)),
|
||||||
m_material(std::move(config.backgroundMaterial)),
|
m_material(std::move(config.backgroundMaterial)),
|
||||||
|
|
@ -173,6 +179,12 @@ namespace Nz
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SimpleCheckboxWidgetStyle::UpdateRenderLayer(int baseRenderLayer)
|
||||||
|
{
|
||||||
|
m_backgroundSprite->UpdateRenderLayer(baseRenderLayer);
|
||||||
|
m_checkSprite->UpdateRenderLayer(baseRenderLayer + 1);
|
||||||
|
}
|
||||||
|
|
||||||
void SimpleCheckboxWidgetStyle::UpdateMaterial(bool hovered)
|
void SimpleCheckboxWidgetStyle::UpdateMaterial(bool hovered)
|
||||||
{
|
{
|
||||||
if (hovered && m_hoveredMaterial)
|
if (hovered && m_hoveredMaterial)
|
||||||
|
|
@ -183,7 +195,7 @@ namespace Nz
|
||||||
|
|
||||||
|
|
||||||
SimpleLabelWidgetStyle::SimpleLabelWidgetStyle(LabelWidget* labelWidget, std::shared_ptr<Material> material, std::shared_ptr<Material> hoveredMaterial) :
|
SimpleLabelWidgetStyle::SimpleLabelWidgetStyle(LabelWidget* labelWidget, std::shared_ptr<Material> material, std::shared_ptr<Material> hoveredMaterial) :
|
||||||
LabelWidgetStyle(labelWidget),
|
LabelWidgetStyle(labelWidget, 1),
|
||||||
m_hoveredMaterial(std::move(hoveredMaterial)),
|
m_hoveredMaterial(std::move(hoveredMaterial)),
|
||||||
m_material(std::move(material))
|
m_material(std::move(material))
|
||||||
{
|
{
|
||||||
|
|
@ -224,6 +236,11 @@ namespace Nz
|
||||||
m_textSprite->SetMaterial(m_material);
|
m_textSprite->SetMaterial(m_material);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SimpleLabelWidgetStyle::UpdateRenderLayer(int baseRenderLayer)
|
||||||
|
{
|
||||||
|
m_textSprite->UpdateRenderLayer(baseRenderLayer);
|
||||||
|
}
|
||||||
|
|
||||||
void SimpleLabelWidgetStyle::UpdateText(const AbstractTextDrawer& drawer)
|
void SimpleLabelWidgetStyle::UpdateText(const AbstractTextDrawer& drawer)
|
||||||
{
|
{
|
||||||
m_textSprite->Update(drawer);
|
m_textSprite->Update(drawer);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue