使用旧的Rust 2015
0.1.22 |
|
---|---|
0.1.21 |
|
0.1.11 |
|
0.1.2 |
|
#89 在 #title
每月下载 36 次
用于 rust-cgui-render
52KB
946 行
CGui
"通用GUI"
是什么?
一个GUI实验/库,可以在不进行大量工具链工作的前提下构建独立的本地可执行文件。
目前,从Linux机器上可以构建一个独立的linux64二进制文件:
cargo build --release
要构建win64,首先使用以下命令安装cross cargo实用工具: cross
cargo实用工具: cargo install cross
.
Cross需要Docker才能运行。
然后添加 ~/.cargo/bin
到你的 $PATH
,并构建一个win64二进制文件
cross build --release --target x86_64-pc-windows-gnu
构建的演示应用程序和库的副本可以在 https://git-community.cs.odu.edu/jmcateer/rust-cgui/wikis/Built-Releases 找到
这目前是一个实验,但将逐步转向一个具有合理界面的可重用库。
我预计该库将停留在“窗口”封装级别。不计划支持跨平台模态对话框。相反,您将创建CWin结构体(“对象”),这些结构体将具有非常少的元数据和事件
CWin {
title: String, // Not guaranteed to be rendered, as in tiling WMs
desired_width_px: u16, // Also not guaranteed
desired_height_px: u16, // Guess what? Not guaranteed
pixels: Vec<Vec<u32>>, // Your code will push changes here through some setters I need to think up.
// It is very important to the simplicity of the library
// that we only go from cli -> pixel buffer.
// anything further would force obnoxious paradigms on end developers.
// KISS.
event_callbacks: Vec<fn(*mut CWin)>,
// Thought needs to go here as well, but I expect you will get
// a reference to the window, an enum with the event type ("MOUSE_MOVE", "KEY_PRESS"),
// and a generic argument which will need to be match{}-ed out. (mouse delta coords, key characters/codes)
}
还有一个计划添加某种菜单栏结构,用于像OSX这样的系统,这些系统将其渲染为窗口画布之外的东西。
我还不计划区分“像素”和“点”。它们是像素,我将处理屏幕能给出的最小整数像素。内容“优雅”缩放不在本项目的范围内。
为什么?
GUI库很糟糕。它们有相当大的开销,需要大量的工具进行交叉编译,并迫使开发者使用可能不适合其用例的范式。
这个库将是一个“半GUI”工具包。它旨在提供跨平台的打开窗口、绘制像素和执行简单事件回调的能力。
小部件、缩放、任何“模型视图控制器”的胡说八道完全不在本项目的范围内。
当然,没有理由在这个基础上实现小部件,但我计划保持整个工作的简单和可组合性。
状态
在 https://git-community.cs.odu.edu/jmcateer/rust-cgui/wikis/Built-Releases 下载和使用库
计划
支持OSX。
未计划
支持Wayland。这很诱人,但我还没有看到任何可以称为“稳定”的实现。
移动设备(无法直接访问原生终端的任何设备)。
我预期会收到99%的“Web支持”问题。我们不处理cookie、头部、压缩或认证...
它是一个像素缓冲区。
我会忘记的事情
发布到crates.io
cargo package && cargo publish
ls -lh target/package/rust-cgui-*.crate
单行测试
alias go='set-cpu game && cross build --release --target x86_64-pc-windows-gnu && ssh blog rm /ftp/public/cgui-bin.exe ; scp ./target/x86_64-pc-windows-gnu/release/cgui-bin.exe blog:/ftp/public'
go
依赖项
~17MB
~166K SLoC