标题栏

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()
							]
					]
			];
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值