Skip to main content

Transition

Struct Transition 

Source
pub struct Transition<T: Lerp + Clone + PartialEq + 'static> { /* private fields */ }
Expand description

An animated transition between values of type T.

Transition manages the interpolation of a value from a start state to a goal state over a specified duration. It supports customizable easing functions and can operate in continuous or non-continuous mode.

§Type Parameters

§Continuous vs Non-Continuous Mode

By default, transitions operate in continuous mode. When the goal is updated:

  • Continuous mode (continuous = true): The transition smoothly continues from the current interpolated value to the new goal.
  • Non-continuous mode (continuous = false): The transition restarts from the initial value to the new goal.

§Example

ⓘ
let transition = window.use_transition(cx, Duration::from_millis(300), |_, _| 0.0_f32)
    .with_easing(ease_in_out);

// Get the current interpolated value
let value = transition.evaluate(window, cx);

// Update the goal
transition.update(cx, |val, cx| {
    *val = 1.0;
    cx.notify();
});

Implementations§

Source§

impl<T: Lerp + Clone + PartialEq + 'static> Transition<T>

Source

pub fn new(state: Entity<TransitionState<T>>, duration: Duration) -> Self

Create a new transition with the given duration using the specified state.

Source

pub fn with_easing(self, easing: impl Fn(f32) -> f32 + 'static) -> Self

Set the easing function to use for this transition. The easing function will take a time delta between 0 and 1 and return a new delta between 0 and 1

Source

pub fn continuous(self, continuous: bool) -> Self

Sets whether the transition should be continuous.

On goal updates, transitions continue from the current value by default. If continuous is set to false, the transition will restart from its initial value.

Source

pub fn evaluate(&self, window: &mut Window, cx: &mut App) -> Ref<'_, T>

Evaluates and returns the current interpolated value of the transition.

This method calculates the value based on the elapsed time since the last goal update, applies the easing function, and caches the result. If the transition is still in progress, it automatically requests an animation frame to continue the animation.

The returned value is cached for the duration of the current frame to avoid redundant calculations when called multiple times.

Source

pub fn read_goal<'b>(&'b self, cx: &'b mut App) -> &'b T

Reads the end goal of the transitions.

Source

pub fn read_cache(&self) -> Ref<'_, Option<T>>

Reads the current value of the cached transition, if it exists.

Source

pub fn evaluate_delta<'b>(&'b self, cx: &'b App) -> f32

Evaluates and returns the current progress delta of the transition.

Returns a value between 0.0 and 1.0 representing how far the transition has progressed, after applying the easing function. A value of 0.0 means the transition just started, and 1.0 means it has completed.

Source

pub fn update<R>( &self, cx: &mut App, update: impl FnOnce(&mut T, &mut Context<'_, TransitionState<T>>) -> R, ) -> bool

Updates the goal value for the transition.

The provided closure receives a mutable reference to the current goal value and can modify it. If the goal changes (and continuous mode is enabled), a new animation will begin from the current interpolated value toward the new goal.

Returns true if the goal was actually updated (i.e., the new value differs from the previous goal), false otherwise.

Note: This method does not automatically notify GPUI of changes. You should call cx.notify() within the closure if you want to trigger a re-render.

Source

pub fn jump_to(&self, target: T, cx: &mut App)

Instantly set the transition to the given target value without animation.

Sets both the start and end goals to target so that subsequent evaluations return target immediately. This is useful for transitions that require a different start value on each update.

Source

pub fn scale_by(&self, ratio: f32, cx: &mut App)
where T: Mul<f32, Output = T>,

Scale the transition’s start and end goals by the given ratio.

This preserves the relative progress of an in-flight animation when the coordinate space changes (e.g. on window resize). Both the start and end goal are multiplied by ratio so the interpolated value remains proportionally correct.

Source

pub fn entity_id(&self) -> EntityId

Returns the entity ID associated with this transition’s state.

This can be useful for tracking or comparing transitions.

Source

pub fn reset(&self, cx: &mut App)

Resets the transition to its initial state.

This clears all progress and sets both the start and end goals back to the initial value that was provided when the transition was created. The cache is also cleared.

Trait Implementations§

Source§

impl<T: Clone + Lerp + Clone + PartialEq + 'static> Clone for Transition<T>

Source§

fn clone(&self) -> Transition<T>

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

Auto Trait Implementations§

§

impl<T> !Freeze for Transition<T>

§

impl<T> !RefUnwindSafe for Transition<T>

§

impl<T> !Send for Transition<T>

§

impl<T> !Sync for Transition<T>

§

impl<T> !UnwindSafe for Transition<T>

§

impl<T> Unpin for Transition<T>

§

impl<T> UnsafeUnpin for Transition<T>

Blanket Implementations§

Source§

impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for S
where T: Real + Zero + Arithmetics + Clone, Swp: WhitePoint<T>, Dwp: WhitePoint<T>, D: AdaptFrom<S, Swp, Dwp, T>,

Source§

fn adapt_into_using<M>(self, method: M) -> D
where M: TransformMatrix<T>,

👎Deprecated since 0.7.7:

replaced by palette::chromatic_adaptation::AdaptIntoUnclamped

Convert the source color to the destination color using the specified method.
Source§

fn adapt_into(self) -> D

👎Deprecated since 0.7.7:

replaced by palette::chromatic_adaptation::AdaptIntoUnclamped

Convert the source color to the destination color using the bradford method by default.
Source§

impl<T, C> AdaptIntoUnclamped<T> for C
where T: AdaptFromUnclamped<C>,

Source§

type Scalar = <T as AdaptFromUnclamped<C>>::Scalar

The number type that’s used as the color’s components.
Source§

fn adapt_into_unclamped_with<M>(self) -> T

Adapt a color of type Self into a color of type T, using the custom matrix M. Read more
Source§

fn adapt_into_unclamped(self) -> T
where Bradford: LmsToXyz<Self::Scalar> + XyzToLms<Self::Scalar>,

Adapt a color of type Self into a color of type T, using the Bradford matrix. Read more
Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T, C> ArraysFrom<C> for T
where C: IntoArrays<T>,

Source§

fn arrays_from(colors: C) -> T

Cast a collection of colors into a collection of arrays.
Source§

impl<T, C> ArraysInto<C> for T
where C: FromArrays<T>,

Source§

fn arrays_into(self) -> C

Cast this collection of arrays into a collection of colors.
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for U
where T: FromCam16Unclamped<WpParam, U>,

Source§

type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar

The number type that’s used in parameters when converting.
Source§

fn cam16_into_unclamped( self, parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>, ) -> T

Converts self into C, using the provided parameters.
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T, C> ComponentsFrom<C> for T
where C: IntoComponents<T>,

Source§

fn components_from(colors: C) -> T

Cast a collection of colors into a collection of color components.
Source§

impl<T, C> ComponentsInto<C> for T

Source§

fn components_into(self) -> C

Cast this collection of color components into a collection of colors. Read more
Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FromAngle<T> for T

Source§

fn from_angle(angle: T) -> T

Performs a conversion from angle.
Source§

impl<T, U> FromStimulus<U> for T
where U: IntoStimulus<T>,

Source§

fn from_stimulus(other: U) -> T

Converts other into Self, while performing the appropriate scaling, rounding and clamping.
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> IntoAngle<U> for T
where U: FromAngle<T>,

Source§

fn into_angle(self) -> U

Performs a conversion into T.
Source§

impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for U
where T: Cam16FromUnclamped<WpParam, U>,

Source§

type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar

The number type that’s used in parameters when converting.
Source§

fn into_cam16_unclamped( self, parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>, ) -> T

Converts self into C, using the provided parameters.
Source§

impl<T, U> IntoColor<U> for T
where U: FromColor<T>,

Source§

fn into_color(self) -> U

Convert into T with values clamped to the color defined bounds Read more
Source§

impl<T, U> IntoColorUnclamped<U> for T
where U: FromColorUnclamped<T>,

Source§

fn into_color_unclamped(self) -> U

Convert into T. The resulting color might be invalid in its color space Read more
Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> IntoStimulus<T> for T

Source§

fn into_stimulus(self) -> T

Converts self into T, while performing the appropriate scaling, rounding and clamping.
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, C> TryComponentsInto<C> for T
where C: TryFromComponents<T>,

Source§

type Error = <C as TryFromComponents<T>>::Error

The error for when try_into_colors fails to cast.
Source§

fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>

Try to cast this collection of color components into a collection of colors. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T, U> TryIntoColor<U> for T
where U: TryFromColor<T>,

Source§

fn try_into_color(self) -> Result<U, OutOfBounds<U>>

Convert into T, returning ok if the color is inside of its defined range, otherwise an OutOfBounds error is returned which contains the unclamped color. Read more
Source§

impl<C, U> UintsFrom<C> for U
where C: IntoUints<U>,

Source§

fn uints_from(colors: C) -> U

Cast a collection of colors into a collection of unsigned integers.
Source§

impl<C, U> UintsInto<C> for U
where C: FromUints<U>,

Source§

fn uints_into(self) -> C

Cast this collection of unsigned integers into a collection of colors.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more