Files
UnrealEngine/Engine/Source/Runtime/Slate/Private/Framework/Text/TextEditHelper.cpp
2025-05-18 13:04:45 +08:00

35 lines
1.3 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "Framework/Text/TextEditHelper.h"
#include "Fonts/FontMeasure.h"
#include "Framework/Application/SlateApplication.h"
#define LOCTEXT_NAMESPACE "FTextEditHelper"
float FTextEditHelper::GetFontHeight(const FSlateFontInfo& FontInfo)
{
const TSharedRef< FSlateFontMeasure > FontMeasure = FSlateApplication::Get().GetRenderer()->GetFontMeasureService();
return FontMeasure->GetMaxCharacterHeight(FontInfo);
}
float FTextEditHelper::CalculateCaretWidth(const float FontMaxCharHeight)
{
// We adjust the width of the caret to avoid it becoming too wide on smaller or larger fonts and overlapping the characters it's next to.
// We clamp the lower limit to 1 to avoid it being invisible, and the upper limit to 2 to avoid tall fonts having very wide carets.
return FMath::Clamp(EditableTextDefs::CaretWidthPercent * FontMaxCharHeight, 1.0f, 2.0f);
}
bool FTextEditHelper::VerifyTextLength(const FText& InText, FText& OutErrorMessage, int32 InMaximumLength)
{
const int TextLength = InText.ToString().Len();
if (InMaximumLength > 0 && TextLength > InMaximumLength)
{
OutErrorMessage = FText::Format(LOCTEXT("TextTooLong", "This text is too long. It uses {0} characters of {1} allowed."), TextLength, InMaximumLength);
return false;
}
return true;
}
#undef LOCTEXT_NAMESPACE