FontCollection

Struct FontCollection 

Source
pub struct FontCollection(/* private fields */);

Implementations§

Source§

impl FontCollection

Source

pub fn new() -> Self

Create a default FontCollection, containing the Unicode constants from the font8x8 crate, except for MISC_FONTS, and SGA_FONTS (which are non-standard).

Examples found in repository?
examples/scroll-bottom-top.rs (line 18)
13fn main() {
14    // Connect to our LED Matrix screen.
15    let mut screen = Screen::open("/dev/fb1").unwrap();
16
17    // Get the default `FontCollection`.
18    let fonts = FontCollection::new();
19    // Create a sanitized `FontString`.
20    let sanitized = fonts.sanitize_str(" ^^^123^^^ ").unwrap();
21    // Render the `FontString` as a vector of pixel frames, with
22    // a stroke color of CYAN and a BLACK background.
23    let pixel_frames = sanitized.pixel_frames(PixelColor::CYAN, PixelColor::BLACK);
24
25    // Create a `Scroll` from the pixel frame vector.
26    let scroll = Scroll::new(&pixel_frames);
27
28    // Consume the `FrameSequence` returned by the `bottom_to_top` method.
29    scroll.bottom_to_top().for_each(|frame| {
30        println!("Now printing:");
31        println!("{:?}", frame);
32        screen.write_frame(&frame.frame_line());
33        ::std::thread::sleep(::std::time::Duration::from_millis(250));
34    });
35}
More examples
Hide additional examples
examples/scroll-left-right.rs (line 18)
13fn main() {
14    // Connect to our LED Matrix screen.
15    let mut screen = Screen::open("/dev/fb1").unwrap();
16
17    // Get the default `FontCollection`.
18    let fonts = FontCollection::new();
19    // Create a sanitized `FontString`.
20    let sanitized = fonts.sanitize_str(" >>>123>>> ").unwrap();
21    // Render the `FontString` as a vector of pixel frames, with
22    // a stroke color of YELLOW and a BLACK background.
23    let pixel_frames = sanitized.pixel_frames(PixelColor::YELLOW, PixelColor::BLACK);
24
25    // Create a `Scroll` from the pixel frame vector.
26    let scroll = Scroll::new(&pixel_frames);
27
28    // Consume the `FrameSequence` returned by the `left_to_right` method.
29    scroll.left_to_right().for_each(|frame| {
30        println!("Now printing:");
31        println!("{:?}", frame);
32        screen.write_frame(&frame.frame_line());
33        ::std::thread::sleep(::std::time::Duration::from_millis(250));
34    });
35}
examples/scroll-top-bottom.rs (line 18)
13fn main() {
14    // Connect to our LED Matrix screen.
15    let mut screen = Screen::open("/dev/fb1").unwrap();
16
17    // Get the default `FontCollection`.
18    let fonts = FontCollection::new();
19    // Create a sanitized `FontString`.
20    let sanitized = fonts.sanitize_str(" vvv123vvv ").unwrap();
21    // Render the `FontString` as a vector of pixel frames, with
22    // a stroke color of YELLOW and a BLACK background.
23    let pixel_frames = sanitized.pixel_frames(PixelColor::YELLOW, PixelColor::BLACK);
24
25    // Create a `Scroll` from the pixel frame vector.
26    let scroll = Scroll::new(&pixel_frames);
27
28    // Consume the `FrameSequence` returned by the `top_to_bottom` method.
29    scroll.top_to_bottom().for_each(|frame| {
30        println!("Now printing:");
31        println!("{:?}", frame);
32        screen.write_frame(&frame.frame_line());
33        ::std::thread::sleep(::std::time::Duration::from_millis(250));
34    });
35}
examples/scroll-right-left.rs (line 18)
13fn main() {
14    // Connect to our LED Matrix screen.
15    let mut screen = Screen::open("/dev/fb1").unwrap();
16
17    // Get the default `FontCollection`.
18    let fonts = FontCollection::new();
19    // Create a sanitized `FontString`.
20    let sanitized = fonts.sanitize_str(" «««123««« ").unwrap();
21    // Render the `FontString` as a vector of pixel frames, with
22    // a stroke color of GREEN and a BLACK background.
23    let pixel_frames = sanitized.pixel_frames(PixelColor::GREEN, PixelColor::BLACK);
24
25    // Create a `Scroll` from the pixel frame vector.
26    let scroll = Scroll::new(&pixel_frames);
27
28    // Consume the `FrameSequence` returned by the `right_to_left` method.
29    scroll.right_to_left().for_each(|frame| {
30        println!("Now printing:");
31        println!("{:?}", frame);
32        screen.write_frame(&frame.frame_line());
33        ::std::thread::sleep(::std::time::Duration::from_millis(250));
34    });
35}
examples/rotate.rs (line 16)
14fn main() {
15    let mut screen = Screen::open("/dev/fb1").unwrap();
16    let fonts = FontCollection::new();
17
18    for &(sym, color) in &[('Ñ', PixelColor::YELLOW), ('ó', PixelColor::MAGENTA)] {
19        let font = fonts.get(sym).unwrap();
20        let symbol = font_to_pixel_frame(font.byte_array(), color);
21        let symbol_90 = symbol.rotate(Rotate::Ccw90);
22        let symbol_180 = symbol.rotate(Rotate::Ccw180);
23        let symbol_270 = symbol.rotate(Rotate::Ccw270);
24        for _ in 0..=4 {
25            screen.write_frame(&symbol.frame_line());
26            ::std::thread::sleep(::std::time::Duration::from_millis(500));
27            screen.write_frame(&symbol_90.frame_line());
28            ::std::thread::sleep(::std::time::Duration::from_millis(500));
29            screen.write_frame(&symbol_180.frame_line());
30            ::std::thread::sleep(::std::time::Duration::from_millis(500));
31            screen.write_frame(&symbol_270.frame_line());
32            ::std::thread::sleep(::std::time::Duration::from_millis(500));
33        }
34        screen.write_frame(&PixelFrame::new(&[PixelColor::BLACK; 64]).frame_line());
35    }
36}
examples/offset.rs (line 16)
14fn main() {
15    let mut screen = Screen::open("/dev/fb1").unwrap();
16    let fonts = FontCollection::new();
17
18    for &(sym, color) in &[('þ', PixelColor::CYAN), ('ß', PixelColor::WHITE.dim(0.5))] {
19        let font = fonts.get(sym).unwrap();
20        let symbol = font_to_pixel_frame(font.byte_array(), color);
21
22        // Starts with an empty screen, then the symbol slides from the left,
23        // reaching the offset = 0 position, which renders the entire symbol on
24        // the screen.
25        for i in 0..=8 {
26            screen.write_frame(&symbol.offset(Offset::left(8 - i)).frame_line());
27            ::std::thread::sleep(::std::time::Duration::from_millis(500));
28        }
29        // Slides the displayed symbol to the right until it disappears.
30        for i in 0..=8 {
31            screen.write_frame(&symbol.offset(Offset::right(i)).frame_line());
32            ::std::thread::sleep(::std::time::Duration::from_millis(500));
33        }
34
35        // Starts with an empty screen, then the symbol slides from the top,
36        // reaching the offset = 0 position, which renders the entire symbol on
37        // the screen.
38        for i in 0..=8 {
39            screen.write_frame(&symbol.offset(Offset::top(8 - i)).frame_line());
40            ::std::thread::sleep(::std::time::Duration::from_millis(500));
41        }
42        // Slides the displayed symbol to the bottom until it disappears.
43        for i in 0..=8 {
44            screen.write_frame(&symbol.offset(Offset::bottom(i)).frame_line());
45            ::std::thread::sleep(::std::time::Duration::from_millis(500));
46        }
47    }
48    screen.write_frame(&PixelFrame::new(&[PixelColor::BLACK; 64]).frame_line());
49}
Source

