aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--build.rs4
-rw-r--r--patterns/font.hexpat34
-rw-r--r--src/main.rs10
3 files changed, 41 insertions, 7 deletions
diff --git a/build.rs b/build.rs
index d932c86..9292e1e 100644
--- a/build.rs
+++ b/build.rs
@@ -112,7 +112,7 @@ fn exec(font: FontMetadata) -> io::Result<()> {
fn save_bits_to_file(font: &FontMetadata, char: u8, bits: &[u8]) -> io::Result<()> {
fs::create_dir_all(format!("assets/computed-fonts/{}/", font.name))?;
- let filename = format!("assets/computed-fonts/{}/{}.bin", font.name, char);
+ let filename = format!("assets/computed-fonts/{}/{}.charbmp", font.name, char);
let mut file = File::create(&filename)?;
file.write_all(bits)?;
let filename = format!("assets/computed-fonts/{}/{}.txt", font.name, char);
@@ -158,7 +158,7 @@ impl BakedFont for {name}Struct {{
);
for char in font.unique_chars() {
contents = format!(
- "{contents} {} => include_bytes!(\"../../assets/computed-fonts/{}/{}.bin\"),
+ "{contents} {} => include_bytes!(\"../../assets/computed-fonts/{}/{}.charbmp\"),
",
char as u8, font.name, char as u8
);
diff --git a/patterns/font.hexpat b/patterns/font.hexpat
new file mode 100644
index 0000000..4a6a8c4
--- /dev/null
+++ b/patterns/font.hexpat
@@ -0,0 +1,34 @@
+#pragma author memdmp
+#pragma description Character Bitmap (.charbmp) file format, version 1
+
+#pragma endian little
+#pragma pattern_limit 4294967295
+
+import std.sys;
+import type.magic;
+
+struct PixelRow<auto width> {
+ u8 columns[width - 1] [[name("Row"), inline]];
+};
+struct ImageData<auto width> {
+ PixelRow<width> rows[while(!std::mem::eof())] [[name("Rows"), inline]];
+};
+struct Offset {
+ /** The X Offset of the character */
+ s32 x [[name("X"), comment("The X offset of the character's pixel data"), color("ff99ff")]];
+ /** The Y Offset of the character */
+ s32 y [[name("Y"), comment("The Y offset of the character's pixel data"), color("ffff99")]];
+};
+
+struct CharBmp {
+ /** The width of each line of the drawn character */
+ u8 width [[name("Width"), comment("Indicates the width of the character's drawn data, in pixels"), color("ff44aa")]];
+ /** The width of each line of the drawn character */
+ Offset offset [[name("Offset"), comment("Indicates the offset of the character's drawn data, in pixels"), color("cc99bb")]];
+ /** The horizontal offset that the origin of the next glyph should be from the origin of this glyph. */
+ float advance_width [[name("Offset"), comment("Indicates the offset of the character's drawn data, in pixels"), color("99aaff")]];
+ /** Table of contents entries */
+ ImageData<width> imageData[width] [[name("Content")]];
+};
+
+CharBmp charbmp @ 0x00 [[name("CharBmp")]];
diff --git a/src/main.rs b/src/main.rs
index 0f51f4e..3d9c225 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -30,8 +30,8 @@ pub fn main() {
let mut i = 0;
'running: loop {
i = (i + 1) % 255;
-
- canvas.set_draw_color(Color::RGB(255, 255, 255));
+
+ canvas.set_draw_color(Color::RGB(12, 12, 12));
canvas.clear();
let mut offset: f32 = 0.0;
@@ -43,13 +43,13 @@ pub fn main() {
.to_texture(&texture_creator, Color::RGB(i, 64, 255 - i))
.unwrap(),
None,
- char.to_rect(offset as i32, 0),
+ char.to_rect(offset as i32 + 16, 16),
)
.unwrap();
offset += char.advance_width;
}
offset = 0.0;
- for c in "All hail Blahaj".chars() {
+ for c in "Cum 2 Cosin25 :3".chars() {
let char = FONT_GALMURI.get_char(c);
canvas
.copy(
@@ -57,7 +57,7 @@ pub fn main() {
.to_texture(&texture_creator, Color::RGB(i, 64, 255 - i))
.unwrap(),
None,
- char.to_rect(offset as i32, 40),
+ char.to_rect(offset as i32 + 18, 16+36),
)
.unwrap();
offset += char.advance_width;