mirror of
https://codeberg.org/Fl1tzi/microdeck.git
synced 2024-05-16 01:45:49 +00:00
48 lines
1.3 KiB
Rust
48 lines
1.3 KiB
Rust
use super::load_image;
|
|
use super::Button;
|
|
use super::ButtonConfigError;
|
|
use super::ChannelReceiver;
|
|
use super::DeviceAccess;
|
|
use super::Module;
|
|
use super::ModuleObject;
|
|
use super::ReturnError;
|
|
use crate::image_rendering::ImageBuilder;
|
|
use async_trait::async_trait;
|
|
use std::{path::PathBuf, sync::Arc};
|
|
|
|
pub struct Image {
|
|
scale: f32,
|
|
path: PathBuf,
|
|
}
|
|
|
|
#[async_trait]
|
|
impl Module for Image {
|
|
async fn new(config: Arc<Button>) -> Result<ModuleObject, ButtonConfigError> {
|
|
let path = config.parse_module("path", String::new()).required()?;
|
|
let scale = config.parse_module("scale", 100.0).res()?;
|
|
|
|
let path = PathBuf::from(path);
|
|
if path.exists() == false {
|
|
return Err(ButtonConfigError::General(
|
|
"Image was not found".to_string(),
|
|
));
|
|
};
|
|
|
|
Ok(Box::new(Image { scale, path }))
|
|
}
|
|
|
|
async fn run(
|
|
&mut self,
|
|
streamdeck: DeviceAccess,
|
|
_button_receiver: ChannelReceiver,
|
|
) -> Result<(), ReturnError> {
|
|
let (h, w) = streamdeck.resolution();
|
|
let img = ImageBuilder::new(h, w)
|
|
.set_image(load_image(self.path.clone(), (h, w)).await.unwrap())
|
|
.set_image_scale(self.scale)
|
|
.build();
|
|
streamdeck.write_img(img).await.unwrap();
|
|
Ok(())
|
|
}
|
|
}
|