fix: measure real window size via iframe innerWidth, not requested lastSize (fix gap tautology)
This commit is contained in:
1 parent
b2ae4c44d6
commit
0d61580acb
2 files changed
+15
-5
No files matched your search
+9
-4
@@ -95,7 +95,11 @@ export default function () {
|
||||
|
||||
// UI запрашивает текущие x/y (canvas-space) и размеры окна для отладочного вывода,
|
||||
// а также производные данные, вычислимые из figma.viewport.
|
||||
on('GET_WINDOW_INFO', function () {
|
||||
// ВАЖНО: размер окна берём из РЕАЛЬНОГО iframe (payload.width/height = window.innerWidth/innerHeight),
|
||||
// а не из lastSize (это лишь ЗАПРОШЕННЫЙ размер). Figma может клампнуть resize до своего
|
||||
// внутреннего максимума, и тогда lastSize ≠ реальному окну. Если считать gaps по lastSize,
|
||||
// получаем тавтологию (w==bounds.width → gap==0 всегда), а не измерение.
|
||||
on('GET_WINDOW_INFO', function (payload?: { width?: number; height?: number }) {
|
||||
let x = 0
|
||||
let y = 0
|
||||
try {
|
||||
@@ -109,8 +113,10 @@ export default function () {
|
||||
|
||||
const zoom = figma.viewport.zoom || 1
|
||||
const b = figma.viewport.bounds
|
||||
const w = lastSize.width
|
||||
const h = lastSize.height
|
||||
// Реальный размер окна: из iframe (payload) либо lastSize как fallback.
|
||||
const w = Math.max(1, Math.round(payload != null && payload.width != null ? payload.width : lastSize.width))
|
||||
const h = Math.max(1, Math.round(payload != null && payload.height != null ? payload.height : lastSize.height))
|
||||
lastSize = { width: w, height: h }
|
||||
// Размер окна в ЭКРАННЫХ пикселях (w/h) переводим в canvas-units через zoom,
|
||||
// чтобы корректно вычитать из canvas-ширины bounds при любом зуме.
|
||||
const wCanvas = w / zoom
|
||||
@@ -126,7 +132,6 @@ export default function () {
|
||||
const cy = Math.round(y + hCanvas / 2)
|
||||
|
||||
// Максимальный размер окна (экранные px) = весь видимый viewport (bounds * zoom).
|
||||
// Используется кнопкой "развернуть" в UI и как верхняя граница drag-ресайза.
|
||||
const maxViewport = {
|
||||
width: Math.max(320, Math.round(b.width * zoom)),
|
||||
height: Math.max(200, Math.round(b.height * zoom))
|
||||
|
||||
+6
-1
@@ -90,8 +90,13 @@ function Plugin () {
|
||||
}, [])
|
||||
|
||||
// Запрашиваем свежие данные об окне у main (после любого действия/старта).
|
||||
// Передаём РЕАЛЬНЫЙ размер iframe (window.innerWidth/innerHeight) — это то, что
|
||||
// Figma реально отрисовала, а не запрошенный lastSize. Иначе gaps будут тавтологией.
|
||||
function refreshInfo () {
|
||||
emit('GET_WINDOW_INFO')
|
||||
emit('GET_WINDOW_INFO', {
|
||||
width: window.innerWidth,
|
||||
height: window.innerHeight
|
||||
})
|
||||
}
|
||||
|
||||
// Копирует все debug-значения (RAW + расчёт) в буфер обмена как текст.
|
||||
|
||||
Reference in new issue
Block a user