From b9089212be37cb271e076258769f390b11f29099 Mon Sep 17 00:00:00 2001 From: Hans Kokx Date: Sun, 9 Aug 2026 21:15:49 +0200 Subject: [PATCH] format plan.md Signed-off-by: Hans Kokx --- PLAN.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/PLAN.md b/PLAN.md index cca0ec0..565d796 100644 --- a/PLAN.md +++ b/PLAN.md @@ -7,6 +7,7 @@ items `[x]` as done. ## Phase A — Skin subsystem (TODO items 5, 3, 4) ### A1. Extract classic-skin code into a project-level package (task 5) + - [x] New package `dartamp_skin` at `packages/dartamp_skin/`. - [x] Moved `classic_skin.dart`, `skin_loader.dart`, `bmp_decoder.dart`, `skin_image.dart`, `skin_slider.dart`, `text_font.dart`, and @@ -23,6 +24,7 @@ items `[x]` as done. `loadBaseSkin` uses that path. ### A2. Self-contained storage + .wsz import (task 3) + - [x] `SkinRegistry` in the package (`skin_registry.dart`): scans a directory for extracted skins, holds a `manifest.json` per skin (name + import time), `importArchive()` unzips a `.wsz` into `skins//` (flat top-level @@ -43,6 +45,7 @@ items `[x]` as done. (11 incl. `skin_registry_test.dart`), `flutter build macos --debug` ok. ### A3. Cursors (task 4) + - `ClassicSkin` exposes cursor bitmaps (`cursor.bmp`/`.cur`) + hotspot (default skin included). - Native `NSCursor` from skin bitmap via the `winamp` channel; applied with @@ -51,6 +54,7 @@ items `[x]` as done. ## Phase B — Docking & window management (new `lib/src/docking/`) ### B1. Plumbing + - Persist per-window positions (`winamp.window__x/y` in PlayerState); sub-windows spawn at saved positions instead of `center()`. - Sub-windows report bounds over `winamp.subwindows`; main holds the @@ -62,6 +66,7 @@ items `[x]` as done. positions + recomputes attachments. ### B2. Dock logic (task 1) — port from DOCK.cpp / Set.cpp / ui.cpp + - `IsWindowAttached` (dynamic geometry), `SnapWindowToWindow`, `SnapToScreen`, `AdjustSnap`, `FixOverlaps`. - Shade-toggle re-pin (`doMyDirtyShitholeDockingShit`) when main/EQ/PL sizes @@ -71,6 +76,7 @@ items `[x]` as done. PL severs the chain. ### B3. Playlist resize from bottom-right (task 6) + - Custom bottom-right resize handle (window_manager startResizing is Win/Linux-only). - Verify original row-snapping constraints; reuse re-pin for windows docked @@ -79,20 +85,24 @@ items `[x]` as done. ## Phase C — UI fixes ### C1. EQ presets window (task 7) + - Implement the presets window, wire the presets button, load/save to prefs. ### C2. PL bottom action buttons (task 8) + - Research original `button.bmp` regions + popup behavior; clipped sprites + long-press full-sheet popup with release-to-activate; verify vs original. ## Phase D — Preferences + dock menu ### D1. Preferences window (task 2) + - Match original classic layout (Setup, Audio, Visualization, Plug-ins, Skins, Titles, Directories, etc.); all tabs no-op except Skins (registry list + active selection). ### D2. Dock icon menu (task 9) + - `applicationDockMenu(_:)` with Main/EQ/PL visibility toggles; add missing main-window item to the Window menu; flip `applicationShouldTerminateAfterLastWindowClosed` -> `false` so closing all