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>
impl<T: Lerp + Clone + PartialEq + 'static> Transition<T>
Sourcepub fn new(state: Entity<TransitionState<T>>, duration: Duration) -> Self
pub fn new(state: Entity<TransitionState<T>>, duration: Duration) -> Self
Create a new transition with the given duration using the specified state.
Sourcepub fn with_easing(self, easing: impl Fn(f32) -> f32 + 'static) -> Self
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
Sourcepub fn continuous(self, continuous: bool) -> Self
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.
Sourcepub fn evaluate(&self, window: &mut Window, cx: &mut App) -> Ref<'_, T>
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.
Sourcepub fn read_goal<'b>(&'b self, cx: &'b mut App) -> &'b T
pub fn read_goal<'b>(&'b self, cx: &'b mut App) -> &'b T
Reads the end goal of the transitions.
Sourcepub fn read_cache(&self) -> Ref<'_, Option<T>>
pub fn read_cache(&self) -> Ref<'_, Option<T>>
Reads the current value of the cached transition, if it exists.
Sourcepub fn evaluate_delta<'b>(&'b self, cx: &'b App) -> f32
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.
Sourcepub fn update<R>(
&self,
cx: &mut App,
update: impl FnOnce(&mut T, &mut Context<'_, TransitionState<T>>) -> R,
) -> bool
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.
Sourcepub fn jump_to(&self, target: T, cx: &mut App)
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.
Sourcepub fn scale_by(&self, ratio: f32, cx: &mut App)
pub fn scale_by(&self, ratio: f32, cx: &mut App)
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.
Trait Implementations§
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 Swhere
T: Real + Zero + Arithmetics + Clone,
Swp: WhitePoint<T>,
Dwp: WhitePoint<T>,
D: AdaptFrom<S, Swp, Dwp, T>,
impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for Swhere
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) -> Dwhere
M: TransformMatrix<T>,
fn adapt_into_using<M>(self, method: M) -> Dwhere
M: TransformMatrix<T>,
replaced by palette::chromatic_adaptation::AdaptIntoUnclamped
Source§fn adapt_into(self) -> D
fn adapt_into(self) -> D
replaced by palette::chromatic_adaptation::AdaptIntoUnclamped
Source§impl<T, C> AdaptIntoUnclamped<T> for Cwhere
T: AdaptFromUnclamped<C>,
impl<T, C> AdaptIntoUnclamped<T> for Cwhere
T: AdaptFromUnclamped<C>,
Source§type Scalar = <T as AdaptFromUnclamped<C>>::Scalar
type Scalar = <T as AdaptFromUnclamped<C>>::Scalar
Source§fn adapt_into_unclamped_with<M>(self) -> Twhere
M: LmsToXyz<<C as AdaptIntoUnclamped<T>>::Scalar> + XyzToLms<<C as AdaptIntoUnclamped<T>>::Scalar>,
fn adapt_into_unclamped_with<M>(self) -> Twhere
M: LmsToXyz<<C as AdaptIntoUnclamped<T>>::Scalar> + XyzToLms<<C as AdaptIntoUnclamped<T>>::Scalar>,
Source§impl<T, C> ArraysFrom<C> for Twhere
C: IntoArrays<T>,
impl<T, C> ArraysFrom<C> for Twhere
C: IntoArrays<T>,
Source§fn arrays_from(colors: C) -> T
fn arrays_from(colors: C) -> T
Source§impl<T, C> ArraysInto<C> for Twhere
C: FromArrays<T>,
impl<T, C> ArraysInto<C> for Twhere
C: FromArrays<T>,
Source§fn arrays_into(self) -> C
fn arrays_into(self) -> C
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for Uwhere
T: FromCam16Unclamped<WpParam, U>,
impl<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for Uwhere
T: FromCam16Unclamped<WpParam, U>,
Source§type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar
type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar
parameters when converting.Source§fn cam16_into_unclamped(
self,
parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>,
) -> T
fn cam16_into_unclamped( self, parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>, ) -> T
self into C, using the provided parameters.impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T, C> ComponentsFrom<C> for Twhere
C: IntoComponents<T>,
impl<T, C> ComponentsFrom<C> for Twhere
C: IntoComponents<T>,
Source§fn components_from(colors: C) -> T
fn components_from(colors: C) -> T
Source§impl<T, C> ComponentsInto<C> for T
impl<T, C> ComponentsInto<C> for T
Source§fn components_into(self) -> C
fn components_into(self) -> C
Source§impl<T> FromAngle<T> for T
impl<T> FromAngle<T> for T
Source§fn from_angle(angle: T) -> T
fn from_angle(angle: T) -> T
angle.Source§impl<T, U> FromStimulus<U> for Twhere
U: IntoStimulus<T>,
impl<T, U> FromStimulus<U> for Twhere
U: IntoStimulus<T>,
Source§fn from_stimulus(other: U) -> T
fn from_stimulus(other: U) -> T
other into Self, while performing the appropriate scaling,
rounding and clamping.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T, U> IntoAngle<U> for Twhere
U: FromAngle<T>,
impl<T, U> IntoAngle<U> for Twhere
U: FromAngle<T>,
Source§fn into_angle(self) -> U
fn into_angle(self) -> U
T.Source§impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for Uwhere
T: Cam16FromUnclamped<WpParam, U>,
impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for Uwhere
T: Cam16FromUnclamped<WpParam, U>,
Source§type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar
type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar
parameters when converting.Source§fn into_cam16_unclamped(
self,
parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>,
) -> T
fn into_cam16_unclamped( self, parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>, ) -> T
self into C, using the provided parameters.Source§impl<T, U> IntoColor<U> for Twhere
U: FromColor<T>,
impl<T, U> IntoColor<U> for Twhere
U: FromColor<T>,
Source§fn into_color(self) -> U
fn into_color(self) -> U
Source§impl<T, U> IntoColorUnclamped<U> for Twhere
U: FromColorUnclamped<T>,
impl<T, U> IntoColorUnclamped<U> for Twhere
U: FromColorUnclamped<T>,
Source§fn into_color_unclamped(self) -> U
fn into_color_unclamped(self) -> U
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
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 moreSource§impl<T> IntoStimulus<T> for T
impl<T> IntoStimulus<T> for T
Source§fn into_stimulus(self) -> T
fn into_stimulus(self) -> T
self into T, while performing the appropriate scaling,
rounding and clamping.Source§impl<T> Pointable for T
impl<T> Pointable for T
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<T, C> TryComponentsInto<C> for Twhere
C: TryFromComponents<T>,
impl<T, C> TryComponentsInto<C> for Twhere
C: TryFromComponents<T>,
Source§type Error = <C as TryFromComponents<T>>::Error
type Error = <C as TryFromComponents<T>>::Error
try_into_colors fails to cast.Source§fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>
fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>
Source§impl<T, U> TryIntoColor<U> for Twhere
U: TryFromColor<T>,
impl<T, U> TryIntoColor<U> for Twhere
U: TryFromColor<T>,
Source§fn try_into_color(self) -> Result<U, OutOfBounds<U>>
fn try_into_color(self) -> Result<U, OutOfBounds<U>>
OutOfBounds error is returned which contains
the unclamped color. Read more