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: private:
std::shared_ptr<Material> m_buttonMaterial; std::shared_ptr<Material> m_buttonMaterial;
std::shared_ptr<Material> m_hoveredButtonMaterial; std::shared_ptr<Material> m_buttonHoveredMaterial;
std::shared_ptr<Material> m_pressedHoveredMaterial; std::shared_ptr<Material> m_buttonPressedHoveredMaterial;
std::shared_ptr<Material> m_pressedButtonMaterial; std::shared_ptr<Material> m_buttonPressedMaterial;
}; };
} }

View File

@ -17,7 +17,9 @@ namespace Nz
class NAZARA_WIDGETS_API SimpleButtonWidgetStyle : public ButtonWidgetStyle class NAZARA_WIDGETS_API SimpleButtonWidgetStyle : public ButtonWidgetStyle
{ {
public: 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(const SimpleButtonWidgetStyle&) = delete;
SimpleButtonWidgetStyle(SimpleButtonWidgetStyle&&) = default; SimpleButtonWidgetStyle(SimpleButtonWidgetStyle&&) = default;
~SimpleButtonWidgetStyle() = default; ~SimpleButtonWidgetStyle() = default;
@ -34,6 +36,16 @@ namespace Nz
SimpleButtonWidgetStyle& operator=(const SimpleButtonWidgetStyle&) = delete; SimpleButtonWidgetStyle& operator=(const SimpleButtonWidgetStyle&) = delete;
SimpleButtonWidgetStyle& operator=(SimpleButtonWidgetStyle&&) = default; 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: protected:
virtual void UpdateMaterial(bool hovered, bool pressed); virtual void UpdateMaterial(bool hovered, bool pressed);

View File

@ -15,19 +15,19 @@ namespace Nz
namespace namespace
{ {
const UInt8 ButtonImage[] = { const UInt8 ButtonImage[] = {
#include <Nazara/Widgets/Resources/DefaultStyle/Button.png.h> #include <Nazara/Widgets/Resources/DefaultTheme/Button.png.h>
}; };
const UInt8 ButtonHoveredImage[] = { const UInt8 ButtonHoveredImage[] = {
#include <Nazara/Widgets/Resources/DefaultStyle/ButtonHovered.png.h> #include <Nazara/Widgets/Resources/DefaultTheme/ButtonHovered.png.h>
}; };
const UInt8 ButtonPressedImage[] = { const UInt8 ButtonPressedImage[] = {
#include <Nazara/Widgets/Resources/DefaultStyle/ButtonPressed.png.h> #include <Nazara/Widgets/Resources/DefaultTheme/ButtonPressed.png.h>
}; };
const UInt8 ButtonPressedHoveredImage[] = { 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()); std::shared_ptr<MaterialPass> buttonMaterialPass = std::make_shared<MaterialPass>(BasicMaterial::GetSettings());
buttonMaterialPass->EnableDepthBuffer(true); buttonMaterialPass->EnableDepthBuffer(true);
buttonMaterialPass->EnableDepthWrite(false); 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>(); std::shared_ptr<Material> material = std::make_shared<Material>();
material->AddPass("ForwardPass", buttonMaterialPass); material->AddPass("ForwardPass", buttonMaterialPass);
@ -54,14 +57,22 @@ namespace Nz
// Button material // Button material
m_buttonMaterial = CreateMaterialFromTexture(Texture::LoadFromMemory(ButtonImage, sizeof(ButtonImage), texParams)); m_buttonMaterial = CreateMaterialFromTexture(Texture::LoadFromMemory(ButtonImage, sizeof(ButtonImage), texParams));
m_hoveredButtonMaterial = CreateMaterialFromTexture(Texture::LoadFromMemory(ButtonHoveredImage, sizeof(ButtonHoveredImage), texParams)); m_buttonHoveredMaterial = CreateMaterialFromTexture(Texture::LoadFromMemory(ButtonHoveredImage, sizeof(ButtonHoveredImage), texParams));
m_pressedButtonMaterial = CreateMaterialFromTexture(Texture::LoadFromMemory(ButtonPressedImage, sizeof(ButtonPressedImage), texParams)); m_buttonPressedMaterial = CreateMaterialFromTexture(Texture::LoadFromMemory(ButtonPressedImage, sizeof(ButtonPressedImage), texParams));
m_pressedHoveredMaterial = CreateMaterialFromTexture(Texture::LoadFromMemory(ButtonPressedHoveredImage, sizeof(ButtonPressedHoveredImage), texParams)); m_buttonPressedHoveredMaterial = CreateMaterialFromTexture(Texture::LoadFromMemory(ButtonPressedHoveredImage, sizeof(ButtonPressedHoveredImage), texParams));
} }
std::unique_ptr<ButtonWidgetStyle> DefaultWidgetTheme::CreateStyle(ButtonWidget* buttonWidget) const 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 std::unique_ptr<LabelWidgetStyle> DefaultWidgetTheme::CreateStyle(LabelWidget* buttonWidget) const

View File

@ -13,12 +13,12 @@
namespace Nz 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), ButtonWidgetStyle(buttonWidget),
m_hoveredMaterial(std::move(hoveredMaterial)), m_hoveredMaterial(std::move(config.hoveredMaterial)),
m_material(std::move(material)), m_material(std::move(config.material)),
m_pressedMaterial(std::move(pressedMaterial)), m_pressedMaterial(std::move(config.pressedMaterial)),
m_pressedHoveredMaterial(std::move(pressedHoveredMaterial)), m_pressedHoveredMaterial(std::move(config.pressedHoveredMaterial)),
m_isHovered(false), m_isHovered(false),
m_isPressed(false) m_isPressed(false)
{ {
@ -27,7 +27,13 @@ namespace Nz
auto& registry = GetRegistry(); auto& registry = GetRegistry();
UInt32 renderMask = GetRenderMask(); 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 = std::make_shared<SlicedSprite>(m_material);
m_sprite->SetCorners(corner, corner);
m_textSprite = std::make_shared<TextSprite>(Widgets::Instance()->GetTransparentMaterial()); m_textSprite = std::make_shared<TextSprite>(Widgets::Instance()->GetTransparentMaterial());
m_spriteEntity = CreateGraphicsEntity(); m_spriteEntity = CreateGraphicsEntity();