Canvas: sist berørt boks forblir øverst (persistent z-order)
Hver gang en boks klikkes/dras økes en global z-teller og boksen får høyeste verdi. Rekkefølgen bevares etter at boksen deselekteres. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
cf992b6f58
commit
e520b8037c
1 changed files with 10 additions and 1 deletions
|
|
@ -63,6 +63,8 @@
|
|||
let isLassoing = $state(false);
|
||||
let spaceHeld = $state(false);
|
||||
let dragTargetId: string | null = null;
|
||||
let topZCounter = $state(1);
|
||||
let zOrderMap = $state(new Map<string, number>());
|
||||
let dragStartWorld = { x: 0, y: 0 };
|
||||
let dragObjectStart = { x: 0, y: 0 };
|
||||
let dragGroupStarts = new Map<string, { x: number; y: number }>();
|
||||
|
|
@ -212,6 +214,13 @@
|
|||
}
|
||||
onSelectionChange?.([...selectedIds]);
|
||||
|
||||
// Bring to front
|
||||
topZCounter++;
|
||||
zOrderMap = new Map(zOrderMap);
|
||||
for (const sid of selectedIds) {
|
||||
zOrderMap.set(sid, topZCounter);
|
||||
}
|
||||
|
||||
// Record start positions for all selected objects (group drag)
|
||||
dragGroupStarts = new Map();
|
||||
for (const sid of selectedIds) {
|
||||
|
|
@ -506,7 +515,7 @@
|
|||
style:top="{obj.y}px"
|
||||
style:width="{obj.width}px"
|
||||
style:height="{obj.height}px"
|
||||
style:z-index={selectedIds.has(obj.id) ? 10 : 1}
|
||||
style:z-index={zOrderMap.get(obj.id) ?? 1}
|
||||
>
|
||||
{@render renderObject(obj)}
|
||||
</div>
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue