photocraft/scorecard/tools.toml

280 lines
12 KiB
TOML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Scorecard checklist: tools (#213 painting and retouching, #214 selection, transform, drawing).
# An item is done when it has a command, a UI and tests.
# Statuses must be true on main. Verified against 4b53f62 on 2026-10-05.
area = "tools"
title = "Tools"
order = 3
[[item]]
id = "TOOL-213-1"
target = "Pencil tool: aliased 1 px painting, square pixel-aligned cursor"
status = "done"
issue = 213
note = "Tool::Pencil (B group): live aliased strokes on the pixel grid, square cursor, Auto Erase; pencil_tests.rs"
[[item]]
id = "TOOL-213-2"
target = "Mixer Brush tool on the toolbar"
status = "done"
issue = 213
note = "Tool::MixerBrush in the Brush (B) flyout; Wet/Load/Mix/Flow/Sample All Layers options, command/control dispatch and selection-clipping tests"
[[item]]
id = "TOOL-213-3"
target = "Patch tool with a live preview of the patched area"
status = "done"
issue = 213
note = "paint.patch (retouch_cmds/patch.rs, source/destination) + Tool::Patch (J group: lasso, then drag the selection); the drag shows the heal live (patch_preview.rs, coarse colour fit: 1000x1000 in 52 ms)"
[[item]]
id = "TOOL-213-4"
target = "Content-Aware Move tool reusing inpaint completion"
status = "partial"
issue = 213
note = "paint.contentAwareMove (retouch_cmds/content_aware_move.rs: move/extend, Structure 1-7, Color 0-10, Sample All Layers; background job) + Tool::ContentAwareMove (J group: lasso, then drag). Missing: Transform On Drop, a live preview of the result (the drag shows the outline only)"
[[item]]
id = "TOOL-213-5"
target = "Painting a type/shape/smart/fill layer offers to rasterize, then continues the stroke"
status = "done"
issue = 213
note = "rasterize_prompt.rs: OK rasterizes then paints (two history states), Cancel does nothing; drivable via ui.dialog.confirm"
[[item]]
id = "TOOL-213-6"
target = "Fill dialog: contents, blend, opacity, preserve transparency; remembered; Shift+Backspace"
status = "done"
issue = 213
note = "fill_ui.rs dialog over edit.fill (fill_cmds.rs): all contents, mode, opacity, preserve; remembered in prefs; Shift+F5 / Shift+Backspace"
[[item]]
id = "TOOL-213-7"
target = "Live stroke preview for every brush-based retouch tool"
status = "partial"
issue = 213
note = "Live (canvas.rs strokes_live): Brush, Pencil, Eraser, Blur, Sharpen, Smudge, Dodge, Burn, Sponge, Clone Stamp, Healing Brush, History Brush (#1026, #1040); the release commits the live stroke's pixels (P32). Not yet live: Spot Healing Brush, Mixer Brush, Background Eraser, Pattern Stamp"
[[item]]
id = "TOOL-213-8"
target = "Clone Source: W/H link, drawn overlay (opacity/blend/clip/auto-hide), Alt target cursor"
status = "partial"
issue = 213
note = "Clone Source overlay drawn with opacity, inversion, circular clipping and auto-hide; W/H link, custom-tip clipping and overlay blend modes remain missing"
[[item]]
id = "TOOL-213-9"
target = "Eyedropper comparison ring (new colour above, current below) while sampling"
status = "done"
issue = 213
note = "eyedropper_ring (canvas.rs): the sampled colour on the upper arc, the foreground below, drawn for the Eyedropper and Alt-sampling while the button is held; the Precise-cursor preference keeps the crosshair"
[[item]]
id = "TOOL-213-10"
target = "Ctrl+Alt drag resizes brush size/hardness with an on-canvas readout"
status = "done"
issue = 213
note = "brush_resize.rs: ⌃⌥-drag (and ⌥-right-drag) sets diameter horizontally and hardness vertically with the circle and readout beside the pointer, never painting (#271; tests ctrl_alt_drag_resizes_every_brush_tool_without_painting_or_history, canvas_drag_shows_the_circle_and_readout)"
[[item]]
id = "TOOL-213-11"
target = "Editable pressure curve, global and per control"
status = "missing"
issue = 213
note = "No pressure curve in engine, paint or ui-egui"
[[item]]
id = "TOOL-213-12"
target = "Import an image file as a brush tip"
status = "missing"
issue = 213
note = "Only brush.defineFromSelection and brush.presets.importAbr"
[[item]]
id = "TOOL-213-13"
target = "Brush regression tests: no seams, hard edge, zero-scatter defaults, ABR never black"
status = "done"
issue = 213
note = "Seam, hard-edge and zero-scatter tests in brush_tests.rs; ABR tip colour test in abr_map/tests.rs"
[[item]]
id = "TOOL-213-14"
target = "Tablet: no OS arrow cursor over the canvas on macOS, Windows and Linux"
status = "partial"
issue = 213
note = "Brush tools set CursorIcon::None (canvas.rs:1259-1275); not verified per OS"
[[item]]
id = "TOOL-213-18"
target = "Pattern Stamp tool: sibling of Clone Stamp in the S flyout"
status = "done"
issue = 213
note = "Tool::PatternStamp in the S group; paint.patternStamp stamps the Patterns-panel tile with Aligned and Impressionist (an approximation: it jitters each dab's tile phase, not Photoshop's smeared impressionist look); engine tests cover depths, seams, hostile input"
[[item]]
id = "TOOL-214-1"
target = "Select and Mask workspace: view modes, Refine Edge brush, 6 outputs"
status = "partial"
issue = 214
note = "Opens the generic select.refineEdge dialog (menus.rs:308)"
[[item]]
id = "TOOL-214-2"
target = "Marquee: Shift square, Alt from centre, live W x H readout"
status = "partial"
issue = 214
note = "marquee_end supports shift (chrome_ui.rs:167) but canvas.rs passes false (#208)"
[[item]]
id = "TOOL-214-3"
target = "Color Range test: Sampled Colors at Fuzziness 0 selects the exact match only"
status = "partial"
issue = 214
note = "Fuzziness-0 tests cover midtones/shadows only (selection_cmds.rs:444-447)"
[[item]]
id = "TOOL-214-4"
target = "Move tool: box-select layers, Auto-Select hover outline, double-click fit, drag to a tab"
status = "missing"
issue = 214
note = "move_mods.rs covers Shift/Alt/arrows only"
[[item]]
id = "TOOL-214-5"
target = "Right-click menu during Free Transform (scale, rotate, skew, warp, flip, rotate 90/180)"
status = "missing"
issue = 214
note = "No context menu in canvas.rs or transform_tool.rs"
[[item]]
id = "TOOL-214-6"
target = "Puppet Warp mesh follows the object outline (constrained triangulation)"
status = "missing"
issue = 214
note = "algo/puppet.rs:136 builds a block-grid mesh"
[[item]]
id = "TOOL-214-7"
target = "Content-Aware Scale through the Free Transform box with a live proxy preview"
status = "partial"
issue = 214
note = "edit.contentAwareScale (edit_menu_cmds.rs:899) behind a parameter dialog"
[[item]]
id = "TOOL-214-8"
target = "A measured ruler angle prefills Image Rotation > Arbitrary (0.01 deg)"
status = "missing"
issue = 214
note = "Arbitrary rotation is a generic dialog; ruler only feeds straighten"
[[item]]
id = "TOOL-214-9"
target = "Crop: W x H x Resolution with units, saved crop presets, Straighten in the options bar"
status = "partial"
issue = 214
note = "Ratio dropdown and fields, Straighten (TOOL-214-21); no W x H x Resolution with units or saved presets"
[[item]]
id = "TOOL-214-10"
target = "Pen: Alt breaks a handle, Shift 45 deg, Ctrl direct-selects, Backspace, close-drag handle"
status = "partial"
issue = 214
note = "Ctrl/Cmd = Direct Selection and Alt = Convert Point on existing paths (direct_select.rs, #790); no Shift 45 deg, Backspace or Alt while drawing"
[[item]]
id = "TOOL-214-11"
target = "Stroke Path dialog: pick any brush-based tool, Simulate Pressure"
status = "partial"
issue = 214
note = "path.stroke brush, pencil, eraser (vector_cmds.rs:1170); brush-only button, no dialog"
[[item]]
id = "TOOL-214-12"
target = "Shapes: on-canvas corner radius handles, shape feather, selection to shape with tolerance"
status = "partial"
issue = 214
note = "select.convertToShape with tolerance (vector_cmds.rs:1256); radius as a field only"
[[item]]
id = "TOOL-214-13"
target = "Mask Properties: Density and Feather controls"
status = "partial"
issue = 214
note = "Vector-mask density/feather in the engine (vector_cmds.rs:948); no UI controls"
[[item]]
id = "TOOL-214-14"
target = "Vanishing Point window: draw and edit planes, paste, clone in perspective"
status = "partial"
issue = 214
note = "filter.vanishingPoint (vp_cmds.rs:15) behind a parameter dialog"
[[item]]
id = "TOOL-214-15"
target = "Content-Aware Fill workspace: paint the sampling area, preview, rotate/scale/mirror, new layer"
status = "partial"
issue = 214
note = "Engine sampling auto, rect, custom (edit_menu_cmds.rs:324); generic dialog"
[[item]]
id = "TOOL-214-16"
target = "Liquify: redo (Cmd+Shift+Z)"
status = "done"
issue = 214
note = "liquify_ui.rs supports bounded redo through Cmd+Shift+Z and the control channel; new strokes clear redo"
[[item]]
id = "TOOL-213-17"
target = "Red Eye tool: click a pupil to neutralize the red reflection"
status = "done"
issue = 213
note = "paint.redEye (redeye_cmds.rs) + Tool::RedEye in the J flyout; Pupil Size and Darken Amount; catchlights kept; a miss is an error"
[[item]]
id = "TOOL-214-17"
target = "Rotate View tool: drag to turn the view, Reset View, Match Rotation copies the angle"
status = "done"
issue = 214
note = "Tool::RotateView in the Hand flyout; view.rotateView / view.resetView; Match Rotation copies views[].rotation; enhanced_controls.rotate_view_with_trackpad is read"
[[item]]
id = "TOOL-1649-1"
target = "Eyedropper Sample Size (Point, 3×3 … 101×101 Average), Sample layers, Show Sampling Ring"
status = "done"
issue = 1649
note = "document.sampleColor (sample_cmds.rs): average of the square clipped to the canvas, in the document's model and depth; eyedropper_ui.rs options bar; shared with Alt-click, dialog eyedroppers and the Info panel; ui.set eyedropperSampleSize/eyedropperSample/eyedropperRing. Color Sampler tool still missing"
[[item]]
id = "TOOL-214-20"
target = "Crop overlay options: Rule of Thirds, Grid, Diagonal, Triangle, Golden Ratio, Golden Spiral; Auto / Always / Never Show Overlay; O cycles the overlay, Shift+O its orientation"
status = "done"
issue = 1919
note = "crop_overlay.rs: unit-square guides shared by upright and turned frames (canvas.rs), options-bar menu, O / Shift+O ahead of the tool keys in shortcuts.rs; ToolOptions crop_overlay / crop_overlay_show / crop_overlay_orientation, ui.set cropOverlay / cropOverlayShow / cropOverlayOrientation"
[[item]]
id = "TOOL-214-18"
target = "Crop: drag outside the frame to rotate it (Shift 15 deg steps, angle readout); Enter rotates and crops in one step"
status = "done"
issue = 1792
note = "image.crop angle param (image_cmds.rs: Image Rotation > Arbitrary + crop, one undo step); crop_ui.rs turns, moves and resizes the frame along its axes (Classic Mode visuals); UiState.crop_angle"
[[item]]
id = "TOOL-214-19"
target = "Crop: arrow keys nudge the crop box (Shift 10 px), X swaps portrait/landscape, W x H readout while drawing or resizing"
status = "done"
issue = 1919
note = "crop_ui.rs keys/nudge/swap_orientation (ahead of the selection nudge and tools.swapColors in shortcuts.rs; X also swaps the options-bar ratio) and sizing (canvas.rs draws it with the marquee readout); turned frames included"
[[item]]
id = "TOOL-214-21"
target = "Crop: Straighten button in the options bar and Cmd/Ctrl-drag draw a line; the frame turns so the line ends up level (or plumb when nearer vertical), with an angle readout"
status = "done"
issue = 1919
note = "crop_straighten.rs: one-shot options-bar button, Cmd/Ctrl held is a temporary Straighten (ui.pointer command flag); the Ruler's straighten_angle convention; the frame is fitted to the largest of its proportions inside the image (Classic Mode); a pending edit committed by Enter"
[[item]]
id = "TOOL-214-22"
target = "Crop gear menu: Show Cropped Area (H), Enable Crop Shield with Match Canvas / custom colour, opacity and Auto Adjust Opacity"
status = "done"
issue = 1919
note = "crop_shield.rs: fill() resolves the shield (canvas.rs paints it around upright and turned frames), gear popup in the options bar, H ahead of the Hand key in shortcuts.rs, Custom… opens the Color Picker; ToolOptions crop_shield, ui.set cropShield. No Classic Mode / Auto Center Preview (PhotoCraft is always Classic Mode)"