From 21237290db707f47e97096a8ae2a822338dfe6d9 Mon Sep 17 00:00:00 2001 From: InpaintRegionEditor Dev Date: Tue, 3 Mar 2026 21:45:18 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=8A=A0=E8=BD=BD=E6=96=B0=E5=9B=BE?= =?UTF-8?q?=E6=97=B6=E8=87=AA=E5=8A=A8=E6=9B=B4=E6=96=B0=20region=5Fcoords?= =?UTF-8?q?=20widget?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/extension.js | 46 +++++++++++++--------------------------------- 1 file changed, 13 insertions(+), 33 deletions(-) diff --git a/web/extension.js b/web/extension.js index 5180b1d..6d5972f 100644 --- a/web/extension.js +++ b/web/extension.js @@ -773,27 +773,19 @@ async function loadImageAndDetectMask(node, imageName) { if (hasMask && minX <= maxX && minY <= maxY) { data.maskBounds = { x: minX, y: minY, width: maxX - minX + 1, height: maxY - minY + 1 }; - - // 检查是否有之前保存的选区坐标 - const coordsWidget = node.widgets?.find(w => w.name === "region_coords"); - if (coordsWidget?.value) { - try { - const savedRegion = JSON.parse(coordsWidget.value); - if (savedRegion.x !== undefined && savedRegion.y !== undefined && - savedRegion.width !== undefined && savedRegion.height !== undefined) { - data.regionX = savedRegion.x; - data.regionY = savedRegion.y; - data.regionWidth = savedRegion.width; - data.regionHeight = savedRegion.height; - nodeImageData.set(node.id, data); - node.setDirtyCanvas(true); - return; - } - } catch (e) {} - } - - // 没有保存的选区,重新计算 + // 使用统一的约束函数计算选区 constrainRegion(data, padding); + + // 同步到 region_coords widget + const coordsWidget = node.widgets?.find(w => w.name === "region_coords"); + if (coordsWidget) { + coordsWidget.value = JSON.stringify({ + x: Math.round(data.regionX), + y: Math.round(data.regionY), + width: Math.round(data.regionWidth), + height: Math.round(data.regionHeight) + }); + } } nodeImageData.set(node.id, data); @@ -1353,11 +1345,6 @@ app.registerExtension({ if (origCb) origCb.apply(this, arguments); loadImageAndDetectMask(node, v); }; - - // 刷新节点时:widget 已有值,需要加载图像 - if (imgW.value) { - setTimeout(() => loadImageAndDetectMask(node, imgW.value), 0); - } } // 监听 padding 变化 @@ -1376,7 +1363,7 @@ app.registerExtension({ } }; - // 从工作流加载时确保 widget 存在,并重新加载图像 + // 从工作流加载时确保 widget 存在 const origConfigure = nodeType.prototype.configure; nodeType.prototype.configure = function(info) { if (origConfigure) origConfigure.apply(this, arguments); @@ -1389,13 +1376,6 @@ app.registerExtension({ serialize: true }); } - - // 刷新节点后重新加载图像 - const imgW = node.widgets?.find(w => w.name === "image"); - if (imgW?.value) { - // 延迟加载,确保节点完全配置好 - setTimeout(() => loadImageAndDetectMask(node, imgW.value), 0); - } }; // 鼠标事件