Files
panopainter/docs/modernization/capability-map.md

6.8 KiB

PanoPainter Capability Map

Status: live Last updated: 2026-06-02

This map is the preservation checklist for the modernization. When a component is extracted, update the relevant rows with the owning component, test label, and validation command.

Project And Documents

Capability Current Area Target Owner Required Tests
PPI open/save Canvas, serializer, dialogs pp_document, pp_assets, pano_cli Round-trip tiny project, old-version fixture, corrupt/truncated fixture
Open-document routing App::open_document pp_app_core, pano_cli, pp_panopainter_ui, pp_document, pp_assets Project/ABR/PPBR route tests, malformed path tests, open-action plan tests, CLI route/action smoke, app open smoke
Document session decisions App::open_document, App::request_close, save hotkeys, file menu, dialogs pp_app_core, pano_cli, pp_panopainter_ui Clean/dirty/prompt-open/save/save-as/save-version/save-before-workflow/name/new-document resolution/overwrite/version-target decision tests, CLI session, new-document, document-file, and document-version smoke, app close/open/save/new/browse smoke
Version metadata scripts/pre-build.py, version.* build system, pp_foundation Generated header smoke test, missing-tag behavior
Thumbnail generation/read Canvas, Image pp_assets, pp_paint_renderer Golden thumbnail, corrupt input
Save-as, overwrite prompts App/dialogs pp_app_core, pp_panopainter_ui, pp_platform_* Decision tests, UI automation, and platform smoke

Image And Export

Capability Current Area Target Owner Required Tests
PNG/JPEG import Image, Canvas import paths pp_assets, pp_document Fixture import, malformed file
PNG/JPEG export Canvas, Image, export dialogs pp_assets, pp_paint_renderer, pp_app_core Golden output tolerance, export start/target planning tests
Equirectangular import/export Canvas, shaders, RTT, export dialogs pp_paint_renderer, pp_app_core Tiny cube/equirect golden, app-core file target tests
Cube face export Canvas pp_paint_renderer Six-face golden set
Depth export Canvas, grid tools pp_paint_renderer Float/readback validation

Brush And Painting

Capability Current Area Target Owner Required Tests
Brush settings serialization and stroke-panel controls Brush, Serializer, NodePanelStroke pp_paint, pp_assets, pp_app_core, pp_panopainter_ui Round-trip and boundary values; stroke slider/toggle/blend/reset planning and invalid setting tests
ABR import ABR, Brush pp_assets, pp_paint Sample ABR and malformed ABR
PPBR import/export brush panel/dialog pp_assets, pp_panopainter_ui Round-trip fixture
Stroke sampling Stroke, Canvas pp_paint Property tests for spacing, pressure, jitter
Dual brush/pattern behavior Brush, shaders pp_paint, pp_paint_renderer Stroke-alpha CPU reference, dual/pattern feedback planning, GPU golden
Blend modes GLSL include files, layer rendering pp_paint, pp_paint_renderer Final RGBA and stroke-alpha CPU reference vectors, fixed-function/framebuffer-fetch/ping-pong stroke composite planning, and GPU parity
Erase/flood fill/masks Canvas, modes, shaders pp_document, pp_paint_renderer Edge masks, alpha lock, dirty rects

Layers And Animation

Capability Current Area Target Owner Required Tests
Layer add/remove/move/merge Canvas, Layer, actions pp_document Undo/redo invariant tests
Blend/opacity/visibility/alpha lock Layer, UI panels, shaders pp_document, pp_paint_renderer CPU model and render golden
Selection mask Canvas mask layer pp_document, pp_paint_renderer Mask apply/clear edge cases
Animation frames LayerFrame, animation panel pp_document, pp_panopainter_ui Duration, duplicate, remove, seek
MP4/timelapse export MP4Encoder, recording thread, export dialogs pp_assets, pp_paint_renderer, pp_app_core, app Recording lifecycle/progress decision tests, smoke export, cancellation, suggested-name tests

UI And Workflow

Capability Current Area Target Owner Required Tests
XML layout parsing LayoutManager, Node pp_ui_core Layout fixtures and malformed XML
Yoga layout Node pp_ui_core Deterministic geometry fixtures
Generic controls NodeButton, sliders, text, images pp_ui_core Event dispatch and layout tests
PanoPainter panels/dialogs NodePanel*, NodeDialog* pp_panopainter_ui UI automation scripts
Canvas viewport UI NodeCanvas pp_panopainter_ui, pp_paint_renderer Input-to-command automation
Settings UI Settings, NodeSettings pp_assets, pp_panopainter_ui Round-trip settings

Input, Platform, And Devices

Capability Current Area Target Owner Required Tests
Mouse/keyboard/touch/gestures/cursor App, platform entrypoints pp_app_core, pp_platform_api, pp_platform_*, app Cursor visibility decision tests, platform service dispatch tests, synthetic event playback
Wacom pressure WacomTablet pp_platform_windows Adapter smoke with fallback
Clipboard/file picker/share/display App platform methods pp_app_core, pp_platform_api, pp_platform_* Clipboard read/write, share saved-path, picked-path, and display-file decision tests, platform service display/share/picker dispatch tests, platform smoke or mocked service
Virtual keyboard App, platform entrypoints pp_app_core, pp_platform_api, pp_platform_* Keyboard visibility decision tests, platform service dispatch tests, platform smoke
OpenVR desktop HMD, Vive, app_vr pp_platform_vr, app Compile gate and mocked pose tests
Quest/OVR Android Quest files pp_platform_android_quest Compile/package gate
Focus/Wave Android Focus files pp_platform_android_wave Compile/package gate

Cloud, Logging, And Automation

Capability Current Area Target Owner Required Tests
Upload/download/browse app_cloud, CURL helpers pp_app_core, app service, pp_platform_* Upload prompt/new-doc/no-canvas decision tests, bulk-upload progress decision tests, browse/selection decision tests, mocked HTTP and timeout tests
License/check flows app/cloud code app service Mocked response tests
Logging/crash reporting log, BugTrap/AppCenter pp_foundation, platform wrappers Log formatting and platform compile
Headless automation none yet tools/pano_cli JSON command fixtures
Tracing none yet pp_foundation Span nesting/timing tests