Skip to content

Commit

Permalink
sync: sync with source repo
Browse files Browse the repository at this point in the history
  • Loading branch information
Flatigers committed May 7, 2024
1 parent ba69f23 commit fa23302
Show file tree
Hide file tree
Showing 5 changed files with 101 additions and 13 deletions.
78 changes: 73 additions & 5 deletions src/Accessibility.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,75 @@

FLTK提供了一些开箱即用的无障碍功能:
- 在ui元素之间和内部的键盘导航。
- 键盘快捷键。
- 键盘可替代的鼠标操作。
- IME 支持。
- 为组件和自定义组件设置按键事件。

FLTK 会自动启用此功能。
根据组件的创建顺序,以及其是否获得焦点,您可以使用箭头键或Tab和Shift-Tab移动到下一个/上一个组件。
同样,相同的操作也适用于菜单项。

## 键盘快捷键。

Button widgets and Menu widgets provide a method which allows setting the keyboard shortcut:
```rust
use fltk::{prelude::*, *};

let mut menu = menu::MenuBar::default().with_size(800, 35);
menu.add(
"&File/New...\t",
Shortcut::Ctrl | 'n',
menu::MenuFlag::Normal,
|_m| {},
);

let mut btn = button::Button::new(100, 100, 80, 30, "Click me");
btn.set_shortcut(enums::Shortcut::Ctrl | 'b');
```

## 键盘可替代的鼠标操作。

FLTK 会自动启用此功能。
根据项目是否有默认的 `CallbackTrigger::EnterKey` 触发器,或使用 `set_trigger` 设置了触发器,在按下回车键是会触发回调。
例如,按钮如果有焦点,就会自动响应回车键。以下代码为组件设置了触发器:
```rust
use fltk::{prelude::*, *};

let mut inp = input::Input::new(10, 10, 160, 30, None);
inp.set_trigger(enums::CallbackTrigger::EnterKey);
inp.set_callback(|i| println!("You clicked enter, and the input's current text is: {}", i.value()));
```

## IME 支持。

对于中文、日文和韩文等需要输入法编辑器(Input Method Editor, IME)的语言,IME会自动启用。在这种情况下,FLTK 使用操作系统提供的 IME。

## 为组件和自定义组件设置按键事件。

使用 `WidgetExt::handle` 方法,你可以自定义组件如何处理事件,包括按键事件。

```rust
use fltk::{prelude::*, *};

let mut win = window::Window::default().with_size(400, 300);
win.handle(|w, ev| {
enums::Event::KeyUp => {
let key = app::event_key();
match key {
enums::Key::End => app::quit(), // 以quit为例
_ => {
if let Some(k) = key.to_char() {
match k {
'q' => app::quit(),
_ => (),
}
}
},
}
true
},
_ => false,
});
```

## 屏幕阅读器的支持

