diff options
author | AUTOMATIC1111 <16777216c@gmail.com> | 2023-08-11 04:56:31 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-08-11 04:56:31 +0000 |
commit | 3c00e41ec049a6911a61b1210bf826c661eac085 (patch) | |
tree | 4e63bb606109bc04e3a06d0a38845341424c4ffc /extensions-builtin/canvas-zoom-and-pan/javascript/zoom.js | |
parent | 340c1cc68dcf14c6e0d583a88f6ea696e8dbf472 (diff) | |
parent | 045f7408926aec4bf7e8fcb09333a3f45783d239 (diff) | |
download | stable-diffusion-webui-gfx803-3c00e41ec049a6911a61b1210bf826c661eac085.tar.gz stable-diffusion-webui-gfx803-3c00e41ec049a6911a61b1210bf826c661eac085.tar.bz2 stable-diffusion-webui-gfx803-3c00e41ec049a6911a61b1210bf826c661eac085.zip |
Merge pull request #12458 from daswer123/auto-expand
Zoom and pan: Some fixes for the auto-expand
Diffstat (limited to 'extensions-builtin/canvas-zoom-and-pan/javascript/zoom.js')
-rw-r--r-- | extensions-builtin/canvas-zoom-and-pan/javascript/zoom.js | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/extensions-builtin/canvas-zoom-and-pan/javascript/zoom.js b/extensions-builtin/canvas-zoom-and-pan/javascript/zoom.js index e7616b98..72c8ba87 100644 --- a/extensions-builtin/canvas-zoom-and-pan/javascript/zoom.js +++ b/extensions-builtin/canvas-zoom-and-pan/javascript/zoom.js @@ -12,6 +12,7 @@ onUiLoaded(async() => { "Sketch": elementIDs.sketch }; + // Helper functions // Get active tab function getActiveTab(elements, all = false) { @@ -377,6 +378,11 @@ onUiLoaded(async() => { toggleOverlap("off"); fullScreenMode = false; + const closeBtn = targetElement.querySelector("button[aria-label='Remove Image']"); + if (closeBtn) { + closeBtn.addEventListener("click", resetZoom); + } + if ( canvas && parseFloat(canvas.style.width) > 865 && @@ -657,17 +663,20 @@ onUiLoaded(async() => { // Simulation of the function to put a long image into the screen. // We detect if an image has a scroll bar or not, make a fullscreen to reveal the image, then reduce it to fit into the element. // We hide the image and show it to the user when it is ready. - function autoExpand(e) { + + targetElement.isExpanded = false; + function autoExpand() { const canvas = document.querySelector(`${elemId} canvas[key="interface"]`); const isMainTab = activeElement === elementIDs.inpaint || activeElement === elementIDs.inpaintSketch || activeElement === elementIDs.sketch; if (canvas && isMainTab) { - if (hasHorizontalScrollbar(targetElement)) { + if (hasHorizontalScrollbar(targetElement) && targetElement.isExpanded === false) { targetElement.style.visibility = "hidden"; setTimeout(() => { fitToScreen(); resetZoom(); targetElement.style.visibility = "visible"; + targetElement.isExpanded = true; }, 10); } } @@ -675,9 +684,24 @@ onUiLoaded(async() => { targetElement.addEventListener("mousemove", getMousePosition); + //observers + // Creating an observer with a callback function to handle DOM changes + const observer = new MutationObserver((mutationsList, observer) => { + for (let mutation of mutationsList) { + // If the style attribute of the canvas has changed, by observation it happens only when the picture changes + if (mutation.type === 'attributes' && mutation.attributeName === 'style' && + mutation.target.tagName.toLowerCase() === 'canvas') { + targetElement.isExpanded = false; + setTimeout(resetZoom, 10); + } + } + }); + // Apply auto expand if enabled if (hotkeysConfig.canvas_auto_expand) { targetElement.addEventListener("mousemove", autoExpand); + // Set up an observer to track attribute changes + observer.observe(targetElement, {attributes: true, childList: true, subtree: true}); } // Handle events only inside the targetElement |