pub fn from_hashmap(hashmap: HashMap<char, FontUnicode>) -> Self

Create a FontCollection with a custom HashMap of font symbols.

Source

pub fn get(&self, symbol: char) -> Option<&FontUnicode>

Get an Option with the symbol’s byte rendering.

Examples found in repository?
examples/letter.rs (line 26)
16fn main() {
17    let mut screen = Screen::open("/dev/fb1").unwrap();
18
19    let white_50_pct = PixelColor::WHITE.dim(0.5);
20
21    let letter = "Dear Toño, I am well. Thank you. Bye. - ゆにち";
22
23    let screen_text = FONT_COLLECTION.sanitize_str(letter).unwrap();
24
25    for unicode in screen_text.chars() {
26        if let Some(symbol) = FONT_COLLECTION.get(unicode) {
27            let frame = font_to_frame(symbol.byte_array(), white_50_pct);
28            screen.write_frame(&frame);
29        }
30        thread::sleep(Duration::from_millis(800));
31    }
32}
More examples
Hide additional examples
examples/clip.rs (line 24)
15fn main() {
16    let mut screen = Screen::open("/dev/fb1").unwrap();
17
18    let letters = "a e i o u ";
19    let letter_color = PixelColor::YELLOW.dim(0.5);
20
21    let frames = letters
22        .chars()
23        .map(|sym| {
24            let font = FONT_COLLECTION.get(sym).unwrap();
25            font_to_pixel_frame(font.byte_array(), letter_color)
26        })
27        .collect::<Vec<PixelFrame>>();
28
29    // create a sequence of clips that will scroll each character-whitespace pair
30    // from appearing to move from right to left.
31    let frame_reel: Vec<PixelFrame> = frames.chunks(2).fold(Vec::new(), |mut v, chunk| match chunk
32        .len()
33    {
34        2 => {
35            let clip = chunk[0].build_clip(&chunk[1]);
36            for i in 0..=8 {
37                v.push(clip.offset(Offset::left(i)));
38            }
39            v
40        }
41        _ => panic!("this frame reel will only display &str of even length (divisible by 2)"),
42    });
43
44    for frame in &frame_reel {
45        screen.write_frame(&frame.frame_line());
46        ::std::thread::sleep(::std::time::Duration::from_millis(750));
47    }
48}
examples/rotate.rs (line 19)
14fn main() {
15    let mut screen = Screen::open("/dev/fb1").unwrap();
16    let fonts = FontCollection::new();
17
18    for &(sym, color) in &[('Ñ', PixelColor::YELLOW), ('ó', PixelColor::MAGENTA)] {
19        let font = fonts.get(sym).unwrap();
20        let symbol = font_to_pixel_frame(font.byte_array(), color);
21        let symbol_90 = symbol.rotate(Rotate::Ccw90);
22        let symbol_180 = symbol.rotate(Rotate::Ccw180);
23        let symbol_270 = symbol.rotate(Rotate::Ccw270);
24        for _ in 0..=4 {
25            screen.write_frame(&symbol.frame_line());
26            ::std::thread::sleep(::std::time::Duration::from_millis(500));
27            screen.write_frame(&symbol_90.frame_line());
28            ::std::thread::sleep(::std::time::Duration::from_millis(500));
29            screen.write_frame(&symbol_180.frame_line());
30            ::std::thread::sleep(::std::time::Duration::from_millis(500));
31            screen.write_frame(&symbol_270.frame_line());
32            ::std::thread::sleep(::std::time::Duration::from_millis(500));
33        }
34        screen.write_frame(&PixelFrame::new(&[PixelColor::BLACK; 64]).frame_line());
35    }
36}
examples/offset.rs (line 19)
14fn main() {
15    let mut screen = Screen::open("/dev/fb1").unwrap();
16    let fonts = FontCollection::new();
17
18    for &(sym, color) in &[('þ', PixelColor::CYAN), ('ß', PixelColor::WHITE.dim(0.5))] {
19        let font = fonts.get(sym).unwrap();
20        let symbol = font_to_pixel_frame(font.byte_array(), color);
21
22        // Starts with an empty screen, then the symbol slides from the left,
23        // reaching the offset = 0 position, which renders the entire symbol on
24        // the screen.
25        for i in 0..=8 {
26            screen.write_frame(&symbol.offset(Offset::left(8 - i)).frame_line());
27            ::std::thread::sleep(::std::time::Duration::from_millis(500));
28        }
29        // Slides the displayed symbol to the right until it disappears.
30        for i in 0..=8 {
31            screen.write_frame(&symbol.offset(Offset::right(i)).frame_line());
32            ::std::thread::sleep(::std::time::Duration::from_millis(500));
33        }
34
35        // Starts with an empty screen, then the symbol slides from the top,
36        // reaching the offset = 0 position, which renders the entire symbol on
37        // the screen.
38        for i in 0..=8 {
39            screen.write_frame(&symbol.offset(Offset::top(8 - i)).frame_line());
40            ::std::thread::sleep(::std::time::Duration::from_millis(500));
41        }
42        // Slides the displayed symbol to the bottom until it disappears.
43        for i in 0..=8 {
44            screen.write_frame(&symbol.offset(Offset::bottom(i)).frame_line());
45            ::std::thread::sleep(::std::time::Duration::from_millis(500));
46        }
47    }
48    screen.write_frame(&PixelFrame::new(&[PixelColor::BLACK; 64]).frame_line());
49}
Source

