纯 MoonBit 的 Flexbox 布局引擎:只对齐 Web Flexbox 标准(CSS Flexible Box Layout),为 native-gui 的 MoonBit 化提供布局层
// moon.mod: import "NoahLiu/yoga-mbt@0.1.0"
let root = @yoga.Node::new()
root.set_width(@yoga.percent(100.0))
root.set_height(@yoga.percent(100.0))
let child = @yoga.Node::new()
child.set_measure(fn(avail_w, _avail_h) {
// 返回内容尺寸(不含自身 padding/border,引擎负责叠加)
(120.0, 24.0)
})
root.append_child(child)
@yoga.calculate_layout(root, Some(800.0), Some(600.0))
let l = child.layout() // left / top 相对父边框盒;width / height 边框盒cd modules/yoga-mbt
moon check src --deny-warn # 零警告(在本模块目录内查,别裸跑 moon check:
# 本仓同时有主项目,裸跑会连带把主包编进来)
moon test src # 全绿(预期值按规范手算)
# 性能基线:1121 节点树(20 组 × 11 行 × 每行 5 节点,含 baseline/grow/gap),
# 三个场景各 500 轮并打印每轮 µs:
# steady 同参数重复布局(干净整树跳过)
# one_leaf 每轮改一个叶子的内容(只重排那条链)
# resize 每轮换根的显式宽(全树重排,等价于旧口径的成本基线)
moon run bench # debug
moon run --release bench # releaseInstall
Download zip纯 MoonBit 的 Flexbox 布局引擎:只对齐 Web Flexbox 标准(CSS Flexible Box Layout),为 native-gui 的 MoonBit 化提供布局层