ZIm/crates/gpui/examples
Mikayla Maki 516f7b3642
Add Loading and Fallback States to Image Elements (via StyledImage) (#20371)
@iamnbutler edit:

This pull request enhances the image element by introducing the ability
to display loading and fallback states.

Changes:

- Implemented the loading and fallback states for image elements using
`.with_loading` and `.with_fallback` respectively.
- Introduced the `StyledImage` trait and `ImageStyle` to enable a fluent
API for changing image styles across image types (`Img`,
`Stateful<Img>`, etc).

Example Usage:

```rust
fn loading_element() -> impl IntoElement {
    div().size_full().flex_none().p_0p5().rounded_sm().child(
        div().size_full().with_animation(
            "loading-bg",
            Animation::new(Duration::from_secs(3))
                .repeat()
                .with_easing(pulsating_between(0.04, 0.24)),
            move |this, delta| this.bg(black().opacity(delta)),
        ),
    )
}

fn fallback_element() -> impl IntoElement {
    let fallback_color: Hsla = black().opacity(0.5);

    div().size_full().flex_none().p_0p5().child(
        div()
            .size_full()
            .flex()
            .items_center()
            .justify_center()
            .rounded_sm()
            .text_sm()
            .text_color(fallback_color)
            .border_1()
            .border_color(fallback_color)
            .child("?"),
    )
}

impl Render for ImageLoadingExample {
    fn render(&mut self, _cx: &mut ViewContext<Self>) -> impl IntoElement {
        img("some/image/path")
            .id("image-1")
            .with_fallback(|| Self::fallback_element().into_any_element())
            .with_loading(|| Self::loading_element().into_any_element())
    }
}
```

Note:

An `Img` must have an `id` to be able to add a loading state.

Release Notes:

- N/A

---------

Co-authored-by: nate <nate@zed.dev>
Co-authored-by: michael <michael@zed.dev>
Co-authored-by: Nate Butler <iamnbutler@gmail.com>
Co-authored-by: Antonio Scandurra <me@as-cii.com>
2024-11-15 19:12:01 -08:00
..
image Add Loading and Fallback States to Image Elements (via StyledImage) (#20371) 2024-11-15 19:12:01 -08:00
svg gpui: Add svg example (#17315) 2024-09-03 13:15:37 -04:00
animation.rs chore: Fix several style lints (#17488) 2024-09-06 11:58:39 +02:00
gif_viewer.rs Add Loading and Fallback States to Image Elements (via StyledImage) (#20371) 2024-11-15 19:12:01 -08:00
hello_world.rs Linux window decorations (#13611) 2024-07-03 11:28:09 -07:00
image_loading.rs Add Loading and Fallback States to Image Elements (via StyledImage) (#20371) 2024-11-15 19:12:01 -08:00
input.rs Deadkeys 2 (#20612) 2024-11-13 10:42:08 -07:00
opacity.rs chore: Fix several style lints (#17488) 2024-09-06 11:58:39 +02:00
ownership_post.rs More adjustments for blog post 2024-01-18 07:01:46 -07:00
set_menus.rs gpui: Update Menu name to use SharedString type to support more types (#14791) 2024-07-19 08:51:31 -04:00
shadow.rs Adjust erf estimation function (#15423) 2024-08-07 14:12:26 +02:00
text_wrapper.rs gpui: Fix CJK line wrap for GPUI text render (#17737) 2024-09-12 15:55:03 -04:00
uniform_list.rs gpui: Add example for uniform_list (#17421) 2024-09-05 14:24:10 -04:00
window.rs gpui: Fix hide, activate method on Windows to hide/show application (#18164) 2024-09-30 23:20:24 -07:00
window_positioning.rs gpui: Fix cx.bounds, cx.open_window position on macOS (#14044) 2024-07-10 09:52:33 -06:00
window_shadow.rs Linux window decorations (#13611) 2024-07-03 11:28:09 -07:00