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控件应该不难。
OrbTk是一个基于SDL2、用Rust编写的GUI库。2019年更新后,支持多种基础控件如TextBlock、TextBox、Button等,及复杂控件如ScrollViewer、CanvasWidget。所有控件通过Template自定义,实现WidgetTrait,便于自定义扩展。
738

被折叠的 条评论
为什么被折叠?



