SWindowTitleBar类,位于Engine\Source\Runtime\Slate\Public\Framework\Application
TSharedRef<SWidget> MakeTitleBarContent( TSharedPtr<SWidget> CenterContent, EHorizontalAlignment CenterContentAlignment )
{
TSharedPtr<SWidget> LeftContent;
TSharedPtr<SWidget> RightContent;
MakeTitleBarContentWidgets(LeftContent, RightContent);
// create window title if no content was provided
if (!CenterContent.IsValid())
{
CenterContent = SNew(SBox)
.HAlign(HAlign_Center)
.Visibility(EVisibility::SelfHitTestInvisible)
.Padding(FMargin(5.0f, 2.0f, 2.0f, 5.0f))
[
// NOTE: We bind the window's title text to our window's GetTitle method, so that if the
// title is changed later, the text will always be visually up to date
SNew(STextBlock)
.Visibility(EVisibility::SelfHitTestInvisible)
.TextStyle(&Style->TitleTextStyle)
.Text(Title)
];
}
// Adjust the center content alignment if needed. Windows without any title bar buttons look better if the title is centered.
if (LeftContent == SNullWidget::NullWidget && RightContent == SNullWidget::NullWidget && CenterContentAlignment == EHorizontalAlignment::HAlign_Left)
{
CenterContentAlignment = EHorizontalAlignment::HAlign_Center;
}
// calculate content dimensions
LeftContent->SlatePrepass();
RightContent->SlatePrepass();
FVector2D LeftSize = LeftContent->GetDesiredSize();
FVector2D RightSize = RightContent->GetDesiredSize();
if (CenterContentAlignment == HAlign_Center)
{
LeftSize = FMath::Max(LeftSize, RightSize);
RightSize = LeftSize;
}
float SpacerHeight = FMath::Max(LeftSize.Y, RightSize.Y);
// create title bar
return SAssignNew(TitleArea, SBox)
.Visibility(EVisibility::SelfHitTestInvisible)
[
SNew(SOverlay)
.Visibility(EVisibility::SelfHitTestInvisible)
+ SOverlay::Slot()
[
SNew(SHorizontalBox)
.Visibility(EVisibility::SelfHitTestInvisible)
+ SHorizontalBox::Slot()
.AutoWidth()
.HAlign(HAlign_Left)
.VAlign(VAlign_Top)
[
SNew(SSpacer)
.Size(FVector2D(LeftSize.X, SpacerHeight))
]
+ SHorizontalBox::Slot()
.HAlign(CenterContentAlignment)
.VAlign(VAlign_Top)
.FillWidth(1.0f)
[
CenterContent.ToSharedRef()
]
+ SHorizontalBox::Slot()
.AutoWidth()
.HAlign(HAlign_Right)
.VAlign(VAlign_Top)
[
SNew(SSpacer)
.Size(FVector2D(RightSize.X, SpacerHeight))
]
]
+ SOverlay::Slot()
[
SNew(SHorizontalBox)
.Visibility(EVisibility::SelfHitTestInvisible)
+ SHorizontalBox::Slot()
.AutoWidth()
.HAlign(HAlign_Left)
.VAlign(VAlign_Top)
[
LeftContent.ToSharedRef()
]
+ SHorizontalBox::Slot()
.FillWidth(1.0f)
+ SHorizontalBox::Slot()
.AutoWidth()
.HAlign(HAlign_Right)
.VAlign(VAlign_Top)
[
RightContent.ToSharedRef()
]
]
];
}