image.rs

 1use gpui::*;
 2
 3#[derive(IntoElement)]
 4struct ImageFromResource {
 5    text: SharedString,
 6    resource: SharedUrl,
 7}
 8
 9impl RenderOnce for ImageFromResource {
10    fn render(self, _: &mut WindowContext) -> impl IntoElement {
11        div().child(
12            div()
13                .flex_row()
14                .size_full()
15                .gap_4()
16                .child(self.text)
17                .child(img(self.resource).w(px(512.0)).h(px(512.0))),
18        )
19    }
20}
21
22struct ImageShowcase {
23    local_resource: SharedUrl,
24    remote_resource: SharedUrl,
25}
26
27impl Render for ImageShowcase {
28    fn render(&mut self, _cx: &mut ViewContext<Self>) -> impl IntoElement {
29        div()
30            .flex()
31            .flex_row()
32            .size_full()
33            .justify_center()
34            .items_center()
35            .gap_8()
36            .bg(rgb(0xFFFFFF))
37            .child(ImageFromResource {
38                text: "Image loaded from a local file".into(),
39                resource: self.local_resource.clone(),
40            })
41            .child(ImageFromResource {
42                text: "Image loaded from a remote resource".into(),
43                resource: self.remote_resource.clone(),
44            })
45    }
46}
47
48fn main() {
49    env_logger::init();
50
51    App::new().run(|cx: &mut AppContext| {
52        cx.open_window(WindowOptions::default(), |cx| {
53            cx.new_view(|_cx| ImageShowcase {
54                local_resource: SharedUrl::file("../zed/resources/app-icon.png"),
55                remote_resource: SharedUrl::network("https://picsum.photos/512/512"),
56            })
57        });
58    });
59}