Skip to main content

character_map/
character_map.rs

1// SPDX-License-Identifier: MIT
2
3#![deny(warnings)]
4
5extern crate orbclient;
6extern crate orbfont;
7
8use std::cmp::max;
9
10use std::env;
11
12use orbclient::{Color, EventOption, Renderer, Window, WindowFlag};
13use orbfont::Font;
14
15fn main() {
16    let (title, font_res) = match env::args().nth(1) {
17        Some(arg) => (arg.clone(), Font::from_path(&arg)),
18        None => ("Default Font".to_string(), Font::find(None, None, None)),
19    };
20
21    match font_res {
22        Ok(font) => {
23            let lines = [
24                font.render("ABCDEFGHIJK", 64.0),
25                font.render("LMNOPQRSTUV", 64.0),
26                font.render("WXYZabcdefg", 64.0),
27                font.render("hijklmnopqr", 64.0),
28                font.render("stuvwxyz.?!", 64.0),
29                font.render("0123456789 ", 64.0),
30            ];
31
32            let mut width = 0;
33            let mut height = 0;
34            for line in lines.iter() {
35                width = max(width, line.width());
36                height += line.height();
37            }
38
39            let redraw = move |window: &mut Window| {
40                window.set(Color::rgb(255, 255, 255));
41                let mut y = 0;
42                for line in lines.iter() {
43                    line.draw(window, 0, y, Color::rgb(0, 0, 0));
44                    y += line.height() as i32;
45                }
46                window.sync();
47            };
48
49            let mut window = Window::new_flags(
50                -1,
51                -1,
52                max(320, width),
53                max(32, height),
54                &format!("{} - Character Map", title),
55                &[WindowFlag::Resizable],
56            )
57            .unwrap();
58
59            redraw(&mut window);
60
61            loop {
62                for event in window.events() {
63                    match event.to_option() {
64                        EventOption::Resize(_) => redraw(&mut window),
65                        EventOption::Quit(_) => return,
66                        _ => (),
67                    }
68                }
69            }
70        }
71        Err(err) => {
72            let mut window =
73                Window::new(-1, -1, 320, 32, &format!("{} - Character Map", err)).unwrap();
74            window.set(Color::rgb(0, 0, 0));
75            window.sync();
76            loop {
77                for event in window.events() {
78                    match event.to_option() {
79                        EventOption::Quit(_) => return,
80                        _ => (),
81                    }
82                }
83            }
84        }
85    }
86}