azalea_shell/window/wallpaper/
mod.rs1use gtk::glib::object::Cast;
4use relm4::{Component, ComponentController, ComponentParts, ComponentSender, component};
5
6use crate::component::image;
7
8crate::init! {
9 Model {
10 image: relm4::Controller<image::Model>,
11 }
12
13 Config {
14 image: Option<String>,
15 }
16}
17
18#[derive(Debug)]
19pub enum Input {
20 Update(String),
21}
22
23#[component(pub)]
24impl Component for Model {
25 type Init = Init;
26 type Input = Input;
27 type Output = ();
28 type CommandOutput = Input;
29
30 view! {
31 gtk::Window {
32 #[local_ref]
33 image_widget -> gtk::Widget {},
34 },
35 }
36
37 fn init(
38 init: Self::Init,
39 _root: Self::Root,
40 sender: ComponentSender<Self>,
41 ) -> ComponentParts<Self> {
42 let model = Model {
43 image: image::Model::builder()
44 .launch(image::Init {
45 fallback: Some(
46 gtk::gdk::Texture::from_bytes(>k::glib::Bytes::from_static(
47 include_bytes!("../../../../assets/azalea-wallpaper.png"),
48 ))
49 .unwrap(),
50 ),
51 width: None,
52 height: None,
53 })
54 .detach(),
55 };
56
57 if let Some(image) = init.config.image {
58 sender.input(Input::Update(image));
59 }
60
61 let image_widget: >k::Widget = model.image.widget().upcast_ref();
62 let widgets = view_output!();
63
64 ComponentParts { model, widgets }
65 }
66
67 fn update(&mut self, message: Self::Input, _sender: ComponentSender<Self>, _root: &Self::Root) {
68 match message {
69 Input::Update(image) => self.image.emit(image::Input::LoadImage(image)),
70 }
71 }
72
73 fn update_cmd(
74 &mut self,
75 message: Self::CommandOutput,
76 sender: ComponentSender<Self>,
77 _root: &Self::Root,
78 ) {
79 match message {
80 Input::Update(image) => sender.input(Input::Update(image)),
81 }
82 }
83}