From aed7d01b580104d39d38a13589e28ac74c62accb Mon Sep 17 00:00:00 2001
From: fence <fence@desu-mail.moe>
Date: Thu, 9 Jan 2025 03:29:36 +0100
Subject: feat: a better way to font

---
 assets/uwu-alphabet.txt |   1 +
 assets/uwu.fnt          |  22 ++++++++++++++++++++++
 assets/uwu.png          | Bin 0 -> 1120 bytes
 src/font.rs             |  39 ++++++++++++++++++++++++++++++++++++---
 src/main.rs             |   7 ++++++-
 5 files changed, 65 insertions(+), 4 deletions(-)
 create mode 100644 assets/uwu-alphabet.txt
 create mode 100644 assets/uwu.fnt
 create mode 100644 assets/uwu.png

diff --git a/assets/uwu-alphabet.txt b/assets/uwu-alphabet.txt
new file mode 100644
index 0000000..cee1ae4
--- /dev/null
+++ b/assets/uwu-alphabet.txt
@@ -0,0 +1 @@
+Uwspaceybr
\ No newline at end of file
diff --git a/assets/uwu.fnt b/assets/uwu.fnt
new file mode 100644
index 0000000..b96d577
--- /dev/null
+++ b/assets/uwu.fnt
@@ -0,0 +1,22 @@
+info face="Cherry Bomb One" size=20 bold=0 italic=0 charset="ANSI" unicode=0 stretchH=100 smooth=0 aa=1 padding=0,0,0,0 spacing=1,1 outline=0
+common lineHeight=20 base=16 scaleW=256 scaleH=32 pages=1 packed=0 alphaChnl=0 redChnl=4 greenChnl=4 blueChnl=4
+page id=0 file="uwu_0.png"
+chars count=10
+char id=85   x=0     y=0     width=10    height=20    xoffset=0     yoffset=0     xadvance=11    page=0  chnl=15
+char id=97   x=39    y=0     width=7     height=20    xoffset=0     yoffset=0     xadvance=7     page=0  chnl=15
+char id=98   x=21    y=0     width=8     height=20    xoffset=0     yoffset=0     xadvance=8     page=0  chnl=15
+char id=99   x=47    y=0     width=7     height=20    xoffset=0     yoffset=0     xadvance=7     page=0  chnl=15
+char id=101  x=55    y=0     width=7     height=20    xoffset=0     yoffset=0     xadvance=7     page=0  chnl=15
+char id=112  x=30    y=0     width=8     height=20    xoffset=0     yoffset=0     xadvance=8     page=0  chnl=15
+char id=114  x=63    y=0     width=7     height=20    xoffset=0     yoffset=0     xadvance=7     page=0  chnl=15
+char id=115  x=79    y=0     width=6     height=20    xoffset=0     yoffset=0     xadvance=7     page=0  chnl=15
+char id=119  x=11    y=0     width=9     height=20    xoffset=0     yoffset=0     xadvance=10    page=0  chnl=15
+char id=121  x=71    y=0     width=7     height=20    xoffset=0     yoffset=0     xadvance=8     page=0  chnl=15
+kernings count=7
+kerning first=97  second=121 amount=-1  
+kerning first=114 second=112 amount=-1  
+kerning first=114 second=115 amount=-1  
+kerning first=114 second=119 amount=-1  
+kerning first=114 second=101 amount=-1  
+kerning first=114 second=97  amount=-1  
+kerning first=114 second=99  amount=-1  
diff --git a/assets/uwu.png b/assets/uwu.png
new file mode 100644
index 0000000..68b4fcb
Binary files /dev/null and b/assets/uwu.png differ
diff --git a/src/font.rs b/src/font.rs
index c88b9c3..c97ac8f 100644
--- a/src/font.rs
+++ b/src/font.rs
@@ -1,9 +1,36 @@
 pub const UWU_HEIGHT: u32 = 24;
 pub const UWU_WIDTH: u32 = 16;
-pub const UWU_SHEET_RAW: &[u8] = include_bytes!("../assets/uwu-logo-font-20px.png");
+
+use std::sync::LazyLock;
+
+pub struct Glyph {
+  x: i32,
+}
+fn insert_value(arr: &mut Vec<*const Glyph>, idx: usize, glyph: *const Glyph) {
+  if arr.len() <= idx {
+    while arr.len() <= idx {
+      arr.push(0 as *const Glyph);
+    }
+  }
+  arr[idx] = glyph;
+}
+
+pub struct Font<'a> {
+  pub texture: &'a [u8],
+  pub glyphs: Vec<*const Glyph>,
+}
+
+pub const MEOW_FONT: LazyLock<Font> = LazyLock::new(|| Font {
+  texture: include_bytes!("../assets/uwu-logo-font-20px.png"),
+  glyphs: {
+    let a: &mut Vec<*const Glyph> = &mut Vec::new();
+    insert_value(a, 32, &Glyph { x: 2 });
+    a.to_vec()
+  },
+});
 
 mod sprite_sheets {
-  use super::{UWU_HEIGHT, UWU_SHEET_RAW, UWU_WIDTH};
+  use super::{MEOW_FONT, UWU_HEIGHT, UWU_WIDTH};
   use sdl2::{
     image::LoadTexture,
     pixels::PixelFormatEnum,
@@ -61,7 +88,7 @@ mod sprite_sheets {
       let surface = Surface::new(112, 24, PixelFormatEnum::RGB24).unwrap();
       let mut canvas = Canvas::from_surface(surface).unwrap();
       let tc = canvas.texture_creator();
-      let tx = tc.load_texture_bytes(UWU_SHEET_RAW).unwrap();
+      let tx = tc.load_texture_bytes(MEOW_FONT.texture).unwrap();
       canvas.copy(&tx, None, None).unwrap();
       canvas.present();
       let sheet = canvas.into_surface();
@@ -89,7 +116,13 @@ mod sprite_sheets {
     pub fn w_surface(&self) -> Surface {
       return self.char_to_surface(uwu_w());
     }
+
+    pub fn p_surface(&self) -> Surface {
+      return self.char_to_surface(uwu_p());
+    }
   }
 }
 
+use std::str::Bytes;
+
 pub use sprite_sheets::UwUFont;
diff --git a/src/main.rs b/src/main.rs
index c0a58a5..c3f434a 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -27,6 +27,7 @@ pub fn main() {
   let uwu_font = font::UwUFont::new(&texture_creator);
   let u_char = uwu_font.u_surface().as_texture(&texture_creator).unwrap();
   let w_char = uwu_font.w_surface().as_texture(&texture_creator).unwrap();
+  let p_char = uwu_font.p_surface().as_texture(&texture_creator).unwrap();
 
   canvas
     .copy(&u_char, None, UwUFont::pos_to_rect(0, 0))
@@ -37,9 +38,13 @@ pub fn main() {
   canvas
     .copy(&u_char, None, UwUFont::pos_to_rect(UWU_WIDTH as i32 * 2, 0))
     .unwrap();
+  canvas
+    .copy(&p_char, None, UwUFont::pos_to_rect(UWU_WIDTH as i32 * 2, 0))
+    .unwrap();
+
   //canvas.clear();
   let tc = canvas.texture_creator();
-  let sheet = tc.load_texture_bytes(font::UWU_SHEET_RAW).unwrap();
+  let sheet = tc.load_texture_bytes(font::MEOW_FONT.texture).unwrap();
   /*
   canvas.copy(
     &sheet,
-- 
cgit v1.2.3