fix: 刷新节点后恢复图像和选区数据

- onNodeCreated: 如果 image widget 已有值,加载图像
- loadImageAndDetectMask: 检查 region_coords widget 恢复之前的选区
This commit is contained in:
InpaintRegionEditor Dev
2026-03-03 20:49:29 +08:00
parent b6f9256d76
commit 3f2a15e7ea
+25 -1
View File
@@ -773,7 +773,26 @@ 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);
}
@@ -1334,6 +1353,11 @@ app.registerExtension({
if (origCb) origCb.apply(this, arguments);
loadImageAndDetectMask(node, v);
};
// 刷新节点时:widget 已有值,需要加载图像
if (imgW.value) {
setTimeout(() => loadImageAndDetectMask(node, imgW.value), 0);
}
}
// 监听 padding 变化