Skip to main content

Class VelloAnimatedCanvasControl

Namespace: VelloSharp.Avalonia.Controls
Assembly: VelloSharp.Avalonia.Controls.dll

Extends with a render loop that drives time-based animations. Supports both dispatcher-timer based updates and composition-hosted visuals for smoother playback.

public class VelloAnimatedCanvasControl : VelloCanvasControl, INotifyPropertyChanged, IDataContextProvider, ILogical, IThemeVariantHost, IResourceHost, IResourceNode, IStyleHost, ISetLogicalParent, ISetInheritanceParent, ISupportInitialize, IStyleable, INamed, IInputElement, IDataTemplateHost, ISetterValue

Inheritance

object ← AvaloniaObject ← Animatable ← StyledElement ← Visual ← Layoutable ← Interactive ← InputElement ← Control ← VelloCanvasControlVelloAnimatedCanvasControl

Implements

INotifyPropertyChanged, IDataContextProvider, ILogical, IThemeVariantHost, IResourceHost, IResourceNode, IStyleHost, ISetLogicalParent, ISetInheritanceParent, ISupportInitialize, IStyleable, INamed, IInputElement, IDataTemplateHost, ISetterValue

Inherited Members

VelloCanvasControl.Draw, VelloCanvasControl.ShouldRenderVelloScene, VelloCanvasControl.Render(DrawingContext), VelloCanvasControl.OnDraw(VelloDrawEventArgs), VelloCanvasControl.GetFrameTimes(), Control.FocusAdornerProperty, Control.TagProperty, Control.ContextMenuProperty, Control.ContextFlyoutProperty, Control.RequestBringIntoViewEvent, Control.ContextRequestedEvent, Control.LoadedEvent, Control.UnloadedEvent, Control.SizeChangedEvent, Control.GetTemplateFocusTarget(), Control.OnLoaded(RoutedEventArgs), Control.OnUnloaded(RoutedEventArgs), Control.OnSizeChanged(SizeChangedEventArgs), Control.OnAttachedToVisualTreeCore(VisualTreeAttachmentEventArgs), Control.OnDetachedFromVisualTreeCore(VisualTreeAttachmentEventArgs), Control.OnGotFocus(GotFocusEventArgs), Control.OnLostFocus(RoutedEventArgs), Control.OnCreateAutomationPeer(), Control.OnPointerReleased(PointerReleasedEventArgs), Control.OnKeyUp(KeyEventArgs), Control.OnPropertyChanged(AvaloniaPropertyChangedEventArgs), Control.FocusAdorner, Control.DataTemplates, Control.ContextMenu, Control.ContextFlyout, Control.IsLoaded, Control.Tag, Control.ContextRequested, Control.Loaded, Control.Unloaded, Control.SizeChanged, InputElement.FocusableProperty, InputElement.IsEnabledProperty, InputElement.IsEffectivelyEnabledProperty, InputElement.CursorProperty, InputElement.IsKeyboardFocusWithinProperty, InputElement.IsFocusedProperty, InputElement.IsHitTestVisibleProperty, InputElement.IsPointerOverProperty, InputElement.IsTabStopProperty, InputElement.GotFocusEvent, InputElement.LostFocusEvent, InputElement.KeyDownEvent, InputElement.KeyUpEvent, InputElement.TabIndexProperty, InputElement.TextInputEvent, InputElement.TextInputMethodClientRequestedEvent, InputElement.PointerEnteredEvent, InputElement.PointerExitedEvent, InputElement.PointerMovedEvent, InputElement.PointerPressedEvent, InputElement.PointerReleasedEvent, InputElement.PointerCaptureLostEvent, InputElement.PointerWheelChangedEvent, InputElement.TappedEvent, InputElement.HoldingEvent, InputElement.DoubleTappedEvent, InputElement.Focus(NavigationMethod, KeyModifiers), InputElement.OnDetachedFromVisualTreeCore(VisualTreeAttachmentEventArgs), InputElement.OnAccessKey(RoutedEventArgs), InputElement.OnAttachedToVisualTreeCore(VisualTreeAttachmentEventArgs), InputElement.OnGotFocus(GotFocusEventArgs), InputElement.OnLostFocus(RoutedEventArgs), InputElement.OnKeyDown(KeyEventArgs), InputElement.OnKeyUp(KeyEventArgs), InputElement.OnTextInput(TextInputEventArgs), InputElement.OnPointerEntered(PointerEventArgs), InputElement.OnPointerExited(PointerEventArgs), InputElement.OnPointerMoved(PointerEventArgs), InputElement.OnPointerPressed(PointerPressedEventArgs), InputElement.OnPointerReleased(PointerReleasedEventArgs), InputElement.OnPointerCaptureLost(PointerCaptureLostEventArgs), InputElement.OnPointerWheelChanged(PointerWheelEventArgs), InputElement.OnPropertyChanged(AvaloniaPropertyChangedEventArgs), InputElement.UpdateIsEffectivelyEnabled(), InputElement.Focusable, InputElement.IsEnabled, InputElement.Cursor, InputElement.IsKeyboardFocusWithin, InputElement.IsFocused, InputElement.IsHitTestVisible, InputElement.IsPointerOver, InputElement.IsTabStop, InputElement.IsEffectivelyEnabled, InputElement.TabIndex, InputElement.KeyBindings, InputElement.IsEnabledCore, InputElement.GestureRecognizers, InputElement.GotFocus, InputElement.LostFocus, InputElement.KeyDown, InputElement.KeyUp, InputElement.TextInput, InputElement.TextInputMethodClientRequested, InputElement.PointerEntered, InputElement.PointerExited, InputElement.PointerMoved, InputElement.PointerPressed, InputElement.PointerReleased, InputElement.PointerCaptureLost, InputElement.PointerWheelChanged, InputElement.Tapped, InputElement.Holding, InputElement.DoubleTapped, Interactive.AddHandler(RoutedEvent, Delegate, RoutingStrategies, bool), Interactive.AddHandler<TEventArgs>(RoutedEvent<TEventArgs>, EventHandler<TEventArgs>?, RoutingStrategies, bool), Interactive.RemoveHandler(RoutedEvent, Delegate), Interactive.RemoveHandler<TEventArgs>(RoutedEvent<TEventArgs>, EventHandler<TEventArgs>?), Interactive.RaiseEvent(RoutedEventArgs), Interactive.BuildEventRoute(RoutedEvent), Layoutable.DesiredSizeProperty, Layoutable.WidthProperty, Layoutable.HeightProperty, Layoutable.MinWidthProperty, Layoutable.MaxWidthProperty, Layoutable.MinHeightProperty, Layoutable.MaxHeightProperty, Layoutable.MarginProperty, Layoutable.HorizontalAlignmentProperty, Layoutable.VerticalAlignmentProperty, Layoutable.UseLayoutRoundingProperty, Layoutable.UpdateLayout(), Layoutable.ApplyTemplate(), Layoutable.Measure(Size), Layoutable.Arrange(Rect), Layoutable.InvalidateMeasure(), Layoutable.InvalidateArrange(), Layoutable.AffectsMeasure<T>(params AvaloniaProperty[]), Layoutable.AffectsArrange<T>(params AvaloniaProperty[]), Layoutable.MeasureCore(Size), Layoutable.MeasureOverride(Size), Layoutable.ArrangeCore(Rect), Layoutable.ArrangeOverride(Size), Layoutable.OnAttachedToVisualTreeCore(VisualTreeAttachmentEventArgs), Layoutable.OnDetachedFromVisualTreeCore(VisualTreeAttachmentEventArgs), Layoutable.OnMeasureInvalidated(), Layoutable.OnPropertyChanged(AvaloniaPropertyChangedEventArgs), Layoutable.OnVisualParentChanged(Visual?, Visual?), Layoutable.Width, Layoutable.Height, Layoutable.MinWidth, Layoutable.MaxWidth, Layoutable.MinHeight, Layoutable.MaxHeight, Layoutable.Margin, Layoutable.HorizontalAlignment, Layoutable.VerticalAlignment, Layoutable.DesiredSize, Layoutable.IsMeasureValid, Layoutable.IsArrangeValid, Layoutable.UseLayoutRounding, Layoutable.EffectiveViewportChanged, Layoutable.LayoutUpdated, Visual.BoundsProperty, Visual.ClipToBoundsProperty, Visual.ClipProperty, Visual.IsVisibleProperty, Visual.OpacityProperty, Visual.OpacityMaskProperty, Visual.EffectProperty, Visual.HasMirrorTransformProperty, Visual.RenderTransformProperty, Visual.RenderTransformOriginProperty, Visual.FlowDirectionProperty, Visual.VisualParentProperty, Visual.ZIndexProperty, Visual.GetFlowDirection(Visual), Visual.SetFlowDirection(Visual, FlowDirection), Visual.InvalidateVisual(), Visual.Render(DrawingContext), Visual.AffectsRender<T>(params AvaloniaProperty[]), Visual.OnPropertyChanged(AvaloniaPropertyChangedEventArgs), Visual.LogicalChildrenCollectionChanged(object?, NotifyCollectionChangedEventArgs), Visual.OnAttachedToVisualTreeCore(VisualTreeAttachmentEventArgs), Visual.OnDetachedFromVisualTreeCore(VisualTreeAttachmentEventArgs), Visual.OnAttachedToVisualTree(VisualTreeAttachmentEventArgs), Visual.OnDetachedFromVisualTree(VisualTreeAttachmentEventArgs), Visual.OnVisualParentChanged(Visual?, Visual?), Visual.InvalidateMirrorTransform(), Visual.Bounds, Visual.ClipToBounds, Visual.Clip, Visual.IsEffectivelyVisible, Visual.IsVisible, Visual.Opacity, Visual.OpacityMask, Visual.Effect, Visual.HasMirrorTransform, Visual.RenderTransform, Visual.RenderTransformOrigin, Visual.FlowDirection, Visual.ZIndex, Visual.VisualChildren, Visual.VisualRoot, Visual.BypassFlowDirectionPolicies, Visual.AttachedToVisualTree, Visual.DetachedFromVisualTree, StyledElement.DataContextProperty, StyledElement.NameProperty, StyledElement.ParentProperty, StyledElement.TemplatedParentProperty, StyledElement.ThemeProperty, StyledElement.BeginInit(), StyledElement.EndInit(), StyledElement.ApplyStyling(), StyledElement.InitializeIfNeeded(), StyledElement.TryGetResource(object, ThemeVariant?, out object?), StyledElement.LogicalChildrenCollectionChanged(object?, NotifyCollectionChangedEventArgs), StyledElement.OnAttachedToLogicalTree(LogicalTreeAttachmentEventArgs), StyledElement.OnDetachedFromLogicalTree(LogicalTreeAttachmentEventArgs), StyledElement.OnDataContextChanged(EventArgs), StyledElement.OnDataContextBeginUpdate(), StyledElement.OnDataContextEndUpdate(), StyledElement.OnInitialized(), StyledElement.OnPropertyChanged(AvaloniaPropertyChangedEventArgs), StyledElement.Name, StyledElement.Classes, StyledElement.DataContext, StyledElement.IsInitialized, StyledElement.Styles, StyledElement.StyleKey, StyledElement.Resources, StyledElement.TemplatedParent, StyledElement.Theme, StyledElement.LogicalChildren, StyledElement.PseudoClasses, StyledElement.StyleKeyOverride, StyledElement.Parent, StyledElement.ActualThemeVariant, StyledElement.AttachedToLogicalTree, StyledElement.DetachedFromLogicalTree, StyledElement.DataContextChanged, StyledElement.Initialized, StyledElement.ResourcesChanged, StyledElement.ActualThemeVariantChanged, Animatable.TransitionsProperty, Animatable.OnPropertyChangedCore(AvaloniaPropertyChangedEventArgs), Animatable.Transitions, AvaloniaObject.CheckAccess(), AvaloniaObject.VerifyAccess(), AvaloniaObject.ClearValue(AvaloniaProperty), AvaloniaObject.ClearValue<T>(AvaloniaProperty<T>), AvaloniaObject.ClearValue<T>(StyledProperty<T>), AvaloniaObject.ClearValue<T>(DirectPropertyBase<T>), AvaloniaObject.Equals(object?), AvaloniaObject.GetHashCode(), AvaloniaObject.GetValue(AvaloniaProperty), AvaloniaObject.GetValue<T>(StyledProperty<T>), AvaloniaObject.GetValue<T>(DirectPropertyBase<T>), AvaloniaObject.GetBaseValue<T>(StyledProperty<T>), AvaloniaObject.IsAnimating(AvaloniaProperty), AvaloniaObject.IsSet(AvaloniaProperty), AvaloniaObject.SetValue(AvaloniaProperty, object?, BindingPriority), AvaloniaObject.SetValue<T>(StyledProperty<T>, T, BindingPriority), AvaloniaObject.SetValue<T>(DirectPropertyBase<T>, T), AvaloniaObject.SetCurrentValue(AvaloniaProperty, object?), AvaloniaObject.SetCurrentValue<T>(StyledProperty<T>, T), AvaloniaObject.Bind(AvaloniaProperty, IBinding), AvaloniaObject.Bind(AvaloniaProperty, IObservable<object?>, BindingPriority), AvaloniaObject.Bind<T>(StyledProperty<T>, IObservable<object?>, BindingPriority), AvaloniaObject.Bind<T>(StyledProperty<T>, IObservable<T>, BindingPriority), AvaloniaObject.Bind<T>(StyledProperty<T>, IObservable<BindingValue<T>>, BindingPriority), AvaloniaObject.Bind<T>(DirectPropertyBase<T>, IObservable<object?>), AvaloniaObject.Bind<T>(DirectPropertyBase<T>, IObservable<T>), AvaloniaObject.Bind<T>(DirectPropertyBase<T>, IObservable<BindingValue<T>>), AvaloniaObject.CoerceValue(AvaloniaProperty), AvaloniaObject.UpdateDataValidation(AvaloniaProperty, BindingValueType, Exception?), AvaloniaObject.OnPropertyChangedCore(AvaloniaPropertyChangedEventArgs), AvaloniaObject.OnPropertyChanged(AvaloniaPropertyChangedEventArgs), AvaloniaObject.RaisePropertyChanged<T>(DirectPropertyBase<T>, T, T), AvaloniaObject.SetAndRaise<T>(DirectPropertyBase<T>, ref T, T), AvaloniaObject.InheritanceParent, AvaloniaObject.this[AvaloniaProperty], AvaloniaObject.this[IndexerDescriptor], AvaloniaObject.PropertyChanged, object.Equals(object?), object.Equals(object?, object?), object.GetHashCode(), object.GetType(), object.MemberwiseClone(), object.ReferenceEquals(object?, object?), object.ToString()

