weasel API - v0.8.0
    Preparing search index...

    Interface CustomPaintContext

    Context passed to a region's paint.kind === 'custom' draw callback. Provides both the world-space anchor (already transformed) and the original local shape, for affordances that want to do additional geometry themselves.

    interface CustomPaintContext {
        local:
            | { hitRadiusPx: number; kind: "point"; x: number; y: number }
            | { height: number; kind: "rect"; width: number; x: number; y: number }
            | {
                cx: number;
                cy: number;
                innerHeight: number;
                innerWidth: number;
                innerX: number;
                innerY: number;
                kind: "annulus";
                minBandPx?: number;
                rx: number;
                ry: number;
            };
        state: ChromeState;
        view: View;
        world: { height?: number; width?: number; x: number; y: number };
    }
    Index

    Properties

    Properties

    local:
        | { hitRadiusPx: number; kind: "point"; x: number; y: number }
        | { height: number; kind: "rect"; width: number; x: number; y: number }
        | {
            cx: number;
            cy: number;
            innerHeight: number;
            innerWidth: number;
            innerX: number;
            innerY: number;
            kind: "annulus";
            minBandPx?: number;
            rx: number;
            ry: number;
        }

    The original local shape (same object identity as region.shape).

    Type Declaration

    • { hitRadiusPx: number; kind: "point"; x: number; y: number }
    • { height: number; kind: "rect"; width: number; x: number; y: number }
    • {
          cx: number;
          cy: number;
          innerHeight: number;
          innerWidth: number;
          innerX: number;
          innerY: number;
          kind: "annulus";
          minBandPx?: number;
          rx: number;
          ry: number;
      }
      • cx: number

        Outer-ellipse center (target-local).

      • cy: number
      • innerHeight: number
      • innerWidth: number
      • innerX: number

        Inner rect (target-local) — the cutout. Typically the selection's AABB.

      • innerY: number
      • kind: "annulus"
      • OptionalminBandPx?: number

        Minimum band thickness outside the inner rect, in screen pixels. The framework widens rx/ry to at least innerHalfExtent + minBandPx / meanScale(view.scale) for both paint and hit-test.

        This exists because the clamp has to know the view and the affordance doesn't: ChromeState carries no scale. Expressing the floor in world units instead (which is what the rotate ring used to do) makes the band shrink on screen as you zoom in, until the ring around a small shape is too thin to hover.

      • rx: number

        Outer-ellipse semi-axes (target-local).

      • ry: number
    view: View
    world: { height?: number; width?: number; x: number; y: number }

    World-space mapping of shape. For point, only x/y are set. For rect, all four fields are set.