fix: preserve manual dock-edge resize width across zoom/pan (save dockEdgeSize in placement)
This commit is contained in:
1 parent
ee40c896de
commit
10c986d653
1 file changed
+13
-4
+13
-4
@@ -57,7 +57,7 @@ export default function () {
|
||||
// re-persist it (otherwise it would overwrite the maximized flag with undefined).
|
||||
let maximizedState = false
|
||||
type Placement =
|
||||
| { mode: 'dock'; position: DockPosition }
|
||||
| { mode: 'dock'; position: DockPosition; dockEdgeSize: number }
|
||||
| { mode: 'free'; x: number; y: number; w: number; h: number; maximized?: boolean }
|
||||
let saveTimer: ReturnType<typeof setTimeout> | null = null
|
||||
function savePlacement (p: Placement) {
|
||||
@@ -321,7 +321,14 @@ export default function () {
|
||||
}
|
||||
if (dockedPosition !== null) {
|
||||
applyDock(dockedPosition, width, height, false)
|
||||
savePlacement({ mode: 'dock', position: dockedPosition })
|
||||
// Remember the manually-resized size so the dock-edge canonical formula
|
||||
// (used by the poller on zoom/pan) picks it up instead of the default 320.
|
||||
if (dockedPosition === 'center-left' || dockedPosition === 'center-right') {
|
||||
dockEdgeSize = width
|
||||
} else if (dockedPosition === 'top-center' || dockedPosition === 'bottom-center') {
|
||||
dockEdgeSize = height
|
||||
}
|
||||
savePlacement({ mode: 'dock', position: dockedPosition, dockEdgeSize })
|
||||
} else {
|
||||
// Free (or center one-shot): manual resize clears the maximized flag.
|
||||
maximizedState = false
|
||||
@@ -383,7 +390,7 @@ export default function () {
|
||||
position === 'center-left' || position === 'center-right'
|
||||
if (isEdge) {
|
||||
// Edges are held docked — persist as dock so re-open re-pins to the edge.
|
||||
savePlacement({ mode: 'dock', position: position })
|
||||
savePlacement({ mode: 'dock', position: position, dockEdgeSize })
|
||||
} else {
|
||||
// Corners / center are one-shot — remember the EXACT size+position (free).
|
||||
saveFreeFromCurrent()
|
||||
@@ -629,7 +636,9 @@ export default function () {
|
||||
// Edge dock: stretch to its canonical size and pin (held across zoom/pan).
|
||||
dockedPosition = saved.position
|
||||
maximizedState = false
|
||||
const state = computeDock(saved.position, 320, 200, true)
|
||||
const savedEdge = saved.dockEdgeSize || DEFAULT_DOCK_EDGE
|
||||
dockEdgeSize = savedEdge
|
||||
const state = computeDock(saved.position, savedEdge, savedEdge, true)
|
||||
figma.ui.resize(Math.max(1, state.width), Math.max(1, state.height))
|
||||
lastSize = { width: clampWindowSize(state).width, height: clampWindowSize(state).height }
|
||||
setTimeout(function () {
|
||||
|
||||
Reference in new issue
Block a user