From 05aec8ebfa02900fcf89c6c2c37aef808733a2fe Mon Sep 17 00:00:00 2001 From: Mika Kuns Date: Thu, 25 Jun 2026 22:39:17 +0200 Subject: [PATCH] feat(ui): ghost-window drag infrastructure for task rows Add the borderless, transparent, topmost, click-through DragGhostWindow that hosts a tilted (~-6deg) translucent snapshot of the dragged row, a TaskDragController that owns its lifecycle (snapshot -> show -> follow -> close), and a pure DPI-aware DragHitTest helper (unit-tested) for the cross-window screen hit test. Adds the TaskRowViewModel.IsDragging flag and the 'grabbed' Border.task-row.dragging style (lift + scale + lower opacity + shadow). Not yet wired into the drag source. --- src/ClaudeDo.Ui/Design/IslandStyles.axaml | 9 +++ .../ViewModels/Islands/TaskRowViewModel.cs | 2 + .../Views/Controls/DragGhostWindow.axaml | 22 ++++++ .../Views/Controls/DragGhostWindow.axaml.cs | 29 ++++++++ src/ClaudeDo.Ui/Views/Controls/DragHitTest.cs | 24 +++++++ .../Views/Controls/TaskDragController.cs | 69 +++++++++++++++++++ .../Views/Islands/TaskRowView.axaml | 1 + tests/ClaudeDo.Ui.Tests/DragHitTestTests.cs | 44 ++++++++++++ 8 files changed, 200 insertions(+) create mode 100644 src/ClaudeDo.Ui/Views/Controls/DragGhostWindow.axaml create mode 100644 src/ClaudeDo.Ui/Views/Controls/DragGhostWindow.axaml.cs create mode 100644 src/ClaudeDo.Ui/Views/Controls/DragHitTest.cs create mode 100644 src/ClaudeDo.Ui/Views/Controls/TaskDragController.cs create mode 100644 tests/ClaudeDo.Ui.Tests/DragHitTestTests.cs diff --git a/src/ClaudeDo.Ui/Design/IslandStyles.axaml b/src/ClaudeDo.Ui/Design/IslandStyles.axaml index 20e7db1..75552f1 100644 --- a/src/ClaudeDo.Ui/Design/IslandStyles.axaml +++ b/src/ClaudeDo.Ui/Design/IslandStyles.axaml @@ -407,6 +407,8 @@ + + @@ -417,6 +419,13 @@ + +