1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
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;
|