使用旧的Rust 2015

0.1.22 2019年2月15日
0.1.21 2019年2月13日
0.1.11 2018年10月5日
0.1.2 2018年9月29日

#89#title

每月下载 36 次
用于 rust-cgui-render

LGPL-2.0-only

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