From c974efdbc840d5779c00f30cd095d1f999241338 Mon Sep 17 00:00:00 2001 From: Mateus Rodrigues Date: Mon, 18 May 2026 23:48:35 -0300 Subject: [PATCH] feat(ui): Background (rename Bg) com RoundedBox + borda na cor da variante - Bg -> Background (nome descritivo). - RefreshUIStyle: monta o brush do Background como RoundedBox quando bRoundedBackground (default true): TintColor=BgNormal, OutlineSettings(CornerRadii=Button.CornerRadius, Color=BorderNormal, Width=Button.BorderWidth, RoundingType=FixedRadius). 'So borda com a cor' = variante com BgNormal transparente + BorderNormal na cor (data-driven, como o Hyper). bRoundedBackground=false -> caixa reta. Compila OK. Co-Authored-By: Claude Opus 4.7 (1M context) --- Source/ZMMO/Game/UI/Widgets/UIButton_Base.cpp | 27 +++++++++++++++++-- Source/ZMMO/Game/UI/Widgets/UIButton_Base.h | 7 ++++- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/Source/ZMMO/Game/UI/Widgets/UIButton_Base.cpp b/Source/ZMMO/Game/UI/Widgets/UIButton_Base.cpp index ebe0156..d126c4f 100644 --- a/Source/ZMMO/Game/UI/Widgets/UIButton_Base.cpp +++ b/Source/ZMMO/Game/UI/Widgets/UIButton_Base.cpp @@ -5,6 +5,7 @@ #include "Engine/World.h" #include "TimerManager.h" #include "Components/Border.h" +#include "Styling/SlateBrush.h" #include "Components/TextBlock.h" #include "Components/Image.h" #include "Components/SizeBox.h" @@ -165,9 +166,31 @@ void UUIButton_Base::RefreshUIStyle() const FUIStyle& ActiveStyle = ResolveActiveStyle(this, Fallback); const FUIStyleButtonVariant& VariantStyle = ResolveVariant(ActiveStyle.Button); - if (Bg) + if (Background) { - Bg->SetBrushColor(VariantStyle.BgNormal); + // Fundo + borda na cor da variante. RoundedBox dá cantos arredondados + // e a borda colorida (BorderNormal) — "só borda" = BgNormal transparente. + FSlateBrush Brush = Background->Background; + Brush.TintColor = FSlateColor(VariantStyle.BgNormal); + if (bRoundedBackground) + { + const float R = ActiveStyle.Button.CornerRadius; + Brush.DrawAs = ESlateBrushDrawType::RoundedBox; + Brush.OutlineSettings = FSlateBrushOutlineSettings( + FVector4(R, R, R, R), + FSlateColor(VariantStyle.BorderNormal), + ActiveStyle.Button.BorderWidth); + Brush.OutlineSettings.RoundingType = ESlateBrushRoundingType::FixedRadius; + } + else + { + Brush.DrawAs = ESlateBrushDrawType::Box; + Brush.OutlineSettings = FSlateBrushOutlineSettings( + FVector4(0, 0, 0, 0), + FSlateColor(VariantStyle.BorderNormal), + ActiveStyle.Button.BorderWidth); + } + Background->SetBrush(Brush); } if (ButtonText) { diff --git a/Source/ZMMO/Game/UI/Widgets/UIButton_Base.h b/Source/ZMMO/Game/UI/Widgets/UIButton_Base.h index 4caf79d..75caf99 100644 --- a/Source/ZMMO/Game/UI/Widgets/UIButton_Base.h +++ b/Source/ZMMO/Game/UI/Widgets/UIButton_Base.h @@ -62,6 +62,11 @@ public: UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Text Style") bool bAutoSizeText = true; + /** Arredonda o Background (RoundedBox) e desenha a borda na cor da + * variante. Desligado = caixa reta. Raio/largura vêm de FUIStyleButton. */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Button") + bool bRoundedBackground = true; + // ---- Number Text ---- UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Number Text") bool bShowNumberText = false; @@ -176,7 +181,7 @@ protected: /** Fundo temável (nossa adição sobre o Hyper, p/ FUIStyle). */ UPROPERTY(meta = (BindWidgetOptional)) - TObjectPtr Bg; + TObjectPtr Background; private: void StartDeactivateTimeout();