aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/font.rs96
-rw-r--r--src/main.rs42
-rw-r--r--src/uwu-logo-font-20px.pngbin0 -> 1711 bytes
3 files changed, 131 insertions, 7 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;
diff --git a/src/main.rs b/src/main.rs
index a3bcca1..c0a58a5 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,8 +1,14 @@
extern crate sdl2;
+mod font;
+
+use font::{UwUFont, UWU_WIDTH};
use sdl2::event::Event;
+use sdl2::image::LoadTexture;
use sdl2::keyboard::Keycode;
use sdl2::pixels::Color;
+use sdl2::rect::Rect;
+use sdl2::render::TextureCreator;
use std::time::Duration;
pub fn main() {
@@ -10,22 +16,45 @@ pub fn main() {
let video_subsystem = sdl_context.video().unwrap();
let window = video_subsystem
- .window("hentai", 800, 600)
+ .window("hentai", 320, 256)
.position_centered()
+ //.fullscreen()
.build()
.unwrap();
let mut canvas = window.into_canvas().build().unwrap();
+ let texture_creator = canvas.texture_creator();
+ 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();
- canvas.set_draw_color(Color::RGB(0, 255, 255));
- canvas.clear();
+ canvas
+ .copy(&u_char, None, UwUFont::pos_to_rect(0, 0))
+ .unwrap();
+ canvas
+ .copy(&w_char, None, UwUFont::pos_to_rect(UWU_WIDTH as i32, 0))
+ .unwrap();
+ canvas
+ .copy(&u_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();
+ /*
+ canvas.copy(
+ &sheet,
+ Rect::new(0, 0, font::UWU_WIDTH, font::UWU_HEIGHT),
+ font::UwUFont::pos_to_rect(0, 0),
+ );
+ */
+ canvas.draw_rect(Rect::new(100, 100, 200, 200));
canvas.present();
let mut event_pump = sdl_context.event_pump().unwrap();
let mut i = 0;
'running: loop {
i = (i + 1) % 255;
- canvas.set_draw_color(Color::RGB(i, 64, 255 - i));
- canvas.clear();
+ //canvas.set_draw_color(Color::RGB(i, 64, 255 - i));
+ //canvas.clear();
for event in event_pump.poll_iter() {
match event {
Event::Quit { .. }
@@ -37,8 +66,7 @@ pub fn main() {
}
}
// The rest of the game loop goes here...
-
- canvas.present();
+ //canvas.present();
::std::thread::sleep(Duration::new(0, 1_000_000_000u32 / 60));
}
}
diff --git a/src/uwu-logo-font-20px.png b/src/uwu-logo-font-20px.png
new file mode 100644
index 0000000..7ecbdaf
--- /dev/null
+++ b/src/uwu-logo-font-20px.png
Binary files differ