jhh6576 commited on
Commit
84d2d6d
·
verified ·
1 Parent(s): be44f9a

Update app_enhanced.py

Browse files
Files changed (1) hide show
  1. app_enhanced.py +30 -6
app_enhanced.py CHANGED
@@ -916,9 +916,27 @@ class EnhancedComicGenerator:
916
 
917
  function updateImageTransform(img) {
918
  const zoom = (img.dataset.zoom || 100) / 100;
919
- const x = img.dataset.translateX || 0;
920
- const y = img.dataset.translateY || 0;
921
- img.style.transform = `translateX(${x}px) translateY(${y}px) scale(${zoom})`;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
922
  img.classList.toggle('pannable', zoom > 1);
923
  }
924
 
@@ -926,6 +944,9 @@ class EnhancedComicGenerator:
926
  if (!currentlySelectedPanel) return;
927
  const img = currentlySelectedPanel.querySelector('img');
928
  img.dataset.zoom = event.target.value;
 
 
 
929
  updateImageTransform(img);
930
  }
931
 
@@ -955,9 +976,12 @@ class EnhancedComicGenerator:
955
  function panImage(event) {
956
  if (!isPanning || !currentlySelectedPanel) return;
957
  const img = currentlySelectedPanel.querySelector('img');
958
- img.dataset.translateX = panStartTranslateX + (event.clientX - panStartX);
959
- img.dataset.translateY = panStartTranslateY + (event.clientY - panStartY);
960
- updateImageTransform(img);
 
 
 
961
  }
962
 
963
  function stopPan() {
 
916
 
917
  function updateImageTransform(img) {
918
  const zoom = (img.dataset.zoom || 100) / 100;
919
+ const x = parseFloat(img.dataset.translateX || 0);
920
+ const y = parseFloat(img.dataset.translateY || 0);
921
+
922
+ const panel = img.parentElement;
923
+ const panelWidth = panel.offsetWidth;
924
+ const panelHeight = panel.offsetHeight;
925
+ const imgWidth = img.offsetWidth * zoom;
926
+ const imgHeight = img.offsetHeight * zoom;
927
+
928
+ // Calculate max allowable translation
929
+ const maxX = Math.max(0, (imgWidth - panelWidth) / 2);
930
+ const maxY = Math.max(0, (imgHeight - panelHeight) / 2);
931
+
932
+ // Clamp the translation values
933
+ const clampedX = Math.max(-maxX, Math.min(maxX, x));
934
+ const clampedY = Math.max(-maxY, Math.min(maxY, y));
935
+
936
+ img.dataset.translateX = clampedX;
937
+ img.dataset.translateY = clampedY;
938
+
939
+ img.style.transform = `translateX(${clampedX}px) translateY(${clampedY}px) scale(${zoom})`;
940
  img.classList.toggle('pannable', zoom > 1);
941
  }
942
 
 
944
  if (!currentlySelectedPanel) return;
945
  const img = currentlySelectedPanel.querySelector('img');
946
  img.dataset.zoom = event.target.value;
947
+ // Reset translation when zoom changes to avoid edge cases
948
+ img.dataset.translateX = 0;
949
+ img.dataset.translateY = 0;
950
  updateImageTransform(img);
951
  }
952
 
 
976
  function panImage(event) {
977
  if (!isPanning || !currentlySelectedPanel) return;
978
  const img = currentlySelectedPanel.querySelector('img');
979
+ const dx = event.clientX - panStartX;
980
+ const dy = event.clientY - panStartY;
981
+
982
+ img.dataset.translateX = panStartTranslateX + dx;
983
+ img.dataset.translateY = panStartTranslateY + dy;
984
+ updateImageTransform(img); // Clamping is handled here
985
  }
986
 
987
  function stopPan() {