富文本渲染(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 用同一套系统渲染提示内容

相关条目