refactor(custom): split into enum with separate file per widget

This commit is contained in:
Jake Stanger
2023-04-07 20:22:31 +01:00
parent 4b4f1ffc21
commit 2ab06f044e
6 changed files with 371 additions and 309 deletions

View File

@@ -0,0 +1,43 @@
use super::{CustomWidget, CustomWidgetContext};
use crate::image::ImageProvider;
use gtk::prelude::*;
use gtk::Image;
use serde::Deserialize;
use tracing::error;
#[derive(Debug, Deserialize, Clone)]
pub struct ImageWidget {
name: Option<String>,
class: Option<String>,
src: Option<String>,
size: Option<i32>,
}
impl CustomWidget for ImageWidget {
type Widget = Image;
fn into_widget(self, context: CustomWidgetContext) -> Self::Widget {
let mut builder = Image::builder();
if let Some(name) = self.name {
builder = builder.name(&name);
}
let gtk_image = builder.build();
if let Some(src) = self.src {
let size = self.size.unwrap_or(32);
if let Err(err) = ImageProvider::parse(&src, context.icon_theme, size)
.and_then(|image| image.load_into_image(gtk_image.clone()))
{
error!("{err:?}");
}
}
if let Some(class) = self.class {
gtk_image.style_context().add_class(&class);
}
gtk_image
}
}