可绘制对象(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 的正确做法。

相关条目