3个不稳定版本
0.2.1 | 2019年10月21日 |
---|---|
0.2.0 | 2019年10月21日 |
0.1.0 | 2019年9月16日 |
#27 in #framebuffer
33KB
630 行
linfb 是一个使用 Linux 的 /dev/fb0
设备作为后端的绘图库。对于大多数任务,你可能想使用 OpenGL 或 Vulkan 支持的库。`/dev/fb0` 已被弃用,但仍然适用于某些特定情况。此库支持使用每像素 32 位颜色的 frame buffer,因此理论上适用于大多数现代系统。
在 frame buffer 上绘制之前,你应该分配一个虚拟终端并将其切换到该终端。我建议使用 vt 库来完成此任务。你绝不应该在 X.org/Wayland 服务器使用的虚拟终端上绘制,这是不安全的,可能导致崩溃。
默认情况下,linfb 包含文本和图像绘制功能,这会引入额外的依赖项。如果你只需要低级别的 frame buffer 交互和 Shape
特性,你可以禁用这些功能。
基本用法可能如下所示
use linfb::Framebuffer;
use linfb::shape::{Color, Shape, Rectangle, Caption, Image, FontBuilder, Alignment};
let mut framebuffer = Framebuffer::open()
.expect("Failed to open framebuffer");
let mut compositor = framebuffer.compositor((255, 255, 255).into());
compositor
.add("rect1", Rectangle::builder()
.width(100)
.height(100)
.fill_color(Color::hex("#ff000099").unwrap())
.build()
.unwrap()
.at(100, 100))
.add("rect2", Rectangle::builder()
.width(100)
.height(100)
.fill_color(Color::hex("#00ff0099").unwrap())
.build()
.unwrap()
.at(150, 150))
.add("image", Image::from_path("image.png")
.unwrap()
.at(500, 500))
.add("wrapped_text", Caption::builder()
.text("Some centered text\nwith newlines".into())
.size(56)
.color(Color::hex("#4066b877").unwrap())
.font(FontBuilder::default()
.family("monospace")
.build()
.unwrap()
)
.alignment(Alignment::Center)
.max_width(650)
.build()
.unwrap()
.at(1000, 300));
// Compositor is shape, so we can just draw it at the top left angle
framebuffer.draw(0, 0, &compositor);
// Really changing screen contents
framebuffer.flush();
依赖项
~4–6.5MB
~134K SLoC