From 0199c82e9830736748532d35ef21f6f1b73a6961 Mon Sep 17 00:00:00 2001 From: dwelle <5153846+dwelle@users.noreply.github.com> Date: Fri, 27 Jun 2025 14:18:48 +0200 Subject: [PATCH] differentiate between constant/variable stroke type --- .../components/FreedrawDebugSliders.tsx | 8 +-- packages/element/src/freedraw.ts | 70 ++++++++++++++----- packages/excalidraw/components/App.tsx | 8 ++- 3 files changed, 64 insertions(+), 22 deletions(-) diff --git a/excalidraw-app/components/FreedrawDebugSliders.tsx b/excalidraw-app/components/FreedrawDebugSliders.tsx index bf8b66b111..2666a6f99a 100644 --- a/excalidraw-app/components/FreedrawDebugSliders.tsx +++ b/excalidraw-app/components/FreedrawDebugSliders.tsx @@ -3,10 +3,10 @@ import { useState, useEffect } from "react"; export const FreedrawDebugSliders = () => { const [streamline, setStreamline] = useState( - DRAWING_CONFIGS.default.streamline, + DRAWING_CONFIGS.default.variable.streamline, ); const [simplify, setSimplify] = useState( - DRAWING_CONFIGS.default.simplify, + DRAWING_CONFIGS.default.variable.simplify, ); useEffect(() => { @@ -14,7 +14,7 @@ export const FreedrawDebugSliders = () => { window.h = {} as any; } if (!window.h.debugFreedraw) { - window.h.debugFreedraw = DRAWING_CONFIGS.default; + window.h.debugFreedraw = DRAWING_CONFIGS.default.variable; } setStreamline(window.h.debugFreedraw.streamline); @@ -39,7 +39,7 @@ export const FreedrawDebugSliders = () => {
{ + return element.drawingConfigs?.fixedStrokeWidth ? "constant" : "variable"; +}; + export const DRAWING_CONFIGS: Record< PointerType | "default", - { streamline: number; simplify: number } + Record > = { default: { - streamline: 0.35, - simplify: 0.1, + constant: { + streamline: 0.35, + simplify: 0.1, + }, + variable: { + streamline: 0.35, + simplify: 0.1, + }, }, mouse: { - streamline: 0.6, - simplify: 0.1, + constant: { + streamline: 0.6, + simplify: 0.1, + }, + variable: { + streamline: 0.6, + simplify: 0.1, + }, }, pen: { - // for optimal performance, we use a lower streamline and simplify - streamline: 0.2, - simplify: 0.1, + constant: { + // for optimal performance, we use a lower streamline and simplify + streamline: 0.2, + simplify: 0.1, + }, + variable: { + // for optimal performance, we use a lower streamline and simplify + streamline: 0.2, + simplify: 0.1, + }, }, touch: { - streamline: 0.65, - simplify: 0.1, + constant: { + streamline: 0.65, + simplify: 0.1, + }, + variable: { + streamline: 0.65, + simplify: 0.1, + }, }, } as const; -export const getFreedrawConfig = (eventType: string | null | undefined) => { - return ( +export const getFreedrawConfig = ( + eventType: string | null | undefined, + strokeType: FreedrawStrokeType, +): { streamline: number; simplify: number } => { + const inputConfig = DRAWING_CONFIGS[(eventType as PointerType | null) || "default"] || - DRAWING_CONFIGS.default - ); + DRAWING_CONFIGS.default; + return inputConfig[strokeType]; }; /** @@ -105,9 +141,11 @@ export const getFreedrawStroke = (element: ExcalidrawFreeDrawElement) => { } const streamline = - element.drawingConfigs?.streamline ?? DRAWING_CONFIGS.default.streamline; + element.drawingConfigs?.streamline ?? + getFreedrawConfig("default", getElementStrokeType(element)).streamline; const simplify = - element.drawingConfigs?.simplify ?? DRAWING_CONFIGS.default.simplify; + element.drawingConfigs?.simplify ?? + getFreedrawConfig("default", getElementStrokeType(element)).simplify; const laser = new LaserPointer({ size: element.strokeWidth, diff --git a/packages/excalidraw/components/App.tsx b/packages/excalidraw/components/App.tsx index 405eb045ee..91964e40ae 100644 --- a/packages/excalidraw/components/App.tsx +++ b/packages/excalidraw/components/App.tsx @@ -7476,7 +7476,10 @@ class App extends React.Component { const simulatePressure = event.pressure === 0.5 || event.pressure === 0; - const freedrawConfig = getFreedrawConfig(event.pointerType); + const freedrawConfig = getFreedrawConfig( + event.pointerType, + this.state.currentItemFixedStrokeWidth ? "constant" : "variable", + ); const element = newFreeDrawElement({ type: elementType, @@ -11159,7 +11162,8 @@ export const createTestHook = () => { window.h = window.h || ({} as Window["h"]); // Initialize debug freedraw parameters - window.h.debugFreedraw = window.h.debugFreedraw || DRAWING_CONFIGS.default; + window.h.debugFreedraw = + window.h.debugFreedraw || DRAWING_CONFIGS.default.variable; Object.defineProperties(window.h, { elements: {