Skip to content

Add PivotViewer support: CXML collections, filtering, grid/histogram views#367

Open
mattleibow wants to merge 2 commits intofeature/deepzoomfrom
feature/pivotviewer
Open

Add PivotViewer support: CXML collections, filtering, grid/histogram views#367
mattleibow wants to merge 2 commits intofeature/deepzoomfrom
feature/pivotviewer

Conversation

@mattleibow
Copy link
Collaborator

Summary

Adds PivotViewer support to SkiaSharp.Extended — a modern reimplementation of Silverlight's PivotViewer control using SkiaSharp and .NET MAUI. Builds on the Deep Zoom foundation from #366.

Core library (SkiaSharp.Extended.PivotViewer)

  • CXML parser with all facet types (String, Number, DateTime, Link)
  • SupplementUri auto-loading and collection merging
  • Filter engine with text, range, and comparison predicates
  • Word wheel search index
  • Grid layout engine with zoom-based item sizing
  • Histogram layout engine with bucket computation
  • Layout transition manager with spring animations
  • State serialization for view persistence
  • Shared bindable models (FilterPane, DetailPane, ControlBar, SortDropdown)
  • PivotViewerRenderer for grid/histogram canvas rendering
  • Full Silverlight API parity (PivotViewerItem, Properties, Views, etc.)

MAUI layer (SkiaSharp.Extended.UI.Maui.PivotViewer)

  • SKPivotViewerView with native accessible controls
  • PivotViewerControlBar — filter toggle, view switch, sort, search, zoom
  • PivotViewerFilterPane — scrollable checkbox categories
  • PivotViewerDetailPane — item info, facets, tappable links
  • PivotViewerSortDropdown — property selection overlay
  • All controls use AutomationProperties for accessibility

Tests

  • 1,227 tests covering all public APIs — CXML parsing, filter engine, layout math, rendering, controller state, models

Samples

  • MauiPivotViewer — conceptcars collection with 298 items, real DZC thumbnails
  • BlazorPivotViewer — Blazor WebAssembly integration

Architecture

  • Canvas renders only item grid/histogram — all UI chrome is native MAUI controls
  • Shared INotifyPropertyChanged models in core for both MAUI and Blazor binding
  • PivotViewer depends on DeepZoom via only 1 file (CollectionImageProvider.cs) using 3 types

This is PR 2 of 2. Depends on #366 (Deep Zoom).

mattleibow and others added 2 commits February 27, 2026 00:08
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>
…views

Core library (SkiaSharp.Extended.PivotViewer):
- CXML parser with all facet types (String, Number, DateTime, Link)
- SupplementUri auto-loading and collection merging
- Filter engine with text, range, and comparison predicates
- Word wheel search index
- Grid layout engine with zoom-based item sizing
- Histogram layout engine with bucket computation
- Layout transition manager with spring animations
- State serialization for view persistence
- Shared bindable models (FilterPane, DetailPane, ControlBar, SortDropdown)
- PivotViewerRenderer for grid/histogram canvas rendering
- Full Silverlight API parity (PivotViewerItem, Properties, Views, etc.)

MAUI layer (SkiaSharp.Extended.UI.Maui.PivotViewer):
- SKPivotViewerView with native accessible controls
- PivotViewerControlBar (filter toggle, view switch, sort, search, zoom)
- PivotViewerFilterPane (scrollable checkbox categories)
- PivotViewerDetailPane (item info, facets, links)
- PivotViewerSortDropdown (property selection overlay)
- All controls use AutomationProperties for accessibility

Blazor layer:
- BlazorPivotViewer sample with SKCanvasView integration

Tests: 1,227 tests covering all public APIs
Samples: MauiPivotViewer (conceptcars collection), BlazorPivotViewer

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@mattleibow mattleibow force-pushed the feature/deepzoom branch 4 times, most recently from 7b268c4 to b9071da Compare March 5, 2026 15:28
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