InputCaretRenderer
Lightweight UI graphic that renders the text input caret as a filled rectangle. This is the caret extension point: subclass and override OnPopulateMesh (reading CaretRect / BlinkVisible) for custom shapes — block cursor, underline, gradient — then assign via CaretRenderer.
Remarks
CaretBlinkInterval seconds. After CaretBlinkTimeout seconds of inactivity the caret stops blinking and remains visible. Any user interaction (typing, cursor movement, selection change, focus) should call ResetBlink to restart the cycle.Application-wide accessibility flag: when, caret renderers suppress the blink animation and keep the caret continuously visible. Mirrors iOS 17+ "Prefer Non-Blinking Cursor" and the macOS Reduce Motion cursor sub-setting — surface the platform pref here from your integration layer, alongside PrefersReducedMotion.
Caret width in percent of the caret's height (which tracks the component's font size), so the caret keeps the same proportion to the text at any canvas scale or resolution. The default renderer draws the rectangle this wide; custom shapes may ignore or reinterpret it.
public Vector4 Padding{ get; set }Per-side adjustment of the drawn caret in percent of the caret's height: left, bottom, right, top. A positive side trims the caret inward, a negative side extends it past the line box, and an uneven left/right pair shifts the caret off the cluster boundary it stands on. The default renderer applies it to its rectangle; custom shapes may ignore or reinterpret it. A caret trimmed past its own extent draws nothing. An extension is drawn but not scrolled to: the field reveals the line box, so an extended tip can meet the viewport edge.
protected Rect CaretRect{ get }Latest caret rectangle in local coordinates, for subclass mesh builders.
public static Action PrefersNonBlinkingCaretChangedOccurs when PrefersNonBlinkingCaret has changed so observers can re-arm visuals. InputCaretRenderer subscribes automatically.
