尺寸计算(widget/sizer)
基本信息
| 属性 | 值 |
|---|---|
| 包路径 | com.cleanroommc.modularui.widget.sizer |
| 文件数 | 12 |
| 抽象根 | ResizeNode(sizer/ResizeNode.java:13,abstract,implements IResizeable, ITreeNode<ResizeNode>) |
| 尺寸单位 | Unit(sizer/Unit.java:10) |
ModularUI2 的布局数学完全由这一包承担:Flow / Grid 只是决定谁在第几格,
真正算出每个控件的 x/y/width/height 的是 sizer/ 里的 Resizer 树。
功能
类层次
ResizeNode (sizer/ResizeNode.java:13) abstract, implements IResizeable, ITreeNode<ResizeNode>
├── WidgetResizeNode (sizer/WidgetResizeNode.java:8) abstract
│ └── StandardResizer (sizer/StandardResizer.java:23) implements IPositioned<StandardResizer>
│ ├── DelegatingResizer (sizer/DelegatingResizer.java:5)
│ └── ExpanderResizer (sizer/ExpanderResizer.java:7) implements IExpander
└── StaticResizer (sizer/StaticResizer.java:5) abstract
├── AreaResizer (sizer/AreaResizer.java:3)
└── ScreenResizeNode (sizer/ScreenResizeNode.java:5)
DimensionSizer (sizer/DimensionSizer.java:19) 独立,不继承 ResizeNode
Box (sizer/Box.java:16) 独立,implements IAnimatable<Box>
Unit (sizer/Unit.java:10) 独立
AreaResizer(sizer/AreaResizer.java:3)与ScreenResizeNode继承的是StaticResizer,而DelegatingResizer/ExpanderResizer继承的是StandardResizer——两条分支不能靠目录顺序推断。
几何类型
| 类 | 文件:行 | 继承 | 说明 |
|---|---|---|---|
Area |
sizer/Area.java:19 |
Rectangle(drawable/Rectangle.java)implements IAnimatable<Area> |
可动画的矩形区域;ScrollArea 与它同源 |
Box |
sizer/Box.java:16 |
implements IAnimatable<Box> |
四边盒模型(上下左右内边距) |
Unit |
sizer/Unit.java:10 |
— | 单个布局标量,布局系统的原子单位 |
Unit:布局的原子单位
每个 Unit 描述「某个轴上的一个量」(位置或尺寸),字段见 sizer/Unit.java:30-37:
| 字段 | 行 | 类型 | 说明 |
|---|---|---|---|
autoAnchor |
:30 |
boolean |
自动锚定(默认 true) |
value |
:31 |
float |
数值 |
valueSupplier |
:32 |
DoubleSupplier |
动态取值(可为空) |
measure |
:33 |
Measure |
单位制,默认 PIXEL |
anchor |
:34 |
float |
锚点 |
offset |
:35 |
int |
偏移 |
state |
:37 |
State |
该量是「起点 / 终点 / 尺寸」,默认 UNUSED |
Unit.State(sizer/Unit.java:12)有 4 个常量,
每个同时携带 X 与 Y 两个方向的文本名(:18 的 xText, yText):
| 常量 | 行 | xText |
yText |
|---|---|---|---|
UNUSED |
:13 |
"" |
"" |
START |
:14 |
LEFT |
TOP |
END |
:15 |
RIGHT |
BOTTOM |
SIZE |
:16 |
WIDTH |
HEIGHT |
Unit.Measure(sizer/Unit.java:125)只有 2 个常量:PIXEL、RELATIVE
(:126,即像素与百分比)。
数值
| 数值名 | 值 | 来源 |
|---|---|---|
Unit 默认单位制 |
Measure.PIXEL |
sizer/Unit.java:33 |
Unit 默认锚定 |
autoAnchor = true |
sizer/Unit.java:30 |
Unit 默认状态 |
State.UNUSED |
sizer/Unit.java:37 |
| 可用单位制 | PIXEL / RELATIVE |
sizer/Unit.java:126 |
交互
尺寸计算无直接输入事件;重排由以下链路触发:
IPositioned.requiresResize()/scheduleResize()(api/widget/IPositioned.java:27/:29)ResizeNode implements IResizeable, ITreeNode(sizer/ResizeNode.java:13)——resizer 自成树, 尺寸沿树向下传播StandardResizer同时implements IPositioned<StandardResizer>(sizer/StandardResizer.java:23), 因此它既参与布局又能被定位