Widgets: Add ProgressBarWidget
This commit is contained in:
@@ -14,7 +14,7 @@ namespace Nz
|
||||
namespace
|
||||
{
|
||||
const UInt8 s_defaultThemeButtonImage[] = {
|
||||
#include <Nazara/Widgets/Resources/DefaultTheme/Button.png.h>
|
||||
#include <Nazara/Widgets/Resources/DefaultTheme/Button_SMALL2.png.h>
|
||||
};
|
||||
|
||||
const UInt8 s_defaultThemeButtonHoveredImage[] = {
|
||||
@@ -49,6 +49,10 @@ namespace Nz
|
||||
#include <Nazara/Widgets/Resources/DefaultTheme/Hovered.png.h>
|
||||
};
|
||||
|
||||
const UInt8 s_defaultThemeProgressBarBackgroundImage[] = {
|
||||
#include <Nazara/Widgets/Resources/DefaultTheme/ProgressBarBackground.png.h>
|
||||
};
|
||||
|
||||
const UInt8 s_defaultThemeScrollbarHorizontalBackgroundImage[] = {
|
||||
#include <Nazara/Widgets/Resources/DefaultTheme/ScrollbarBackgroundHorizontal.png.h>
|
||||
};
|
||||
@@ -146,6 +150,9 @@ namespace Nz
|
||||
m_checkboxCheckMaterial = CreateMaterialFromTexture(Texture::LoadFromMemory(s_defaultThemeCheckboxCheckImage, sizeof(s_defaultThemeCheckboxCheckImage), texParams));
|
||||
m_checkboxTristateMaterial = CreateMaterialFromTexture(Texture::LoadFromMemory(s_defaultThemeCheckboxTristateImage, sizeof(s_defaultThemeCheckboxTristateImage), texParams));
|
||||
|
||||
// ProgressBar materials
|
||||
m_progressBarMaterial = CreateMaterialFromTexture(Texture::LoadFromMemory(s_defaultThemeProgressBarBackgroundImage, sizeof(s_defaultThemeProgressBarBackgroundImage), texParams));
|
||||
|
||||
// Scrollbar materials
|
||||
m_scrollbarBackgroundHorizontalMaterial = CreateMaterialFromTexture(Texture::LoadFromMemory(s_defaultThemeScrollbarHorizontalBackgroundImage, sizeof(s_defaultThemeScrollbarHorizontalBackgroundImage), texParams));
|
||||
m_scrollbarBackgroundVerticalMaterial = CreateMaterialFromTexture(Texture::LoadFromMemory(s_defaultThemeScrollbarVerticalBackgroundImage, sizeof(s_defaultThemeScrollbarVerticalBackgroundImage), texParams));
|
||||
@@ -179,7 +186,7 @@ namespace Nz
|
||||
{
|
||||
SimpleButtonWidgetStyle::StyleConfig styleConfig;
|
||||
styleConfig.cornerSize = 20.f;
|
||||
styleConfig.cornerTexCoords = 20.f / 128.f;
|
||||
styleConfig.cornerTexCoords = 20.f / 42.f;
|
||||
styleConfig.hoveredMaterial = m_buttonHoveredMaterial;
|
||||
styleConfig.material = m_buttonMaterial;
|
||||
styleConfig.pressedHoveredMaterial = m_buttonPressedHoveredMaterial;
|
||||
@@ -216,6 +223,19 @@ namespace Nz
|
||||
return std::make_unique<SimpleLabelWidgetStyle>(labelWidget, Widgets::Instance()->GetTransparentMaterial());
|
||||
}
|
||||
|
||||
std::unique_ptr<ProgressBarWidgetStyle> DefaultWidgetTheme::CreateStyle(ProgressBarWidget* progressBarWidget) const
|
||||
{
|
||||
SimpleProgressBarWidgetStyle::StyleConfig styleConfig;
|
||||
styleConfig.backgroundCornerSize = 16.f;
|
||||
styleConfig.backgroundCornerTexCoords = 16.f / 64.f;
|
||||
styleConfig.backgroundMaterial = m_progressBarMaterial;
|
||||
styleConfig.barOffset = 12.f;
|
||||
styleConfig.progressBarBeginColor = Nz::Color::DarkGreen();
|
||||
styleConfig.progressBarEndColor = Nz::Color::Green();
|
||||
|
||||
return std::make_unique<SimpleProgressBarWidgetStyle>(progressBarWidget, styleConfig);
|
||||
}
|
||||
|
||||
std::unique_ptr<ScrollAreaWidgetStyle> DefaultWidgetTheme::CreateStyle(ScrollAreaWidget* scrollAreaWidget) const
|
||||
{
|
||||
return std::make_unique<SimpleScrollAreaWidgetStyle>(scrollAreaWidget);
|
||||
|
||||
30
src/Nazara/Widgets/ProgressBarWidget.cpp
Normal file
30
src/Nazara/Widgets/ProgressBarWidget.cpp
Normal file
@@ -0,0 +1,30 @@
|
||||
// Copyright (C) 2024 Jérôme "SirLynix" Leclercq (lynix680@gmail.com)
|
||||
// This file is part of the "Nazara Engine - Widgets module"
|
||||
// For conditions of distribution and use, see copyright notice in Config.hpp
|
||||
|
||||
#include <Nazara/Widgets/ProgressBarWidget.hpp>
|
||||
#include <Nazara/Widgets/Debug.hpp>
|
||||
|
||||
namespace Nz
|
||||
{
|
||||
ProgressBarWidget::ProgressBarWidget(BaseWidget* parent) :
|
||||
BaseWidget(parent),
|
||||
m_fraction(0.f)
|
||||
{
|
||||
m_style = GetTheme()->CreateStyle(this);
|
||||
SetRenderLayerCount(m_style->GetRenderLayerCount());
|
||||
|
||||
Layout();
|
||||
}
|
||||
|
||||
void ProgressBarWidget::Layout()
|
||||
{
|
||||
BaseWidget::Layout();
|
||||
m_style->Layout(GetSize());
|
||||
}
|
||||
|
||||
void ProgressBarWidget::OnRenderLayerUpdated(int baseRenderLayer)
|
||||
{
|
||||
m_style->UpdateRenderLayer(baseRenderLayer);
|
||||
}
|
||||
}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 5.0 KiB |
@@ -10,6 +10,7 @@
|
||||
#include <Nazara/Widgets/CheckboxWidget.hpp>
|
||||
#include <Nazara/Widgets/ImageButtonWidget.hpp>
|
||||
#include <Nazara/Widgets/LabelWidget.hpp>
|
||||
#include <Nazara/Widgets/ProgressBarWidget.hpp>
|
||||
#include <Nazara/Widgets/ScrollAreaWidget.hpp>
|
||||
#include <Nazara/Widgets/ScrollbarButtonWidget.hpp>
|
||||
#include <Nazara/Widgets/ScrollbarWidget.hpp>
|
||||
@@ -105,6 +106,7 @@ namespace Nz
|
||||
m_sprite->SetMaterial(m_material);
|
||||
}
|
||||
|
||||
/************************************************************************/
|
||||
|
||||
SimpleCheckboxWidgetStyle::SimpleCheckboxWidgetStyle(CheckboxWidget* buttonWidget, StyleConfig config) :
|
||||
CheckboxWidgetStyle(buttonWidget, 2),
|
||||
@@ -197,6 +199,7 @@ namespace Nz
|
||||
m_backgroundSprite->SetMaterial(m_material);
|
||||
}
|
||||
|
||||
/************************************************************************/
|
||||
|
||||
SimpleImageButtonWidgetStyle::SimpleImageButtonWidgetStyle(ImageButtonWidget* imageButtonWidget, StyleConfig config) :
|
||||
ImageButtonWidgetStyle(imageButtonWidget, 1),
|
||||
@@ -337,6 +340,7 @@ namespace Nz
|
||||
}
|
||||
}
|
||||
|
||||
/************************************************************************/
|
||||
|
||||
SimpleLabelWidgetStyle::SimpleLabelWidgetStyle(LabelWidget* labelWidget, std::shared_ptr<MaterialInstance> material, std::shared_ptr<MaterialInstance> hoveredMaterial) :
|
||||
LabelWidgetStyle(labelWidget, 1),
|
||||
@@ -389,7 +393,62 @@ namespace Nz
|
||||
{
|
||||
m_textSprite->Update(drawer);
|
||||
}
|
||||
|
||||
/************************************************************************/
|
||||
|
||||
SimpleProgressBarWidgetStyle::SimpleProgressBarWidgetStyle(ProgressBarWidget* progressBarWidget, StyleConfig config) :
|
||||
ProgressBarWidgetStyle(progressBarWidget, 2),
|
||||
m_backgroundMaterial(std::move(config.backgroundMaterial)),
|
||||
m_progressBarBeginColor(config.progressBarBeginColor),
|
||||
m_progressBarEndColor(config.progressBarEndColor),
|
||||
m_barOffset(config.barOffset)
|
||||
{
|
||||
assert(m_backgroundMaterial);
|
||||
|
||||
auto& registry = GetRegistry();
|
||||
UInt32 renderMask = GetRenderMask();
|
||||
|
||||
SlicedSprite::Corner backgroundCorner;
|
||||
backgroundCorner.size = Vector2f(config.backgroundCornerSize, config.backgroundCornerSize);
|
||||
backgroundCorner.textureCoords = Vector2f(config.backgroundCornerTexCoords, config.backgroundCornerTexCoords);
|
||||
|
||||
m_backgroundSprite = std::make_shared<SlicedSprite>(m_backgroundMaterial);
|
||||
m_backgroundSprite->SetCorners(backgroundCorner, backgroundCorner);
|
||||
|
||||
m_backgroundEntity = CreateGraphicsEntity();
|
||||
registry.get<GraphicsComponent>(m_backgroundEntity).AttachRenderable(m_backgroundSprite, renderMask);
|
||||
|
||||
m_progressBarSprite = std::make_shared<Sprite>(Widgets::Instance()->GetTransparentMaterial());
|
||||
m_progressBarSprite->SetCornerColor(RectCorner::LeftBottom, m_progressBarBeginColor);
|
||||
m_progressBarSprite->SetCornerColor(RectCorner::LeftTop, m_progressBarBeginColor);
|
||||
m_progressBarSprite->SetCornerColor(RectCorner::RightBottom, m_progressBarEndColor);
|
||||
m_progressBarSprite->SetCornerColor(RectCorner::RightTop, m_progressBarEndColor);
|
||||
|
||||
m_barEntity = CreateGraphicsEntity();
|
||||
registry.get<GraphicsComponent>(m_barEntity).AttachRenderable(m_progressBarSprite, renderMask);
|
||||
registry.get<NodeComponent>(m_barEntity).SetPosition(m_barOffset, m_barOffset);
|
||||
}
|
||||
|
||||
void SimpleProgressBarWidgetStyle::Layout(const Vector2f& size)
|
||||
{
|
||||
float fraction = GetOwnerWidget<ProgressBarWidget>()->GetFraction();
|
||||
float width = std::max(fraction * (size.x - m_barOffset * 2.f), 0.f);
|
||||
|
||||
Color endColor = Lerp(m_progressBarBeginColor, m_progressBarEndColor, fraction);
|
||||
m_progressBarSprite->SetCornerColor(RectCorner::RightBottom, endColor);
|
||||
m_progressBarSprite->SetCornerColor(RectCorner::RightTop, endColor);
|
||||
|
||||
m_backgroundSprite->SetSize(size);
|
||||
m_progressBarSprite->SetSize({ width, size.y - m_barOffset * 2.f });
|
||||
}
|
||||
|
||||
void SimpleProgressBarWidgetStyle::UpdateRenderLayer(int baseRenderLayer)
|
||||
{
|
||||
m_backgroundSprite->UpdateRenderLayer(baseRenderLayer);
|
||||
m_progressBarSprite->UpdateRenderLayer(baseRenderLayer + 1);
|
||||
}
|
||||
|
||||
/************************************************************************/
|
||||
|
||||
SimpleScrollAreaWidgetStyle::SimpleScrollAreaWidgetStyle(ScrollAreaWidget* scrollAreaWidget) :
|
||||
ScrollAreaWidgetStyle(scrollAreaWidget, 0)
|
||||
@@ -431,6 +490,7 @@ namespace Nz
|
||||
m_backgroundScrollbarSprite->UpdateRenderLayer(baseRenderLayer);
|
||||
}
|
||||
|
||||
/************************************************************************/
|
||||
|
||||
SimpleScrollbarButtonWidgetStyle::SimpleScrollbarButtonWidgetStyle(ScrollbarButtonWidget* scrollbarButtonWidget, StyleConfig config) :
|
||||
ScrollbarButtonWidgetStyle(scrollbarButtonWidget, 1),
|
||||
|
||||
Reference in New Issue
Block a user