Fix a bunch of the letters. Add a dot.

This commit is contained in:
Savanni D'Gerinel 2025-03-05 00:50:17 -05:00
parent aea858dd17
commit 132c85e99d
3 changed files with 944 additions and 59 deletions

View File

@ -8,7 +8,7 @@
// e c
// d d d
use alloc::{boxed::Box, vec::Vec};
use alloc::collections::btree_map::BTreeMap;
static mut BUF: [u8; 163200] = [0; 163200];
@ -32,7 +32,6 @@ impl Canvas {
}
}
/*
pub const DIGIT_WIDTH: usize = 5;
pub const DIGIT_HEIGHT: usize = 9;
@ -68,17 +67,13 @@ pub const SEVEN_SEGMENT_FONT: [[bool; 7]; 10] = [
EIGHT_SEVEN_SEGMENT,
NINE_SEVEN_SEGMENT,
];
*/
/*
pub fn draw_pixel(frame: &mut Canvas, x: usize, y: usize, color: (u8, u8, u8)) {
frame.buf[(y * frame.width + x) * 3 + 0] = color.0 << 2;
frame.buf[(y * frame.width + x) * 3 + 1] = color.1 << 2;
frame.buf[(y * frame.width + x) * 3 + 2] = color.2 << 2;
pub fn write_pixel(framebuf: &mut [u8], width: usize, x: usize, y: usize, color: (u8, u8, u8)) {
framebuf[(y * width + x) * 3 + 0] = color.0 << 2;
framebuf[(y * width + x) * 3 + 1] = color.1 << 2;
framebuf[(y * width + x) * 3 + 2] = color.2 << 2;
}
*/
/*
pub fn draw_seven_segment(
digit: u8,
frame: &mut [u8],
@ -89,39 +84,275 @@ pub fn draw_seven_segment(
) {
let segments = SEVEN_SEGMENT_FONT[digit as usize];
if segments[0] {
write_pixel(frame, x + 1, y, color);
write_pixel(frame, x + 2, y, color);
write_pixel(frame, x + 3, y, color);
write_pixel(frame, width, x + 1, y, color);
write_pixel(frame, width, x + 2, y, color);
write_pixel(frame, width, x + 3, y, color);
}
if segments[1] {
write_pixel(frame, x + 4, y + 1, color);
write_pixel(frame, x + 4, y + 2, color);
write_pixel(frame, x + 4, y + 3, color);
write_pixel(frame, width, x + 4, y + 1, color);
write_pixel(frame, width, x + 4, y + 2, color);
write_pixel(frame, width, x + 4, y + 3, color);
}
if segments[2] {
write_pixel(frame, x + 4, y + 5, color);
write_pixel(frame, x + 4, y + 6, color);
write_pixel(frame, x + 4, y + 7, color);
write_pixel(frame, width, x + 4, y + 5, color);
write_pixel(frame, width, x + 4, y + 6, color);
write_pixel(frame, width, x + 4, y + 7, color);
}
if segments[3] {
write_pixel(frame, x + 1, y + 8, color);
write_pixel(frame, x + 2, y + 8, color);
write_pixel(frame, x + 3, y + 8, color);
write_pixel(frame, width, x + 1, y + 8, color);
write_pixel(frame, width, x + 2, y + 8, color);
write_pixel(frame, width, x + 3, y + 8, color);
}
if segments[4] {
write_pixel(frame, x, y + 5, color);
write_pixel(frame, x, y + 6, color);
write_pixel(frame, x, y + 7, color);
write_pixel(frame, width, x, y + 5, color);
write_pixel(frame, width, x, y + 6, color);
write_pixel(frame, width, x, y + 7, color);
}
if segments[5] {
write_pixel(frame, x, y + 1, color);
write_pixel(frame, x, y + 2, color);
write_pixel(frame, x, y + 3, color);
write_pixel(frame, width, x, y + 1, color);
write_pixel(frame, width, x, y + 2, color);
write_pixel(frame, width, x, y + 3, color);
}
if segments[6] {
write_pixel(frame, x + 1, y + 4, color);
write_pixel(frame, x + 2, y + 4, color);
write_pixel(frame, x + 3, y + 4, color);
write_pixel(frame, width, x + 1, y + 4, color);
write_pixel(frame, width, x + 2, y + 4, color);
write_pixel(frame, width, x + 3, y + 4, color);
}
}
// Sixteen Segments
//
// a1 a2
// f h i jb
// f i j b
// f hij b
// g1 g2
// e klm c
// e k l m c
// ek l mc
// d1 d2
pub struct SixteenSegment {
a1: bool,
a2: bool,
b: bool,
c: bool,
d1: bool,
d2: bool,
e: bool,
f: bool,
g1: bool,
g2: bool,
h: bool,
i: bool,
j: bool,
k: bool,
l: bool,
m: bool,
}
pub fn sixteen_segment_font() -> BTreeMap<char, SixteenSegment> {
let mut font = BTreeMap::new();
font.insert(
'*',
SixteenSegment {
a1: true,
a2: true,
b: true,
c: true,
d1: true,
d2: true,
e: true,
f: true,
g1: true,
g2: true,
h: true,
i: true,
j: true,
k: true,
l: true,
m: true,
},
);
font.insert(
'0',
SixteenSegment {
a1: true,
a2: true,
b: true,
c: true,
d1: true,
d2: true,
e: true,
f: true,
g1: false,
g2: false,
h: false,
i: false,
j: false,
k: false,
l: false,
m: false,
},
);
font.insert(
'1',
SixteenSegment {
a1: false,
a2: false,
b: true,
c: true,
d1: false,
d2: false,
e: false,
f: false,
g1: false,
g2: false,
h: false,
i: false,
j: true,
k: false,
l: false,
m: false,
},
);
font.insert(
'2',
SixteenSegment {
a1: true,
a2: true,
b: false,
c: false,
d1: false,
d2: false,
e: false,
f: false,
g1: false,
g2: false,
h: false,
i: false,
j: true,
k: false,
l: false,
m: false,
},
);
font
}
pub fn draw_sixteen_segment(
c: char,
font: &BTreeMap<char, SixteenSegment>,
frame: &mut [u8],
width: usize,
x: usize,
y: usize,
color: (u8, u8, u8),
) {
let segments = font.get(&c).unwrap();
if segments.a1 {
write_pixel(frame, width, x + 1, y, color);
write_pixel(frame, width, x + 2, y, color);
write_pixel(frame, width, x + 3, y, color);
}
if segments.a2 {
write_pixel(frame, width, x + 5, y, color);
write_pixel(frame, width, x + 6, y, color);
write_pixel(frame, width, x + 7, y, color);
}
if segments.b {
write_pixel(frame, width, x + 8, y + 1, color);
write_pixel(frame, width, x + 8, y + 2, color);
write_pixel(frame, width, x + 8, y + 3, color);
write_pixel(frame, width, x + 8, y + 4, color);
write_pixel(frame, width, x + 8, y + 5, color);
}
if segments.c {
write_pixel(frame, width, x + 8, y + 7, color);
write_pixel(frame, width, x + 8, y + 8, color);
write_pixel(frame, width, x + 8, y + 9, color);
write_pixel(frame, width, x + 8, y + 10, color);
write_pixel(frame, width, x + 8, y + 11, color);
}
if segments.d1 {
write_pixel(frame, width, x + 1, y + 12, color);
write_pixel(frame, width, x + 2, y + 12, color);
write_pixel(frame, width, x + 3, y + 12, color);
}
if segments.d2 {
write_pixel(frame, width, x + 5, y + 12, color);
write_pixel(frame, width, x + 6, y + 12, color);
write_pixel(frame, width, x + 7, y + 12, color);
}
if segments.e {
write_pixel(frame, width, x, y + 7, color);
write_pixel(frame, width, x, y + 8, color);
write_pixel(frame, width, x, y + 9, color);
write_pixel(frame, width, x, y + 10, color);
write_pixel(frame, width, x, y + 11, color);
}
if segments.f {
write_pixel(frame, width, x, y + 1, color);
write_pixel(frame, width, x, y + 2, color);
write_pixel(frame, width, x, y + 3, color);
write_pixel(frame, width, x, y + 4, color);
write_pixel(frame, width, x, y + 5, color);
}
if segments.g1 {
write_pixel(frame, width, x + 1, y + 6, color);
write_pixel(frame, width, x + 2, y + 6, color);
write_pixel(frame, width, x + 3, y + 6, color);
}
if segments.g2 {
write_pixel(frame, width, x + 5, y + 6, color);
write_pixel(frame, width, x + 6, y + 6, color);
write_pixel(frame, width, x + 7, y + 6, color);
}
if segments.h {
write_pixel(frame, width, x + 1, y + 1, color);
write_pixel(frame, width, x + 1, y + 2, color);
write_pixel(frame, width, x + 2, y + 3, color);
write_pixel(frame, width, x + 3, y + 4, color);
write_pixel(frame, width, x + 3, y + 5, color);
}
if segments.i {
write_pixel(frame, width, x + 4, y + 1, color);
write_pixel(frame, width, x + 4, y + 2, color);
write_pixel(frame, width, x + 4, y + 3, color);
write_pixel(frame, width, x + 4, y + 4, color);
write_pixel(frame, width, x + 4, y + 5, color);
}
if segments.j {
write_pixel(frame, width, x + 7, y + 1, color);
write_pixel(frame, width, x + 7, y + 2, color);
write_pixel(frame, width, x + 6, y + 3, color);
write_pixel(frame, width, x + 5, y + 4, color);
write_pixel(frame, width, x + 5, y + 5, color);
}
if segments.k {
write_pixel(frame, width, x + 3, y + 7, color);
write_pixel(frame, width, x + 3, y + 8, color);
write_pixel(frame, width, x + 2, y + 9, color);
write_pixel(frame, width, x + 1, y + 10, color);
write_pixel(frame, width, x + 1, y + 11, color);
}
if segments.l {
write_pixel(frame, width, x + 4, y + 7, color);
write_pixel(frame, width, x + 4, y + 8, color);
write_pixel(frame, width, x + 4, y + 9, color);
write_pixel(frame, width, x + 4, y + 10, color);
write_pixel(frame, width, x + 4, y + 11, color);
}
if segments.m {
write_pixel(frame, width, x + 5, y + 7, color);
write_pixel(frame, width, x + 5, y + 8, color);
write_pixel(frame, width, x + 6, y + 9, color);
write_pixel(frame, width, x + 7, y + 10, color);
write_pixel(frame, width, x + 7, y + 11, color);
}
}
*/

