kingkont 0.20.11 → 0.20.12

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 +19 -15
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kingkont",
3
- "version": "0.20.11",
3
+ "version": "0.20.12",
4
4
  "description": "KingKont \u00b7 Chatium \u2014 \u043d\u043e\u0434-\u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u0441\u0446\u0435\u043d \u0441 AI-\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0435\u0439 (\u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438/\u0432\u0438\u0434\u0435\u043e/\u0433\u043e\u043b\u043e\u0441/SFX/\u043c\u0443\u0437\u044b\u043a\u0430/\u0442\u0435\u043a\u0441\u0442)",
5
5
  "main": "main.js",
6
6
  "bin": {
package/renderer/board.js CHANGED
@@ -3175,27 +3175,31 @@ function _autoScrollToNodesIfHidden(padX, padY) {
3175
3175
  const nodes = board.metadata.nodes || [];
3176
3176
  if (!nodes.length)
3177
3177
  return;
3178
- // Считаем bbox в canvas-coords.
3179
- let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;
3180
- for (const n of nodes) {
3181
- const w = n.width || 280, h = n.height || 220;
3182
- minX = Math.min(minX, n.x);
3183
- minY = Math.min(minY, n.y);
3184
- maxX = Math.max(maxX, n.x + w);
3185
- maxY = Math.max(maxY, n.y + h);
3186
- }
3187
3178
  const z = state.zoom || 1;
3188
- // Видимое окно в canvas-coords (viewport / zoom).
3189
3179
  const wrap = canvasWrap;
3180
+ // Видимое окно в canvas-coords (viewport / zoom).
3190
3181
  const viewLeft = (wrap.scrollLeft - padX) / z;
3191
3182
  const viewTop = (wrap.scrollTop - padY) / z;
3192
3183
  const viewRight = viewLeft + wrap.clientWidth / z;
3193
3184
  const viewBottom = viewTop + wrap.clientHeight / z;
3194
- // Перекрытие? Если bbox нод хоть как-то пересекается с viewport не трогаем.
3195
- const intersects = !(maxX < viewLeft || minX > viewRight || maxY < viewTop || minY > viewBottom);
3196
- if (intersects)
3197
- return;
3198
- // Иначе центрируем на bbox.
3185
+ // Раньше проверяли пересечение viewport'а с BBOX всех ноддля нод
3186
+ // в углах (0,0) и (5000,5000) bbox покрывал ВЕСЬ canvas false-positive
3187
+ // «не trigger'им». Теперь спрашиваем: есть ли ХОТЯ БЫ ОДНА нода хоть
3188
+ // частично внутри viewport'а? Если нет — центрируем на bbox-у нод.
3189
+ let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;
3190
+ let anyVisible = false;
3191
+ for (const n of nodes) {
3192
+ const w = n.width || 280, h = n.height || 220;
3193
+ const nL = n.x, nR = n.x + w, nT = n.y, nB = n.y + h;
3194
+ minX = Math.min(minX, nL);
3195
+ minY = Math.min(minY, nT);
3196
+ maxX = Math.max(maxX, nR);
3197
+ maxY = Math.max(maxY, nB);
3198
+ if (!(nR < viewLeft || nL > viewRight || nB < viewTop || nT > viewBottom)) {
3199
+ anyVisible = true;
3200
+ }
3201
+ }
3202
+ if (anyVisible) return;
3199
3203
  const cx = (minX + maxX) / 2;
3200
3204
  const cy = (minY + maxY) / 2;
3201
3205
  wrap.scrollLeft = cx * z + padX - wrap.clientWidth / 2;