zng_wgt_image/
lib.rs
1#![doc(html_favicon_url = "https://raw.githubusercontent.com/zng-ui/zng/main/examples/image/res/zng-logo-icon.png")]
2#![doc(html_logo_url = "https://raw.githubusercontent.com/zng-ui/zng/main/examples/image/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 mask;
20
21use zng_wgt_access::{AccessRole, access_role};
22
23pub mod node;
24
25#[widget($crate::Image {
30 ($source:expr) => {
31 source = $source;
32 };
33})]
34pub struct Image(WidgetBase);
35impl Image {
36 fn widget_intrinsic(&mut self) {
37 self.widget_builder().push_build_action(on_build);
38
39 widget_set! {
40 self;
41 access_role = AccessRole::Image;
42 }
43 }
44}
45
46#[property(CONTEXT, capture, widget_impl(Image))]
50pub fn source(source: impl IntoVar<ImageSource>) {}
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 LocalVar(error).boxed()
62 });
63 wgt.push_intrinsic(NestGroup::EVENT, "image_source", |child| node::image_source(child, source));
64}