代码路径
Runtime\UMG\Public\Components\RichTextBlockDecorator.h
该文件有两个类
URichTextBlockDecorator
UCLASS(Abstract, Blueprintable)
class UMG_API URichTextBlockDecorator : public UObject
{
GENERATED_BODY()
public:
URichTextBlockDecorator(const FObjectInitializer& ObjectInitializer);
virtual TSharedPtr<ITextDecorator> CreateDecorator(URichTextBlock* InOwner);
};
-
蓝图文件继承于此类,可用于配置RichTextBlock组件的DecoratorClasses字段。
-
CreateDecorator函数用于构造FRichTextDecorator类对象
ITextDecorator接口
class SLATE_API ITextDecorator
{
public:
virtual ~ITextDecorator() {}
virtual bool Supports( const FTextRunParseResults& RunInfo, const FString& Text ) const = 0;
virtual TSharedRef< ISlateRun > Create(const TSharedRef<class FTextLayout>& TextLayout, const FTextRunParseResults& RunInfo, const FString& OriginalText, const TSharedRef< FString >& ModelText, const ISlateStyle* Style ) = 0;
};
Support
用于判断是否支持此修饰器
Create
进行修饰器Widget或修饰器文本生成修改处理
-
const FTextRunParseResults& RunParseResult
举个例子:例如<Red10>111</>
那么RunParseResult.Name = Red10
OriginalRange = 0,13
ContentRange = 7,10
MetaData保存Red10这个父标签下的子标签及其对应的内容Index的对应关系。
<Red10 size="12" url="www.baidu.com">xxxxxxxx </>
size 和url为子标签
返回值用于决定是否继续走到Create函数。
-
const FString& Text
RichTextBlock原文本值。
FRichTextDecorator
class UMG_API FRichTextDecorator : public ITextDecorator
{
public:
FRichTextDecorator(URichTextBlock* InOwner);
virtual ~FRichTextDecorator() {}
/** Override this function to specify which types of tags are handled by this decorator */
virtual bool Supports(const FTextRunParseResults& RunParseResult, const FString& Text) const override
{
return false;
}
virtual TSharedRef<ISlateRun> Create(const TSharedRef<class FTextLayout>& TextLayout, const FTextRunParseResults& RunParseResult, const FString& OriginalText, const TSharedRef< FString >& InOutModelText, const ISlateStyle* Style) override final;
protected:
/** Override this function if you want to create a unique widget like an image */
virtual TSharedPtr<SWidget> CreateDecoratorWidget(const FTextRunInfo& RunInfo, const FTextBlockStyle& DefaultTextStyle) const;
/** Override this function if you want to dynamically generate text, optionally changing the style. InOutString will start as the content between tags */
virtual void CreateDecoratorText(const FTextRunInfo& RunInfo, FTextBlockStyle& InOutTextStyle, FString& InOutString) const;
URichTextBlock* Owner;
};
在ITextDecorator的基础上扩展了两个虚函数,CreateDecoratorWidget和CreateDecoratorText。