Skip to content

Add Deep Zoom support: DZI/DZC parsing, tile rendering, MAUI control#366

Open
mattleibow wants to merge 3 commits intomainfrom
feature/deepzoom
Open

Add Deep Zoom support: DZI/DZC parsing, tile rendering, MAUI control#366
mattleibow wants to merge 3 commits intomainfrom
feature/deepzoom

Conversation

@mattleibow
Copy link
Collaborator

@mattleibow mattleibow commented Feb 26, 2026

Add Deep Zoom image viewer support for SkiaSharp.

Core library (SkiaSharp.Extended.DeepZoom)

  • DZI and DZC format parsing with full compatibility
  • Tile pyramid math and viewport coordinate transforms
  • Spring-based animation system
  • LRU tile cache with deferred disposal
  • Priority tile scheduler with parent-level fallback
  • LOD cross-fade blending renderer
  • HTTP and file-based tile fetchers with cancellation
  • Deep zoom sub-image support for collections

MAUI control (SkiaSharp.Extended.UI.Maui.DeepZoom)

  • SKDeepZoomView with pinch-zoom, pan, double-tap gestures
  • BindableProperties: Source, ViewportWidth, ViewportOrigin, etc.
  • Spring animation integration with timer-based rendering
  • Keyboard navigation support
  • Debug stats overlay

Tests

489 tests covering all public APIs across 24 test files.

Sample

MauiDeepZoom app with color-coded test tiles.

Related

@mattleibow
Copy link
Collaborator Author

please merge in from main, and then look at feature/deepzoom-pivotviewer to make sure we have correctly included all of the deepzoom code, tests, resources and more.

@mattleibow
Copy link
Collaborator Author

mattleibow commented Mar 4, 2026

Merged origin/main into the PR branch, tests passed, and pushed the updated branch. Commit: d71c215

@mattleibow mattleibow changed the base branch from main to feature/deepzoom-resources March 4, 2026 08:45
@mattleibow mattleibow force-pushed the feature/deepzoom-resources branch from 9b2e5a1 to 81d3a86 Compare March 4, 2026 11:34
Add DZI/DZC format test data, CXML collection metadata, and
pre-generated tile images for Deep Zoom and PivotViewer development
and testing:

- buxton: CXML collection
- collection-dz: Multi-item DZC collection with individual DZI tile pyramids
- conceptcars: Large DZC collection with 298 items and full tile images
- msdnmagazine: CXML collection
- nigeria-state: DZC collection with tile images
- sample: Single DZI image with tile files (integration test data)
- shapes: DZC collections for area and geometry with tile images
- ski-resorts: DZC collection with tile images
- stockport: DZC collection with tile images
- testgrid: Complete 14-level DZI tile pyramid (1374 tiles) for visual testing
- venues: CXML collection
- schemas: PivotViewer collection XSD and generated code

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@mattleibow mattleibow force-pushed the feature/deepzoom-resources branch from 81d3a86 to c5a640c Compare March 5, 2026 15:24
mattleibow and others added 2 commits March 5, 2026 17:27
Core library (SkiaSharp.Extended.DeepZoom):
- DZI and DZC format parsing with full compatibility
- Tile pyramid math and viewport coordinate transforms
- Spring-based animation system
- LRU tile cache with deferred disposal
- Priority tile scheduler with parent-level fallback
- LOD cross-fade blending renderer
- HTTP and file-based tile fetchers with cancellation
- Deep zoom sub-image support for collections

MAUI layer (SkiaSharp.Extended.UI.Maui.DeepZoom):
- SKDeepZoomView with pinch-zoom, pan, double-tap gestures
- BindableProperties: Source, ViewportWidth, ViewportOrigin, etc.
- Spring animation integration with timer-based rendering
- Keyboard navigation support
- Debug stats overlay

Tests: 489 tests covering all public APIs
Sample: MauiDeepZoom app with color-coded test tiles

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Remove standalone MauiDeepZoom sample app
- Add Deep Zoom page to SkiaSharpDemo MAUI app (Demos/DeepZoom/)
  with testgrid tiles bundled as MauiAssets
- Add Deep Zoom page to SkiaSharpDemo.Blazor with mouse/wheel
  interaction driving shared DeepZoomController
- Add DeepZoom project references to both sample apps
- Add nav link and icon for Deep Zoom in Blazor sidebar

The Deep Zoom architecture uses a shared DeepZoomController in
the core library with thin platform layers:
- MAUI: SKDeepZoomView handles touch gestures + timer
- Blazor: DeepZoom.razor handles mouse/wheel events + timer

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Base automatically changed from feature/deepzoom-resources to main March 5, 2026 20:54
mattleibow added a commit that referenced this pull request Mar 6, 2026
Integrates PR #366 (Deep Zoom) on top of PR #326 (Gestures) branch,
replacing all platform-specific gesture code with SKGestureTracker.

## Core library (SkiaSharp.Extended.DeepZoom)
- DZI and DZC format parsing with full compatibility
- Tile pyramid math and viewport coordinate transforms
- Spring-based animation system (ViewportSpring)
- LRU tile cache with deferred disposal
- Priority tile scheduler with parent-level fallback
- LOD cross-fade blending renderer
- HTTP and file-based tile fetchers with cancellation
- Deep zoom sub-image support for collections

## MAUI control (SkiaSharp.Extended.UI.Maui.DeepZoom)
- SKDeepZoomView now uses SKGestureTracker (from SkiaSharp.Extended)
  instead of PanGestureRecognizer/PinchGestureRecognizer/TapGestureRecognizer
- EnableTouchEvents=true on SKCanvasView, feeds SKTouchEventArgs to tracker
- Pan/Pinch/DoubleTap/Scroll/Fling all routed through unified gesture system
- Fling momentum scrolling added (deep zoom previously had none)
- GestureTracker property exposed for advanced configuration

## Blazor sample (SkiaSharpDemo.Blazor)
- DeepZoom.razor migrated from raw mouse events to pointer events
- Uses SKGestureTracker with same pointer-event pattern as Gestures.razor
- Proper multi-touch support (pinch to zoom on touch screens)
- Fling momentum scrolling via tracker FlingUpdated events
- DPI scaling via _displayScale computed in PaintSurface

## Tests
489 tests covering all deep zoom APIs (unchanged from PR #366)
413 gesture tests (unchanged from PR #326) - all passing

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant