Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

With Animation

This section explains how with_animation allows you to apply an Animation to an element.

with_animation

The with_animation function takes three parameters including an ElementId, an Animation, and a impl Fn(Self, f32) -> Self. This function returns AnimationElement<Self> where Self is any type that can be converted into an element.

The closure supplies Self and a f32, inside this function is where you can style this element using the f32 delta. This delta starts from 0.0 and ends at 1.0, depending on the Animation it can repeat.

use std::time::Duration;

use gpui::{
    Animation, AnimationExt, AppContext, Application, Context, IntoElement, ParentElement, Render,
    Styled, Window, WindowOptions, blue, div, ease_in_out, rems, white,
};

struct RootView;

impl Render for RootView {
    fn render(&mut self, _window: &mut Window, _cx: &mut Context<Self>) -> impl IntoElement {
        div()
            .bg(white())
            .size_full()
            .flex()
            .items_center()
            .justify_center()
            .child(
                div().bg(blue()).with_animation(
                    "animation",
                    Animation::new(Duration::from_secs(1))
                        .repeat()
                        .with_easing(ease_in_out),
                    |this, delta| this.size(rems(delta * 5.)),
                ),
            )
    }
}

fn main() {
    Application::new().run(|app| {
        app.open_window(WindowOptions::default(), |_window, app| {
            app.new(|_| RootView)
        })
        .unwrap();
    });
}