Fields

FrameRateProperty

Defines the property.

public static readonly StyledProperty<double> FrameRateProperty

Field Value

StyledProperty<double>

IsPlayingProperty

Defines the property.

public static readonly StyledProperty<bool> IsPlayingProperty

Field Value

StyledProperty<bool>

PlaybackRateProperty

Defines the property.

public static readonly StyledProperty<double> PlaybackRateProperty

Field Value

StyledProperty<double>

TotalTimeProperty

Defines the property.

public static readonly DirectProperty<VelloAnimatedCanvasControl, TimeSpan> TotalTimeProperty

Field Value

DirectProperty<VelloAnimatedCanvasControl, TimeSpan>

Properties

FrameRate

Gets or sets the target frame rate in frames per second for the dispatcher-timer fallback path.

public double FrameRate { get; set; }

Property Value

double

IsPlaying

Gets or sets a value indicating whether the animation loop is running.

public bool IsPlaying { get; set; }

Property Value

bool

PlaybackRate

Gets or sets the playback rate applied when composition drives the animation. Values <= 0 fallback to 1.0.

public double PlaybackRate { get; set; }

Property Value

double

ShouldRenderVelloScene

protected override bool ShouldRenderVelloScene { get; }

Property Value

bool

TotalTime

Gets the accumulated playback time.

