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
- 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);
- BindToParentContextExtension
Compiled-bindings-friendly implementation for "Source.Parent.BindingContext.Path"
- 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.
- DrawnFontAttributesConverter
Forked from Microsoft.Maui.Controls as using original class was breaking XAML HotReload for some unknown reason
- FluentExtensions
Provides extension methods for fluent API design pattern with DrawnUI controls
- FrameTimeInterpolator
Interpolated time between frames, works in seconds. See examples..
- LongKeyGenerator
Ultra-fast key generator for queues using long keys
- MauiThemeProvider
MAUI-specific theme provider implementation
- ObservableAttachedItemsCollection<T>
We have to subclass ObservableCollection to avoid it sending empty oldItems upon Reset.
- 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
GetMeasuredViewto provide your views to be drawn upon passed index. TODO: for horizonal
- ProgressTrail
Progress trail component for linear progress bars. Similar to SliderTrail but optimized for progress display.
- RenderingAnimator
This animator renders on canvas instead of just updating a value
- 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.
- ShaderDoubleTexturesEffect
Base shader effect class that has 2 input textures.
- Sk3dView
Custom implementation of Android's Camera 3D helper for SkiaSharp
- 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 TagMainFrame. At the same time you can override ApplyProperties() and apply them to your content yourself. Convention elements tags: BtnText, BtnShape.
- 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 TagThumb. At the same time you can override ApplyProperties() and apply them to your content yourself.
- SkiaControlWithRect
Used inside RenderingTree. Rect is real drawing position
- SkiaFrame
Alias for SkiaShape type Rectangle
- SkiaGrid
MAUI Grid alternative
- SkiaHoverMask
Paints the parent view with the background color with a clipped viewport oth this view size
- SkiaLabel
A high-performance text rendering control that provides advanced text formatting, layout, and styling capabilities using SkiaSharp for rendering.
- SkiaLabel.ObjectPools
Thread-safe object pools for reducing GC allocations in text measurement
- SkiaLabel.SpanMeasurement
Span-based measurement methods to avoid string allocations
- SkiaLayer
Absolute layout like MAUI Grid with just one column and row
- 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.MeasuredItemInfo
Information about a measured item for sliding window management
- SkiaLayout.SecondPassArrange
Cell.Area contains the area for layout
- SkiaMarkdownLabel
Left for compatibility, use SkiaRichLabel
- 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
- SkiaScrollLooped
Cycles content, so the scroll never ands but cycles from the start
- SkiaShaderEffect
IPostRendererEffect
- SkiaShape
Extension of SkiaShape that adds bevel and emboss functionality
- SkiaStack
Vertical stack, like MAUI VerticalStackLayout
- 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 TagThumb. 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.
- 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.
- 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
- 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
- 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
Structs
- PlanesScroll.ViewLayoutInfo
Holds layout information for a rendered month cell.
- SkiaLabel.PooledStringBuilder
Helper struct for managing pooled StringBuilder with automatic return
Interfaces
- IAnimatorsManager
This control is responsible for updating screen for running animators
- IThemeProvider
Platform-agnostic theme provider interface for cross-platform compatibility
Enums
- GesturesMode
Used by the canvas, do not need this for drawn controls
- MauiKey
These are platform-independent. They correspond to JavaScript keys.
- PostRendererEffectUseBackgroud
Controls how the effect acquires the background texture for its shader.
- 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
- SkiaLayout.StructureChangeType
Types of structure changes that can be applied
- UnicodeBlock
Unicode block categories for optimized font matching. Used to prioritize appropriate fonts based on character type.