diff --git a/packages/element/src/newElement.ts b/packages/element/src/newElement.ts index 69ccaf595f..5d6f6835ff 100644 --- a/packages/element/src/newElement.ts +++ b/packages/element/src/newElement.ts @@ -445,6 +445,7 @@ export const newFreeDrawElement = ( points?: ExcalidrawFreeDrawElement["points"]; simulatePressure: boolean; pressures?: ExcalidrawFreeDrawElement["pressures"]; + pressureSensitivity?: ExcalidrawFreeDrawElement["pressureSensitivity"]; } & ElementConstructorOpts, ): NonDeleted => { return { @@ -453,6 +454,7 @@ export const newFreeDrawElement = ( pressures: opts.pressures || [], simulatePressure: opts.simulatePressure, lastCommittedPoint: null, + pressureSensitivity: opts.pressureSensitivity ?? 1, }; }; diff --git a/packages/element/src/renderElement.ts b/packages/element/src/renderElement.ts index 2786f3f84a..5c5f7b99b9 100644 --- a/packages/element/src/renderElement.ts +++ b/packages/element/src/renderElement.ts @@ -1041,11 +1041,14 @@ export function getFreeDrawSvgPath(element: ExcalidrawFreeDrawElement) { ? element.points.map(([x, y], i) => [x, y, element.pressures[i]]) : [[0, 0, 0.5]]; + const sensitivity = element.pressureSensitivity; + // Consider changing the options for simulated pressure vs real pressure const options: StrokeOptions = { simulatePressure: element.simulatePressure, - size: element.strokeWidth * 4.25, - thinning: 0.6, + // if sensitivity is not set, times 4.25 for backwards compatibility + size: element.strokeWidth * (sensitivity !== null ? 1 : 4.25), + thinning: 0.6 * (sensitivity ?? 1), smoothing: 0.5, streamline: 0.5, easing: (t) => Math.sin((t * Math.PI) / 2), // https://easings.net/#easeOutSine diff --git a/packages/element/src/types.ts b/packages/element/src/types.ts index 23e4f99290..c11fecee3c 100644 --- a/packages/element/src/types.ts +++ b/packages/element/src/types.ts @@ -377,6 +377,7 @@ export type ExcalidrawFreeDrawElement = _ExcalidrawElementBase & type: "freedraw"; points: readonly LocalPoint[]; pressures: readonly number[]; + pressureSensitivity: number | null; simulatePressure: boolean; lastCommittedPoint: LocalPoint | null; }>; diff --git a/packages/excalidraw/data/restore.ts b/packages/excalidraw/data/restore.ts index a609c0a0eb..fd0f43b616 100644 --- a/packages/excalidraw/data/restore.ts +++ b/packages/excalidraw/data/restore.ts @@ -302,6 +302,7 @@ const restoreElement = ( lastCommittedPoint: null, simulatePressure: element.simulatePressure, pressures: element.pressures, + pressureSensitivity: element.pressureSensitivity ?? null, }); } case "image":