#嵌入式图形 #字体 #图形 #无标准库 #文本

无std embedded-mogeefont

嵌入式-graphics的像素字体

1个不稳定版本

0.1.0 2024年5月5日

#1245嵌入式开发

MIT 许可证

240KB
700

嵌入式-mogeefont

Unlike many other pixel fonts, MogeeFont maximizes screen space efficiency by incorporating glyphs of variable width alongside kerning tables and ligatures.

MogeeFont最初由Nadya Kuzmina为需要适配64×64像素屏幕的像素游戏创建。您可以在此处了解MogeeFont的历史。此crate将字体引入嵌入式系统,应与嵌入式图形嵌入式文本一起使用。

Embedded

使用方法

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 initgit 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