KLingo Project Documentation 1.0.0
Unreal Engine 5.6 C++ Project Documentation
로딩중...
검색중...
일치하는것 없음
URichText 클래스 참조

#include <URichText.h>

+ URichText에 대한 상속 다이어그램 :
+ URichText에 대한 협력 다이어그램:

Public 멤버 함수

void SetOnClickHyperLink (const FOnClickHyperLink &InClick)
 
void SetText (const FString &InString)
 
void SetText (const FText &InText)
 
void SetText (const FWordData &WordData)
 

Public 속성

bool bAutoFitToWidth = true
 
FString DefaultText
 
int32 FontSize = 32
 
int32 MinAutoFontSize = 12
 
TObjectPtr< class URichTextBlock > RichTxt
 
FLinearColor TextColor = FLinearColor::White
 

Protected 멤버 함수

virtual void NativeConstruct () override
 
virtual void NativePreConstruct () override
 
virtual void NativeTick (const FGeometry &MyGeometry, float InDeltaTime) override
 

Private 멤버 함수

void ApplyStyleWithFontSize (int32 InFontSize, bool bPreserveText)
 
void OnClickLink (const FString &LinkID, const FString &Content)
 
void UpdateFontSizeToFitWidth (const FGeometry &MyGeometry)
 

Private 속성

bool bNeedsFontSizeUpdate = false
 폰트 크기 조정이 필요한지 여부
 
TArray< FPhonemeDataCachedPhonemeData
 
int32 CurrentFontSize = 0
 
float LastWidgetWidth = 0.0f
 이전 위젯 너비 (변경 감지용)
 
FOnClickHyperLink OnClickHyperLink
 
int32 StabilizationFrames = 0
 안정화를 위한 프레임 카운터
 

상세한 설명

URichText.h 파일의 17 번째 라인에서 정의되었습니다.

멤버 함수 문서화

◆ ApplyStyleWithFontSize()

void URichText::ApplyStyleWithFontSize ( int32  InFontSize,
bool  bPreserveText 
)
private

URichText.cpp 파일의 67 번째 라인에서 정의되었습니다.

68{
69 if (!RichTxt)
70 return;
71
72 const FText PreviousText = RichTxt->GetText();
73
74 // 기존 폰트 정보 가져오기 (없으면 기본)
75 FSlateFontInfo NewFont = RichTxt->GetDefaultTextStyle().Font;
76 NewFont.Size = InFontSize;
77
78 // 새로운 스타일 생성
79 FTextBlockStyle NewStyle;
80 NewStyle.SetFont(NewFont);
81 NewStyle.SetColorAndOpacity(FSlateColor(TextColor));
82
83 RichTxt->SetDefaultTextStyle(NewStyle);
84
85 if (!bPreserveText && !DefaultText.IsEmpty() && PreviousText.IsEmpty())
86 {
87 RichTxt->SetText(FText::FromString(DefaultText));
88 }
89 else if (bPreserveText)
90 {
91 RichTxt->SetText(PreviousText);
92 }
93
94 // HyperLink Decorator 스타일도 함께 업데이트
95 if (UHyperLinkPluginBPLibrary* LinkDecorator = Cast<UHyperLinkPluginBPLibrary>(
96 RichTxt->GetDecoratorByClass(UHyperLinkPluginBPLibrary::StaticClass())))
97 {
98 FTextBlockStyle LinkTextStyle = LinkDecorator->Style.TextStyle;
99 LinkTextStyle.SetFont(NewFont);
100 LinkTextStyle.SetColorAndOpacity(FSlateColor(TextColor));
101 LinkDecorator->Style.SetTextStyle(LinkTextStyle);
102 }
103
104 CurrentFontSize = InFontSize;
105}
int32 CurrentFontSize
Definition URichText.h:66
FLinearColor TextColor
Definition URichText.h:55
FString DefaultText
Definition URichText.h:58
TObjectPtr< class URichTextBlock > RichTxt
Definition URichText.h:42

다음을 참조함 : CurrentFontSize, DefaultText, RichTxt, TextColor.

다음에 의해서 참조됨 : NativePreConstruct(), UpdateFontSizeToFitWidth().

+ 이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ NativeConstruct()

void URichText::NativeConstruct ( )
overrideprotectedvirtual

URichText.cpp 파일의 26 번째 라인에서 정의되었습니다.

27{
28 Super::NativeConstruct();
29
30 if (RichTxt)
31 {
32 if (UHyperLinkPluginBPLibrary* LinkDecorator = Cast<UHyperLinkPluginBPLibrary>(
33 RichTxt->GetDecoratorByClass(UHyperLinkPluginBPLibrary::StaticClass())))
34 {
35 LinkDecorator->SetNativeClickHandler(FOnClickLink::CreateUObject(this, &URichText::OnClickLink));
36 }
37 }
38}
void OnClickLink(const FString &LinkID, const FString &Content)

