4个版本
使用旧Rust 2015
0.2.1 | 2018年9月19日 |
---|---|
0.2.0 | 2018年8月18日 |
0.1.1 | 2018年8月13日 |
0.1.0 | 2018年8月8日 |
#41 in #padding
37KB
731 行
表格布局
一个无框架的纯Rust编写的表格布局系统。您提供所需的布局约束,并提供一个闭包以在给定的布局元素上实现布局。一旦需要放置所有内容,就使用布局对象的尺寸调用impose
。基于Esoteric Software的tablelayout包,也许有一天是MIGLayout,但完全基于公开规范构建,而不是以任何形式从源代码构建。
闭包会接收到布局项的x
、y
、width
和height
。这些与表格中的该项相关,不包括可能应用于表格本身的任何平移。这意味着如果表格不是放置在(0, 0)
,则需要偏移x
和y
。
当前引擎未使用任何unsafe
块。
布局
使用CellProperties::new
创建单元格,然后使用构建器模式填充它们。如果要在布局中使用单元格、行或列的默认值,请使用CellProperties::with_defaults
。
扩展
单元格可以垂直或水平扩展。扩展意味着如果所有单元格接收到它们的首选大小后还有剩余空间,则额外的空间会分配给具有扩展样式的行和列。
.expand_horizontal
、.expand_vertical
和.expand
设置这些策略。
填充
如果一列或一行比预期放大(由于同一列或行中其他单元格的扩展规则),这将在其他单元格内留下额外的可用空间。默认情况下,这部分空间会被浪费,布局元素将根据锚定规则放置在这片空白空间中。一个填充表示,如果以某种方式获得了额外空间,那么这部分空间将被占据。填充不是扩展,它不会导致额外空间被使用。只有意外变得可用的空间才会被填充。
.fill_horizontal
、.fill_vertical
和.fill
设置了这些策略。
注意,填充会尊重布局项的最大尺寸。如果一个元素达到其最大尺寸且存在填充空间,布局项将根据锚定规则进行定位(尽管是在其更大的尺寸上。)
锚点
当一个布局项因任何原因小于其可用空间时,锚点定义了它将在该空白空间内的位置。
.anchor_top
、.anchor_bottom
和.anchor_vertical_center
处理沿垂直域粘附布局项。
.anchor_left
、.anchor_right
和.anchor_horizontal_center
处理沿水平域粘附布局项。
冲突的锚点指定不是错误,但布局引擎可以自由忽略冲突请求。
填充
填充有意浪费了元素边缘的空间。
.padding
允许你提供一个自己的Rectangle
结构体,以一次指定所有边缘。
.padding_all
将所有填充边缘设置为相同的值。
.padding_top
设置顶部边缘的填充。
.padding_left
设置左侧边缘的填充。
.padding_right
设置右侧边缘的填充。
.padding_bottom
设置底部边缘的填充。
填充作为在单元格大小偏好周围添加额外空间来实现,但在最终布局阶段定位对象时并不使用这些空间。
牺牲填充
虽然尚未实现,但一些布局引擎将填充视为在尝试在小空间内适应UI时可以压缩的空间。
统一
所有设置为统一的单元格都将具有相同的大小。实际上,这项政策目前并未真正实现。
内部
你应该使用构建器模式来准备布局和单元格。直接篡改内部不被建议(并且在更稳定的版本中它们可能变得不可公开。)
用于居中放置的位标志可能被移除;可以争论说尝试同时锚定到左侧和右侧相当于居中锚定,这可以释放两个标志供其他地方使用。
性能
提供了一个基准测试(cargo bench
)来测试布局计算。在我的AMD FX™-6300 六核处理器
test test::impose2x3 ... bench: 8,468 ns/iter (+/- 790)
请注意,施加布局不依赖于多线程,并且只有在表格的宽度和高度被干扰时才需要执行。
变更日志
0.2
单元测试和单元格填充的实现。
0.1.1
一些小修复和PR。
0.1
初始版本。
参考
依赖项
~105KB