Table of Contents

Namespace DrawnUi.Draw

Classes

ActionOnTickAnimator

Just register this animator to run custom code on every frame creating a kind of game loop if needed.

AddGestures

For fast and lazy gestures handling to attach to dran controls inside the canvas only

AddGestures.GestureListener
AdjustBrightnessEffect
AdjustRGBEffect
AnimateExtensions
AnimatedShaderEffect

Animated shader effect driven by a RangeAnimator (progress 0→1). Attach to a SkiaImage (or any cached control), call Play(), remove on Completed.

Usage: var fx = new AnimatedShaderEffect { ShaderSource = @"Shaders\yourshader.sksl" }; fx.Completed += (s, e) => { _backgroundImage.FX.Remove(fx); fx.Dispose(); }; _backgroundImage.FX.Add(fx); fx.Play(_backgroundImage);

AnimatorBase
BaseChainedEffect
BaseColorFilterEffect
BaseImageFilterEffect
BindToParentContextExtension

Compiled-bindings-friendly implementation for "Source.Parent.BindingContext.Path"

BindablePropertyExtension
BlinkAnimator
BlurEffect
CachedGradient
CachedObject
CachedShader
CachedShadow
CellWIthHeight
ChainAdjustBrightnessEffect
ChainAdjustContrastEffect
ChainAdjustLightnessEffect
ChainAdjustRGBEffect
ChainColorPresetEffect
ChainDropShadowsEffect
ChainSaturationEffect
ChainTintWithAlphaEffect
ColorBlendAnimator
ColorExtensions
ColorPresetEffect
ContainsPointResult
ContentLayout
ContrastEffect
ControlInStack
ControlTappedEventArgs
ControlsTracker
CriticallyDampedSpringTimingParameters
DataContextIterator
DebugImage

Control for displaying used Surface as a preview image, for debugging purposes. Do not use this in prod, this will be invalidated every frame, causing non-stop screen update.

DecelerationTimingParameters
DecelerationTimingVectorParameters
DescendingZIndexGestureListenerComparer
DrawingRect
DrawnExtensions
DrawnFontAttributesConverter

Forked from Microsoft.Maui.Controls as using original class was breaking XAML HotReload for some unknown reason

DrawnUiStartupSettings
DropShadowEffect
DynamicGrid<T>
EdgeGlowAnimator
ElementRenderer
FindTagExtension
FluentExtensions

Provides extension methods for fluent API design pattern with DrawnUI controls

FrameTimeInterpolator

Interpolated time between frames, works in seconds. See examples..

InfiniteLayout
KeyboardManager
KeyedActionQueue<TKey>
LayoutStructure
LoadedImageSource
LongKeyGenerator

Ultra-fast key generator for queues using long keys

Looper
LottieRefreshIndicator
MauiKeyMapper
MauiThemeProvider

MAUI-specific theme provider implementation

MeasuredListCell
MeasuredListCells
ObservableAttachedItemsCollection<T>

We have to subclass ObservableCollection to avoid it sending empty oldItems upon Reset.

OuterGlowEffect
PendulumAnimator
PerpetualPendulumAnimator
PingPongAnimator
Plane
PlanesScroll

Provides the ability to create/draw views directly while scrolling. Content will be generated dynamically, instead of the usual way. This control main logic is inside PaintOnPlane override, also it hacks content to work without a real Content. You have to override GetMeasuredView to provide your views to be drawn upon passed index. TODO: for horizonal

PointIsInsideResult
ProgressAnimator
ProgressTrail

Progress trail component for linear progress bars. Similar to SliderTrail but optimized for progress display.

RangeAnimator
RangeVectorAnimator
RefreshIndicator
RenderDrawingContext
RenderLabel
RenderObject
RenderTreeRenderer
RenderingAnimator

This animator renders on canvas instead of just updating a value

RippleAnimator
SKPaintExtensions

Guarded setters for SKPaint properties. Each method compares a managed shadow value before calling the native P/Invoke setter, eliminating redundant interop when the value has not changed between frames. Methods are prefixed with "Guard" to avoid conflicts with SkiaSharp's own instance methods.

SaturationEffect
ScaledSize
ScrollFlingAnimator
ScrollFlingVectorAnimator
ShaderDoubleTexturesEffect

Base shader effect class that has 2 input textures.

ShimmerAnimator
Sk3dView

Custom implementation of Android's Camera 3D helper for SkiaSharp

SkCamera3D
SkCamera3D2
SkPatch3D
SkiaBackdrop

Warning with CPU-rendering edges will not be blurred: https://issues.skia.org/issues/40036320

SkiaBevel

Defines properties for creating bevel or emboss effects on shapes.

SkiaButton

