STextBlock::SetTextStyle() 는 동작하지 않음
문제
언리얼 엔진 5.4 에서,
STextBlock
위젯 생성 후 STextBlock::SetTextStyle()
를 호출하면 동작하지 않습니다.
반면, STextBlock
의 SimpleTextMode
를 true 로 설정할 경우, STextBlock::SetTextStyle()
가 동작합니다.
엔진 소스 코드에서 아래의 위치에 중단점을 걸어놓았을 때, 새로운 위젯이 생성될 때 외엔 중단점이 트리거되는 경우가 없었습니다. 생성된 STextBlock
에 대하여 SetTextStyle()
를 호출하면 저기를 지나야 할 것 같아 보이는데, 그렇지 못한 것과. SimpleTextMode
를 true 로 설정했을 때는 제대로 동작하는 것을 보아, 나는 이 부분은 작업이 덜 되어 있거나 버그인 것으로 추측합니다.
FTextBlockStyle
의 FSlateBrush UnderlineBrush
를 런타임에 변경할 일이 있어서 STextBlock::SetTextStyle()
를 사용하려고 했으나, 동작하지 않아 엔진소스의 디버깅을 시작했습니다. SimpleTextMode
를 true 로 설정하면 UnderlineBrush
를 사용할 수 없기 때문에 꽤 당혹스러웠습니다.
재현 프로젝트
간단한 재현 프로젝트를 만들었습니다. GitHub 링크
해당 프로젝트로 에디터를 실행한 뒤, 가장 왼쪽의 두 셀에 대해 마우스 커서를 호버 상태로 두었다가 호버 상태에서 벗어나는 것을 반복하여 OnMouseEnter 와 OnMouseLeave 상태에 들어가게 하면, 다음과 같이 반응합니다.
- 좌측 상단의 NotSimple 이라고 쓰여진 셀
- OnMouseEnter: 텍스트가 MouseEnter 라고 바뀌고, 스타일은 바뀌지 않음.
- OnMouseLeave: 텍스트가 MouseLeave 라고 바뀌고, 스타일은 바뀌지 않음.
- 좌측 하단의 Simple 이라고 쓰여진 셀
- OnMouseEnter: 텍스트가 MouseEnter 라고 바뀌고, 스타일은 “[C] Example Simple Dotted Underline Blue” 의 스타일로 바뀜
- OnMouseLeave: 텍스트가 MouseLeave 라고 바뀌고, 스타일은 “[D] Example Simple NotDotted Underline Red” 의 스타일로 바뀜
기대되는 동작은 아래와 같습니다.
- 좌측 상단의 NotSimple 이라고 쓰여진 셀
- OnMouseEnter: 텍스트가 MouseEnter 라고 바뀌고, 스타일은 “[A] Example NotSimple Dotted Underline Blue” 의 스타일로 바뀜
- OnMouseLeave: 텍스트가 MouseLeave 라고 바뀌고, 스타일은 “[B] Example NotSimple NotDotted Underline Blue” 의 스타일로 바뀜
- 좌측 하단의 Simple 이라고 쓰여진 셀
- 현재 상태와 동일
나 자신에게 남기는 경고
이 부분에 대하여 다시 디버깅을 하려고 하거나 풀 리퀘스트를 만들려고 하지 마십시오.
여기서부터는 에픽에서 진행하는 것이 효율이 좋을 것이라고 생각합니다.
지난 사례를 생각하면, 풀 리퀘스트를 만들어도 채택되지 않을 가능성이 훨씬 높다고 생각합니다.
컨디션이 안 좋아서 그랬을지도 모르겠지만, 디버깅할 때 감정적 피로가 무척 심했습니다.
기타
포럼에도 올렸습니다. https://forums.unrealengine.com/t/stextblock-settextstyle-does-not-work/1845139