mirror of
https://codeberg.org/Fl1tzi/microdeck.git
synced 2024-05-05 05:12:45 +00:00
45 lines
1.4 KiB
Rust
45 lines
1.4 KiB
Rust
use crate::Button;
|
|
|
|
use super::Module;
|
|
use super::{ChannelReceiver, DeviceAccess, HostEvent, ReturnError};
|
|
|
|
use async_trait::async_trait;
|
|
use image::{Rgb, RgbImage};
|
|
use imageproc::drawing::draw_text_mut;
|
|
use rusttype::{Scale, Font};
|
|
|
|
/// A module which displays a counter
|
|
pub struct Counter;
|
|
|
|
#[async_trait]
|
|
impl Module for Counter {
|
|
async fn run(
|
|
streamdeck: DeviceAccess,
|
|
button_receiver: ChannelReceiver,
|
|
_config: Button,
|
|
) -> Result<(), ReturnError> {
|
|
let font_data: &[u8] = include_bytes!("../../fonts/SpaceGrotesk.ttf");
|
|
let font: Font<'static> = Font::try_from_bytes(font_data).unwrap();
|
|
|
|
let (h, w) = streamdeck.resolution();
|
|
|
|
let mut stream = button_receiver.lock().await;
|
|
|
|
let mut counter: u32 = 0;
|
|
loop {
|
|
if let Some(event) = stream.recv().await {
|
|
match event {
|
|
HostEvent::ButtonPressed => {
|
|
counter += 1;
|
|
let mut image = RgbImage::new(h as u32, w as u32);
|
|
draw_text_mut(&mut image, Rgb([255, 255, 255]), 10, 10, Scale::uniform(20.0), &font, format!("{}", counter).as_str());
|
|
streamdeck.write_img(image::DynamicImage::ImageRgb8(image)).await.unwrap();
|
|
},
|
|
_ => {}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|