Zooms a viewer progressively: each zoom step shows at once, drawn from the tiles already on the surface (stretched or shrunk, over each page's paper, so nothing goes blank), keeps the anchor (the pointer or the pinch centre) on the same page point, and once the zoom settles has the TileScheduler render sharp tiles at the settled scale in time-sliced frames, evicting the tiles of the old scale as the new ones cover the pages.
public sealed class ProgressiveZoom
Spec #33 viewer capability 2. Framework-neutral and single-threaded (no timers, tasks or threads, so it runs on the browser's one thread): the shell, or the input model of spec viewer capability 14, calls SetViewport(in Viewport) for scrolls and resizes, ZoomBy(Double, Double, Double)/ZoomTo(Double, Double, Double) for zoom steps (bracketed by BeginGesture() and EndGesture() for a pinch or an animation), and once per frame RunFrame(TimeSpan) then GetFrame(Span<FramePart>), drawing the parts in order.
While a zoom is in progress no tile renders: intermediate scales would be thrown away. Steps outside an explicit gesture (mouse wheel, keyboard) settle once they pause for SettleDelay; a gesture settles when it ends. The zoom is held within MinZoom and MaxZoom. Steps, frames and GetFrame(Span<FramePart>) allocate nothing once the scheduler's buffers have grown to the viewport.
kind:method, kind:property, kind:ctor. Press Esc to clear.ProgressiveZoom(TileScheduler, in Viewport, ProgressiveZoomOptions?)Initializes a new instance of the ProgressiveZoom class and shows viewport.IsZoomingGets a value indicating whether a zoom is in progress: steps taken that have not settled, so no tile renders yet.MaxZoomGets the largest zoom a step goes to.MinZoomGets the smallest zoom a step goes to.ViewportGets the viewport the shell shows now (mid-zoom, the zoom of the last step).BeginGesture()Starts an explicit gesture (a pinch, or an animated zoom such as a double-tap's): its steps show at once and nothing renders until EndGesture(), however long it pauses.EndGesture()Ends the gesture (or the pending steps) and settles: sharp tiles render at the current zoom from the next frame.GetFrame(Span<FramePart>)Lists what the shell draws for the current Viewport, in order (GetFrame(in Viewport, Span<FramePart>)).RunFrame(TimeSpan)Does one frame's work: settles a zoom whose steps have paused for the settle delay, and outside a zoom runs the scheduler's frame (RunFrame(TimeSpan)), which draws or starts tiles within budget.SetViewport(in Viewport)Shows a viewport after a scroll or a resize; mid-zoom (a pinch that also pans) it waits for the zoom to settle.ZoomBy(Double, Double, Double)Multiplies the zoom by factor, keeping the page point under the anchor where it is.ZoomTo(Double, Double, Double)Sets the zoom (held within MinZoom and MaxZoom), keeping the page point under the anchor where it is unless the scroll range stops it (ZoomAt(in Viewport, Double, Double, Double)). The step shows at once from the tiles on the surface; outside a gesture it starts (or extends) a zoom that settles after SettleDelay.