Repository navigation
architecture
E33EPUS edited this page Nov 3, 2026
·
1 revision
AtomLib 将平台无关合同、运行时、界面组件和 Minecraft 平台桥分开。宿主可以直接使用 Skija 与 Yoga,也可以选择库的控件和皮肤;不必让库接管业务页面。
| 层 | 内容 | 宿主关注点 |
|---|---|---|
core |
布局树、几何、输入记录、动画时钟 | 创建稳定的节点 ID,提供业务状态 |
runtime |
Skija 资源、字体、文本、图片 | 按所有权关闭资源,字体变化后重新布局 |
ui |
Yoga 引擎、展示帧、控件、皮肤 | 同一帧用于绘制与命中;会话维护输入状态 |
platforms |
Minecraft 目标、渲染桥与原版图标接线 | 渲染线程、当前 GL 上下文和版本适配 |
- 客户端创建运行时和字体服务,准备宿主模型、布局树或可选控件;宿主保存自己的业务数据。
- Yoga 计算布局,
PresentationFrame给出绘制、裁剪与命中共享的几何。Yoga 负责框的尺寸和位置;文本量测由TextService提供。 - 在渲染线程通过
MinecraftRenderBridge的回调借用画布;按桥的合同安排原版绘制与资源准备。 - 将指针、键盘、滚轮、失焦和屏幕关闭事件转发给相应适配器。已展示的帧用于输入,缩放变化时按会话合同取消旧手势。
- 关闭宿主持有的服务;不要关闭回调内借用的 Minecraft/Skija 对象。桥属于渲染上下文,关闭必须发生在其线程与上下文仍有效时。
AtomDefault.skin() 提供实例皮肤;不同宿主分别持有 ControlContext、皮肤和文本服务。旧 design.atomchat 的 Design.host 等是全局兼容入口,不能当作多宿主隔离 API。无图标按钮文本布局框居中,字形墨迹不保证视觉完全对称。自定义皮肤应让文本量测和绘制使用同一字号与字体。
渲染桥的详细状态边界见 渲染桥记录,控件合同见 controls,背景和原版图标各自有独立的资源生命周期。Yoga 适配器目前不暴露绝对定位或相对偏移;文本服务也不是完整富文本、双向排版或 IME 引擎。