Crate linfb

Source
Expand description

linfb is a drawing library that uses Linux’ /dev/fb0 device as it’s backend. For most tasks you probably want to use OpenGL or Vulkan backed library. /dev/fb0 is deprecated but still useful for some specific cases. This library supports framebuffers that use 32 bits per pixel, so (theoretically) most modern systems.

Before drawing on framebuffer you should allocate a virtual terminal and switch to it. I recommend using vt crates for this task. You should never draw on virtual terminal used by X.org/Wayland server, this is unsafe and can lead to panics.

By default linfb includes text and images drawing capabilities, which brings additional dependencies. You can disable these features if you only need low-level framebuffer interactions and Shape trait.

Basic usage can look like this:

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();

Modules§

shape
Various drawing primitives
sys
Low-level utilities to deal with framebuffer file descriptor

Structs§

Compositor
Shape that can contain other shapes. Can deal with transparency and overlaps.
CompositorBuilder
Builder for Compositor.
Framebuffer
Basic object used to manipulate framebuffer. You should normally use Shape and Compositor to draw on it

Enums§

Error

Type Aliases§

Result