App 结构

Fltk crate的app模块中有一个App结构体。初始化App结构体,将会初始化所有内部样式、字体和支持的图像类型。它还会初始化程序将要在其中运行的多线程环境。

use fltk::*;

fn main() {
    let app = app::App::default();
    app.run().unwrap();
}

run方法将会启动gui程序的事件循环(event loop)。 如果要对事件进行细粒度控制,可以使用wait()方法:

use fltk::*;

fn main() {
    let app = app::App::default();
    while app.wait() {
        // 处理事件
    }
}

此外,可以在App的实例上使用with_scheme()来设置程序的全局主题:

use fltk::*;

fn main() {
    let app = app::App::default().with_scheme(app::Scheme::Gtk);
    app.run().unwrap();
}

这将你的程序的主题设置为GTK。还有其他的内置主题方案,Basic、Plastic和Gleam(有一个fltk-theme crate提供了更多主题,你也可以自定义主题让它看起来更好看(^ο^))。

还可以在App的实例上调用load_system_fonts()方法,让程序在启动时加载系统字体。

一个典型的fltk-rs程序将在创建任何组件并显示窗口之前创建App结构体。

任何写在调用run()方法后的代码,将在事件循环结束后执行(通常是关闭程序的所有窗口时,或者调用quit()方法时)。这包括必要时重启程序的指令等。

除了App结构体外,app模块本身还包含与你的程序的全局状态有关的结构体和自由函数。其中包括设置背景色和前景色,以及默认字体和大小等视觉效果,还有屏幕功能、剪贴板功能、全局事件处理器、程序事件、通道(发送器和接收器)和超时等。

其中一些将在本书的其他部分讨论。

原文名词对照:
自由函数 - free functions
屏幕,剪切板功能 - screen functions, clipboard functions
全局事件处理器 - global handler
程序事件 - app events
通道,发送器和接收器 - channels, sender and receiver