Button-like control, can include any content inside. It's either you use default content (todo templates?..) or can include any content inside, and properties will by applied by convention to a SkiaLabel with Tag MainLabel, SkiaShape with Tag MainFrame. At the same time you can override ApplyProperties() and apply them to your content yourself. Convention elements tags: BtnText, BtnShape.

SkiaButton.ButtonElevationShadowEffect
SkiaButton.ButtonLabel
SkiaCheckbox

Switch-like control, can include any content inside. It's aither you use default content (todo templates?..) or can include any content inside, and properties will by applied by convention to a SkiaShape with Tag Frame, SkiaShape with Tag Thumb. At the same time you can override ApplyProperties() and apply them to your content yourself.

SkiaControl
SkiaControl.DisposableAction
SkiaControlWithRect

Used inside RenderingTree. Rect is real drawing position

SkiaControlsObservable
SkiaCursor
SkiaDoubleAttachedTexturesEffect
SkiaDrawingContext
SkiaEditor
SkiaEffect
SkiaFontManager
SkiaFrame

Alias for SkiaShape type Rectangle

SkiaGesturesInfo
SkiaGesturesParameters
SkiaGradient
SkiaGrid

MAUI Grid alternative

SkiaHotspot
SkiaHotspotZoom
SkiaHoverMask

Paints the parent view with the background color with a clipped viewport oth this view size

SkiaImage
SkiaImage.RescaledBitmap
SkiaImageEffects
SkiaImageManager
SkiaImageManager.QueueItem
SkiaImageTiles
SkiaLabel

A high-performance text rendering control that provides advanced text formatting, layout, and styling capabilities using SkiaSharp for rendering.

SkiaLabel.DecomposedText
SkiaLabel.EmojiData
SkiaLabel.ObjectPools

Thread-safe object pools for reducing GC allocations in text measurement

SkiaLabel.SpanCollection
SkiaLabel.SpanMeasurement

Span-based measurement methods to avoid string allocations

SkiaLabel.TextMetrics
SkiaLabelFps
SkiaLayer

Absolute layout like MAUI Grid with just one column and row

SkiaLayout
SkiaLayout.BackgroundMeasurementContext

Context for background measurement operations

SkiaLayout.BackgroundMeasurementStartingPosition

Stores the starting position data when background measurement begins Used to detect and compensate for position changes due to visibility changes

SkiaLayout.BuildWrapLayout

Implementation for LayoutType.Wrap TODO is seems that remaining space is sometimes not super correct, maybe it doesnt account for padding?..

SkiaLayout.Cell
SkiaLayout.MeasuredItemInfo

Information about a measured item for sliding window management

SkiaLayout.SecondPassArrange

Cell.Area contains the area for layout

SkiaLayout.SkiaGridStructure
SkiaLayout.StructureChange
SkiaMarkdownLabel

Left for compatibility, use SkiaRichLabel

SkiaMauiElement
SkiaPoint
SkiaProgress

Linear progress bar control with platform-specific styling. Shows progress from Min to Value within the Min-Max range.

SkiaRangeBase

Base class for range-based controls like sliders and progress bars. Provides common functionality for value ranges, track management, and platform styling.

SkiaRichLabel

Will internally create spans from markdown. Spans property must not be set directly.

SkiaRow

Horizontal stack, like MAUI HorizontalStackLayout

SkiaScroll
SkiaScrollLooped

Cycles content, so the scroll never ands but cycles from the start

SkiaSetter
SkiaShaderEffect

IPostRendererEffect

SkiaShadow
SkiaShape

Extension of SkiaShape that adds bevel and emboss functionality

SkiaSlider
SkiaStack

Vertical stack, like MAUI VerticalStackLayout

SkiaSvg
SkiaSwitch

Switch-like control, can include any content inside. It's aither you use default content (todo templates?..) or can include any content inside, and properties will by applied by convention to a SkiaShape with Tag Frame, SkiaShape with Tag Thumb. At the same time you can override ApplyProperties() and apply them to your content yourself.

SkiaToggle

Base control for toggling between 2 states. It provides no gestures support by itsself.

SkiaValueAnimator
SkiaVectorAnimator
SkiaWrap

A powerful flexible control, a bit like WPF StackPanel, arranges children in a responsive way according available size. Can change the number of Columns to use by default.

SliderThumb
SliderTrail
SliderValueDesc
Snapping
SnappingLayout
SortedGestureListeners
SpringExtensions
SpringTimingParameters
SpringTimingVectorParameters
SpringWithVelocityAnimator
SpringWithVelocityVectorAnimator
StackLayoutStructure
StateEffect
StaticResourcesExtensions
Super
SvgSpan
TemplatedViewsPool
TextLine
TextSpan
ThemeBinding

Represents a theme binding for a specific target object and property Implements proper disposal pattern and weak references to prevent memory leaks

