Phosphor
Qt6 / Wayland library suite for window-management tools
 
Loading...
Searching...
No Matches
PhosphorAnimation::AnimatedValue< T, Space > Class Template Reference

Unified motion primitive: one value of type T transitioning from start to target over time, driven by a curve and a clock. More...

#include <phosphor-animation/include/PhosphorAnimation/AnimatedValue.h>

Public Member Functions

 AnimatedValue ()=default
 
 ~AnimatedValue ()=default
 
 AnimatedValue (const AnimatedValue &)=delete
 
AnimatedValueoperator= (const AnimatedValue &)=delete
 
 AnimatedValue (AnimatedValue &&) noexcept=default
 
AnimatedValueoperator= (AnimatedValue &&) noexcept=default
 
bool start (T from, T to, MotionSpec< T > spec)
 Begin an animation. Returns false if degenerate (from == to) or invalid.
 
bool retarget (T newTo, RetargetPolicy policy)
 Redirect in-flight animation to a new target.
 
bool retarget (T newTo)
 Convenience overload using m_spec.retargetPolicy.
 
void rebindClock (IMotionClock *newClock)
 Swap the driving clock without touching target/state/interpolation.
 
void cancel ()
 Stop animating; leave value() at its current position.
 
template<ColorSpace OtherSpace>
void seedFrom (const AnimatedValue< T, OtherSpace > &other)
 Cross-Space idle-state copy for color-space wrapper dispatch.
 
template<ColorSpace OtherSpace>
void seedSpecFrom (const AnimatedValue< T, OtherSpace > &other)
 Companion to seedFrom — copies clock + callbacks, leaves profile alone.
 
void finish ()
 Snap to target immediately, fire onValueChanged + onComplete.
 
void advance ()
 Advance animation by one paint tick.
 
value () const
 
qreal velocity () const
 
const CurveStatestate () const
 
bool isAnimating () const
 
bool isComplete () const
 
const MotionSpec< T > & spec () const
 
from () const
 
to () const
 
QRectF bounds () const
 Bounding rectangle of the swept path including curve overshoot.
 
QRectF boundsAt (QPointF anchor) const
 Damage rect anchored at anchor — QSizeF specialisation only.
 
std::pair< QSizeF, QSizeF > sweptSize () const
 (minSize, maxSize) the animation sweeps through, including overshoot.
 
bool hasSizeChange (qreal epsilonPx=kRectSizeEpsilonPx) const
 True when current size diverges from target by > epsilonPx on either axis.
 
std::pair< T, T > sweptRange () const
 (lo, hi) of a scalar animation's swept range, with overshoot.
 

Static Public Member Functions

static constexpr std::chrono::seconds safetyCap () noexcept
 

Detailed Description

template<typename T, ColorSpace Space = ColorSpace::Linear>
class PhosphorAnimation::AnimatedValue< T, Space >

Unified motion primitive: one value of type T transitioning from start to target over time, driven by a curve and a clock.

