mirror of
https://github.com/excalidraw/excalidraw.git
synced 2025-09-09 02:27:52 +02:00
add stroke/pressure sensitivity to freedraw
This commit is contained in:
@@ -445,6 +445,7 @@ export const newFreeDrawElement = (
|
|||||||
points?: ExcalidrawFreeDrawElement["points"];
|
points?: ExcalidrawFreeDrawElement["points"];
|
||||||
simulatePressure: boolean;
|
simulatePressure: boolean;
|
||||||
pressures?: ExcalidrawFreeDrawElement["pressures"];
|
pressures?: ExcalidrawFreeDrawElement["pressures"];
|
||||||
|
pressureSensitivity?: ExcalidrawFreeDrawElement["pressureSensitivity"];
|
||||||
} & ElementConstructorOpts,
|
} & ElementConstructorOpts,
|
||||||
): NonDeleted<ExcalidrawFreeDrawElement> => {
|
): NonDeleted<ExcalidrawFreeDrawElement> => {
|
||||||
return {
|
return {
|
||||||
@@ -453,6 +454,7 @@ export const newFreeDrawElement = (
|
|||||||
pressures: opts.pressures || [],
|
pressures: opts.pressures || [],
|
||||||
simulatePressure: opts.simulatePressure,
|
simulatePressure: opts.simulatePressure,
|
||||||
lastCommittedPoint: null,
|
lastCommittedPoint: null,
|
||||||
|
pressureSensitivity: opts.pressureSensitivity ?? 1,
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -1041,11 +1041,14 @@ export function getFreeDrawSvgPath(element: ExcalidrawFreeDrawElement) {
|
|||||||
? element.points.map(([x, y], i) => [x, y, element.pressures[i]])
|
? element.points.map(([x, y], i) => [x, y, element.pressures[i]])
|
||||||
: [[0, 0, 0.5]];
|
: [[0, 0, 0.5]];
|
||||||
|
|
||||||
|
const sensitivity = element.pressureSensitivity;
|
||||||
|
|
||||||
// Consider changing the options for simulated pressure vs real pressure
|
// Consider changing the options for simulated pressure vs real pressure
|
||||||
const options: StrokeOptions = {
|
const options: StrokeOptions = {
|
||||||
simulatePressure: element.simulatePressure,
|
simulatePressure: element.simulatePressure,
|
||||||
size: element.strokeWidth * 4.25,
|
// if sensitivity is not set, times 4.25 for backwards compatibility
|
||||||
thinning: 0.6,
|
size: element.strokeWidth * (sensitivity !== null ? 1 : 4.25),
|
||||||
|
thinning: 0.6 * (sensitivity ?? 1),
|
||||||
smoothing: 0.5,
|
smoothing: 0.5,
|
||||||
streamline: 0.5,
|
streamline: 0.5,
|
||||||
easing: (t) => Math.sin((t * Math.PI) / 2), // https://easings.net/#easeOutSine
|
easing: (t) => Math.sin((t * Math.PI) / 2), // https://easings.net/#easeOutSine
|
||||||
|
@@ -377,6 +377,7 @@ export type ExcalidrawFreeDrawElement = _ExcalidrawElementBase &
|
|||||||
type: "freedraw";
|
type: "freedraw";
|
||||||
points: readonly LocalPoint[];
|
points: readonly LocalPoint[];
|
||||||
pressures: readonly number[];
|
pressures: readonly number[];
|
||||||
|
pressureSensitivity: number | null;
|
||||||
simulatePressure: boolean;
|
simulatePressure: boolean;
|
||||||
lastCommittedPoint: LocalPoint | null;
|
lastCommittedPoint: LocalPoint | null;
|
||||||
}>;
|
}>;
|
||||||
|
@@ -302,6 +302,7 @@ const restoreElement = (
|
|||||||
lastCommittedPoint: null,
|
lastCommittedPoint: null,
|
||||||
simulatePressure: element.simulatePressure,
|
simulatePressure: element.simulatePressure,
|
||||||
pressures: element.pressures,
|
pressures: element.pressures,
|
||||||
|
pressureSensitivity: element.pressureSensitivity ?? null,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
case "image":
|
case "image":
|
||||||
|
Reference in New Issue
Block a user