1#![doc(html_favicon_url = "https://zng-ui.github.io/res/zng-logo-icon.png")]
2#![doc(html_logo_url = "https://zng-ui.github.io/res/zng-logo.png")]
3#![doc = include_str!(concat!("../", std::env!("CARGO_PKG_README")))]
9#![warn(unused_extern_crates)]
10#![warn(missing_docs)]
11
12use zng_ext_image::{ImageSource, Img};
13use zng_wgt::prelude::*;
14
15mod image_properties;
16pub use image_properties::*;
17
18pub mod border;
19pub mod fill;
20pub mod mask;
21
22use zng_wgt_access::{AccessRole, access_role};
23
24pub mod node;
25
26#[widget($crate::Image { ($source:expr) => { source = $source; }; })]
31pub struct Image(WidgetBase);
32impl Image {
33 fn widget_intrinsic(&mut self) {
34 self.widget_builder().push_build_action(on_build);
35
36 widget_set! {
37 self;
38 access_role = AccessRole::Image;
39 }
40 }
41}
42
43#[property(CONTEXT, widget_impl(Image))]
47pub fn source(wgt: &mut WidgetBuilding, source: impl IntoVar<ImageSource>) {
48 let _ = source;
49 wgt.expect_property_capture();
50}
51
52fn on_build(wgt: &mut WidgetBuilding) {
53 let node = node::image_presenter();
54 let node = node::image_error_presenter(node);
55 let node = node::image_loading_presenter(node);
56 wgt.set_child(node);
57
58 let source = wgt.capture_var::<ImageSource>(property_id!(source)).unwrap_or_else(|| {
59 let error = Img::dummy(Some(Txt::from_static("no source")));
60 let error = ImageSource::Image(var(error).read_only());
61 const_var(error)
62 });
63 wgt.push_intrinsic(NestGroup::EVENT, "image_source", |child| node::image_source(child, source));
64}