다음을 참조함 : OnClickLink(), RichTxt.

+ 이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ NativePreConstruct()

void URichText::NativePreConstruct ( )
overrideprotectedvirtual

URichText.cpp 파일의 13 번째 라인에서 정의되었습니다.

14{
15 Super::NativePreConstruct();
16
17 if (RichTxt)
18 {
19 if (auto StyleSet = LoadObject<UDataTable>(nullptr, TEXT_STYLE_PATH ))
20 RichTxt->SetTextStyleSet(StyleSet);
21 }
22
24}
#define TEXT_STYLE_PATH
Definition URichText.cpp:11
int32 FontSize
Definition URichText.h:46
void ApplyStyleWithFontSize(int32 InFontSize, bool bPreserveText)
Definition URichText.cpp:67

다음을 참조함 : ApplyStyleWithFontSize(), FontSize, RichTxt, TEXT_STYLE_PATH.

+ 이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ NativeTick()

void URichText::NativeTick ( const FGeometry &  MyGeometry,
float  InDeltaTime 
)
overrideprotectedvirtual

URichText.cpp 파일의 40 번째 라인에서 정의되었습니다.

41{
42 Super::NativeTick(MyGeometry, InDeltaTime);
43
44 // 텍스트가 변경되었거나 위젯 크기가 변경된 경우에만 폰트 크기 조정
45 const float CurrentWidth = MyGeometry.GetLocalSize().X;
46 if (FMath::Abs(CurrentWidth - LastWidgetWidth) > 1.0f)
47 {
48 LastWidgetWidth = CurrentWidth;
51 }
52
53 // 폰트 크기 업데이트가 필요하고 아직 안정화되지 않은 경우에만 실행
55 {
56 UpdateFontSizeToFitWidth(MyGeometry);
58
59 // 3프레임 동안 안정화 시도 후 중단
60 if (StabilizationFrames >= 3)
61 {
63 }
64 }
65}
float LastWidgetWidth
이전 위젯 너비 (변경 감지용)
Definition URichText.h:75
bool bNeedsFontSizeUpdate
폰트 크기 조정이 필요한지 여부
Definition URichText.h:69
int32 StabilizationFrames
안정화를 위한 프레임 카운터
Definition URichText.h:72
void UpdateFontSizeToFitWidth(const FGeometry &MyGeometry)

다음을 참조함 : bNeedsFontSizeUpdate, LastWidgetWidth, StabilizationFrames, UpdateFontSizeToFitWidth().

+ 이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ OnClickLink()

void URichText::OnClickLink ( const FString &  LinkID,
const FString &  Content 
)
private

URichText.cpp 파일의 182 번째 라인에서 정의되었습니다.

183{
184 const int32 Index = FCString::Atoi(*LinkID);
185
186 if (CachedPhonemeData.IsValidIndex(Index))
187 {
188 if (OnClickHyperLink.IsBound())
189 OnClickHyperLink.Execute(CachedPhonemeData[Index]);
190 }
191}
FOnClickHyperLink OnClickHyperLink
Definition URichText.h:64
TArray< FPhonemeData > CachedPhonemeData
Definition URichText.h:62

다음을 참조함 : CachedPhonemeData, OnClickHyperLink.

다음에 의해서 참조됨 : NativeConstruct().

+ 이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ SetOnClickHyperLink()

void URichText::SetOnClickHyperLink ( const FOnClickHyperLink &  InClick)
inline

URichText.h 파일의 31 번째 라인에서 정의되었습니다.

31{ OnClickHyperLink = InClick; }

◆ SetText() [1/3]

void URichText::SetText ( const FString &  InString)

URichText.cpp 파일의 158 번째 라인에서 정의되었습니다.

159{
160 if (!IsValid(RichTxt))
161 return;
162
163 RichTxt->SetText(FText::FromString(InString));
164
165 // 텍스트가 변경되었으므로 폰트 크기 재조정 필요
168}

다음을 참조함 : bNeedsFontSizeUpdate, RichTxt, StabilizationFrames.

◆ SetText() [2/3]

void URichText::SetText ( const FText &  InText)

URichText.cpp 파일의 170 번째 라인에서 정의되었습니다.

171{
172 if (!IsValid(RichTxt))
173 return;
174
175 RichTxt->SetText(InText);
176
177 // 텍스트가 변경되었으므로 폰트 크기 재조정 필요
180}

다음을 참조함 : bNeedsFontSizeUpdate, RichTxt, StabilizationFrames.

◆ SetText() [3/3]

void URichText::SetText ( const FWordData WordData)

URichText.cpp 파일의 138 번째 라인에서 정의되었습니다.

