mirror of
https://github.com/Azornes/Comfyui-LayerForge.git
synced 2026-03-22 13:12:10 -03:00
Add addMask method to MaskTool for overlaying masks
Introduces the addMask method to MaskTool in both JS and TS implementations, allowing new masks to be overlaid without clearing existing ones. Updates CanvasView to use addMask instead of setMask when applying SAM detector results.
This commit is contained in:
@@ -1056,9 +1056,9 @@ async function handleSAMDetectorResult(node, resultImage) {
|
||||
});
|
||||
throw new Error("Mask tool not available or not initialized");
|
||||
}
|
||||
log.debug("Applying SAM mask to canvas using setMask method");
|
||||
// Use the setMask method which handles positioning automatically
|
||||
canvas.maskTool.setMask(maskAsImage);
|
||||
log.debug("Applying SAM mask to canvas using addMask method");
|
||||
// Use the addMask method which overlays on existing mask without clearing it
|
||||
canvas.maskTool.addMask(maskAsImage);
|
||||
// Update canvas and save state (same as CanvasMask)
|
||||
canvas.render();
|
||||
canvas.saveState();
|
||||
|
||||
@@ -258,4 +258,16 @@ export class MaskTool {
|
||||
this.canvasInstance.render();
|
||||
log.info(`MaskTool updated with a new mask image at correct canvas position (${destX}, ${destY}).`);
|
||||
}
|
||||
addMask(image) {
|
||||
const destX = -this.x;
|
||||
const destY = -this.y;
|
||||
// Don't clear existing mask - just add to it
|
||||
this.maskCtx.globalCompositeOperation = 'source-over';
|
||||
this.maskCtx.drawImage(image, destX, destY);
|
||||
if (this.onStateChange) {
|
||||
this.onStateChange();
|
||||
}
|
||||
this.canvasInstance.render();
|
||||
log.info(`MaskTool added mask overlay at correct canvas position (${destX}, ${destY}) without clearing existing mask.`);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1170,10 +1170,10 @@ async function handleSAMDetectorResult(node: ComfyNode, resultImage: HTMLImageEl
|
||||
throw new Error("Mask tool not available or not initialized");
|
||||
}
|
||||
|
||||
log.debug("Applying SAM mask to canvas using setMask method");
|
||||
log.debug("Applying SAM mask to canvas using addMask method");
|
||||
|
||||
// Use the setMask method which handles positioning automatically
|
||||
canvas.maskTool.setMask(maskAsImage);
|
||||
// Use the addMask method which overlays on existing mask without clearing it
|
||||
canvas.maskTool.addMask(maskAsImage);
|
||||
|
||||
// Update canvas and save state (same as CanvasMask)
|
||||
canvas.render();
|
||||
|
||||
@@ -336,4 +336,19 @@ export class MaskTool {
|
||||
this.canvasInstance.render();
|
||||
log.info(`MaskTool updated with a new mask image at correct canvas position (${destX}, ${destY}).`);
|
||||
}
|
||||
|
||||
addMask(image: HTMLImageElement): void {
|
||||
const destX = -this.x;
|
||||
const destY = -this.y;
|
||||
|
||||
// Don't clear existing mask - just add to it
|
||||
this.maskCtx.globalCompositeOperation = 'source-over';
|
||||
this.maskCtx.drawImage(image, destX, destY);
|
||||
|
||||
if (this.onStateChange) {
|
||||
this.onStateChange();
|
||||
}
|
||||
this.canvasInstance.render();
|
||||
log.info(`MaskTool added mask overlay at correct canvas position (${destX}, ${destY}) without clearing existing mask.`);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user