kingkont 0.14.4 → 0.14.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/renderer/board.js +18 -14
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kingkont",
3
- "version": "0.14.4",
3
+ "version": "0.14.5",
4
4
  "description": "KingKont · Chatium — нод-редактор сцен с AI-генерацией (картинки/видео/голос/SFX/музыка/текст)",
5
5
  "main": "main.js",
6
6
  "bin": {
package/renderer/board.js CHANGED
@@ -1873,9 +1873,20 @@ async function selectBoard(board) {
1873
1873
  applyZoomStyles(state.zoom);
1874
1874
  $('zoomLabel').textContent = Math.round(state.zoom * 100) + '%';
1875
1875
  }
1876
- // ВАЖНО: для backward-compat старых view (где scrollLeft/Top сохранены
1877
- // БЕЗ padding'а — до этой фичи) добавляем padding к сохранённому
1878
- // значению. Если view свежий и >= padding'а, считаем что padding уже учтён.
1876
+ } else {
1877
+ state.zoom = 1;
1878
+ applyZoomStyles(1);
1879
+ $('zoomLabel').textContent = '100%';
1880
+ }
1881
+ // ВАЖНО: applyZoomStyles ресайзит frame через setTimeout 200ms. Если
1882
+ // ставить scrollLeft СРАЗУ — браузер клампит к старому frame.scrollWidth
1883
+ // (zoom<1 → frame маленький → scroll урезается). Поэтому сначала
1884
+ // форсим frame в полный размер прямо сейчас, потом ставим scroll.
1885
+ const z = state.zoom || 1;
1886
+ document.querySelector('.canvas-frame').style.width = (6000 * z + 2 * padX) + 'px';
1887
+ document.querySelector('.canvas-frame').style.height = (4000 * z + 2 * padY) + 'px';
1888
+ if (view) {
1889
+ // Backward-compat старых view (без padding) — добавляем.
1879
1890
  if (typeof view.scrollLeft === 'number') {
1880
1891
  canvasWrap.scrollLeft = view.scrollLeft >= padX ? view.scrollLeft : view.scrollLeft + padX;
1881
1892
  } else canvasWrap.scrollLeft = padX;
@@ -1883,21 +1894,14 @@ async function selectBoard(board) {
1883
1894
  canvasWrap.scrollTop = view.scrollTop >= padY ? view.scrollTop : view.scrollTop + padY;
1884
1895
  } else canvasWrap.scrollTop = padY;
1885
1896
  } else {
1886
- state.zoom = 1;
1887
- applyZoomStyles(1);
1888
- $('zoomLabel').textContent = '100%';
1889
1897
  canvasWrap.scrollLeft = padX;
1890
1898
  canvasWrap.scrollTop = padY;
1891
1899
  }
1892
1900
 
1893
- // Auto-scroll к bbox нод ТОЛЬКО если view не был сохранён ранее
1894
- // (т.е. это первый раз открываем доску, или юзер ни разу не скроллил).
1895
- // Раньше срабатывало всегда из-за гонки с applyZoomStyles (resize
1896
- // через setTimeout 200ms) scrollLeft при zoom<1 клампился, bbox казался
1897
- // невидимым, view перебивался → юзер терял сохранённую позицию.
1898
- if (!view || (typeof view.scrollLeft !== 'number' && typeof view.scrollTop !== 'number')) {
1899
- requestAnimationFrame(() => _autoScrollToNodesIfHidden(padX, padY));
1900
- }
1901
+ // Auto-scroll к bbox нод если ни одна не попадает в viewport.
1902
+ // Frame уже ресайзнут синхронно выше, scroll проставлен корректно
1903
+ // в next frame _autoScrollToNodesIfHidden имеет валидную картинку.
1904
+ requestAnimationFrame(() => _autoScrollToNodesIfHidden(padX, padY));
1901
1905
 
1902
1906
  // Возобновить незавершённые джобы текущей доски
1903
1907
  for (const n of state.currentBoard.metadata.nodes) {