Răsfoiți Sursa

feat: simplify the rendering

Arnošt Pleskot 2 ani în urmă
părinte
comite
d4d9ecf6c6
2 a modificat fișierele cu 19 adăugiri și 73 ștergeri
  1. 18 18
      src/scene/export.ts
  2. 1 55
      src/scene/fancyBackground.ts

+ 18 - 18
src/scene/export.ts

@@ -6,6 +6,8 @@ import { distance, isOnlyExportingSingleFrame } from "../utils";
 import { AppState, BinaryFiles } from "../types";
 import {
   DEFAULT_EXPORT_PADDING,
+  FANCY_BG_BORDER_RADIUS,
+  FANCY_BG_PADDING,
   SVG_NS,
   THEME,
   THEME_FILTER,
@@ -44,9 +46,17 @@ export const exportToCanvas = async (
     return { canvas, scale: appState.exportScale };
   },
 ) => {
-  const [minX, minY, width, height] = getCanvasSize(elements, exportPadding);
+  const exportWithFancyBackground =
+    exportBackground &&
+    !!appState.fancyBackgroundImageUrl &&
+    elements.length > 0;
+  const padding = !exportWithFancyBackground
+    ? exportPadding
+    : exportPadding + FANCY_BG_PADDING + FANCY_BG_BORDER_RADIUS;
+
+  const [minX, minY, width, height] = getCanvasSize(elements, padding);
 
-  let { canvas, scale = 1 } = createCanvas(width, height);
+  const { canvas, scale = 1 } = createCanvas(width, height);
 
   const defaultAppState = getDefaultAppState();
 
@@ -60,13 +70,13 @@ export const exportToCanvas = async (
 
   const onlyExportingSingleFrame = isOnlyExportingSingleFrame(elements);
 
-  let renderConfig = {
+  const renderConfig = {
     viewBackgroundColor:
       exportBackground && !appState.fancyBackgroundImageUrl
         ? viewBackgroundColor
         : null,
-    scrollX: -minX + (onlyExportingSingleFrame ? 0 : exportPadding),
-    scrollY: -minY + (onlyExportingSingleFrame ? 0 : exportPadding),
+    scrollX: -minX + (onlyExportingSingleFrame ? 0 : padding),
+    scrollY: -minY + (onlyExportingSingleFrame ? 0 : padding),
     zoom: defaultAppState.zoom,
     remotePointerViewportCoords: {},
     remoteSelectedElementIds: {},
@@ -82,22 +92,12 @@ export const exportToCanvas = async (
     exportBackgroundImage: appState.fancyBackgroundImageUrl,
   };
 
-  if (exportBackground && appState.fancyBackgroundImageUrl) {
-    const contentBounds = getCommonBounds(elements);
-    const updatedRenderProps = await applyFancyBackground({
+  if (exportWithFancyBackground) {
+    await applyFancyBackground({
       canvas,
-      fancyBackgroundImageUrl: appState.fancyBackgroundImageUrl,
+      fancyBackgroundImageUrl: appState.fancyBackgroundImageUrl!,
       backgroundColor: viewBackgroundColor,
-      scale,
-      renderConfig,
-      contentDimensions: {
-        w: contentBounds[2] - contentBounds[0],
-        h: contentBounds[3] - contentBounds[1],
-      },
     });
-
-    renderConfig = updatedRenderProps.renderConfig;
-    scale = updatedRenderProps.scale;
   }
 
   renderStaticScene({

+ 1 - 55
src/scene/fancyBackground.ts

@@ -1,12 +1,7 @@
-import {
-  DEFAULT_EXPORT_PADDING,
-  FANCY_BG_BORDER_RADIUS,
-  FANCY_BG_PADDING,
-} from "../constants";
+import { FANCY_BG_BORDER_RADIUS, FANCY_BG_PADDING } from "../constants";
 import { loadHTMLImageElement } from "../element/image";
 import { roundRect } from "../renderer/roundRect";
 import { DataURL } from "../types";
-import { RenderConfig } from "./types";
 
 type Dimensions = { w: number; h: number };
 
@@ -19,15 +14,6 @@ const getScaleToFill = (contentSize: Dimensions, containerSize: Dimensions) => {
   return scale;
 };
 
-const getScaleToFit = (contentSize: Dimensions, containerSize: Dimensions) => {
-  const scale = Math.min(
-    containerSize.w / contentSize.w,
-    containerSize.h / contentSize.h,
-  );
-
-  return scale;
-};
-
 const addImageBackground = (
   context: CanvasRenderingContext2D,
   canvasDimensions: Dimensions,
@@ -134,47 +120,14 @@ const addContentBackground = (
   });
 };
 
-const updateRenderConfig = (
-  renderConfig: RenderConfig,
-  canvasDimensions: Dimensions,
-  contentDimensions: Dimensions,
-): { scale: number; renderConfig: RenderConfig } => {
-  const totalPadding =
-    FANCY_BG_PADDING + FANCY_BG_BORDER_RADIUS + DEFAULT_EXPORT_PADDING;
-
-  const scale = getScaleToFit(contentDimensions, {
-    w: canvasDimensions.w - totalPadding * 2,
-    h: canvasDimensions.h - totalPadding * 2,
-  });
-
-  const centeredScrollX =
-    (canvasDimensions.w - contentDimensions.w * scale) / 2;
-  const centeredScrollY =
-    (canvasDimensions.h - contentDimensions.h * scale) / 2;
-
-  return {
-    renderConfig: {
-      ...renderConfig,
-      scrollX: centeredScrollX + renderConfig.scrollX,
-      scrollY: centeredScrollY + renderConfig.scrollY,
-    },
-    scale,
-  };
-};
-
 export const applyFancyBackground = async ({
   canvas,
   fancyBackgroundImageUrl,
   backgroundColor,
-  renderConfig,
-  contentDimensions,
 }: {
   canvas: HTMLCanvasElement;
   fancyBackgroundImageUrl: DataURL;
   backgroundColor: string;
-  scale: number;
-  renderConfig: RenderConfig;
-  contentDimensions: Dimensions;
 }) => {
   const context = canvas.getContext("2d")!;
 
@@ -184,14 +137,7 @@ export const applyFancyBackground = async ({
 
   const canvasDimensions: Dimensions = { w: canvas.width, h: canvas.height };
 
-  // const normalizedDimensions: Dimensions = {
-  //   w: canvas.width / scale,
-  //   h: canvas.height / scale,
-  // };
-
   addImageBackground(context, canvasDimensions, fancyBackgroundImage);
 
   addContentBackground(context, canvasDimensions, backgroundColor);
-
-  return updateRenderConfig(renderConfig, canvasDimensions, contentDimensions);
 };