富文本渲染(drawable/text 包)
基本信息
| 属性 | 值 |
|---|---|
| 包路径 | com.cleanroommc.modularui.drawable.text |
| 文件数 | 18 |
| 入口 | TextRenderer(基类)、RichText(复合文本) |
| 接口 | ITextLine(api/drawable/ITextLine.java)、IKey(api/drawable/IKey.java) |
| 调试颜色 | debugTextColor(#FFAAAAAA)、debugOutlineColor(#DCB42873) |
ModularUI2 有自己的文本渲染实现(drawable/text/ 的 18 个类),
但并非完全不用原版字体:绘制入口 drawable/GuiDraw.java 同时 import 了
net.minecraft.client.gui.FontRenderer(:17)并在 :360 取
Minecraft.getMinecraft().fontRenderer;
另有 core/mixins/early/minecraft/FontRendererAccessor.java:9
(@Mixin(FontRenderer.class))为原版字体生成访问器,
GuiScreenMixin.java:58/:68 用它接管原版 drawHoveringText 的 tooltip 渲染。
功能
文本键(IKey 家族,5 个实现)
文本的「键」把「要显示什么」抽象出来,同一份内容可被替换或延迟求值:
| 类 | 文件 | 说明 |
|---|---|---|
LangKey |
drawable/text/LangKey.java |
取自语言文件的文本(modularui2.* / modularui.*) |
StringKey |
drawable/text/StringKey.java |
字面字符串 |
DynamicKey |
drawable/text/DynamicKey.java |
动态求值的文本 |
BaseKey |
drawable/text/BaseKey.java |
上述的抽象基类 |
KeyIcon |
drawable/text/KeyIcon.java |
把文本键渲染成图标 |
TextIcon |
drawable/text/TextIcon.java |
文本图标 |
文本结构
| 类 | 文件 | 说明 |
|---|---|---|
TextLine |
drawable/text/TextLine.java |
一行文本(实现 ITextLine) |
ComposedLine |
drawable/text/ComposedLine.java |
由多段拼接成的行 |
CompoundKey |
drawable/text/CompoundKey.java |
复合键(多段拼接) |
Spacer |
drawable/text/Spacer.java |
空白间隔 |
富文本与渲染
| 类 | 文件 | 说明 |
|---|---|---|
RichText |
drawable/text/RichText.java |
富文本容器 |
RichTextCompiler |
drawable/text/RichTextCompiler.java |
把带格式的源码编译成 TextLine |
StyledText |
drawable/text/StyledText.java |
带样式的文本 |
FormattingState |
drawable/text/FormattingState.java |
格式状态机 |
TextRenderer |
drawable/text/TextRenderer.java |
渲染器基类(TextFieldRenderer 继承它) |
FontRenderHelper |
drawable/text/FontRenderHelper.java |
字体渲染辅助 |
TextDrawParams |
drawable/text/TextDrawParams.java |
绘制参数 |
AnimatedText |
drawable/text/AnimatedText.java |
带动画的文本 |
格式语法
格式语法可在仓库自带示例中看到
(src/main/resources/assets/modularui2/guis/test.json:18):
§{#3058B8}Blue §nUnderlined§rBlue §{#469E8F}Mint Hello
| 记号 | 含义 |
|---|---|
§{...} |
自定义颜色(#RRGGBB 形式) |
§n |
下划线 |
§r |
重置格式 |
同仓库的 assets/modularui/lang/en_us.lang 大量使用原版颜色码
(§b、§7、§6、§e、§a、§9、§c),两套语法共存。
消费者
| 消费者 | 文件 | 用途 |
|---|---|---|
RichTooltip |
screen/RichTooltip.java:35 |
提示气泡内容(implements IRichTextBuilder<RichTooltip>) |
RichTextWidget |
widgets/RichTextWidget.java |
可交互的富文本控件 |
TextFieldRenderer |
widgets/textfield/TextFieldRenderer.java |
文本框渲染(extends TextRenderer) |
数值
| 数值名 | 值 | 来源 |
|---|---|---|
| 文本相关类数 | 18 | drawable/text/ |
| 调试文字色 | #FFAAAAAA |
ModularUIConfig.java:42 |
| 调试轮廓色 | #DCB42873 |
ModularUIConfig.java:46 |
| 兜底部件文字尺寸 | 18 | api/IThemeApi.java:35(darkTextNoShadow(18, 18, null)) |
交互
| 触发 | 行为 |
|---|---|
| 界面渲染 | TextRenderer 逐 TextLine 绘制 |
配置了 guiDebugMode |
叠加控件轮廓与调试文字(用上述两种调试色) |
| 悬停控件 | RichTooltip 用同一套系统渲染提示内容 |