aboutsummaryrefslogtreecommitdiff
path: root/extensions-builtin/canvas-zoom-and-pan/javascript/zoom.js
diff options
context:
space:
mode:
authorDanil Boldyrev <daswerq123@gmail.com>2023-08-24 17:30:35 +0300
committerDanil Boldyrev <daswerq123@gmail.com>2023-08-24 17:30:35 +0300
commitc39efa6ba643cb8f13444197933fc65db46dfe71 (patch)
tree33fa8fa4ae4fb84c89a7bae60b8bf25e4491106c /extensions-builtin/canvas-zoom-and-pan/javascript/zoom.js
parentfa68d66c982436c066487b3bb82b3a2e6c329fe4 (diff)
Zoom and Pan: Resize handler
Diffstat (limited to 'extensions-builtin/canvas-zoom-and-pan/javascript/zoom.js')
-rw-r--r--extensions-builtin/canvas-zoom-and-pan/javascript/zoom.js48
1 files changed, 42 insertions, 6 deletions
diff --git a/extensions-builtin/canvas-zoom-and-pan/javascript/zoom.js b/extensions-builtin/canvas-zoom-and-pan/javascript/zoom.js
index 23423891..45c7600a 100644
--- a/extensions-builtin/canvas-zoom-and-pan/javascript/zoom.js
+++ b/extensions-builtin/canvas-zoom-and-pan/javascript/zoom.js
@@ -385,6 +385,8 @@ onUiLoaded(async() => {
targetElement.style.overflow = "hidden";
}
+ targetElement.isZoomed = false;
+
fixCanvas();
targetElement.style.transform = `scale(${elemData[elemId].zoomLevel}) translate(${elemData[elemId].panX}px, ${elemData[elemId].panY}px)`;
@@ -479,7 +481,7 @@ onUiLoaded(async() => {
// Update the zoom level and pan position of the target element based on the values of the zoomLevel, panX and panY variables
function updateZoom(newZoomLevel, mouseX, mouseY) {
- newZoomLevel = Math.max(0.5, Math.min(newZoomLevel, 15));
+ newZoomLevel = Math.max(0.1, Math.min(newZoomLevel, 15));
elemData[elemId].panX +=
mouseX - (mouseX * newZoomLevel) / elemData[elemId].zoomLevel;
@@ -520,6 +522,8 @@ onUiLoaded(async() => {
zoomPosX - targetElement.getBoundingClientRect().left,
zoomPosY - targetElement.getBoundingClientRect().top
);
+
+ targetElement.isZoomed = true;
}
}
@@ -596,17 +600,16 @@ onUiLoaded(async() => {
`${elemId} canvas[key="interface"]`
);
- if (isExtension) {
- targetElement.style.overflow = "visible";
- }
-
-
if (!canvas) return;
if (canvas.offsetWidth > 862 || isExtension) {
targetElement.style.width = (canvas.offsetWidth + 2) + "px";
}
+ if (isExtension) {
+ targetElement.style.overflow = "visible";
+ }
+
if (fullScreenMode) {
resetZoom();
fullScreenMode = false;
@@ -867,7 +870,40 @@ onUiLoaded(async() => {
isMoving = false;
};
+ // Checks for extension
+ function checkForOutBox() {
+ const parentElement = targetElement.closest('[id^="component-"]');
+ if (parentElement.offsetWidth < targetElement.offsetWidth && !targetElement.isExpanded) {
+ resetZoom();
+ targetElement.isExpanded = true;
+ }
+
+ if (parentElement.offsetWidth < targetElement.offsetWidth && elemData[elemId].zoomLevel == 1) {
+ resetZoom();
+ }
+
+ if (parentElement.offsetWidth < targetElement.offsetWidth && targetElement.offsetWidth * elemData[elemId].zoomLevel > parentElement.offsetWidth && elemData[elemId].zoomLevel < 1 && !targetElement.isZoomed) {
+ resetZoom();
+ }
+ }
+
+ if (isExtension) {
+ targetElement.addEventListener("mousemove", checkForOutBox);
+ }
+
+
+ window.addEventListener('resize', (e) => {
+ resetZoom();
+
+ if (isExtension) {
+ targetElement.isExpanded = false;
+ targetElement.isZoomed = false;
+ }
+ });
+
gradioApp().addEventListener("mousemove", handleMoveByKey);
+
+
}
applyZoomAndPan(elementIDs.sketch, false);