139{
140 if (!IsValid(RichTxt))
141 return;
142
144
145 FString TextString;
146 for (int32 i = 0; i < CachedPhonemeData.Num(); ++i)
147 {
148 const FPhonemeData& Phoneme = CachedPhonemeData[i];
149 TextString += Phoneme.ToRichTextString(i);
150 }
151 RichTxt->SetText(FText::FromString(TextString));
152
153 // 텍스트가 변경되었으므로 폰트 크기 재조정 필요
156}
단어 데이터 구조체입니다.
FString ToRichTextString(int32 Index) const
TArray< FPhonemeData > GetPhonemeData() const

다음을 참조함 : bNeedsFontSizeUpdate, CachedPhonemeData, FWordData::GetPhonemeData(), RichTxt, StabilizationFrames, FPhonemeData::ToRichTextString().

+ 이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ UpdateFontSizeToFitWidth()

void URichText::UpdateFontSizeToFitWidth ( const FGeometry &  MyGeometry)
private

URichText.cpp 파일의 107 번째 라인에서 정의되었습니다.

108{
109 if (!bAutoFitToWidth || !RichTxt)
110 return;
111
112 const float AvailableWidth = MyGeometry.GetLocalSize().X;
113 if (AvailableWidth <= 0.0f)
114 return;
115
116 const FVector2D DesiredSize = RichTxt->GetDesiredSize();
117 const float DesiredWidth = DesiredSize.X;
118
119 int32 TargetFontSize = FontSize;
120
121 // Threshold 적용: 여유 공간을 2픽셀 정도 남겨서 미세한 변동 방지
122 const float WidthThreshold = 2.0f;
123 if (DesiredWidth > AvailableWidth + WidthThreshold && DesiredWidth > 0.0f)
124 {
125 // 약간 여유를 둔 스케일 계산 (98%만 사용)
126 const float Scale = (AvailableWidth * 0.98f) / DesiredWidth;
127 const int32 ScaledSize = FMath::FloorToInt(static_cast<float>(FontSize) * Scale);
128 TargetFontSize = FMath::Clamp(ScaledSize, MinAutoFontSize, FontSize);
129 }
130
131 // 폰트 크기 차이가 1 이상일 때만 적용 (미세한 차이 무시)
132 if (FMath::Abs(TargetFontSize - CurrentFontSize) >= 1)
133 {
134 ApplyStyleWithFontSize(TargetFontSize, true);
135 }
136}
bool bAutoFitToWidth
Definition URichText.h:49
int32 MinAutoFontSize
Definition URichText.h:52

다음을 참조함 : ApplyStyleWithFontSize(), bAutoFitToWidth, CurrentFontSize, FontSize, MinAutoFontSize, RichTxt.

다음에 의해서 참조됨 : NativeTick().

+ 이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
+ 이 함수를 호출하는 함수들에 대한 그래프입니다.:

멤버 데이터 문서화

◆ bAutoFitToWidth

bool URichText::bAutoFitToWidth = true

URichText.h 파일의 49 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : UpdateFontSizeToFitWidth().

◆ bNeedsFontSizeUpdate

bool URichText::bNeedsFontSizeUpdate = false
private

폰트 크기 조정이 필요한지 여부

URichText.h 파일의 69 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : NativeTick(), SetText(), SetText(), SetText().

◆ CachedPhonemeData

TArray<FPhonemeData> URichText::CachedPhonemeData
private

URichText.h 파일의 62 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : OnClickLink(), SetText().

◆ CurrentFontSize

int32 URichText::CurrentFontSize = 0
private

URichText.h 파일의 66 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : ApplyStyleWithFontSize(), UpdateFontSizeToFitWidth().

◆ DefaultText

FString URichText::DefaultText

URichText.h 파일의 58 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : ApplyStyleWithFontSize().

◆ FontSize

int32 URichText::FontSize = 32

URichText.h 파일의 46 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : NativePreConstruct(), UpdateFontSizeToFitWidth().

◆ LastWidgetWidth

float URichText::LastWidgetWidth = 0.0f
private

이전 위젯 너비 (변경 감지용)

URichText.h 파일의 75 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : NativeTick().

◆ MinAutoFontSize

int32 URichText::MinAutoFontSize = 12

URichText.h 파일의 52 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : UpdateFontSizeToFitWidth().

◆ OnClickHyperLink

FOnClickHyperLink URichText::OnClickHyperLink
private

URichText.h 파일의 64 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : OnClickLink().

◆ RichTxt

TObjectPtr<class URichTextBlock> URichText::RichTxt

URichText.h 파일의 42 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : ApplyStyleWithFontSize(), NativeConstruct(), NativePreConstruct(), SetText(), SetText(), SetText(), UpdateFontSizeToFitWidth().

◆ StabilizationFrames

int32 URichText::StabilizationFrames = 0
private

안정화를 위한 프레임 카운터

URichText.h 파일의 72 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : NativeTick(), SetText(), SetText(), SetText().

◆ TextColor

FLinearColor URichText::TextColor = FLinearColor::White

URichText.h 파일의 55 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : ApplyStyleWithFontSize().


이 클래스에 대한 문서화 페이지는 다음의 파일들로부터 생성되었습니다.: