Class ViewportState
Manages the viewport state including pan offset and zoom level. Implements IViewportState for backend-agnostic viewport control.
public class ViewportState : IViewportState, IReadOnlyViewportState, ICoordinateTransformer
- Inheritance
-
ViewportState
- Implements
- Inherited Members
- Extension Methods
Constructors
ViewportState(FlowCanvasSettings?)
public ViewportState(FlowCanvasSettings? settings = null)
Parameters
settingsFlowCanvasSettings
Properties
OffsetX
Current X offset (pan).
public double OffsetX { get; }
Property Value
OffsetY
Current Y offset (pan).
public double OffsetY { get; }
Property Value
ViewSize
The current view size (set by the canvas).
public Size ViewSize { get; }
Property Value
- Size
Zoom
Current zoom level (1.0 = 100%).
public double Zoom { get; }
Property Value
Methods
ApplyToTransformGroup(ScaleTransform, TranslateTransform)
Applies the viewport transforms to separate ScaleTransform and TranslateTransform. This is the preferred method as it avoids issues with MatrixTransform not triggering re-renders. The transforms should be applied in order: Scale first, then Translate.
public void ApplyToTransformGroup(ScaleTransform scale, TranslateTransform translate)
Parameters
scaleScaleTransformtranslateTranslateTransform
Remarks
The transform order produces: screenPos = canvasPos * zoom + offset
This matches the coordinate system used by CanvasToViewport(Point) and ViewportToCanvas(Point).
Note: The Canvas must have RenderTransformOrigin="0,0" for correct behavior.
ApplyToTransforms(MatrixTransform)
Applies the viewport transforms to a MatrixTransform. The matrix represents: screenPos = canvasPos * zoom + offset
public void ApplyToTransforms(MatrixTransform transform)
Parameters
transformMatrixTransform
CanvasToScreen(Point)
Transforms a canvas point to screen coordinates.
[Obsolete("Use CanvasToViewport instead.")]
public Point CanvasToScreen(Point canvasPoint)
Parameters
canvasPointPoint
Returns
- Point
CanvasToScreenDelta(double, double)
Transforms a delta/vector from canvas space to screen space.
[Obsolete("Use CanvasToViewportDelta instead.")]
public Point CanvasToScreenDelta(double canvasDeltaX, double canvasDeltaY)
Parameters
Returns
CanvasToViewport(Point)
Transforms a canvas point to viewport coordinates.
public Point CanvasToViewport(Point canvasPoint)
Parameters
canvasPointPoint
Returns
- Point
CanvasToViewportDelta(double, double)
Transforms a delta/vector from canvas space to viewport space. Unlike point transforms, this only applies zoom (not offset).
Formula: viewportDelta = canvasDelta * zoom
public Point CanvasToViewportDelta(double canvasDeltaX, double canvasDeltaY)
Parameters
Returns
- Point
The equivalent delta in viewport coordinates.
CenterOn(Point)
Centers the viewport on a specific canvas point. Does nothing if ViewSize is not set.
public void CenterOn(Point canvasPoint)
Parameters
canvasPointPoint
FitToBounds(Rect, Size, double)
Fits the viewport to show a bounding box with padding. The padding is the minimum margin on each side in screen pixels. For better visual results, the actual margin will be at least FitToViewMinPaddingPercent of the viewport dimension.
public void FitToBounds(Rect bounds, Size viewSize, double padding = 50)
Parameters
boundsRectviewSizeSizepaddingdouble
GetVisibleRect()
Gets the visible area in canvas coordinates. Returns a Rect with Width=0 if view size is not set.
public Rect GetVisibleRect()
Returns
- Rect
Pan(double, double)
Pans by a delta amount.
public void Pan(double deltaX, double deltaY)
Parameters
Reset()
Resets the viewport to default state (zoom = 1.0, centered on origin).
public void Reset()
ResetZoom()
Resets zoom to 100%, keeping the current view center.
public void ResetZoom()
ScreenToCanvas(Point)
Transforms a screen point to canvas coordinates.
[Obsolete("Use ViewportToCanvas instead.")]
public Point ScreenToCanvas(Point screenPoint)
Parameters
screenPointPoint
Returns
- Point
ScreenToCanvasDelta(double, double)
Transforms a delta/vector from screen space to canvas space.
[Obsolete("Use ViewportToCanvasDelta instead.")]
public Point ScreenToCanvasDelta(double screenDeltaX, double screenDeltaY)
Parameters
Returns
SetOffset(double, double)
Sets the pan offset.
public void SetOffset(double x, double y)
Parameters
SetViewSize(Size)
Sets the view size (called when canvas size changes).
public void SetViewSize(Size size)
Parameters
sizeSize
SetZoom(double, Point?)
Sets the zoom level, optionally zooming towards a specific point. If no zoom center is provided, zooms towards the center of the view.
public void SetZoom(double newZoom, Point? zoomCenter = null)
Parameters
newZoomdoublezoomCenterPoint?
UpdateSettings(FlowCanvasSettings)
Updates the settings used by this viewport.
public void UpdateSettings(FlowCanvasSettings settings)
Parameters
settingsFlowCanvasSettingsThe new settings to use.
ViewportToCanvas(Point)
Transforms a viewport point to canvas coordinates.
public Point ViewportToCanvas(Point viewportPoint)
Parameters
viewportPointPoint
Returns
- Point
ViewportToCanvasDelta(double, double)
Transforms a delta/vector from viewport space to canvas space. Unlike point transforms, this only applies zoom (not offset).
When to use:
- Converting drag distances to canvas movement amounts
- Zoom-adjusted displacement calculations
- Measuring viewport distances in canvas units
Formula: canvasDelta = viewportDelta / zoom
public Point ViewportToCanvasDelta(double viewportDeltaX, double viewportDeltaY)
Parameters
Returns
- Point
The equivalent delta in canvas coordinates.
ZoomIn(Point?)
Zooms in by one step, centered on the view.
public void ZoomIn(Point? zoomCenter = null)
Parameters
zoomCenterPoint?
ZoomOut(Point?)
Zooms out by one step, centered on the view.
public void ZoomOut(Point? zoomCenter = null)
Parameters
zoomCenterPoint?
Events
ViewportChanged
Event raised when the viewport changes.
public event EventHandler? ViewportChanged