可绘制对象(drawable 包)
基本信息
| 属性 |
值 |
| 包路径 |
com.cleanroommc.modularui.drawable |
| 文件数 |
28(另有 drawable/text/ 18、drawable/graph/ 8) |
| 接口 |
api/drawable/IDrawable.java:23 |
| 贴图 |
GuiTextures(drawable/GuiTextures.java) |
| 资源目录 |
assets/modularui2/textures/gui/(background 5、icons 8、slot 5、tab 4、widgets 9 张 PNG) |
功能
接口层(api/drawable/,7 个)
| 接口 |
文件 |
作用 |
IDrawable |
api/drawable/IDrawable.java:23 |
可绘制顶层契约;内含 DrawableWidget extends Widget<DrawableWidget>(:179) |
IHoverable |
api/drawable/IHoverable.java |
悬停变色 |
IIcon |
api/drawable/IIcon.java |
图标 |
IInterpolation |
api/drawable/IInterpolation.java |
插值 |
IKey |
api/drawable/IKey.java |
文本键 |
IRichTextBuilder |
api/drawable/IRichTextBuilder.java |
富文本构建 |
ITextLine |
api/drawable/ITextLine.java |
文本行 |
IDrawable.DrawableWidget(:179)是既可绘制又是控件的混合体——
它是「只想显示一个 drawable 而不写自定义控件」时的推荐写法
(Widget 的类注释 widget/Widget.java:39-40 明确说它比直接用 Widget 更合适)。
几何与基础图形
| 类 |
文件 |
说明 |
Rectangle |
drawable/Rectangle.java:23 |
implements IDrawable, IJsonSerializable, IAnimatable<Rectangle>;Area(widget/sizer/Area.java:19)的父类 |
Circle |
drawable/Circle.java |
圆形 |
DelegateDrawable |
drawable/DelegateDrawable.java |
代理另一个 drawable |
DynamicDrawable |
drawable/DynamicDrawable.java |
动态内容 |
贴图
| 类 |
文件 |
说明 |
GuiTextures |
drawable/GuiTextures.java |
内置贴图常量(MC_BACKGROUND、MC_BUTTON、SLOT_ITEM 等,见 部件主题) |
UITexture |
drawable/UITexture.java |
单张 UI 贴图 |
TiledUITexture |
drawable/TiledUITexture.java |
九宫格拉伸 |
AdaptableUITexture |
drawable/AdaptableUITexture.java |
自适应尺寸 |
FallbackableUITexture |
drawable/FallbackableUITexture.java |
带回退的贴图(主题重载时 reload(),见 ThemeManager.java:53) |
TabTexture |
drawable/TabTexture.java |
页签贴图 |
Icon |
drawable/Icon.java |
图标 |
IconRenderer |
drawable/IconRenderer.java |
图标渲染 |
InteractableIcon |
drawable/InteractableIcon.java |
可点击图标(onMouseScroll,:77) |
HoverableIcon |
drawable/HoverableIcon.java |
悬停变色图标 |
DelegateIcon |
drawable/DelegateIcon.java |
代理图标 |
物品与流体
| 类 |
文件 |
说明 |
ItemDrawable |
drawable/ItemDrawable.java |
物品渲染 |
FluidDrawable |
drawable/FluidDrawable.java |
流体渲染 |
IngredientDrawable |
drawable/IngredientDrawable.java |
配方原料(物品或流体统一表示) |
组合与布局
| 类 |
文件 |
说明 |
DrawableStack |
drawable/DrawableStack.java |
垂直堆叠 |
NamedDrawableRow |
drawable/NamedDrawableRow.java |
带标题的一行 |
FlowDrawable |
drawable/FlowDrawable.java |
流式排列 |
Scrollbar |
drawable/Scrollbar.java |
滚动条(VANILLA 常量被 scrollbar 部件主题引用) |
HueBar |
drawable/HueBar.java |
色相条(取色器用) |
Stencil |
drawable/Stencil.java |
模板缓冲——需要客户端开启 8 位模板(ClientProxy.java:84-87) |
图表绘制(drawable/graph/,8 个文件)
仓库内还带了一套完整的图表绘制实现:
| 类 |
说明 |
GraphDrawable |
图表主体 |
GraphView |
视图窗口 |
GraphAxis |
坐标轴 |
Plot |
数据绘制 |
MajorTickFinder / AutoMajorTickFinder |
主刻度(自动 vs 手动) |
MinorTickFinder / AutoMinorTickFinder |
次刻度(自动 vs 手动) |
绘制基础设施
| 类 |
文件 |
说明 |
GuiDraw |
drawable/GuiDraw.java |
绘制入口;唯一 import Hodgepodge 的地方(:31,IPatchedTextureAtlasSprite) |
BufferBuilder |
drawable/BufferBuilder.java |
顶点缓冲构建 |
ColorType |
drawable/ColorType.java |
颜色类型 |
GlStateManager |
drawable/GlStateManager.java |
GL 状态 |
DrawableSerialization |
drawable/DrawableSerialization.java |
drawable 序列化,由 ClientProxy.java:80 的 init() 初始化 |
模板缓冲依赖
ClientProxy.java:83-87 显式开启模板缓冲:
// enable stencil buffer
if (MinecraftForgeClient.getStencilBits() == 0) {
// is this correct way in 1.7.10?
ForgeHooksClientMixin.setStencilBits(8);
}
源码注释 // is this correct way in 1.7.10?(:85)表明作者本人也不确定这是否是 1.7.10 的正确做法。
相关条目
- 富文本渲染 -
drawable/text/ 包的 18 个类
- 部件主题 -
GuiTextures 常量在各部件主题中的使用
- Mixin 与底层补丁 -
ForgeHooksClientMixin.setStencilBits