Widgets: Improve default theme

This commit is contained in:
Jérôme Leclercq 2021-12-01 10:37:48 +01:00
parent 8582b94c44
commit b62d5f6846
4 changed files with 46 additions and 17 deletions

View File

@ -30,9 +30,9 @@ namespace Nz
private:
std::shared_ptr<Material> m_buttonMaterial;
std::shared_ptr<Material> m_hoveredButtonMaterial;
std::shared_ptr<Material> m_pressedHoveredMaterial;
std::shared_ptr<Material> m_pressedButtonMaterial;
std::shared_ptr<Material> m_buttonHoveredMaterial;
std::shared_ptr<Material> m_buttonPressedHoveredMaterial;
std::shared_ptr<Material> m_buttonPressedMaterial;
};
}

View File

@ -17,7 +17,9 @@ namespace Nz
class NAZARA_WIDGETS_API SimpleButtonWidgetStyle : public ButtonWidgetStyle
{
public:
SimpleButtonWidgetStyle(ButtonWidget* buttonWidget, std::shared_ptr<Material> material, std::shared_ptr<Material> hoveredMaterial = {}, std::shared_ptr<Material> pressedMaterial = {}, std::shared_ptr<Material> pressedHoveredMaterial = {});
struct StyleConfig;
SimpleButtonWidgetStyle(ButtonWidget* buttonWidget, StyleConfig config);
SimpleButtonWidgetStyle(const SimpleButtonWidgetStyle&) = delete;
SimpleButtonWidgetStyle(SimpleButtonWidgetStyle&&) = default;
~SimpleButtonWidgetStyle() = default;
@ -34,6 +36,16 @@ namespace Nz
SimpleButtonWidgetStyle& operator=(const SimpleButtonWidgetStyle&) = delete;
SimpleButtonWidgetStyle& operator=(SimpleButtonWidgetStyle&&) = default;
struct StyleConfig
{
std::shared_ptr<Material> hoveredMaterial;
std::shared_ptr<Material> material;
std::shared_ptr<Material> pressedMaterial;
std::shared_ptr<Material> pressedHoveredMaterial;
float cornerSize;
float cornerTexCoords;
};
protected:
virtual void UpdateMaterial(bool hovered, bool pressed);

View File

@ -15,19 +15,19 @@ namespace Nz
namespace
{
const UInt8 ButtonImage[] = {
#include <Nazara/Widgets/Resources/DefaultStyle/Button.png.h>
#include <Nazara/Widgets/Resources/DefaultTheme/Button.png.h>
};
const UInt8 ButtonHoveredImage[] = {
#include <Nazara/Widgets/Resources/DefaultStyle/ButtonHovered.png.h>
#include <Nazara/Widgets/Resources/DefaultTheme/ButtonHovered.png.h>
};
const UInt8 ButtonPressedImage[] = {
#include <Nazara/Widgets/Resources/DefaultStyle/ButtonPressed.png.h>
#include <Nazara/Widgets/Resources/DefaultTheme/ButtonPressed.png.h>
};
const UInt8 ButtonPressedHoveredImage[] = {
#include <Nazara/Widgets/Resources/DefaultStyle/ButtonPressedHovered.png.h>
#include <Nazara/Widgets/Resources/DefaultTheme/ButtonPressedHovered.png.h>
};
}
@ -42,6 +42,9 @@ namespace Nz
std::shared_ptr<MaterialPass> buttonMaterialPass = std::make_shared<MaterialPass>(BasicMaterial::GetSettings());
buttonMaterialPass->EnableDepthBuffer(true);
buttonMaterialPass->EnableDepthWrite(false);
buttonMaterialPass->EnableBlending(true);
buttonMaterialPass->SetBlendEquation(BlendEquation::Add, BlendEquation::Add);
buttonMaterialPass->SetBlendFunc(BlendFunc::SrcAlpha, BlendFunc::InvSrcAlpha, BlendFunc::One, BlendFunc::One);
std::shared_ptr<Material> material = std::make_shared<Material>();
material->AddPass("ForwardPass", buttonMaterialPass);
@ -54,14 +57,22 @@ namespace Nz
// Button material
m_buttonMaterial = CreateMaterialFromTexture(Texture::LoadFromMemory(ButtonImage, sizeof(ButtonImage), texParams));
m_hoveredButtonMaterial = CreateMaterialFromTexture(Texture::LoadFromMemory(ButtonHoveredImage, sizeof(ButtonHoveredImage), texParams));
m_pressedButtonMaterial = CreateMaterialFromTexture(Texture::LoadFromMemory(ButtonPressedImage, sizeof(ButtonPressedImage), texParams));
m_pressedHoveredMaterial = CreateMaterialFromTexture(Texture::LoadFromMemory(ButtonPressedHoveredImage, sizeof(ButtonPressedHoveredImage), texParams));
m_buttonHoveredMaterial = CreateMaterialFromTexture(Texture::LoadFromMemory(ButtonHoveredImage, sizeof(ButtonHoveredImage), texParams));
m_buttonPressedMaterial = CreateMaterialFromTexture(Texture::LoadFromMemory(ButtonPressedImage, sizeof(ButtonPressedImage), texParams));
m_buttonPressedHoveredMaterial = CreateMaterialFromTexture(Texture::LoadFromMemory(ButtonPressedHoveredImage, sizeof(ButtonPressedHoveredImage), texParams));
}
std::unique_ptr<ButtonWidgetStyle> DefaultWidgetTheme::CreateStyle(ButtonWidget* buttonWidget) const
{
return std::make_unique<SimpleButtonWidgetStyle>(buttonWidget, m_buttonMaterial, m_hoveredButtonMaterial, m_pressedButtonMaterial, m_pressedHoveredMaterial);
SimpleButtonWidgetStyle::StyleConfig styleConfig;
styleConfig.cornerSize = 20.f;
styleConfig.cornerTexCoords = 20.f / 128.f;
styleConfig.hoveredMaterial = m_buttonHoveredMaterial;
styleConfig.material = m_buttonMaterial;
styleConfig.pressedHoveredMaterial = m_buttonPressedHoveredMaterial;
styleConfig.pressedMaterial = m_buttonPressedMaterial;
return std::make_unique<SimpleButtonWidgetStyle>(buttonWidget, styleConfig);
}
std::unique_ptr<LabelWidgetStyle> DefaultWidgetTheme::CreateStyle(LabelWidget* buttonWidget) const

