Quellcode durchsuchen

fix: support resizing multiple bound text containers (#4824)

Aakansha Doshi vor 3 Jahren
Ursprung
Commit
f224e4d596
1 geänderte Dateien mit 28 neuen und 2 gelöschten Zeilen
  1. 28 2
      src/element/resizeElements.ts

+ 28 - 2
src/element/resizeElements.ts

@@ -1,4 +1,4 @@
-import { SHIFT_LOCKING_ANGLE } from "../constants";
+import { BOUND_TEXT_PADDING, SHIFT_LOCKING_ANGLE } from "../constants";
 import { rescalePoints } from "../points";
 
 import {
@@ -141,7 +141,6 @@ export const transformElements = (
         pointerX,
         pointerY,
       );
-      handleBindTextResize(selectedElements, transformHandleType);
       return true;
     }
   }
@@ -674,7 +673,25 @@ const resizeMultipleElements = (
         }
         const width = element.width * scale;
         const height = element.height * scale;
+        const boundTextElement = getBoundTextElement(element);
         let font: { fontSize?: number; baseline?: number } = {};
+
+        if (boundTextElement) {
+          const nextFont = measureFontSizeFromWH(
+            boundTextElement,
+            width - BOUND_TEXT_PADDING * 2,
+            height - BOUND_TEXT_PADDING * 2,
+          );
+
+          if (nextFont === null) {
+            return null;
+          }
+          font = {
+            fontSize: nextFont.size,
+            baseline: nextFont.baseline,
+          };
+        }
+
         if (isTextElement(element)) {
           const nextFont = measureFontSizeFromWH(element, width, height);
           if (nextFont === null) {
@@ -718,6 +735,15 @@ const resizeMultipleElements = (
     if (updates) {
       elements.forEach((element, index) => {
         mutateElement(element, updates[index]);
+        const boundTextElement = getBoundTextElement(element);
+
+        if (boundTextElement) {
+          mutateElement(boundTextElement, {
+            fontSize: updates[index].fontSize,
+            baseline: updates[index].baseline,
+          });
+          handleBindTextResize([element], transformHandleType);
+        }
       });
     }
   }