SEditableTextBox 생성시 FEditableTextBoxStyle 내부의 FTextBlockStyle 가 적용되지 않음
이 포스팅은 엔진 버전 5.3을 기준으로 작성되었습니다.
증상
SEditableTextBox
사용시FEditableTextBoxStyle
에서FTextBlockStyle
을 설정하고,- Slate 생성에서 아래처럼 스타일을 적용하면,
FEditableTextBoxStyle
의FTextBlockStyle
은 적용되지 않습니다.
원인
SEditableTextBox::Construct()
에 원인이 있습니다.
SEditableTextBox
는Construct()
내부에서TSharedPtr< SEditableText > EditableText
를 생성할 때, 스타일을 전달하지 않습니다. GitHub 링크- 대신,
Construct()
의 좀 더 이른 타이밍에, 별도의 함수인SEditableTextBox::SetStyle()
호출을 통해 스타일을 설정합니다. GitHub 링크 SEditableTextBox::SetStyle()
는 마지막 부분에서SEditableTextBox::SetTextBlockStyle()
를 호출하고, 이 함수는 내부에서FTextBlockStyle
를 설정하기 위해SEditableText::SetTextBlockStyle()
를 호출합니다. GitHub 링크- 여기서,
SEditableTextBox::SetTextBlockStyle()
가SEditableText::SetTextBlockStyle()
를 호출하기 전에,TSharedPtr< SEditableText > EditableText
의 유효성을 체크하는 부분이 있습니다. 만일 유효하지 않으면SEditableText::SetTextBlockStyle()
를 실행하지 않습니다. 그리고 이 타이밍은TSharedPtr< SEditableText > EditableText
의 생성 전이기 때문에,FTextBlockStyle
의 설정은 건너 뛰게 됩니다. GitHub 링크 - 그리고 이에 대한 별도의 후속 조치 없이,
SEditableTextBox::Construct()
는 종료됩니다. - 결과적으로,
SEditableText
의 생성과정에서FTextBlockStyle
의 적용은 언제나 건너뛰어집니다.
우회 방법
생성 후에는 유효성체크에 성공할 것이므로, 생성 후에 SEditableTextBox::SetStyle()
나 SEditableTextBox::SetTextBlockStyle()
를 호출해주면 FTextBlockStyle
를 SEditableTextBox
에 적용할 수 있습니다.
이런 모양이 됩니다:
풀 리퀘스트를 보내볼까 생각도 했습니다만, 최근에 여러 차례 풀 리퀘스트에서 마음이 아픈 경험을 해서 주저하고 있습니다. 이게 그다지 치명적인 게 아니라는 점도 주저하게 만드네요.
하지만 저에겐 치명적이었어요.
"언리얼 엔진"
에서