View File

@ -39,6 +39,7 @@ pub struct SixteenSegmentGlyph {
k: bool,
l: bool,
m: bool,
dot: bool,
}
pub struct SixteenSegmentFont(BTreeMap<char, SixteenSegmentGlyph>);
@ -47,24 +48,69 @@ impl SixteenSegmentFont {
pub fn new() -> Self {
let mut font = BTreeMap::new();
font.insert(
'*',
' ',
SixteenSegmentGlyph {
a1: true,
a2: true,
a1: false,
a2: false,
b: false,
c: false,
d1: false,
d2: false,
e: false,
f: false,
g1: false,
g2: false,
h: false,
i: false,
j: false,
k: false,
l: false,
m: false,
dot: false,
},
);
font.insert(
'!',
SixteenSegmentGlyph {
a1: false,
a2: false,
b: true,
c: true,
d1: true,
d2: true,
e: true,
f: true,
g1: true,
g2: true,
h: true,
d1: false,
d2: false,
e: false,
f: false,
g1: false,
g2: false,
h: false,
i: false,
j: false,
k: false,
l: false,
m: false,
dot: true,
},
);
font.insert(
'"',
SixteenSegmentGlyph {
a1: false,
a2: false,
b: true,
c: false,
d1: false,
d2: false,
e: false,
f: false,
g1: false,
g2: false,
h: false,
i: true,
j: true,
k: true,
l: true,
m: true,
j: false,
k: false,
l: false,
m: false,
dot: false,
},
);
font.insert(
@ -86,6 +132,7 @@ impl SixteenSegmentFont {
k: true,
l: false,
m: false,
dot: false,
},
);
font.insert(
@ -107,6 +154,7 @@ impl SixteenSegmentFont {
k: false,
l: false,
m: false,
dot: false,
},
);
font.insert(
@ -128,6 +176,7 @@ impl SixteenSegmentFont {
k: false,
l: false,
m: false,
dot: false,
},
);
font.insert(
@ -149,6 +198,7 @@ impl SixteenSegmentFont {
k: false,
l: false,
m: false,
dot: false,
},
);
font.insert(
@ -170,6 +220,7 @@ impl SixteenSegmentFont {
k: false,
l: false,
m: false,
dot: false,
},
);
font.insert(
@ -191,6 +242,7 @@ impl SixteenSegmentFont {
k: false,
l: false,
m: true,
dot: false,
},
);
font.insert(
@ -212,6 +264,7 @@ impl SixteenSegmentFont {
k: false,
l: false,
m: false,
dot: false,
},
);
font.insert(
@ -233,6 +286,7 @@ impl SixteenSegmentFont {
k: false,
l: false,
m: false,
dot: false,
},
);
font.insert(
@ -254,6 +308,7 @@ impl SixteenSegmentFont {
k: false,
l: false,
m: false,
dot: false,
},
);
font.insert(
@ -275,9 +330,581 @@ impl SixteenSegmentFont {
k: false,
l: false,
m: false,
dot: false,
},
);
font.insert(
'A',
SixteenSegmentGlyph {
a1: true,
a2: true,
b: true,
c: true,
d1: false,
d2: false,
e: true,
f: true,
g1: true,
g2: true,
h: false,
i: false,
j: false,
k: false,
l: false,
m: false,
dot: false,
},
);
font.insert(
'B',
SixteenSegmentGlyph {
a1: true,
a2: true,
b: true,
c: true,
d1: true,
d2: true,
e: false,
f: false,
g1: false,
g2: true,
h: false,
i: true,
j: false,
k: false,
l: true,
m: false,
dot: false,
},
);
font.insert(
'C',
SixteenSegmentGlyph {
a1: true,
a2: true,
b: false,
c: false,
d1: true,
d2: true,
e: true,
f: true,
g1: false,
g2: false,
h: false,
i: false,
j: false,
k: false,
l: false,
m: false,
dot: false,
},
);
font.insert(
'D',
SixteenSegmentGlyph {
a1: true,
a2: true,
b: true,
c: true,
d1: true,
d2: true,
e: false,
f: false,
g1: false,
g2: false,
h: false,
i: true,
j: false,
k: false,
l: true,
m: false,
dot: false,
},
);
font.insert(
'E',
SixteenSegmentGlyph {
a1: true,
a2: true,
b: false,
c: false,
d1: true,
d2: true,
e: true,
f: true,
g1: true,
g2: false,
h: false,
i: false,
j: false,
k: false,
l: false,
m: false,
dot: false,
},
);
font.insert(
'F',
SixteenSegmentGlyph {
a1: true,
a2: true,
b: false,
c: false,
d1: false,
d2: false,
e: true,
f: true,
g1: true,
g2: false,
h: false,
i: false,
j: false,
k: false,
l: false,
m: false,
dot: false,
},
);
font.insert(
'G',
SixteenSegmentGlyph {
a1: true,
a2: true,
b: false,
c: true,
d1: true,
d2: true,
e: true,
f: true,
g1: false,
g2: true,
h: false,
i: false,
j: false,
k: false,
l: false,
m: false,
dot: false,
},
);
font.insert(
'H',
SixteenSegmentGlyph {
a1: false,
a2: false,
b: true,
c: true,
d1: false,
d2: false,
e: true,
f: true,
g1: true,
g2: true,
h: false,
i: false,
j: false,
k: false,
l: false,
m: false,
dot: false,
},
);
font.insert(
'I',
SixteenSegmentGlyph {
a1: true,
a2: true,
b: false,
c: false,
d1: true,
d2: true,
e: false,
f: false,
g1: false,
g2: false,
h: false,
i: true,
j: false,
k: false,
l: true,
m: false,
dot: false,
},
);
font.insert(
'J',
SixteenSegmentGlyph {
a1: false,
a2: false,
b: true,
c: true,
d1: true,
d2: true,
e: true,
f: false,
g1: false,
g2: false,
h: false,
i: false,
j: false,
k: false,
l: false,
m: false,
dot: false,
},
);
font.insert(
'K',
SixteenSegmentGlyph {
a1: false,
a2: false,
b: false,
c: false,
d1: false,
d2: false,
e: true,
f: true,
g1: true,
g2: false,
h: false,
i: false,
j: true,
k: false,
l: false,
m: true,
dot: false,
},
);
font.insert(
'L',
SixteenSegmentGlyph {
a1: false,
a2: false,
b: false,
c: false,
d1: true,
d2: true,
e: true,
f: true,
g1: false,
g2: false,
h: false,
i: false,
j: false,
k: false,
l: false,
m: false,
dot: false,
},
);
font.insert(
'M',
SixteenSegmentGlyph {
a1: false,
a2: false,
b: true,
c: true,
d1: false,
d2: false,
e: true,
f: true,
g1: false,
g2: false,
h: true,
i: false,
j: true,
k: false,
l: false,
m: false,
dot: false,
},
);
font.insert(
'N',
SixteenSegmentGlyph {
a1: false,
a2: false,
b: true,
c: true,
d1: false,
d2: false,
e: true,
f: true,
g1: false,
g2: false,
h: true,
i: false,
j: false,
k: false,
l: false,
m: true,
dot: false,
},
);
font.insert(
'O',
SixteenSegmentGlyph {
a1: true,
a2: true,
b: true,
c: true,
d1: true,
d2: true,
e: true,
f: true,
g1: false,
g2: false,
h: false,
i: false,
j: false,
k: false,
l: false,
m: false,
dot: false,
},
);
font.insert(
'P',
SixteenSegmentGlyph {
a1: true,
a2: true,
b: true,
c: false,
d1: false,
d2: false,
e: true,
f: true,
g1: true,
g2: true,
h: false,
i: false,
j: false,
k: false,
l: false,
m: false,
dot: false,
},
);
font.insert(
'Q',
SixteenSegmentGlyph {
a1: true,
a2: true,
b: true,
c: true,
d1: true,
d2: true,
e: true,
f: true,
g1: false,
g2: false,
h: false,
i: false,
j: false,
k: false,
l: false,
m: true,
dot: false,
},
);
font.insert(
'R',
SixteenSegmentGlyph {
a1: true,
a2: true,
b: true,
c: false,
d1: false,
d2: false,
e: true,
f: true,
g1: true,
g2: true,
h: false,
i: false,
j: false,
k: false,
l: false,
m: true,
dot: false,
},
);
font.insert(
'S',
SixteenSegmentGlyph {
a1: true,
a2: true,
b: false,
c: true,
d1: true,
d2: true,
e: false,
f: true,
g1: true,
g2: true,
h: false,
i: false,
j: false,
k: false,
l: false,
m: false,
dot: false,
},
);
font.insert(
'T',
SixteenSegmentGlyph {
a1: true,
a2: true,
b: false,
c: false,
d1: false,
d2: false,
e: false,
f: false,
g1: false,
g2: false,
h: false,
i: true,
j: false,
k: false,
l: true,
m: false,
dot: false,
},
);
font.insert(
'U',
SixteenSegmentGlyph {
a1: false,
a2: false,
b: true,
c: true,
d1: true,
d2: true,
e: true,
f: true,
g1: false,
g2: false,
h: false,
i: false,
j: false,
k: false,
l: false,
m: false,
dot: false,
},
);
font.insert(
'V',
SixteenSegmentGlyph {
a1: false,
a2: false,
b: false,
c: false,
d1: false,
d2: false,
e: true,
f: true,
g1: false,
g2: false,
h: false,
i: false,
j: true,
k: true,
l: false,
m: false,
dot: false,
},
);
font.insert(
'W',
SixteenSegmentGlyph {
a1: false,
a2: false,
b: true,
c: true,
d1: false,
d2: false,
e: true,
f: true,
g1: false,
g2: false,
h: false,
i: false,
j: false,
k: true,
l: false,
m: true,
dot: false,
},
);
font.insert(
'X',
SixteenSegmentGlyph {
a1: false,
a2: false,
b: false,
c: false,
d1: false,
d2: false,
e: false,
f: false,
g1: false,
g2: false,
h: true,
i: false,
j: true,
k: true,
l: false,
m: true,
dot: false,
},
);
font.insert(
'Y',
SixteenSegmentGlyph {
a1: false,
a2: false,
b: true,
c: true,
d1: true,
d2: true,
e: false,
f: true,
g1: true,
g2: true,
h: false,
i: false,
j: false,
k: false,
l: false,
m: false,
dot: false,
},
);
font.insert(
'Z',
SixteenSegmentGlyph {
a1: true,
a2: true,
b: false,
c: false,
d1: true,
d2: true,
e: false,
f: false,
g1: false,
g2: false,
h: false,
i: false,
j: true,
k: true,
l: false,
m: false,
dot: false,
},
);
Self(font)
}
}

