diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/font.rs | 131 |
1 files changed, 1 insertions, 130 deletions
diff --git a/src/font.rs b/src/font.rs index 056c691..0baa862 100644 --- a/src/font.rs +++ b/src/font.rs @@ -1,19 +1,6 @@ -pub const UWU_HEIGHT: u32 = 24; -pub const UWU_WIDTH: u32 = 16; - 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; -} +use sdl2::{pixels::{Color, PixelFormatEnum}, rect::Rect, render::{Texture, TextureCreator, TextureValueError}, surface::Surface, video::WindowContext}; pub struct RenderableCharacter { /** The width of the character, indicating where to break into a newline */ @@ -77,119 +64,3 @@ impl RenderableCharacter { Rect::new(x, y, self.width.into(), self.height.into()) } } -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/fonts/uwu-logo-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::{BakedFont, MEOW_FONT, UWU_HEIGHT, UWU_WIDTH}; - use sdl2::{ - // image::LoadTexture, - pixels::PixelFormatEnum, - rect::Rect, - render::{Canvas, TextureCreator}, - surface::Surface, - video::WindowContext, - }; - - pub struct UwUFont<'a> { - sheet: Surface<'a>, - } - - fn uwu_get_n(n: u32) -> Rect { - Rect::new((UWU_WIDTH * n) as i32, 0, UWU_WIDTH, UWU_HEIGHT) - } - - #[inline] - fn uwu_u() -> Rect { - return uwu_get_n(0); - } - - #[inline] - fn uwu_w() -> Rect { - return uwu_get_n(1); - } - - #[inline] - fn uwu_s() -> Rect { - return uwu_get_n(2); - } - - #[inline] - fn uwu_p() -> Rect { - return uwu_get_n(3); - } - - #[inline] - fn uwu_a() -> Rect { - return uwu_get_n(4); - } - - #[inline] - fn uwu_c() -> Rect { - return uwu_get_n(5); - } - - #[inline] - fn uwu_e() -> Rect { - return uwu_get_n(6); - } - - impl<'a> UwUFont<'a> { - pub fn new(texture_creator: &'a TextureCreator<WindowContext>) -> UwUFont<'a> { - 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(MEOW_FONT.texture).unwrap(); - // canvas.copy(&tx, None, None).unwrap(); - canvas.present(); - let sheet = canvas.into_surface(); - - UwUFont { sheet } - } - - pub fn pos_to_rect(x: i32, y: i32) -> Rect { - return Rect::new(x, y, UWU_WIDTH, UWU_HEIGHT); - } - - pub fn char_to_surface(&self, char: Rect) -> Surface { - let mut char_surface = Surface::new(UWU_WIDTH, UWU_HEIGHT, PixelFormatEnum::RGB24).unwrap(); - self - .sheet - .blit(char, &mut char_surface, Self::pos_to_rect(0, 0)) - .unwrap(); - char_surface - } - - pub fn u_surface(&self) -> Surface { - return self.char_to_surface(uwu_u()); - } - - 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; - -use sdl2::pixels::{Color, PixelFormatEnum}; -use sdl2::rect::Rect; -use sdl2::render::{Canvas, Texture, TextureCreator, TextureValueError}; -use sdl2::surface::Surface; -use sdl2::video::WindowContext; -pub use sprite_sheets::UwUFont; |