Widgets: Add support for render layer (fixes rendering)
This commit is contained in:
@@ -471,6 +471,13 @@ namespace Nz
|
||||
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*/)
|
||||
{
|
||||
if (m_readOnly)
|
||||
@@ -544,9 +551,10 @@ namespace Nz
|
||||
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->UpdateRenderLayer(GetBaseRenderLayer() + 1);
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -91,6 +91,7 @@ namespace Nz
|
||||
{
|
||||
m_backgroundSprite = std::make_shared<Sprite>((m_backgroundColor.IsOpaque()) ? Widgets::Instance()->GetOpaqueMaterial() : Widgets::Instance()->GetTransparentMaterial());
|
||||
m_backgroundSprite->SetColor(m_backgroundColor);
|
||||
m_backgroundSprite->UpdateRenderLayer(m_baseRenderLayer);
|
||||
|
||||
entt::entity backgroundEntity = CreateEntity();
|
||||
m_registry->emplace<GraphicsComponent>(backgroundEntity).AttachRenderable(m_backgroundSprite, GetCanvas()->GetRenderMask());
|
||||
@@ -107,6 +108,11 @@ namespace Nz
|
||||
DestroyEntity(*m_backgroundEntity);
|
||||
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*/)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -20,6 +20,7 @@ namespace Nz
|
||||
BaseWidget(parent)
|
||||
{
|
||||
m_style = GetTheme()->CreateStyle(this);
|
||||
SetRenderLayerCount(m_style->GetRenderLayerCount());
|
||||
|
||||
Layout();
|
||||
}
|
||||
@@ -69,4 +70,9 @@ namespace Nz
|
||||
{
|
||||
m_style->OnHoverEnd();
|
||||
}
|
||||
|
||||
void ButtonWidget::OnRenderLayerUpdated(int baseRenderLayer)
|
||||
{
|
||||
m_style->UpdateRenderLayer(baseRenderLayer);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
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>()),
|
||||
m_renderMask(renderMask),
|
||||
m_keyboardOwner(InvalidCanvasIndex),
|
||||
@@ -21,6 +21,8 @@ namespace Nz
|
||||
m_canvas = this;
|
||||
m_widgetParent = nullptr;
|
||||
|
||||
SetBaseRenderLayer(initialRenderLayer);
|
||||
|
||||
// Register ourselves as a widget to handle cursor change
|
||||
RegisterToCanvas();
|
||||
|
||||
|
||||
@@ -22,6 +22,7 @@ namespace Nz
|
||||
m_isTristateEnabled(false)
|
||||
{
|
||||
m_style = GetTheme()->CreateStyle(this);
|
||||
SetRenderLayerCount(m_style->GetRenderLayerCount());
|
||||
|
||||
Layout();
|
||||
}
|
||||
@@ -68,4 +69,9 @@ namespace Nz
|
||||
{
|
||||
m_style->OnHoverEnd();
|
||||
}
|
||||
|
||||
void CheckboxWidget::OnRenderLayerUpdated(int baseRenderLayer)
|
||||
{
|
||||
m_style->UpdateRenderLayer(baseRenderLayer);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@ namespace Nz
|
||||
BaseWidget(parent)
|
||||
{
|
||||
m_style = GetTheme()->CreateStyle(this);
|
||||
SetRenderLayerCount(m_style->GetRenderLayerCount());
|
||||
|
||||
Layout();
|
||||
}
|
||||
@@ -41,4 +42,9 @@ namespace Nz
|
||||
{
|
||||
m_style->OnHoverEnd();
|
||||
}
|
||||
|
||||
void LabelWidget::OnRenderLayerUpdated(int baseRenderLayer)
|
||||
{
|
||||
m_style->UpdateRenderLayer(baseRenderLayer);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
namespace Nz
|
||||
{
|
||||
SimpleButtonWidgetStyle::SimpleButtonWidgetStyle(ButtonWidget* buttonWidget, StyleConfig config) :
|
||||
ButtonWidgetStyle(buttonWidget),
|
||||
ButtonWidgetStyle(buttonWidget, 2),
|
||||
m_hoveredMaterial(std::move(config.hoveredMaterial)),
|
||||
m_material(std::move(config.material)),
|
||||
m_pressedMaterial(std::move(config.pressedMaterial)),
|
||||
@@ -78,6 +78,12 @@ namespace Nz
|
||||
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)
|
||||
{
|
||||
m_textSprite->Update(drawer);
|
||||
@@ -97,7 +103,7 @@ namespace Nz
|
||||
|
||||
|
||||
SimpleCheckboxWidgetStyle::SimpleCheckboxWidgetStyle(CheckboxWidget* buttonWidget, StyleConfig config) :
|
||||
CheckboxWidgetStyle(buttonWidget),
|
||||
CheckboxWidgetStyle(buttonWidget, 2),
|
||||
m_checkMaterial(std::move(config.checkMaterial)),
|
||||
m_hoveredMaterial(std::move(config.backgroundHoveredMaterial)),
|
||||
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)
|
||||
{
|
||||
if (hovered && m_hoveredMaterial)
|
||||
@@ -183,7 +195,7 @@ namespace Nz
|
||||
|
||||
|
||||
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_material(std::move(material))
|
||||
{
|
||||
@@ -224,6 +236,11 @@ namespace Nz
|
||||
m_textSprite->SetMaterial(m_material);
|
||||
}
|
||||
|
||||
void SimpleLabelWidgetStyle::UpdateRenderLayer(int baseRenderLayer)
|
||||
{
|
||||
m_textSprite->UpdateRenderLayer(baseRenderLayer);
|
||||
}
|
||||
|
||||
void SimpleLabelWidgetStyle::UpdateText(const AbstractTextDrawer& drawer)
|
||||
{
|
||||
m_textSprite->Update(drawer);
|
||||
|
||||
Reference in New Issue
Block a user