WIP
This commit is contained in:
committed by
Jérôme Leclercq
parent
481702c109
commit
05c78da22a
@@ -8,7 +8,10 @@
|
||||
#include <Nazara/Widgets/ButtonWidget.hpp>
|
||||
#include <Nazara/Widgets/Canvas.hpp>
|
||||
#include <Nazara/Widgets/CheckboxWidget.hpp>
|
||||
#include <Nazara/Widgets/ImageButtonWidget.hpp>
|
||||
#include <Nazara/Widgets/LabelWidget.hpp>
|
||||
#include <Nazara/Widgets/ScrollbarButtonWidget.hpp>
|
||||
#include <Nazara/Widgets/ScrollbarWidget.hpp>
|
||||
#include <Nazara/Widgets/Widgets.hpp>
|
||||
#include <Nazara/Widgets/Debug.hpp>
|
||||
|
||||
@@ -56,26 +59,26 @@ namespace Nz
|
||||
|
||||
void SimpleButtonWidgetStyle::OnHoverBegin()
|
||||
{
|
||||
UpdateMaterial(true, m_isPressed);
|
||||
m_isHovered = true;
|
||||
UpdateMaterial(m_isHovered, m_isPressed);
|
||||
}
|
||||
|
||||
void SimpleButtonWidgetStyle::OnHoverEnd()
|
||||
{
|
||||
UpdateMaterial(false, m_isPressed);
|
||||
m_isHovered = false;
|
||||
UpdateMaterial(m_isHovered, m_isPressed);
|
||||
}
|
||||
|
||||
void SimpleButtonWidgetStyle::OnPress()
|
||||
{
|
||||
UpdateMaterial(m_isHovered, true);
|
||||
m_isPressed = true;
|
||||
UpdateMaterial(m_isHovered, m_isPressed);
|
||||
}
|
||||
|
||||
void SimpleButtonWidgetStyle::OnRelease()
|
||||
{
|
||||
UpdateMaterial(m_isHovered, false);
|
||||
m_isPressed = false;
|
||||
UpdateMaterial(m_isHovered, m_isPressed);
|
||||
}
|
||||
|
||||
void SimpleButtonWidgetStyle::UpdateRenderLayer(int baseRenderLayer)
|
||||
@@ -194,6 +197,140 @@ namespace Nz
|
||||
}
|
||||
|
||||
|
||||
SimpleImageButtonWidgetStyle::SimpleImageButtonWidgetStyle(ImageButtonWidget* imageButtonWidget, StyleConfig config) :
|
||||
ImageButtonWidgetStyle(imageButtonWidget, 1),
|
||||
m_isHovered(false),
|
||||
m_isPressed(false)
|
||||
{
|
||||
auto& registry = GetRegistry();
|
||||
UInt32 renderMask = GetRenderMask();
|
||||
|
||||
SlicedSprite::Corner hoveredCorner;
|
||||
hoveredCorner.size = Vector2f(config.hoveredCornerSize, config.hoveredCornerSize);
|
||||
hoveredCorner.textureCoords = Vector2f(config.hoveredCornerTexCoords, config.hoveredCornerTexCoords);
|
||||
|
||||
m_hoveredSprite = std::make_shared<SlicedSprite>(config.hoveredMaterial);
|
||||
m_hoveredSprite->SetCorners(hoveredCorner, hoveredCorner);
|
||||
|
||||
float imageCornerSize = imageButtonWidget->GetCornerSize();
|
||||
float imageCornerTexCoords = imageButtonWidget->GetCornerTexCoords();
|
||||
|
||||
SlicedSprite::Corner corner;
|
||||
corner.size = Vector2f(imageCornerSize, imageCornerSize);
|
||||
corner.textureCoords = Vector2f(imageCornerTexCoords, imageCornerTexCoords);
|
||||
|
||||
m_sprite = std::make_shared<SlicedSprite>(imageButtonWidget->GetMaterial());
|
||||
m_sprite->SetCorners(corner, corner);
|
||||
m_sprite->SetTextureCoords(imageButtonWidget->GetTextureCoords());
|
||||
|
||||
m_entity = CreateGraphicsEntity();
|
||||
|
||||
GraphicsComponent& gfxComponent = registry.get<GraphicsComponent>(m_entity);
|
||||
gfxComponent.AttachRenderable(m_sprite, renderMask);
|
||||
}
|
||||
|
||||
void SimpleImageButtonWidgetStyle::Layout(const Vector2f& size)
|
||||
{
|
||||
m_hoveredSprite->SetSize(size);
|
||||
m_sprite->SetSize(size);
|
||||
}
|
||||
|
||||
void SimpleImageButtonWidgetStyle::OnHoverBegin()
|
||||
{
|
||||
Update(true, m_isPressed);
|
||||
m_isHovered = true;
|
||||
}
|
||||
|
||||
void SimpleImageButtonWidgetStyle::OnHoverEnd()
|
||||
{
|
||||
Update(false, m_isPressed);
|
||||
m_isHovered = false;
|
||||
}
|
||||
|
||||
void SimpleImageButtonWidgetStyle::OnPress()
|
||||
{
|
||||
Update(m_isHovered, true);
|
||||
m_isPressed = true;
|
||||
}
|
||||
|
||||
void SimpleImageButtonWidgetStyle::OnRelease()
|
||||
{
|
||||
Update(m_isHovered, false);
|
||||
m_isPressed = false;
|
||||
}
|
||||
|
||||
void SimpleImageButtonWidgetStyle::OnUpdate()
|
||||
{
|
||||
ImageButtonWidget* owner = GetOwnerWidget<ImageButtonWidget>();
|
||||
|
||||
// If a hovering material was added while we're being hovered, we need to detach the hovering sprite
|
||||
if (owner->GetHoveredMaterial())
|
||||
{
|
||||
GraphicsComponent& gfxComponent = GetRegistry().get<GraphicsComponent>(m_entity);
|
||||
gfxComponent.DetachRenderable(m_hoveredSprite);
|
||||
}
|
||||
|
||||
m_sprite->SetTextureCoords(owner->GetTextureCoords());
|
||||
|
||||
Update(m_isHovered, m_isPressed);
|
||||
}
|
||||
|
||||
void SimpleImageButtonWidgetStyle::UpdateRenderLayer(int baseRenderLayer)
|
||||
{
|
||||
m_sprite->UpdateRenderLayer(baseRenderLayer);
|
||||
m_hoveredSprite->UpdateRenderLayer(baseRenderLayer + 1);
|
||||
}
|
||||
|
||||
void SimpleImageButtonWidgetStyle::Update(bool hovered, bool pressed)
|
||||
{
|
||||
ImageButtonWidget* owner = GetOwnerWidget<ImageButtonWidget>();
|
||||
|
||||
if (pressed)
|
||||
{
|
||||
if (const auto& pressedMaterial = owner->GetPressedMaterial())
|
||||
{
|
||||
m_sprite->SetColor(owner->GetColor());
|
||||
m_sprite->SetMaterial(pressedMaterial);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_sprite->SetColor(owner->GetColor() * Nz::Color::FromRGB8(120, 0, 0));
|
||||
m_sprite->SetMaterial(owner->GetMaterial());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m_sprite->SetColor(owner->GetColor());
|
||||
m_sprite->SetMaterial(owner->GetMaterial());
|
||||
}
|
||||
|
||||
if (hovered)
|
||||
{
|
||||
if (const auto& hoveredMaterial = owner->GetHoveredMaterial())
|
||||
{
|
||||
if (!pressed)
|
||||
m_sprite->SetMaterial(hoveredMaterial);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!pressed)
|
||||
m_sprite->SetMaterial(owner->GetMaterial());
|
||||
|
||||
GraphicsComponent& gfxComponent = GetRegistry().get<GraphicsComponent>(m_entity);
|
||||
gfxComponent.AttachRenderable(m_hoveredSprite, GetRenderMask());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!pressed)
|
||||
m_sprite->SetMaterial(owner->GetMaterial());
|
||||
|
||||
GraphicsComponent& gfxComponent = GetRegistry().get<GraphicsComponent>(m_entity);
|
||||
gfxComponent.DetachRenderable(m_hoveredSprite);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
SimpleLabelWidgetStyle::SimpleLabelWidgetStyle(LabelWidget* labelWidget, std::shared_ptr<Material> material, std::shared_ptr<Material> hoveredMaterial) :
|
||||
LabelWidgetStyle(labelWidget, 1),
|
||||
m_hoveredMaterial(std::move(hoveredMaterial)),
|
||||
@@ -245,4 +382,123 @@ namespace Nz
|
||||
{
|
||||
m_textSprite->Update(drawer);
|
||||
}
|
||||
|
||||
|
||||
SimpleScrollAreaWidgetStyle::SimpleScrollAreaWidgetStyle(ScrollAreaWidget* scrollAreaWidget) :
|
||||
ScrollAreaWidgetStyle((BaseWidget*) scrollAreaWidget, 0)
|
||||
{
|
||||
}
|
||||
|
||||
void SimpleScrollAreaWidgetStyle::Layout(const Vector2f& size)
|
||||
{
|
||||
}
|
||||
|
||||
void SimpleScrollAreaWidgetStyle::UpdateRenderLayer(int baseRenderLayer)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
SimpleScrollbarWidgetStyle::SimpleScrollbarWidgetStyle(ScrollbarWidget* scrollBarWidget, StyleConfig config) :
|
||||
ScrollbarWidgetStyle(scrollBarWidget, 1),
|
||||
m_config(std::move(config))
|
||||
{
|
||||
auto& registry = GetRegistry();
|
||||
UInt32 renderMask = GetRenderMask();
|
||||
|
||||
m_backgroundScrollbarSprite = std::make_shared<Sprite>((scrollBarWidget->GetOrientation() == ScrollbarOrientation::Horizontal) ? m_config.backgroundHorizontalMaterial : m_config.backgroundVerticalMaterial);
|
||||
|
||||
m_backgroundScrollbarSpriteEntity = CreateGraphicsEntity();
|
||||
registry.get<GraphicsComponent>(m_backgroundScrollbarSpriteEntity).AttachRenderable(m_backgroundScrollbarSprite, renderMask);
|
||||
|
||||
m_scrollbarSpriteEntity = CreateGraphicsEntity();
|
||||
registry.get<GraphicsComponent>(m_scrollbarSpriteEntity).AttachRenderable(m_scrollbarSprite, renderMask);
|
||||
}
|
||||
|
||||
void SimpleScrollbarWidgetStyle::Layout(const Vector2f& size)
|
||||
{
|
||||
float totalSize;
|
||||
if (GetOwnerWidget<ScrollbarWidget>()->GetOrientation() == ScrollbarOrientation::Horizontal)
|
||||
totalSize = size.x;
|
||||
else
|
||||
totalSize = size.y;
|
||||
|
||||
m_backgroundScrollbarSprite->SetSize(size);
|
||||
}
|
||||
|
||||
void SimpleScrollbarWidgetStyle::UpdateRenderLayer(int baseRenderLayer)
|
||||
{
|
||||
m_backgroundScrollbarSprite->UpdateRenderLayer(baseRenderLayer);
|
||||
}
|
||||
|
||||
|
||||
SimpleScrollbarButtonWidgetStyle::SimpleScrollbarButtonWidgetStyle(ScrollbarButtonWidget* scrollbarButtonWidget, StyleConfig config) :
|
||||
ScrollbarButtonWidgetStyle(scrollbarButtonWidget, 1),
|
||||
m_hoveredMaterial(std::move(config.hoveredMaterial)),
|
||||
m_material(std::move(config.material)),
|
||||
m_pressedMaterial(std::move(config.grabbedMaterial)),
|
||||
m_pressedHoveredMaterial(std::move(config.grabbedHoveredMaterial)),
|
||||
m_isHovered(false),
|
||||
m_isPressed(false)
|
||||
{
|
||||
assert(m_material);
|
||||
|
||||
auto& registry = GetRegistry();
|
||||
UInt32 renderMask = GetRenderMask();
|
||||
|
||||
SlicedSprite::Corner corner;
|
||||
corner.size.Set(config.cornerSize);
|
||||
corner.textureCoords.Set(config.cornerTexCoords);
|
||||
|
||||
m_sprite = std::make_shared<SlicedSprite>(m_material);
|
||||
m_sprite->SetCorners(corner, corner);
|
||||
|
||||
m_entity = CreateGraphicsEntity();
|
||||
registry.get<GraphicsComponent>(m_entity).AttachRenderable(m_sprite, renderMask);
|
||||
}
|
||||
|
||||
void SimpleScrollbarButtonWidgetStyle::Layout(const Vector2f& size)
|
||||
{
|
||||
m_sprite->SetSize(size);
|
||||
}
|
||||
|
||||
void SimpleScrollbarButtonWidgetStyle::OnHoverBegin()
|
||||
{
|
||||
Update(true, m_isPressed);
|
||||
m_isHovered = true;
|
||||
}
|
||||
|
||||
void SimpleScrollbarButtonWidgetStyle::OnHoverEnd()
|
||||
{
|
||||
Update(false, m_isPressed);
|
||||
m_isHovered = false;
|
||||
}
|
||||
|
||||
void SimpleScrollbarButtonWidgetStyle::OnGrab()
|
||||
{
|
||||
Update(m_isHovered, true);
|
||||
m_isPressed = true;
|
||||
}
|
||||
|
||||
void SimpleScrollbarButtonWidgetStyle::OnRelease()
|
||||
{
|
||||
Update(m_isHovered, false);
|
||||
m_isPressed = false;
|
||||
}
|
||||
|
||||
void SimpleScrollbarButtonWidgetStyle::UpdateRenderLayer(int baseRenderLayer)
|
||||
{
|
||||
m_sprite->UpdateRenderLayer(baseRenderLayer);
|
||||
}
|
||||
|
||||
void SimpleScrollbarButtonWidgetStyle::Update(bool hovered, bool pressed)
|
||||
{
|
||||
if (pressed && hovered && m_pressedHoveredMaterial)
|
||||
m_sprite->SetMaterial(m_pressedHoveredMaterial);
|
||||
else if (pressed && m_pressedMaterial)
|
||||
m_sprite->SetMaterial(m_pressedMaterial);
|
||||
else if (hovered && m_hoveredMaterial)
|
||||
m_sprite->SetMaterial(m_hoveredMaterial);
|
||||
else
|
||||
m_sprite->SetMaterial(m_material);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user