pub fn contains_key(&self, symbol: char) -> bool

Search if collection has a symbol by its unicode key.

Source

pub fn sanitize_str(&self, s: &str) -> Result<FontString, ScreenError>

Sanitize a &str and create a new FontString.

Examples found in repository?
examples/letter.rs (line 23)
16fn main() {
17    let mut screen = Screen::open("/dev/fb1").unwrap();
18
19    let white_50_pct = PixelColor::WHITE.dim(0.5);
20
21    let letter = "Dear Toño, I am well. Thank you. Bye. - ゆにち";
22
23    let screen_text = FONT_COLLECTION.sanitize_str(letter).unwrap();
24
25    for unicode in screen_text.chars() {
26        if let Some(symbol) = FONT_COLLECTION.get(unicode) {
27            let frame = font_to_frame(symbol.byte_array(), white_50_pct);
28            screen.write_frame(&frame);
29        }
30        thread::sleep(Duration::from_millis(800));
31    }
32}
More examples
Hide additional examples
examples/scroll-bottom-top.rs (line 20)
13fn main() {
14    // Connect to our LED Matrix screen.
15    let mut screen = Screen::open("/dev/fb1").unwrap();
16
17    // Get the default `FontCollection`.
18    let fonts = FontCollection::new();
19    // Create a sanitized `FontString`.
20    let sanitized = fonts.sanitize_str(" ^^^123^^^ ").unwrap();
21    // Render the `FontString` as a vector of pixel frames, with
22    // a stroke color of CYAN and a BLACK background.
23    let pixel_frames = sanitized.pixel_frames(PixelColor::CYAN, PixelColor::BLACK);
24
25    // Create a `Scroll` from the pixel frame vector.
26    let scroll = Scroll::new(&pixel_frames);
27
28    // Consume the `FrameSequence` returned by the `bottom_to_top` method.
29    scroll.bottom_to_top().for_each(|frame| {
30        println!("Now printing:");
31        println!("{:?}", frame);
32        screen.write_frame(&frame.frame_line());
33        ::std::thread::sleep(::std::time::Duration::from_millis(250));
34    });
35}
examples/scroll-left-right.rs (line 20)
13fn main() {
14    // Connect to our LED Matrix screen.
15    let mut screen = Screen::open("/dev/fb1").unwrap();
16
17    // Get the default `FontCollection`.
18    let fonts = FontCollection::new();
19    // Create a sanitized `FontString`.
20    let sanitized = fonts.sanitize_str(" >>>123>>> ").unwrap();
21    // Render the `FontString` as a vector of pixel frames, with
22    // a stroke color of YELLOW and a BLACK background.
23    let pixel_frames = sanitized.pixel_frames(PixelColor::YELLOW, PixelColor::BLACK);
24
25    // Create a `Scroll` from the pixel frame vector.
26    let scroll = Scroll::new(&pixel_frames);
27
28    // Consume the `FrameSequence` returned by the `left_to_right` method.
29    scroll.left_to_right().for_each(|frame| {
30        println!("Now printing:");
31        println!("{:?}", frame);
32        screen.write_frame(&frame.frame_line());
33        ::std::thread::sleep(::std::time::Duration::from_millis(250));
34    });
35}
examples/scroll-top-bottom.rs (line 20)
13fn main() {
14    // Connect to our LED Matrix screen.
15    let mut screen = Screen::open("/dev/fb1").unwrap();
16
17    // Get the default `FontCollection`.
18    let fonts = FontCollection::new();
19    // Create a sanitized `FontString`.
20    let sanitized = fonts.sanitize_str(" vvv123vvv ").unwrap();
21    // Render the `FontString` as a vector of pixel frames, with
22    // a stroke color of YELLOW and a BLACK background.
23    let pixel_frames = sanitized.pixel_frames(PixelColor::YELLOW, PixelColor::BLACK);
24
25    // Create a `Scroll` from the pixel frame vector.
26    let scroll = Scroll::new(&pixel_frames);
27
28    // Consume the `FrameSequence` returned by the `top_to_bottom` method.
29    scroll.top_to_bottom().for_each(|frame| {
30        println!("Now printing:");
31        println!("{:?}", frame);
32        screen.write_frame(&frame.frame_line());
33        ::std::thread::sleep(::std::time::Duration::from_millis(250));
34    });
35}
examples/scroll-right-left.rs (line 20)
13fn main() {
14    // Connect to our LED Matrix screen.
15    let mut screen = Screen::open("/dev/fb1").unwrap();
16
17    // Get the default `FontCollection`.
18    let fonts = FontCollection::new();
19    // Create a sanitized `FontString`.
20    let sanitized = fonts.sanitize_str(" «««123««« ").unwrap();
21    // Render the `FontString` as a vector of pixel frames, with
22    // a stroke color of GREEN and a BLACK background.
23    let pixel_frames = sanitized.pixel_frames(PixelColor::GREEN, PixelColor::BLACK);
24
25    // Create a `Scroll` from the pixel frame vector.
26    let scroll = Scroll::new(&pixel_frames);
27
28    // Consume the `FrameSequence` returned by the `right_to_left` method.
29    scroll.right_to_left().for_each(|frame| {
30        println!("Now printing:");
31        println!("{:?}", frame);
32        screen.write_frame(&frame.frame_line());
33        ::std::thread::sleep(::std::time::Duration::from_millis(250));
34    });
35}

Trait Implementations§

Source§

impl Clone for FontCollection

Source§

fn clone(&self) -> FontCollection

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for FontCollection

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for FontCollection

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl PartialEq for FontCollection

Source§

fn eq(&self, other: &FontCollection) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl StructuralPartialEq for FontCollection

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.