Parcourir la source

Removed SceneState from renderElement (#301)

Timur Khazamov il y a 5 ans
Parent
commit
8f28c59deb
2 fichiers modifiés avec 14 ajouts et 28 suppressions
  1. 5 27
      src/renderer/renderElement.ts
  2. 9 1
      src/renderer/renderScene.ts

+ 5 - 27
src/renderer/renderElement.ts

@@ -1,32 +1,20 @@
-import rough from "roughjs/bin/wrappers/rough";
-
 import { withCustomMathRandom } from "../random";
 
 import { ExcalidrawElement } from "../element/types";
 import { isTextElement } from "../element/typeChecks";
 import { getDiamondPoints, getArrowPoints } from "../element/bounds";
 import { RoughCanvas } from "roughjs/bin/canvas";
-import { SceneState } from "../scene/types";
-
-// Casting second argument (DrawingSurface) to any,
-// because it is requred by TS definitions and not required at runtime
-const generator = rough.generator(null, null as any);
 
 export function renderElement(
   element: ExcalidrawElement,
   rc: RoughCanvas,
-  context: CanvasRenderingContext2D,
-  { scrollX, scrollY }: SceneState
+  context: CanvasRenderingContext2D
 ) {
+  const generator = rc.generator;
   if (element.type === "selection") {
     const fillStyle = context.fillStyle;
     context.fillStyle = "rgba(0, 0, 255, 0.10)";
-    context.fillRect(
-      element.x + scrollX,
-      element.y + scrollY,
-      element.width,
-      element.height
-    );
+    context.fillRect(0, 0, element.width, element.height);
     context.fillStyle = fillStyle;
   } else if (element.type === "rectangle") {
     const shape = withCustomMathRandom(element.seed, () => {
@@ -40,9 +28,7 @@ export function renderElement(
     });
 
     context.globalAlpha = element.opacity / 100;
-    context.translate(element.x + scrollX, element.y + scrollY);
     rc.draw(shape);
-    context.translate(-element.x - scrollX, -element.y - scrollY);
     context.globalAlpha = 1;
   } else if (element.type === "diamond") {
     const shape = withCustomMathRandom(element.seed, () => {
@@ -73,9 +59,7 @@ export function renderElement(
       );
     });
     context.globalAlpha = element.opacity / 100;
-    context.translate(element.x + scrollX, element.y + scrollY);
     rc.draw(shape);
-    context.translate(-element.x - scrollX, -element.y - scrollY);
     context.globalAlpha = 1;
   } else if (element.type === "ellipse") {
     const shape = withCustomMathRandom(element.seed, () =>
@@ -95,9 +79,7 @@ export function renderElement(
     );
 
     context.globalAlpha = element.opacity / 100;
-    context.translate(element.x + scrollX, element.y + scrollY);
     rc.draw(shape);
-    context.translate(-element.x - scrollX, -element.y - scrollY);
     context.globalAlpha = 1;
   } else if (element.type === "arrow") {
     const [x1, y1, x2, y2, x3, y3, x4, y4] = getArrowPoints(element);
@@ -117,9 +99,7 @@ export function renderElement(
     ]);
 
     context.globalAlpha = element.opacity / 100;
-    context.translate(element.x + scrollX, element.y + scrollY);
     shapes.forEach(shape => rc.draw(shape));
-    context.translate(-element.x - scrollX, -element.y - scrollY);
     context.globalAlpha = 1;
     return;
   } else if (isTextElement(element)) {
@@ -130,10 +110,8 @@ export function renderElement(
     context.fillStyle = element.strokeColor;
     context.fillText(
       element.text,
-      element.x + scrollX,
-      element.y +
-        scrollY +
-        (element.baseline || element.actualBoundingBoxAscent || 0)
+      0,
+      element.baseline || element.actualBoundingBoxAscent || 0
     );
     context.fillStyle = fillStyle;
     context.font = font;

+ 9 - 1
src/renderer/renderScene.ts

@@ -50,7 +50,15 @@ export function renderScene(
   };
 
   elements.forEach(element => {
-    renderElement(element, rc, context, sceneState);
+    context.translate(
+      element.x + sceneState.scrollX,
+      element.y + sceneState.scrollY
+    );
+    renderElement(element, rc, context);
+    context.translate(
+      -element.x - sceneState.scrollX,
+      -element.y - sceneState.scrollY
+    );
   });
 
   if (renderSelection) {