View File

@ -13,12 +13,12 @@
namespace Nz
{
SimpleButtonWidgetStyle::SimpleButtonWidgetStyle(ButtonWidget* buttonWidget, std::shared_ptr<Material> material, std::shared_ptr<Material> hoveredMaterial, std::shared_ptr<Material> pressedMaterial, std::shared_ptr<Material> pressedHoveredMaterial) :
SimpleButtonWidgetStyle::SimpleButtonWidgetStyle(ButtonWidget* buttonWidget, StyleConfig config) :
ButtonWidgetStyle(buttonWidget),
m_hoveredMaterial(std::move(hoveredMaterial)),
m_material(std::move(material)),
m_pressedMaterial(std::move(pressedMaterial)),
m_pressedHoveredMaterial(std::move(pressedHoveredMaterial)),
m_hoveredMaterial(std::move(config.hoveredMaterial)),
m_material(std::move(config.material)),
m_pressedMaterial(std::move(config.pressedMaterial)),
m_pressedHoveredMaterial(std::move(config.pressedHoveredMaterial)),
m_isHovered(false),
m_isPressed(false)
{
@ -27,7 +27,13 @@ namespace Nz
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_textSprite = std::make_shared<TextSprite>(Widgets::Instance()->GetTransparentMaterial());
m_spriteEntity = CreateGraphicsEntity();