clip/
clip.rs

1#[cfg(feature = "default")]
2extern crate sensehat_screen;
3
4#[cfg(feature = "default")]
5use sensehat_screen::Offset;
6#[cfg(feature = "default")]
7use sensehat_screen::{font_to_pixel_frame, PixelColor, PixelFrame, Screen, FONT_COLLECTION};
8
9#[cfg(not(feature = "default"))]
10fn main() {
11    unimplemented!("This examples needs the 'default' features.");
12}
13
14#[cfg(feature = "default")]
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}