Forge

docs/ / design/playbook-skia-text-surface-v1.md · branch develop

Playbook: Skia text surface (composer) v1

Семейство TCI (composer, CCL, navigator): см. playbook-tci-v1.md.

Связь: ADR 0123, Views/SkiaKit/SkiaPlainTextLayout.cs, SkiaComposerStrip.cs.

Инварианты (PR-review)

  1. Measure = Draw = Caret = Hit-test — только SkiaPlainTextLayout / SkiaRichTextKitMarkdown.TryMeasurePlain; не добавлять отдельный WrapLines для UI.
  2. Истина текста в controlComposerText + ComposerCaretIndex (+ ComposerPreeditText); VM синхронизируется через ComposerDraftChanged, каретка до ChatInput.
  3. Preedit в measureSkiaIntercomCommandDeckLayout и MeasureHeight получают composerPreeditText.
  4. Invalidation — мигание каретки: InvalidateComposerChrome() (кэш ленты); полный InvalidateVisual() при смене snapshot/текста ленты.
  5. Pointer — клик в composer → TryPlaceComposerCaretAtPoint; wheel при переполнении → TryScrollComposer.

Чеклист новой фичи ввода

  • Shift+стрелки / выделение / Ctrl+A,C,X,V
  • IME: SetPreeditText, высота deck с preedit
  • Headless-тест на caret/hit-test (см. SkiaPlainTextLayoutTests)
  • Automation: SkiaComposerAutomationPeer Value = ComposerText

Известные границы (v1)

  • Clarification batch остаётся на Avalonia TextBox (ADR 0123 фаза 4).
  • CCL — упрощённый caret (SkiaCommandLineStrip), без полного parity composer.
View only · write via MCP/CIDE