Add formatting for numbers too
This commit is contained in:
parent
c78db0c81a
commit
df146d7c0a
128
src/font.rs
128
src/font.rs
@ -127,6 +127,46 @@ pub static COMMA: [u8; 8] = [
|
||||
pub static EMPTY: [u8; 8] = [
|
||||
0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000,
|
||||
];
|
||||
#[unsafe(link_section = ".progmem.data")]
|
||||
pub static NUM_1: [u8; 8] = [
|
||||
0b00011000, 0b00111000, 0b01111000, 0b00011000, 0b00011000, 0b00011000, 0b00011000, 0b00011000,
|
||||
];
|
||||
#[unsafe(link_section = ".progmem.data")]
|
||||
pub static NUM_2: [u8; 8] = [
|
||||
0b11111110, 0b11110110, 0b00001100, 0b00011000, 0b00110000, 0b01100000, 0b11111111, 0b11111111,
|
||||
];
|
||||
#[unsafe(link_section = ".progmem.data")]
|
||||
pub static NUM_3: [u8; 8] = [
|
||||
0b01111110, 0b10000001, 0b00011110, 0b00011110, 0b00000001, 0b10000001, 0b11111111, 0b01111110,
|
||||
];
|
||||
#[unsafe(link_section = ".progmem.data")]
|
||||
pub static NUM_4: [u8; 8] = [
|
||||
0b11000110, 0b11000110, 0b11000110, 0b11111111, 0b11111110, 0b00000110, 0b00000110, 0b00000110,
|
||||
];
|
||||
#[unsafe(link_section = ".progmem.data")]
|
||||
pub static NUM_5: [u8; 8] = [
|
||||
0b11111111, 0b11111111, 0b11000000, 0b11111100, 0b00000110, 0b11000011, 0b11111111, 0b01111110,
|
||||
];
|
||||
#[unsafe(link_section = ".progmem.data")]
|
||||
pub static NUM_6: [u8; 8] = [
|
||||
0b01111110, 0b11000011, 0b11000000, 0b11111110, 0b11000011, 0b11000011, 0b11000011, 0b01111110,
|
||||
];
|
||||
#[unsafe(link_section = ".progmem.data")]
|
||||
pub static NUM_7: [u8; 8] = [
|
||||
0b11111111, 0b11111111, 0b00000110, 0b00001100, 0b00011000, 0b00110000, 0b01100000, 0b11000000,
|
||||
];
|
||||
#[unsafe(link_section = ".progmem.data")]
|
||||
pub static NUM_8: [u8; 8] = [
|
||||
0b01111110, 0b11111111, 0b11000011, 0b01111110, 0b11000011, 0b11000011, 0b11111111, 0b01111110,
|
||||
];
|
||||
#[unsafe(link_section = ".progmem.data")]
|
||||
pub static NUM_9: [u8; 8] = [
|
||||
0b01111110, 0b11000011, 0b11000011, 0b01111111, 0b00000011, 0b11000011, 0b11000011, 0b01111110,
|
||||
];
|
||||
#[unsafe(link_section = ".progmem.data")]
|
||||
pub static NUM_0: [u8; 8] = [
|
||||
0b01111110, 0b11000111, 0b11001011, 0b11001011, 0b11010011, 0b11010011, 0b11100011, 0b01111110,
|
||||
];
|
||||
|
||||
fn letter(character: char) -> *const [u8; 8] {
|
||||
match character {
|
||||
@ -156,6 +196,16 @@ fn letter(character: char) -> *const [u8; 8] {
|
||||
'x' => addr_of!(X),
|
||||
'y' => addr_of!(Y),
|
||||
'z' => addr_of!(Z),
|
||||
'0' => addr_of!(NUM_0),
|
||||
'1' => addr_of!(NUM_1),
|
||||
'2' => addr_of!(NUM_2),
|
||||
'3' => addr_of!(NUM_3),
|
||||
'4' => addr_of!(NUM_4),
|
||||
'5' => addr_of!(NUM_5),
|
||||
'6' => addr_of!(NUM_6),
|
||||
'7' => addr_of!(NUM_7),
|
||||
'8' => addr_of!(NUM_8),
|
||||
'9' => addr_of!(NUM_9),
|
||||
'!' => addr_of!(EXCLAMATION),
|
||||
',' => addr_of!(COMMA),
|
||||
_ => addr_of!(EMPTY),
|
||||
@ -167,41 +217,81 @@ pub fn draw_text<T: DelayNs, DCPin: PinOps, RSTPin: PinOps>(
|
||||
text: &str,
|
||||
fg: Rgb565,
|
||||
bg: Rgb565,
|
||||
position: Vec2,
|
||||
position: &mut Vec2,
|
||||
scale: u16,
|
||||
) {
|
||||
let mut curr_pos = position;
|
||||
|
||||
let kerning = 9 * scale;
|
||||
let original_x = position.x;
|
||||
|
||||
for line in text.split('\n') {
|
||||
for word in line.split(' ') {
|
||||
let word_length = word.len() as u16 * kerning;
|
||||
if curr_pos.x + word_length > 240 {
|
||||
curr_pos.x = original_x;
|
||||
curr_pos.y += kerning;
|
||||
if position.x + word_length > 240 {
|
||||
position.x = original_x;
|
||||
position.y += kerning;
|
||||
}
|
||||
|
||||
for c in word.chars() {
|
||||
if curr_pos.x + kerning > 240 {
|
||||
curr_pos.x = original_x;
|
||||
curr_pos.y += kerning;
|
||||
}
|
||||
if curr_pos.y + kerning > 240 {
|
||||
curr_pos.y = 0;
|
||||
draw_character(display, c, fg, bg, original_x, position, scale);
|
||||
}
|
||||
|
||||
Letter::from(c, fg, bg)
|
||||
position.x += kerning;
|
||||
}
|
||||
position.y += kerning;
|
||||
position.x = original_x;
|
||||
}
|
||||
}
|
||||
|
||||
pub fn draw_character<T: DelayNs, DCPin: PinOps, RSTPin: PinOps>(
|
||||
display: &mut Display<T, DCPin, RSTPin>,
|
||||
character: char,
|
||||
fg: Rgb565,
|
||||
bg: Rgb565,
|
||||
original_x: u16,
|
||||
position: &mut Vec2,
|
||||
scale: u16,
|
||||
) {
|
||||
let kerning = 9 * scale;
|
||||
|
||||
if position.x + kerning > 240 {
|
||||
position.x = original_x;
|
||||
position.y += kerning;
|
||||
}
|
||||
if position.y + kerning > 240 {
|
||||
position.y = 0;
|
||||
}
|
||||
|
||||
Letter::from(character, fg, bg)
|
||||
.iter()
|
||||
.draw(display, curr_pos, scale);
|
||||
curr_pos.x += kerning;
|
||||
}
|
||||
.draw(display, *position, scale);
|
||||
position.x += kerning;
|
||||
}
|
||||
|
||||
curr_pos.x += kerning;
|
||||
}
|
||||
curr_pos.y += kerning;
|
||||
pub fn draw_number<T: DelayNs, DCPin: PinOps, RSTPin: PinOps>(
|
||||
display: &mut Display<T, DCPin, RSTPin>,
|
||||
number: u32,
|
||||
fg: Rgb565,
|
||||
bg: Rgb565,
|
||||
position: &mut Vec2,
|
||||
scale: u16,
|
||||
) {
|
||||
if number > 10 {
|
||||
draw_number(display, number / 10, fg, bg, position, scale);
|
||||
}
|
||||
let character = match number % 10 {
|
||||
0 => '0',
|
||||
1 => '1',
|
||||
2 => '2',
|
||||
3 => '3',
|
||||
4 => '4',
|
||||
5 => '5',
|
||||
6 => '6',
|
||||
7 => '7',
|
||||
8 => '8',
|
||||
9 => '9',
|
||||
_ => 'X',
|
||||
};
|
||||
draw_character(display, character, fg, bg, position.x, position, scale);
|
||||
}
|
||||
|
||||
pub struct Letter {
|
||||
|
20
src/main.rs
20
src/main.rs
@ -19,7 +19,7 @@ use panic_halt as _;
|
||||
|
||||
use crate::{
|
||||
display::{Display, Rgb565, Vec2},
|
||||
font::{Letter, draw_text},
|
||||
font::{Letter, draw_number, draw_text},
|
||||
graphics::{Image, LARGE_CAT_UNSAFE, PRESS_BTN_UNSAFE, draw_image},
|
||||
peripherals::Button,
|
||||
};
|
||||
@ -82,17 +82,23 @@ fn main() -> ! {
|
||||
let images = [Image::from(addr_of!(LARGE_CAT_UNSAFE))];
|
||||
let len = images.len();
|
||||
|
||||
ufmt::uwriteln!(serial, "Drawing text").unwrap();
|
||||
let mut position = Vec2 { x: 10, y: 10 };
|
||||
draw_text(
|
||||
&mut display,
|
||||
"hi,my name is adafruit!nice to meet you!",
|
||||
"hi,my name is adafruit!nice to meet you!\n",
|
||||
Rgb565::white(),
|
||||
Rgb565::black(),
|
||||
Vec2 { x: 10, y: 10 },
|
||||
&mut position,
|
||||
3,
|
||||
);
|
||||
draw_number(
|
||||
&mut display,
|
||||
1234,
|
||||
Rgb565::white(),
|
||||
Rgb565::black(),
|
||||
&mut position,
|
||||
3,
|
||||
);
|
||||
|
||||
ufmt::uwriteln!(serial, "Text drawn!").unwrap();
|
||||
|
||||
loop {
|
||||
if button.poll() {
|
||||
@ -111,7 +117,7 @@ fn main() -> ! {
|
||||
"you just lost the game!",
|
||||
Rgb565::white(),
|
||||
Rgb565::black(),
|
||||
Vec2 { x: 10, y: 10 },
|
||||
&mut Vec2 { x: 10, y: 10 },
|
||||
3,
|
||||
);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user