Move-only. GUI-thread only (matches IMotionClock's contract).

Constructor & Destructor Documentation

◆ AnimatedValue() [1/3]

template<typename T , ColorSpace Space = ColorSpace::Linear>
PhosphorAnimation::AnimatedValue< T, Space >::AnimatedValue ( )
default

◆ ~AnimatedValue()

template<typename T , ColorSpace Space = ColorSpace::Linear>
PhosphorAnimation::AnimatedValue< T, Space >::~AnimatedValue ( )
default

◆ AnimatedValue() [2/3]

template<typename T , ColorSpace Space = ColorSpace::Linear>
PhosphorAnimation::AnimatedValue< T, Space >::AnimatedValue ( const AnimatedValue< T, Space > &  )
delete

◆ AnimatedValue() [3/3]

template<typename T , ColorSpace Space = ColorSpace::Linear>
PhosphorAnimation::AnimatedValue< T, Space >::AnimatedValue ( AnimatedValue< T, Space > &&  )
defaultnoexcept

Member Function Documentation

◆ advance()

template<typename T , ColorSpace Space = ColorSpace::Linear>
void PhosphorAnimation::AnimatedValue< T, Space >::advance ( )
inline

Advance animation by one paint tick.

No-op when not animating. Spec callbacks must NOT destroy *this while running (see header).

◆ bounds()

template<typename T , ColorSpace Space>
requires detail::PositionalGeometric<T>
QRectF PhosphorAnimation::AnimatedValue< T, Space >::bounds ( ) const

Bounding rectangle of the swept path including curve overshoot.

◆ boundsAt()

template<typename T , ColorSpace Space>
requires detail::SizeGeometric<T>
QRectF PhosphorAnimation::AnimatedValue< T, Space >::boundsAt ( QPointF  anchor) const

Damage rect anchored at anchor — QSizeF specialisation only.

◆ cancel()

template<typename T , ColorSpace Space = ColorSpace::Linear>
void PhosphorAnimation::AnimatedValue< T, Space >::cancel ( )
inline

Stop animating; leave value() at its current position.

Does not fire onComplete — cancellation is non-completion. Leaves isAnimating() AND isComplete() both false.

◆ finish()

template<typename T , ColorSpace Space = ColorSpace::Linear>
void PhosphorAnimation::AnimatedValue< T, Space >::finish ( )
inline

Snap to target immediately, fire onValueChanged + onComplete.

◆ from()

template<typename T , ColorSpace Space = ColorSpace::Linear>
T PhosphorAnimation::AnimatedValue< T, Space >::from ( ) const
inline

◆ hasSizeChange()

template<typename T , ColorSpace Space>
requires std::same_as<T, QRectF>
bool PhosphorAnimation::AnimatedValue< T, Space >::hasSizeChange ( qreal  epsilonPx = kRectSizeEpsilonPx) const

True when current size diverges from target by > epsilonPx on either axis.

◆ isAnimating()

template<typename T , ColorSpace Space = ColorSpace::Linear>
bool PhosphorAnimation::AnimatedValue< T, Space >::isAnimating ( ) const
inline

◆ isComplete()

template<typename T , ColorSpace Space = ColorSpace::Linear>
bool PhosphorAnimation::AnimatedValue< T, Space >::isComplete ( ) const
inline

◆ operator=() [1/2]

template<typename T , ColorSpace Space = ColorSpace::Linear>
AnimatedValue & PhosphorAnimation::AnimatedValue< T, Space >::operator= ( AnimatedValue< T, Space > &&  )
defaultnoexcept

◆ operator=() [2/2]

template<typename T , ColorSpace Space = ColorSpace::Linear>
AnimatedValue & PhosphorAnimation::AnimatedValue< T, Space >::operator= ( const AnimatedValue< T, Space > &  )
delete

◆ rebindClock()

template<typename T , ColorSpace Space>
void PhosphorAnimation::AnimatedValue< T, Space >::rebindClock ( IMotionClock newClock)

Swap the driving clock without touching target/state/interpolation.

Swap the driving clock without touching target, state, or interpolation.

Rebases latched timestamps so elapsed/dt survive unchanged across the swap. Both clocks must share an epoch (epochCompatible); incompatible pairs are refused. Passing nullptr cancels the animation.

◆ retarget() [1/2]

template<typename T , ColorSpace Space = ColorSpace::Linear>
bool PhosphorAnimation::AnimatedValue< T, Space >::retarget ( newTo)
inline

Convenience overload using m_spec.retargetPolicy.

◆ retarget() [2/2]

template<typename T , ColorSpace Space = ColorSpace::Linear>
bool PhosphorAnimation::AnimatedValue< T, Space >::retarget ( newTo,
RetargetPolicy  policy 
)
inline

Redirect in-flight animation to a new target.

Returns false on rejection (no stored spec) or degenerate target (complete-in-place).

◆ safetyCap()

template<typename T , ColorSpace Space = ColorSpace::Linear>
static constexpr std::chrono::seconds PhosphorAnimation::AnimatedValue< T, Space >::safetyCap ( )
inlinestaticconstexprnoexcept

◆ seedFrom()

template<typename T , ColorSpace Space>
template<ColorSpace OtherSpace>
void PhosphorAnimation::AnimatedValue< T, Space >::seedFrom ( const AnimatedValue< T, OtherSpace > &  other)

Cross-Space idle-state copy for color-space wrapper dispatch.

Copy idle state (from, to, current, isComplete) from a sibling that differs only in ColorSpace.

No-op if either side is animating.

◆ seedSpecFrom()

template<typename T , ColorSpace Space>
template<ColorSpace OtherSpace>
void PhosphorAnimation::AnimatedValue< T, Space >::seedSpecFrom ( const AnimatedValue< T, OtherSpace > &  other)

Companion to seedFrom — copies clock + callbacks, leaves profile alone.

Copy clock + callbacks from a sibling's MotionSpec, leaving profile alone.

Keeps the target instance retarget-able after a space flip. Idle-only.

◆ spec()

template<typename T , ColorSpace Space = ColorSpace::Linear>
const MotionSpec< T > & PhosphorAnimation::AnimatedValue< T, Space >::spec ( ) const
inline

◆ start()

template<typename T , ColorSpace Space = ColorSpace::Linear>
bool PhosphorAnimation::AnimatedValue< T, Space >::start ( from,
to,
MotionSpec< T >  spec 
)
inline

Begin an animation. Returns false if degenerate (from == to) or invalid.

◆ state()

template<typename T , ColorSpace Space = ColorSpace::Linear>
const CurveState & PhosphorAnimation::AnimatedValue< T, Space >::state ( ) const
inline

◆ sweptRange()

template<typename T , ColorSpace Space>
requires detail::ScalarValue<T>
std::pair< T, T > PhosphorAnimation::AnimatedValue< T, Space >::sweptRange ( ) const

(lo, hi) of a scalar animation's swept range, with overshoot.

◆ sweptSize()

template<typename T , ColorSpace Space>
requires detail::SizeGeometric<T>
std::pair< QSizeF, QSizeF > PhosphorAnimation::AnimatedValue< T, Space >::sweptSize ( ) const

(minSize, maxSize) the animation sweeps through, including overshoot.

◆ to()

template<typename T , ColorSpace Space = ColorSpace::Linear>
T PhosphorAnimation::AnimatedValue< T, Space >::to ( ) const
inline

◆ value()

template<typename T , ColorSpace Space = ColorSpace::Linear>
T PhosphorAnimation::AnimatedValue< T, Space >::value ( ) const
inline

◆ velocity()

template<typename T , ColorSpace Space = ColorSpace::Linear>
qreal PhosphorAnimation::AnimatedValue< T, Space >::velocity ( ) const
inline

The documentation for this class was generated from the following files: