Browse Source

Revert "Fix RTL text direction rendering (#1687)" (#1705)

This reverts commit a118bed82f.
vanilla_orig
David Luzar 5 years ago
parent
commit
ff93d95998
No account linked to committer's email address
4 changed files with 10 additions and 41 deletions
  1. 1
    0
      src/data/index.ts
  2. 9
    29
      src/renderer/renderElement.ts
  3. 0
    2
      src/scene/export.ts
  4. 0
    10
      src/utils.ts

+ 1
- 0
src/data/index.ts View File

@@ -330,6 +330,7 @@ export const exportCanvas = async (
330 330
     shouldAddWatermark,
331 331
   });
332 332
   tempCanvas.style.display = "none";
333
+  document.body.appendChild(tempCanvas);
333 334
 
334 335
   if (type === "png") {
335 336
     const fileName = `${name}.png`;

+ 9
- 29
src/renderer/renderElement.ts View File

@@ -14,13 +14,7 @@ import { Drawable, Options } from "roughjs/bin/core";
14 14
 import { RoughSVG } from "roughjs/bin/svg";
15 15
 import { RoughGenerator } from "roughjs/bin/generator";
16 16
 import { SceneState } from "../scene/types";
17
-import {
18
-  SVG_NS,
19
-  distance,
20
-  getFontString,
21
-  getFontFamilyString,
22
-  isRTL,
23
-} from "../utils";
17
+import { SVG_NS, distance, getFontString, getFontFamilyString } from "../utils";
24 18
 import { isPathALoop } from "../math";
25 19
 import rough from "roughjs/bin/rough";
26 20
 
@@ -44,11 +38,6 @@ const generateElementCanvas = (
44 38
   const canvas = document.createElement("canvas");
45 39
   const context = canvas.getContext("2d")!;
46 40
 
47
-  // To be able to draw a nested element with RTL, we have to append it to the DOM
48
-  canvas.style.display = "none";
49
-  canvas.id = "nested-canvas-element";
50
-  document.body.appendChild(canvas);
51
-
52 41
   let canvasOffsetX = 0;
53 42
   let canvasOffsetY = 0;
54 43
 
@@ -111,14 +100,12 @@ const drawElementOnCanvas = (
111 100
     }
112 101
     default: {
113 102
       if (isTextElement(element)) {
114
-        context.canvas.setAttribute("dir", isRTL(element.text) ? "rtl" : "ltr");
115 103
         const font = context.font;
116 104
         context.font = getFontString(element);
117 105
         const fillStyle = context.fillStyle;
118 106
         context.fillStyle = element.strokeColor;
119 107
         const textAlign = context.textAlign;
120 108
         context.textAlign = element.textAlign as CanvasTextAlign;
121
-
122 109
         // Canvas does not support multiline text by default
123 110
         const lines = element.text.replace(/\r\n?/g, "\n").split("\n");
124 111
         const lineHeight = element.height / lines.length;
@@ -132,7 +119,7 @@ const drawElementOnCanvas = (
132 119
         for (let i = 0; i < lines.length; i++) {
133 120
           context.fillText(
134 121
             lines[i],
135
-            horizontalOffset,
122
+            0 + horizontalOffset,
136 123
             (i + 1) * lineHeight - verticalOffset,
137 124
           );
138 125
         }
@@ -355,12 +342,6 @@ const drawElementFromCanvas = (
355 342
   context.rotate(-element.angle);
356 343
   context.translate(-cx, -cy);
357 344
   context.scale(window.devicePixelRatio, window.devicePixelRatio);
358
-
359
-  // Clear the nested element we appended to the DOM
360
-  const node = document.querySelector("#nested-canvas-element");
361
-  if (node && node.parentNode) {
362
-    node.parentNode.removeChild(node);
363
-  }
364 345
 };
365 346
 
366 347
 export const renderElement = (
@@ -394,12 +375,9 @@ export const renderElement = (
394 375
     case "draw":
395 376
     case "arrow":
396 377
     case "text": {
378
+      const elementWithCanvas = generateElement(element, generator, sceneState);
379
+
397 380
       if (renderOptimizations) {
398
-        const elementWithCanvas = generateElement(
399
-          element,
400
-          generator,
401
-          sceneState,
402
-        );
403 381
         drawElementFromCanvas(elementWithCanvas, rc, context, sceneState);
404 382
       } else {
405 383
         const [x1, y1, x2, y2] = getElementAbsoluteCoords(element);
@@ -509,14 +487,17 @@ export const renderElementToSvg = (
509 487
         const lineHeight = element.height / lines.length;
510 488
         const verticalOffset = element.height - element.baseline;
511 489
         const horizontalOffset =
512
-          element.textAlign === "center" ? element.width / 2 : element.width;
490
+          element.textAlign === "center"
491
+            ? element.width / 2
492
+            : element.textAlign === "right"
493
+            ? element.width
494
+            : 0;
513 495
         const textAnchor =
514 496
           element.textAlign === "center"
515 497
             ? "middle"
516 498
             : element.textAlign === "right"
517 499
             ? "end"
518 500
             : "start";
519
-        const direction = isRTL(element.text) ? "rtl" : "ltr";
520 501
         for (let i = 0; i < lines.length; i++) {
521 502
           const text = svgRoot.ownerDocument!.createElementNS(SVG_NS, "text");
522 503
           text.textContent = lines[i];
@@ -527,7 +508,6 @@ export const renderElementToSvg = (
527 508
           text.setAttribute("fill", element.strokeColor);
528 509
           text.setAttribute("text-anchor", textAnchor);
529 510
           text.setAttribute("style", "white-space: pre;");
530
-          text.setAttribute("direction", direction);
531 511
           node.appendChild(text);
532 512
         }
533 513
         svgRoot.appendChild(node);

+ 0
- 2
src/scene/export.ts View File

@@ -32,8 +32,6 @@ export const exportToCanvas = (
32 32
     const tempCanvas = document.createElement("canvas");
33 33
     tempCanvas.width = width * scale;
34 34
     tempCanvas.height = height * scale;
35
-    // We append the canvas before drawing it to it for RTL to work
36
-    document.body.appendChild(tempCanvas);
37 35
     return tempCanvas;
38 36
   },
39 37
 ) => {

+ 0
- 10
src/utils.ts View File

@@ -227,13 +227,3 @@ export const sceneCoordsToViewportCoords = (
227 227
 
228 228
 export const getGlobalCSSVariable = (name: string) =>
229 229
   getComputedStyle(document.documentElement).getPropertyValue(`--${name}`);
230
-
231
-export const isRTL = (text: string) => {
232
-  const ltrChars =
233
-    "A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02B8\u0300-\u0590\u0800-\u1FFF" +
234
-    "\u2C00-\uFB1C\uFDFE-\uFE6F\uFEFD-\uFFFF";
235
-  const rtlChars = "\u0591-\u07FF\uFB1D-\uFDFD\uFE70-\uFEFC";
236
-  const rtlDirCheck = new RegExp(`^[^${ltrChars}]*[${rtlChars}]`);
237
-
238
-  return rtlDirCheck.test(text);
239
-};

Loading…
Cancel
Save