查看原文
其他

通过 Gio 构建 Go GUI 程序

ug 幽鬼 2022-09-08

争做团队核心程序员,关注「幽鬼

GUI 不是 Go 语言擅长的领域,但社区一直在努力,让 Go 进入 GUI 领域,于是有了 fyne、gio 等这样的 GUI 框架。

今天起,给大家带来一系列 Gio 教程,尝试从零开始构建一个 Gio GUI 程序。

本系列基于 Go1.17,而 Gio 没有发布具体的版本

01 Gio 是什么

Gio 在 Go 中实现了可移植的即时模式 GUI 程序。Gio 程序可在所有主要平台上运行:iOS/tvOS、Android、Linux (Wayland/X11)、macOS、Windows、FreeBSD、OpenBSD 和对浏览器的实验性支持 (Webassembly/WebGL)。有一个用于在虚拟机中运行 Gio 程序的 unikernel 端口[1]

Gio 包括一个基于 Pathfinder 项目[2]的高效矢量渲染器,以及一个基于 piet-gpu 项目[3]的实验渲染器。两种渲染器都支持 Vulkan、Metal、Direct3D 11 和 OpenGL ES。对于低端设备,有一个在未扩展的 OpenGL ES 2.0 上运行的 CPU 回调。

文本和其他形状仅使用其轮廓进行渲染,而无需将它们烘焙成纹理图像,以支持高效动画、转换绘图和显示分辨率独立性。

Gio 的代码在 https://git.sr.ht/~eliasnaur/gio,在 GitHub 上有镜像:https://github.com/gioui/gio。

02 运行官方的示例

Gio 设计时让依赖尽可能少。它仅依赖用于窗口管理、输入和 GPU 绘图的平台库。

官方提供了一个 Hello 程序,执行如下命令:

$ go run gioui.org/example/hello@latest

成功会打开一个窗口:

另外一个更复杂的例子,material design 的 widgets:

$ go run gioui.org/example/kitchen@latest

结果:

这些示例教程可以在 https://github.com/gioui/gio-example 找到。

03 系列教程

虽然命令行很棒,但 95% 的用户不是高级用户。他们想要按下按钮,切换开关,然后继续他们的生活。Gio 是一个很棒的工具包,用于构建满足你需求的精美、闪电般快速、灵活的用户界面。

该系列由 10 个教程组成,我们将完全从零开始,并构建一个自包含的 GUI 应用程序:

本系列教程基于 https://jonegil.github.io/gui-with-gio/,但不是简单的翻译。欢迎对 gio 感兴趣的一起交流。

参考资料

[1]

unikernel 端口: https://eliasnaur.com/unik

[2]

Pathfinder 项目: https://github.com/servo/pathfinder

[3]

piet-gpu 项目: https://github.com/linebender/piet-gpu




往期推荐


欢迎关注「幽鬼」,像她一样做团队的核心。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存