Table of Contents

Class ViewportState

Namespace
FlowGraph.Avalonia
Assembly
FlowGraph.Avalonia.dll

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

settings FlowCanvasSettings

Properties

OffsetX

Current X offset (pan).

public double OffsetX { get; }

Property Value

double

OffsetY

Current Y offset (pan).

public double OffsetY { get; }

Property Value

double

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

double

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

scale ScaleTransform
translate TranslateTransform

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

transform MatrixTransform

CanvasToScreen(Point)

Transforms a canvas point to screen coordinates.

[Obsolete("Use CanvasToViewport instead.")]
public Point CanvasToScreen(Point canvasPoint)

Parameters

canvasPoint Point

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

canvasDeltaX double
canvasDeltaY double

Returns

Point

CanvasToViewport(Point)

Transforms a canvas point to viewport coordinates.

public Point CanvasToViewport(Point canvasPoint)

Parameters

canvasPoint Point

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

canvasDeltaX double

X delta in canvas space.

canvasDeltaY double

Y delta in canvas space.

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

canvasPoint Point

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

bounds Rect
viewSize Size
padding double

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

deltaX double
deltaY double

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

screenPoint Point

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

screenDeltaX double
screenDeltaY double

Returns

Point

SetOffset(double, double)

Sets the pan offset.

public void SetOffset(double x, double y)

Parameters

x double
y double

SetViewSize(Size)

Sets the view size (called when canvas size changes).

public void SetViewSize(Size size)

Parameters

size Size

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

newZoom double
zoomCenter Point?

UpdateSettings(FlowCanvasSettings)

Updates the settings used by this viewport.

public void UpdateSettings(FlowCanvasSettings settings)

Parameters

settings FlowCanvasSettings

The new settings to use.

ViewportToCanvas(Point)

Transforms a viewport point to canvas coordinates.

public Point ViewportToCanvas(Point viewportPoint)

Parameters

viewportPoint Point

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

viewportDeltaX double

X delta in viewport space.

viewportDeltaY double

Y delta in viewport space.

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

zoomCenter Point?

ZoomOut(Point?)

Zooms out by one step, centered on the view.

public void ZoomOut(Point? zoomCenter = null)

Parameters

zoomCenter Point?

Events

ViewportChanged

Event raised when the viewport changes.

public event EventHandler? ViewportChanged

Event Type

EventHandler