3个不稳定版本

0.2.1 2019年10月21日
0.2.0 2019年10月21日
0.1.0 2019年9月16日

#27 in #framebuffer

MIT 协议

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