屏幕阅读器的支持集成在另一个 crate 中:
- [fltk-accesskit](https://github.com/fltk-rs/fltk-accesskit)
Expand Down Expand Up @@ -55,6 +120,9 @@ fn btn_callback(_btn: &mut button::Button) {
out.set_value(&format!("Hello {}", name));
}
```

`Accessible Trait` 是为一些特定的组件实现的。
这个例子中,你需要实例化一个`fltk_accesskit::AccessibilityContext`,它需要你将根组件(主窗口),以及会被屏幕阅读器识别的组件作为参数。
最后你需要使用特殊的 `run_with_accessibility` 来运行 App结构。
最后你需要使用特殊的 `run_with_accessibility` 来运行 App结构。

可以在这里观看示例视频示例 [YouTube](https://www.youtube.com/watch?v=x53Rxjg8IF8).
24 changes: 22 additions & 2 deletions src/Cross-Compiling.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@


## 使用预编译包

如果你要为以下平台编译fltk程序的话,很幸运,它们已经有预编译包了:
- x86_64-pc-windows-gnu
- x86_64-pc-windows-msvc
Expand Down Expand Up @@ -35,6 +36,7 @@ cargo build --target=aarch64-unknown-linux-gnu --features=fltk-bundled


## 使用cross

如果你安装了docker,可以试试用 [cross](https://github.com/cross-rs/cross)
```
cargo install cross
Expand Down Expand Up @@ -196,6 +198,7 @@ cargo build --target=arch64-apple-darwin
## 使用docker
直接使用目标平台的docker镜像可以让你免去使用cross交叉编译到不同linux target的麻烦。
你需要一个Dockerfile,来拉取你需要的target,并安装Rust和C++工具链以及所需的依赖。
例如,为allpine linux构建:
Expand Down Expand Up @@ -269,7 +272,7 @@ CFLTK_TOOLCHAIN=$(pwd)/toolchain.cmake cargo build --target=<your target>
CMake 文件的内容通常是,设置 CMAKE_SYSTEM_NAME 以及交叉编译器。 在 Linux/BSD 上还需要设置 PKG_CONFIG_EXECUTABLE 和 PKG_CONFIG_PATH。一个示例:
```cmake
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm64)
set(CMAKE_SYSTEM_PROCESSOR aarch64)
set(triplet aarch64-linux-gnu)
set(CMAKE_C_COMPILER /usr/bin/${triplet}-gcc)
Expand All @@ -283,9 +286,25 @@ set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
```
注意 CMAKE_SYSTEM_PROCESSOR 通常是目标平台上 uname -m 的值,其他可能的值参见[Possible Values](https://stackoverflow.com/questions/70475665/what-are-the-possible-values-of-cmake-system-processor/70498851#70498851)。 我们将此示例中的`triplet`变量设置为 aarch64-linux-gnu,这是用于 gcc/g++ 编译器以及 pkg-config 的前缀。 这个`triplet`也等同于 Rust `triplet` aarch64-unknown-linux-gnu。 PKG_CONFIG_PATH 设置为包含我们target的 `.pc` 文件的目录,这些是 Linux/BSD 上的 cairo 和 pango 依赖项所必需的。 最后 4 个选项可以防止CMake混淆host/taregt(当前机器和交叉编译的目标机器)的include/library的路径。

注意 CMAKE_SYSTEM_PROCESSOR 通常是目标平台上 `uname -m` 的值,其他可能的值参见[Possible Values](https://stackoverflow.com/questions/70475665/what-are-the-possible-values-of-cmake-system-processor/70498851#70498851)。 我们将此示例中的`triplet`变量设置为 aarch64-linux-gnu,这是用于 gcc/g++ 编译器以及 pkg-config 的前缀。 这个`triplet`也等同于 Rust `triplet` aarch64-unknown-linux-gnu。 PKG_CONFIG_PATH 设置为包含我们target的 `.pc` 文件的目录,这些是 Linux/BSD 上的 cairo 和 pango 依赖项所必需的。 最后 4 个选项可以防止CMake混淆host/taregt(当前机器和交叉编译的目标机器)的 include/library 路径。

一个以Windows为target 的示例(使用 mingw 工具链):

```cmake
set(CMAKE_SYSTEM_NAME Windows)
set(CMAKE_SYSTEM_PROCESSOR AMD64)
set(triplet x86_64-w64-mingw32)
set(CMAKE_C_COMPILER /usr/bin/${triplet}-gcc)
set(CMAKE_CXX_COMPILER /usr/bin/${triplet}-g++)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
```

## 使用 cargo-xwin

如果要以 Windows 和 MSVC编译器/ABI 为 target,你可以安装 [cargo-xwin](https://github.com/rust-cross/cargo-xwin)
```
cargo install cargo-xwin
Expand All @@ -296,6 +315,7 @@ cargo xwin build --release --target x86_64-pc-windows-msvc
```

## 使用 fltk-config feature

fltk 提供了一个叫做 `fltk-config` 的脚本,它有点像 `pkg-config`。它会跟踪已安装的 FLTK 库路径以及必要的 `cflags``ldflags`。由于 fltk-rs 需要 FLTK 1.4 版本,而在撰写本文时,大多数发行版还没有提供`libfltk1.4`,因此你必须从源码中为你所需目标手动构建。不过,一旦发行版开始提供 FLTK 1.4,使用起来就会变得非常简单(针对 arm64 gnu linux):

```
Expand Down
2 changes: 1 addition & 1 deletion src/Dialogs.md
Original file line number Diff line number Diff line change
Expand Up @@ -215,7 +215,7 @@ fn main() {
});
```

这些函数都有相对的变体,一个有`_default()`后缀,不需要设置坐标,另一个没有后缀,需要手动输入坐标
前面提到的这些函数有是两个变体变体的,其中一个是有 `_default()` 后缀,它不需要设置坐标,另一个没有后缀的则需要手动输入坐标
有些对话框会返回一个值,比如`choice``input``password``input``password`返回用户输入的文本,而`choice`则返回选择值的索引:

```rust
Expand Down
4 changes: 2 additions & 2 deletions src/Home.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
翻译最近更新于:2023/6/28
翻译最近更新于:2024/05/07

翻译已基本完成,受限于译者水平,内容有错误和不足,欢迎大家提交Issue 和 PullRequest 一起改进!

Expand Down Expand Up @@ -37,7 +37,7 @@ int main() {
use fltk::{prelude::*, window};

fn main() {
let mut mut wind = window::Window::new(100, 100, 400, 300, "My Window");
let mut wind = window::Window::new(100, 100, 400, 300, "My Window");
wind.end();
wind.show();
}
Expand Down
6 changes: 3 additions & 3 deletions src/Layouts.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,11 @@ use fltk::{prelude::*, *};
fn main() {
let a = app::App::default().with_scheme(app::Scheme::Gtk);
let mut win = window::Window::default().with_size(400, 300);
let mut flex = Flex::new(0, 0, 400, 300, None);
let mut flex = group::Flex::new(0, 0, 400, 300, None);
flex.set_type(group::FlexType::Column);
let expanding = button::Button::default().with_label("Expanding");
let mut normal = button::Button::default().with_label("Normal");
flex.fixed(&mut normal, 30);
let normal = button::Button::default().with_label("Normal");
flex.fixed(&normal, 30);
flex.end();
win.end();
win.show();
Expand Down

0 comments on commit fa23302

Please sign in to comment.