aboutsummaryrefslogtreecommitdiffstats
path: root/src/font.rs
diff options
context:
space:
mode:
authorLibravatarLarge Libravatar fence <fencedesu-mailmoe>2025-01-08 08:48:53 +0100
committerLibravatarLarge Libravatar fence <fencedesu-mailmoe>2025-01-08 08:48:53 +0100
commit72743119c83f060602894366182b2e3f99d27319 (patch)
treef52853973a5bad8769be48d0ae35d3649b57184f /src/font.rs
parentb09036110266f0550a3cef6e9b0ca589dccf509f (diff)
downloadcosin25-invite-mountainbytes-72743119c83f060602894366182b2e3f99d27319.tar.gz
cosin25-invite-mountainbytes-72743119c83f060602894366182b2e3f99d27319.tar.bz2
cosin25-invite-mountainbytes-72743119c83f060602894366182b2e3f99d27319.tar.lz
cosin25-invite-mountainbytes-72743119c83f060602894366182b2e3f99d27319.zip

idk

Diffstat (limited to 'src/font.rs')
-rw-r--r--src/font.rs96
1 files changed, 96 insertions, 0 deletions
diff --git a/src/font.rs b/src/font.rs
new file mode 100644
index 0000000..5f70b59
--- /dev/null
+++ b/src/font.rs
@@ -0,0 +1,96 @@
+pub const UWU_HEIGHT: u32 = 24;
+pub const UWU_WIDTH: u32 = 16;
+pub const UWU_SHEET_RAW: &[u8] = include_bytes!("uwu-logo-font-20px.png");
+
+mod sprite_sheets {
+ use super::{UWU_HEIGHT, UWU_SHEET_RAW, UWU_WIDTH};
+ use sdl2::{
+ image::LoadTexture,
+ pixels::PixelFormatEnum,
+ rect::Rect,
+ render::{Canvas, Texture, TextureCreator},
+ surface::{self, Surface},
+ video::WindowContext,
+ };
+ use std::collections::HashMap;
+
+ 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(UWU_SHEET_RAW).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 use sprite_sheets::UwUFont;