public TimeSpan TotalTime { get; }

Property Value

TimeSpan

Methods

GetFrameTimes()

Allows derived controls to provide timing data that is passed to .

protected override (TimeSpan Total, TimeSpan Delta) GetFrameTimes()

Returns

(TimeSpan Total, TimeSpan Delta)

The total and delta times reported for the next draw.

OnAttachedToVisualTree(VisualTreeAttachmentEventArgs)

Called when the control is added to a rooted visual tree.

protected override void OnAttachedToVisualTree(VisualTreeAttachmentEventArgs e)

Parameters

e VisualTreeAttachmentEventArgs

The event args.

OnDetachedFromVisualTree(VisualTreeAttachmentEventArgs)

Called when the control is removed from a rooted visual tree.

protected override void OnDetachedFromVisualTree(VisualTreeAttachmentEventArgs e)

Parameters

e VisualTreeAttachmentEventArgs

The event args.

OnPropertyChanged(AvaloniaPropertyChangedEventArgs)

Called when a avalonia property changes on the object.

protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change)

Parameters

change AvaloniaPropertyChangedEventArgs

The property change details.

Pause()

Pauses playback without resetting the accumulated time.

public void Pause()

Play()

Starts playback if it is currently stopped or paused.

public void Play()

Redraw()

Requests a redraw of the current frame without advancing time.

public void Redraw()

Reset()

Resets the accumulated playback time to zero. When the control is playing it restarts immediately.

public void Reset()

Resume()

Alias for .

public void Resume()

Seek(TimeSpan)

Seeks to the specified playback position.

public void Seek(TimeSpan position)

Parameters

position TimeSpan

The desired playback position. Negative values are clamped to zero.

Stop()

Stops playback and resets the accumulated time to zero.

public void Stop()