Преглед изворни кода

fix: upscaling behavior after change of background

Arnošt Pleskot пре 2 година
родитељ
комит
c2870a6df5
1 измењених фајлова са 21 додато и 11 уклоњено
  1. 21 11
      src/components/ImageExportDialog.tsx

+ 21 - 11
src/components/ImageExportDialog.tsx

@@ -1,4 +1,4 @@
-import React, { useEffect, useRef, useState } from "react";
+import React, { useCallback, useEffect, useRef, useState } from "react";
 import clsx from "clsx";
 import clsx from "clsx";
 
 
 import type { ActionManager } from "../actions/manager";
 import type { ActionManager } from "../actions/manager";
@@ -113,7 +113,16 @@ const ImageExportModal = ({
       })
       })
     : elements;
     : elements;
 
 
-  //FIXME: this is broken by fix for padding in export preview
+  const updateAllScales = useCallback(
+    (scale: number) => {
+      actionManager.executeAction(actionChangeExportScale, "ui", scale);
+      setExportScale(scale);
+      setExportBaseScale(scale);
+    },
+    [actionManager, setExportScale, setExportBaseScale],
+  );
+
+  // Upscale exported image when is smaller than preview
   useEffect(() => {
   useEffect(() => {
     if (
     if (
       exportedElements.length > 0 &&
       exportedElements.length > 0 &&
@@ -142,20 +151,21 @@ const ImageExportModal = ({
         ) / 100;
         ) / 100;
 
 
       if (scale > 1) {
       if (scale > 1) {
-        actionManager.executeAction(actionChangeExportScale, "ui", scale);
-        setExportBaseScale(scale);
+        if (scale !== exportBaseScale) {
+          updateAllScales(scale);
+        }
       } else {
       } else {
-        setExportBaseScale(defaultExportScale);
+        updateAllScales(defaultExportScale);
       }
       }
-    } else {
-      setExportBaseScale(defaultExportScale);
+    } else if (exportBaseScale !== defaultExportScale) {
+      updateAllScales(defaultExportScale);
     }
     }
   }, [
   }, [
-    actionManager,
-    exportedElements,
-    previewRef,
-    exportWithBackground,
     exportBackgroundImage,
     exportBackgroundImage,
+    exportWithBackground,
+    exportedElements,
+    exportBaseScale,
+    updateAllScales,
   ]);
   ]);
 
 
   useEffect(() => {
   useEffect(() => {