Interface IInputCoordinates
Provides coordinate information for input handling in a rendering-mode agnostic way.
This interface abstracts away the differences between Visual Tree and Direct Rendering modes, providing a consistent API for input states to work with coordinates. All interaction logic should use this interface rather than directly accessing MainCanvas or RootPanel.
Key principle: Interaction code should work in canvas coordinates. This interface ensures that pointer positions are correctly converted regardless of rendering mode.
public interface IInputCoordinates
Examples
public override StateTransitionResult HandlePointerMoved(InputStateContext context, PointerEventArgs e)
{
// Get canvas position - works in both rendering modes
CanvasPoint canvasPos = context.Coordinates.GetPointerCanvasPosition(e);
// Use for hit testing, snapping, etc.
var snapTarget = FindSnapTarget(canvasPos);
// Get viewport position for auto-pan edge detection
ViewportPoint viewportPos = context.Coordinates.GetPointerViewportPosition(e);
if (viewportPos.IsNearEdge(context.Coordinates.GetViewportBounds(), edgeDistance))
{
// Trigger auto-pan
}
}
Properties
Zoom
Gets the current zoom level.
double Zoom { get; }
Property Value
Methods
GetPointerCanvasPosition(PointerEventArgs)
Gets the current pointer position in canvas coordinates.
This is the primary method for getting pointer position during interactions. Use for hit testing, node positioning, edge endpoints, selection bounds, etc.
Works correctly regardless of rendering mode:
- Visual Tree mode: Uses GetPosition(MainCanvas) which applies inverse transform
- Direct Rendering mode: Uses GetPosition(RootPanel) + manual inverse transform
CanvasPoint GetPointerCanvasPosition(PointerEventArgs e)
Parameters
ePointerEventArgsThe pointer event.
Returns
- CanvasPoint
Pointer position in canvas coordinates.
GetPointerViewportPosition(PointerEventArgs)
Gets the current pointer position in viewport coordinates.
Use for operations that work in screen space:
- Auto-pan edge detection
- Fixed overlay positioning
- Tooltip placement
ViewportPoint GetPointerViewportPosition(PointerEventArgs e)
Parameters
ePointerEventArgsThe pointer event.
Returns
- ViewportPoint
Pointer position in viewport coordinates.
GetViewportBounds()
Gets the viewport bounds (size of the visible area).
Returns a rect at (0,0) with the viewport's width and height. Use for auto-pan edge detection.
ViewportRect GetViewportBounds()
Returns
GetVisibleCanvasRect()
Gets the visible area in canvas coordinates.
This represents the portion of the canvas that is currently visible in the viewport. Useful for:
- Viewport culling during rendering
- Determining if a node is visible
- Calculating visible bounds for layout operations
CanvasRect GetVisibleCanvasRect()
Returns
ToCanvas(ViewportPoint)
Converts a viewport point to canvas coordinates.
CanvasPoint ToCanvas(ViewportPoint viewport)
Parameters
viewportViewportPoint
Returns
ToCanvas(ViewportVector)
Converts a viewport vector (delta) to canvas space.
CanvasVector ToCanvas(ViewportVector viewportDelta)
Parameters
viewportDeltaViewportVector
Returns
ToViewport(CanvasPoint)
Converts a canvas point to viewport coordinates.
ViewportPoint ToViewport(CanvasPoint canvas)
Parameters
canvasCanvasPoint
Returns
ToViewport(CanvasVector)
Converts a canvas vector (delta) to viewport space.
ViewportVector ToViewport(CanvasVector canvasDelta)
Parameters
canvasDeltaCanvasVector