ThemeBindingExtension

Theme binding extension for DrawnUI controls Supports MAUI, Blazor, and other platforms through IThemeProvider abstraction

ThemeBindingManager

Simplified theme binding manager using DrawnUI's disposal mechanism No periodic cleanup needed - controls clean up themselves!

ThemeBindings

Helper methods for using theme bindings in code-behind

ThemeChangedEventArgs

Theme changed event arguments

TintEffect
TintWithAlphaEffect
ToggleAnimator
TrackedObject<T>
UnderdampedSpringTimingParameters
VelocityAccumulator
ViewsAdapter

Top level class for working with ItemTemplates. Holds visible views.

ViewsIterator

To iterate over virtual views

VirtualScroll

this control gets a view and draws it on a virtual scrolling plane

ViscousFluidInterpolator

Ported from google android

VisualLayer
VisualTreeHandler
ZoomContent

Wrapper to zoom and pan content by changing the rendering scale so not affecting quality, this is not a transform.

DEBUG INSTRUCTIONS:

  • Key debug outputs are enabled for pan movements and clamp operations
  • Call DumpDebugState() manually to get a full state dump
  • Uncomment debug sections in DrawViews, MeasureContent, ComputeContentScale for frame-by-frame debugging
  • Watch for [ClampOffsetImage] CLAMPED! messages to see when pan limits are hit
  • The DebugSummary provides comprehensive state when hitting pan limits
ZoomEventArgs

Structs

ApplySpan
ChainEffectResult
CriticallyDampedSpringTimingVectorParameters
DrawingContext
GestureEventProcessingInfo
LineGlyph
LineSpan
LinearInterpolationTimingParameters
MeasureRequest
PlanesScroll.ViewLayoutInfo

Holds layout information for a rendered month cell.

RangeF
ScaledPoint
ScaledRect
ScrollToIndexOrder
ScrollToPointOrder
SkiaControl.ParentMeasureRequest
SkiaLabel.PooledStringBuilder

Helper struct for managing pooled StringBuilder with automatic return

SkiaShape.ShapePaintArguments
StringReference
UnderdampedSpringTimingVectorParameters
UsedGlyph
WindowParameters

Interfaces

IAfterEffectDelete
IAnimatorsManager

This control is responsible for updating screen for running animators

IBindingContextDebuggable
ICanBeUpdated
ICanBeUpdatedWithContext
ICanRenderOnCanvas
IColorEffect
IDampingTimingParameters
IDampingTimingVectorParameters
IDefinesViewport
IDrawnBase
IDrawnTextSpan
IHasAfterEffects
IHasBanner
IImageEffect
IInsideViewport
IInsideWheelStack
IInterpolator
ILayoutInsideViewport
IOverlayEffect
IPostRendererEffect
IRefreshIndicator
IRenderEffect
IRenderObject
ISkiaAnimator
ISkiaCell
ISkiaControl
ISkiaDisposable
ISkiaDrawable
ISkiaEffect
ISkiaGestureListener
ISkiaGestureProcessor
ISkiaGridLayout
ISkiaLayer
ISkiaLayout
ISkiaSharpView
IStateEffect
IThemeProvider

Platform-agnostic theme provider interface for cross-platform compatibility

ITimingParameters
ITimingVectorParameters
IVisibilityAware
IWithContent

Enums

AutoSizeType
BevelType
ContextArguments
ControlLifecycleState
DeviceOrientation
DirectionType
DrawImageAlignment
DrawTextAlignment
FontWeight
GesturesMode

Used by the canvas, do not need this for drawn controls

GlowPosition
GradientType
LayoutType
LinearDirectionType
LoadPriority
LockTouch
MauiKey

These are platform-independent. They correspond to JavaScript keys.

MeasuringStrategy
ObjectAliveType
OrientationType
PanningModeType
PointedDirectionType
PostRendererEffectUseBackgroud

Controls how the effect acquires the background texture for its shader.

PrebuiltControlStyle
RangeZone
RecycleTemplateType
RecyclingTemplate
RelativePositionType
RenderingModeType
ScrollInteractionState
ShapeType
SidePosition
SkiaAnchorBak
SkiaButton.ButtonStyleType

Defines the button style variants available for different visual appearances.

SkiaButton.IconPositionType

Defines the position of an icon relative to the button text

SkiaCacheType
SkiaControl.CacheValidityType
SkiaImageEffect
SkiaLayout.StructureChangeType

Types of structure changes that can be applied

SkiaTouchAnimation
SnapToChildrenType
SourceType
SpaceDistribution
TextTransform
ThermalState
TransformAspect
UnicodeBlock

Unicode block categories for optimized font matching. Used to prioritize appropriate fonts based on character type.

ViewportScrollType
VirtualisationType