orbtk的api在2019.2进行了修改,该文章为2018版
新版请转[新版orbtk gui基础]
orbtk是基于SDL2,完全使用rust写的GUI库,并且在0.3版,也就是现在的版本进行了重写。所以目前支持的控件并不多,主要有:
- 基础控件
- TextBlock:显示文本,不可编辑,不可交互
- TextBox:文本框
- Button
- ToggleButton
- Switch:开关按钮
- check_box
- FontIconBlock:显示一个FontIcon
- ImageWidget:显示图片
- WaterMarkTextBlock:如果文本为空则显示一个WaterMark占位符
- 复杂控件
- ScrollViewer:为局部控件提供横向或竖向的滚动条
- CanvasWidget:从OrbGl property自定义绘制画布
- 布局控件
- Center
- Row:行控件
- Column:列控件
- Spacer:在Row或Column内创建空区域
- Container:容器,只能有一个子控件,可以使用PaddingLayout定位子控件
- Stack:子控件在z方向上层叠
还有一个Cursor控件,不太明白什么用途。目前WaterMarkTextBlock实现好像有bug,显示有问题,暂时不推荐用。
事实上orbtk所有的这些控件最终都是自定义了一个Template。控件本身都是Struct。比如Button和Row的定义:
pub struct Button;
pub struct Row;
然后每个控件都实现了Widget Trait,Widget Trait其实也只有一个create方法,create方法创建了一个Template。
impl Widget for Button {
fn create() -> Template {
...
}
所有控件都通过Template的with_property()函数设置属性。比如我们上节所用的
let text_block=TextBlock::create()
.with_property(Label::from("Hello, World!"));
text_block最终实际上是生成一个带有Label属性的Template,跟TextBlock类型关系并不大,TextBlock类型的作用主要是在create方法中为Template设置了默认属性值。
所以,自定义orbit控件应该不难。