View File

@ -36,7 +36,7 @@ static HEAP: Heap = Heap::empty();
unsafe fn main() -> ! {
{
use core::mem::MaybeUninit;
const HEAP_SIZE: usize = 1024;
const HEAP_SIZE: usize = 16 * 1024;
static mut HEAP_MEM: [MaybeUninit<u8>; HEAP_SIZE] = [MaybeUninit::uninit(); HEAP_SIZE];
unsafe { HEAP.init(HEAP_MEM.as_ptr() as usize, HEAP_SIZE) }
}
@ -147,18 +147,45 @@ unsafe fn main() -> ! {
draw_seven_segment(9, &mut frame, 63, 0, (255, 255, 255));
*/
font_sixteen.glyph('*').draw(&mut canvas, 0, 10, (255, 255, 255));
font_sixteen.glyph('0').draw(&mut canvas, 11, 10, (255, 255, 255));
font_sixteen.glyph('1').draw(&mut canvas, 22, 10, (255, 255, 255));
font_sixteen.glyph('2').draw(&mut canvas, 33, 10, (255, 255, 255));
font_sixteen.glyph('3').draw(&mut canvas, 44, 10, (255, 255, 255));
font_sixteen.glyph('4').draw(&mut canvas, 55, 10, (255, 255, 255));
font_sixteen.glyph('5').draw(&mut canvas, 66, 10, (255, 255, 255));
font_sixteen.glyph('6').draw(&mut canvas, 77, 10, (255, 255, 255));
font_sixteen.glyph('7').draw(&mut canvas, 88, 10, (255, 255, 255));
font_sixteen.glyph('8').draw(&mut canvas, 99, 10, (255, 255, 255));
font_sixteen.glyph('9').draw(&mut canvas, 110, 10, (255, 255, 255));
font_sixteen.glyph(' ').draw(&mut canvas, 0, 0, (255, 255, 255));
font_sixteen.glyph('0').draw(&mut canvas, 11, 0, (255, 255, 255));
font_sixteen.glyph('1').draw(&mut canvas, 22, 0, (255, 255, 255));
font_sixteen.glyph('2').draw(&mut canvas, 33, 0, (255, 255, 255));
font_sixteen.glyph('3').draw(&mut canvas, 44, 0, (255, 255, 255));
font_sixteen.glyph('4').draw(&mut canvas, 55, 0, (255, 255, 255));
font_sixteen.glyph('5').draw(&mut canvas, 66, 0, (255, 255, 255));
font_sixteen.glyph('6').draw(&mut canvas, 77, 0, (255, 255, 255));
font_sixteen.glyph('7').draw(&mut canvas, 88, 0, (255, 255, 255));
font_sixteen.glyph('8').draw(&mut canvas, 99, 0, (255, 255, 255));
font_sixteen.glyph('9').draw(&mut canvas, 110, 0, (255, 255, 255));
font_sixteen.glyph('A').draw(&mut canvas, 0, 20, (255, 255, 255));
font_sixteen.glyph('B').draw(&mut canvas, 11, 20, (255, 255, 255));
font_sixteen.glyph('C').draw(&mut canvas, 22, 20, (255, 255, 255));
font_sixteen.glyph('D').draw(&mut canvas, 33, 20, (255, 255, 255));
font_sixteen.glyph('E').draw(&mut canvas, 44, 20, (255, 255, 255));
font_sixteen.glyph('F').draw(&mut canvas, 55, 20, (255, 255, 255));
font_sixteen.glyph('G').draw(&mut canvas, 66, 20, (255, 255, 255));
font_sixteen.glyph('H').draw(&mut canvas, 77, 20, (255, 255, 255));
font_sixteen.glyph('I').draw(&mut canvas, 88, 20, (255, 255, 255));
font_sixteen.glyph('J').draw(&mut canvas, 99, 20, (255, 255, 255));
font_sixteen.glyph('K').draw(&mut canvas, 110, 20, (255, 255, 255));
font_sixteen.glyph('L').draw(&mut canvas, 121, 20, (255, 255, 255));
font_sixteen.glyph('M').draw(&mut canvas, 132, 20, (255, 255, 255));
font_sixteen.glyph('N').draw(&mut canvas, 143, 20, (255, 255, 255));
font_sixteen.glyph('O').draw(&mut canvas, 154, 20, (255, 255, 255));
font_sixteen.glyph('P').draw(&mut canvas, 0, 40, (255, 255, 255));
font_sixteen.glyph('Q').draw(&mut canvas, 11, 40, (255, 255, 255));
font_sixteen.glyph('R').draw(&mut canvas, 22, 40, (255, 255, 255));
font_sixteen.glyph('S').draw(&mut canvas, 33, 40, (255, 255, 255));
font_sixteen.glyph('T').draw(&mut canvas, 44, 40, (255, 255, 255));
font_sixteen.glyph('U').draw(&mut canvas, 55, 40, (255, 255, 255));
font_sixteen.glyph('V').draw(&mut canvas, 66, 40, (255, 255, 255));
font_sixteen.glyph('W').draw(&mut canvas, 77, 40, (255, 255, 255));
font_sixteen.glyph('X').draw(&mut canvas, 88, 40, (255, 255, 255));
font_sixteen.glyph('Y').draw(&mut canvas, 99, 40, (255, 255, 255));
font_sixteen.glyph('Z').draw(&mut canvas, 110, 40, (255, 255, 255));
/*
for x in 80..90 {
for y in 155..165 {