This repository has been archived on 2026-05-24. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
AgrarianGameArchive/Source/AgrarianGame/AgrarianDemoNoticeWidget.cpp
T
2026-05-14 02:28:38 -07:00

75 lines
3.0 KiB
C++

// Copyright Pacificao. All Rights Reserved.
#include "AgrarianDemoNoticeWidget.h"
#include "Rendering/DrawElements.h"
#include "Styling/CoreStyle.h"
int32 UAgrarianDemoNoticeWidget::NativePaint(
const FPaintArgs& Args,
const FGeometry& AllottedGeometry,
const FSlateRect& MyCullingRect,
FSlateWindowElementList& OutDrawElements,
int32 LayerId,
const FWidgetStyle& InWidgetStyle,
bool bParentEnabled) const
{
LayerId = Super::NativePaint(Args, AllottedGeometry, MyCullingRect, OutDrawElements, LayerId, InWidgetStyle, bParentEnabled);
const FVector2D Size = AllottedGeometry.GetLocalSize();
const float PanelWidth = FMath::Min(860.0f, Size.X - 96.0f);
const float PanelHeight = 210.0f;
const FVector2D PanelPosition((Size.X - PanelWidth) * 0.5f, 42.0f);
FSlateDrawElement::MakeBox(
OutDrawElements,
++LayerId,
AllottedGeometry.ToPaintGeometry(FVector2f(PanelWidth, PanelHeight), FSlateLayoutTransform(FVector2f(PanelPosition))),
FCoreStyle::Get().GetBrush(TEXT("WhiteBrush")),
ESlateDrawEffect::None,
FLinearColor(0.02f, 0.03f, 0.025f, 0.82f));
FSlateDrawElement::MakeBox(
OutDrawElements,
++LayerId,
AllottedGeometry.ToPaintGeometry(FVector2f(PanelWidth, 3.0f), FSlateLayoutTransform(FVector2f(PanelPosition))),
FCoreStyle::Get().GetBrush(TEXT("WhiteBrush")),
ESlateDrawEffect::None,
FLinearColor(0.45f, 0.72f, 0.40f, 1.0f));
const FSlateFontInfo MottoFont = FCoreStyle::GetDefaultFontStyle("Bold", 30);
const FSlateFontInfo VersionFont = FCoreStyle::GetDefaultFontStyle("Regular", 18);
const FSlateFontInfo NoticeFont = FCoreStyle::GetDefaultFontStyle("Regular", 16);
DrawCenteredText(OutDrawElements, LayerId, AllottedGeometry, Motto, PanelPosition.Y + 34.0f, MottoFont, FLinearColor(0.86f, 0.94f, 0.78f, 1.0f));
DrawCenteredText(OutDrawElements, LayerId, AllottedGeometry, VersionLabel, PanelPosition.Y + 94.0f, VersionFont, FLinearColor(0.82f, 0.86f, 0.78f, 1.0f));
DrawCenteredText(OutDrawElements, LayerId, AllottedGeometry, DemoNotice, PanelPosition.Y + 126.0f, NoticeFont, FLinearColor(0.78f, 0.82f, 0.75f, 1.0f));
DrawCenteredText(OutDrawElements, LayerId, AllottedGeometry, CopyrightNotice, PanelPosition.Y + 158.0f, NoticeFont, FLinearColor(0.66f, 0.70f, 0.64f, 1.0f));
return LayerId;
}
void UAgrarianDemoNoticeWidget::DrawCenteredText(
FSlateWindowElementList& OutDrawElements,
int32& LayerId,
const FGeometry& AllottedGeometry,
const FText& Text,
float Y,
const FSlateFontInfo& Font,
const FLinearColor& Color) const
{
const FVector2D Size = AllottedGeometry.GetLocalSize();
const FString TextString = Text.ToString();
const float EstimatedWidth = FMath::Min(Size.X - 96.0f, static_cast<float>(TextString.Len()) * Font.Size * 0.52f);
const FVector2D TextPosition((Size.X - EstimatedWidth) * 0.5f, Y);
FSlateDrawElement::MakeText(
OutDrawElements,
++LayerId,
AllottedGeometry.ToPaintGeometry(FVector2f(EstimatedWidth, Font.Size + 12.0f), FSlateLayoutTransform(FVector2f(TextPosition))),
Text,
Font,
ESlateDrawEffect::None,
Color);
}