class new in Git master
#include <Magnum/Ui/GenericAnimator.h>
GenericDataAnimator Generic animator with animations attached to layer data.
Each animation is a function that gets called with an associated node handle and an animation factor in the range. The function can then call arbitrary data-related setters on the UI instance, on layers or elsewhere. Use GenericNodeAnimator for animations associated with just nodes, GenericAnimator is then for animations not tied to either.
Setting up an animator instance
The animator doesn't have any shared state or configuration, so it's just about constructing it from a fresh AbstractUserInterface::
Ui::AbstractLayer& layer = …; Ui::GenericDataAnimator& animator = ui.setGenericAnimatorInstance( Containers::pointer<Ui::GenericDataAnimator>(ui.createAnimator())); animator.setLayer(layer);
Unlike builtin layers or layouters, the default UserInterface implementation doesn't implicitly provide a GenericDataAnimator instance.
Creating animations
An animation is created by calling create() with an appropriate function taking the data handle and interpolation factor as arguments, an easing function from Animation::
Ui::BaseLayer& baseLayer = …; Ui::DataHandle progressbar = …; Float from = …; Float to = …; animator.create([&baseLayer, from, to](Ui::DataHandle progressbar, Float factor) { baseLayer.setPadding(progressbar, {Math::lerp(from, to, factor), 0.0f, 0.0f, 0.0f}); }, Animation::Easing::cubicIn, now, 0.5_sec, progressbar);
If the function performs easing on its own, pass Animation::
The animation function is free to do anything except for touching state related to the animations or associated data or nodes, such as playing or stopping the animations, or creating, removing animations, data or nodes. This isn't checked or enforced in any way, but the behavior of doing so is undefined.
Animation lifetime and data attachment
As with all other animations, they're implicitly removed once they're played. Pass AnimationFlag::
As the animations are associated with data they animate, when the data the animation is attached to, or the node the data is attached to, is removed, the animation gets removed as well. If you want to preserve the animation when the data is removed, call attach(AnimationHandle, DataHandle) with DataHandle::
Base classes
- class AbstractGenericAnimator new in Git master
- Base for generic animators.
Constructors, destructors, conversion operators
- GenericDataAnimator(AnimatorHandle handle) explicit
- Constructor.
- GenericDataAnimator(const GenericDataAnimator&) deleted
- Copying is not allowed.
- GenericDataAnimator(GenericDataAnimator&&) noexcept
- Move constructor.
Public functions
- auto operator=(const GenericDataAnimator&) -> GenericDataAnimator& deleted
- Copying is not allowed.
- auto operator=(GenericDataAnimator&&) -> GenericDataAnimator& noexcept
- Move assignment.
- void setLayer(const AbstractLayer& layer)
- Set a layer associated with this animator.
- auto usedAllocatedAnimationCount() const -> UnsignedInt
- Count of allocated animation functions.
-
auto create(Containers::
Function<void(DataHandle data, Float factor)>&& animation, Float(*)(Float) easing, Nanoseconds played, Nanoseconds duration, DataHandle data, UnsignedInt repeatCount = 1, AnimationFlags flags = {}) -> AnimationHandle - Create an animation.
-
auto create(Containers::
Function<void(DataHandle data, Float factor)>&& animator, Float(*)(Float) easing, Nanoseconds played, Nanoseconds duration, LayerDataHandle data, UnsignedInt repeatCount = 1, AnimationFlags flags = {}) -> AnimationHandle - Create an animation assuming the data it's attached to belongs to the layer the animator is registered with.
- void remove(AnimationHandle handle)
- Remove an animation.
- void remove(AnimatorDataHandle handle)
- Remove an animation assuming it belongs to this animator.
- auto easing(AnimationHandle handle) -> auto
- Animation easing function.
- auto easing(AnimatorDataHandle handle) -> auto
- Animation easing function assuming it belongs to this animator.
Function documentation
Magnum:: Ui:: GenericDataAnimator:: GenericDataAnimator(AnimatorHandle handle) explicit
Constructor.
Parameters | |
---|---|
handle | Handle returned by AbstractUserInterface:: |
Magnum:: Ui:: GenericDataAnimator:: GenericDataAnimator(GenericDataAnimator&&) noexcept
Move constructor.
Performs a destructive move, i.e. the original object isn't usable afterwards anymore.
void Magnum:: Ui:: GenericDataAnimator:: setLayer(const AbstractLayer& layer)
Set a layer associated with this animator.
Expects that this function hasn't been called yet. The associated layer handle is subsequently available in layer() const.
UnsignedInt Magnum:: Ui:: GenericDataAnimator:: usedAllocatedAnimationCount() const
Count of allocated animation functions.
Always at most usedCount(). Counts all animation functions that capture non-trivially-destructible state or state that's too large to be stored in-place. The operation is done with a complexity where is capacity().
AnimationHandle Magnum:: Ui:: GenericDataAnimator:: create(Containers:: Function<void(DataHandle data, Float factor)>&& animation,
Float(*)(Float) easing,
Nanoseconds played,
Nanoseconds duration,
DataHandle data,
UnsignedInt repeatCount = 1,
AnimationFlags flags = {})
Create an animation.
Parameters | |
---|---|
animation | Animation function |
easing | Easing function between 0.0f and 1.0f , applied to the factor passed to animation . Pick one from Animation:: |
played | Time at which the animation is played. Use Nanoseconds:: |
duration | Duration of a single play of the animation |
data | Data the animation is attached to. Use DataHandle:: |
repeatCount | Repeat count. Use 0 for an indefinitely repeating animation. |
flags | Flags |
Expects that setLayer() has been already called and that both animation
and easing
are not nullptr
. Delegates to AbstractAnimator::
Unless data
is DataHandle::animator
is matching the layer handle passed to setLayer(). Assuming the easing
function correctly maps 0.0f
and 1.0f
to themselves, the animation function is guaranteed to be called with factor
being exactly 1.0f
once the animation is stopped. Other than that, it may be an arbitrary value from the range.
AnimationHandle Magnum:: Ui:: GenericDataAnimator:: create(Containers:: Function<void(DataHandle data, Float factor)>&& animator,
Float(*)(Float) easing,
Nanoseconds played,
Nanoseconds duration,
LayerDataHandle data,
UnsignedInt repeatCount = 1,
AnimationFlags flags = {})
Create an animation assuming the data it's attached to belongs to the layer the animator is registered with.
Compared to create(Containers::Function<void(DataHandle, Float)>&&, Float(*)(Float), Nanoseconds, Nanoseconds, DataHandle, UnsignedInt, AnimationFlags) delegates to AbstractAnimator::
Unless data
is LayerDataHandle::animator
is matching the layer handle passed to setLayer().
void Magnum:: Ui:: GenericDataAnimator:: remove(AnimationHandle handle)
Remove an animation.
Expects that handle
is valid. Delegates to AbstractAnimator::
void Magnum:: Ui:: GenericDataAnimator:: remove(AnimatorDataHandle handle)
Remove an animation assuming it belongs to this animator.
Compared to remove(AnimationHandle) delegates to AbstractAnimator::
auto Magnum:: Ui:: GenericDataAnimator:: easing(AnimationHandle handle)
Animation easing function.
Expects that handle
is valid. The returned pointer is never nullptr
.
auto Magnum:: Ui:: GenericDataAnimator:: easing(AnimatorDataHandle handle)
Animation easing function assuming it belongs to this animator.
Like easing(AnimationHandle) const but without checking that handle
indeed belongs to this animator. See its documentation for more information.