Files
UnrealEngine/Engine/Source/Developer/ToolWidgets/Private/SPrimaryButton.cpp
2025-05-18 13:04:45 +08:00

51 lines
1.9 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "SPrimaryButton.h"
#include "ToolWidgetsSlateTypes.h"
#include "ToolWidgetsStyle.h"
#include "ToolWidgetsUtilitiesPrivate.h"
#include "Widgets/SBoxPanel.h"
#include "Widgets/Images/SImage.h"
#include "Widgets/Text/STextBlock.h"
void SPrimaryButton::Construct(const FArguments& InArgs)
{
const FActionButtonStyle* ActionButtonStyle = &UE::ToolWidgets::FToolWidgetsStyle::Get().GetWidgetStyle<FActionButtonStyle>("PrimaryButton");
// Check for widget level override, then style override, otherwise unset
const TAttribute<const FSlateBrush*> Icon = InArgs._Icon.IsSet()
? InArgs._Icon
: ActionButtonStyle->IconBrush.IsSet()
? &ActionButtonStyle->IconBrush.GetValue()
: nullptr;
const bool bCanEverHaveIcon = Icon.IsBound() || Icon.Get(nullptr) != nullptr;
const FButtonStyle& SelectedButtonStyle = bCanEverHaveIcon ? ActionButtonStyle->GetIconButtonStyle() : ActionButtonStyle->ButtonStyle;
// Empty/default args will resolve from the ActionButtonStyle
const TSharedRef<SWidget> ButtonContent =
UE::ToolWidgets::Private::ActionButton::MakeButtonContent(
ActionButtonStyle,
Icon,
{},
InArgs._Text,
{});
SButton::Construct(
SButton::FArguments()
.ContentPadding(ActionButtonStyle->GetButtonContentPadding())
.ButtonStyle(&SelectedButtonStyle)
.IsEnabled(InArgs._IsEnabled)
.ToolTipText(InArgs._ToolTipText)
.HAlign(static_cast<EHorizontalAlignment>(ActionButtonStyle->HorizontalContentAlignment))
.VAlign(VAlign_Center)
.NormalPaddingOverride(UE::ToolWidgets::Private::ActionButton::MakeIconPaddingOverride(Icon, SelectedButtonStyle.NormalPadding, ActionButtonStyle->IconNormalPadding))
.PressedPaddingOverride(UE::ToolWidgets::Private::ActionButton::MakeIconPaddingOverride(Icon, SelectedButtonStyle.PressedPadding, ActionButtonStyle->IconPressedPadding))
.OnClicked(InArgs._OnClicked)
[
ButtonContent
]);
}