1个不稳定版本
0.1.0 | 2024年5月5日 |
---|
#1245在 嵌入式开发
240KB
700 行
嵌入式-mogeefont
MogeeFont最初由Nadya Kuzmina为需要适配64×64像素屏幕的像素游戏创建。您可以在此处了解MogeeFont的历史。此crate将字体引入嵌入式系统,应与嵌入式图形和嵌入式文本一起使用。
使用方法
use embedded_text::{style::TextBoxStyle, TextBox};
use embedded_mogeefont::MogeeTextStyle;
use embedded_graphics::{
geometry::{Size, Point},
mock_display::MockDisplay,
pixelcolor::BinaryColor,
primitives::Rectangle,
Drawable,
};
let mut display = MockDisplay::new();
let character_style = MogeeTextStyle::new(BinaryColor::On);
let textbox_style = TextBoxStyle::default();
let textbox_bounds = Rectangle::new(Point::zero(), Size::new(42, 22));
let textbox = TextBox::with_textbox_style(
"Hello, world!",
textbox_bounds,
character_style,
textbox_style,
);
textbox.draw(&mut display).unwrap();
assert_eq!(
display,
MockDisplay::from_pattern(&[
" ",
"# # # # # # #",
"# # # # # # #",
"# # ## # # ## # # # ## ## # ## #",
"#### # # # # # # # # # # # # # # # # #",
"# # ### # # # # # # # # # # # # # # #",
"# # # # # # # # # # # # # # # # ",
"# # ## # # ## # ## # ## # # ## #",
" # ",
" # ",
]),
);
开发
此代码包含来自原始MogeeFont仓库的文件,使用git子模块。请确保运行git submodule init
和git submodule update
以引入子模块内容。
开始修改代码的最简单方法是安装nix,启用nix flakes,然后运行
nix develop
使用嵌入式图形Web模拟器预览字体,运行
cargo run --target wasm32-unknown-unknown -p specimen
如果您希望它在更改时重新编译,可以使用cargo-watch
cargo watch -x 'run --target wasm32-unknown-unknown -p specimen'
从源代码中重新生成ASCII字符集的字体文件
cargo run -p generate-font -- --charset ascii
此命令加载用于字形的光栅,并从原始源代码(使用tree-sitter-elm解析Elm模块)中提取字距调整表。然后组装精灵图集并生成Rust代码。
字体设计
源图像可以在mogeefont/font
目录中找到。所有字形都根据它们表示的Unicode代码点命名。连字使用多个代码点通过下划线分隔。
nix shell自带rx像素编辑器,可以用来编辑字形图像。它仅支持8位RGBA PNG,因此您可能需要在使用mogrify
编辑之前将图像转换为该格式。
mogrify -depth 8 -define png:color-type=6 mogeefont/font/*.png
依赖关系
~3MB
~35K SLoC