#no-std #gui

no-std screen_layer

一个提供操作系统层结构的库

6个版本

0.3.1 2021年1月2日
0.3.0 2020年12月30日
0.2.0 2020年12月28日
0.1.2 2020年12月28日
0.1.0 2020年9月17日

操作系统类别中排名第596

每月下载量:33次

授权:MPL-2.0

14KB
177 代码行

screen_layer

此crate提供了屏幕层结构,这对于开发操作系统非常有用。

此crate使用alloc crate的功能,因此您必须extern alloc crate。这意味着您必须定义自己的堆分配器。

目前此crate仅支持BGR顺序的24位或32位颜色。

示例

use screen_layer::{self, Layer, Vec2, RGB8};

const SCREEN_WIDTH: u32 = 10;
const SCREEN_HEIGHT: u32 = 10;
const BPP: u32 = 32;

let mut pseudo_vram = [0u8; (SCREEN_WIDTH * SCREEN_HEIGHT * BPP / 8) as usize];
let ptr = pseudo_vram.as_ptr() as usize;
let mut controller =
    unsafe { screen_layer::Controller::new(Vec2::new(SCREEN_WIDTH, SCREEN_HEIGHT), BPP, ptr) };

const LAYER_WIDTH: u32 = 5;
const LAYER_HEIGHT: u32 = 5;
let layer = Layer::new(Vec2::new(0, 0), Vec2::new(LAYER_WIDTH, LAYER_HEIGHT));
let id = controller.add_layer(layer);

controller
    .edit_layer(id, |layer: &mut Layer| {
        for i in 0..LAYER_WIDTH {
            layer[i as usize][i as usize] = Some(RGB8::new(0, 255, 0));
        }
    })
    .unwrap();

for i in 0..LAYER_WIDTH {
    assert_eq!(pseudo_vram[(BPP / 8 * (i * SCREEN_WIDTH + i)) as usize], 0);
    assert_eq!(pseudo_vram[(BPP / 8 * (i * SCREEN_WIDTH + i) + 1) as usize], 255);
    assert_eq!(pseudo_vram[(BPP / 8 * (i * SCREEN_WIDTH + i) + 2) as usize], 0);
}

controller.set_pixel(id, Vec2::one(), Some(RGB8::new(255, 0, 0)));
assert_eq!(pseudo_vram[(BPP / 8 * (1 * SCREEN_WIDTH + 1)) as usize], 0);
assert_eq!(pseudo_vram[(BPP / 8 * (1 * SCREEN_WIDTH + 1) + 1) as usize], 0);
assert_eq!(pseudo_vram[(BPP / 8 * (1 * SCREEN_WIDTH + 1) + 2) as usize], 255);

授权:MPL-2.0

依赖项

~1.5MB
~23K SLoC