From 3272841b234be62a381ac8d3bbff9f672aecbb73 Mon Sep 17 00:00:00 2001 From: Ryan Di Date: Wed, 2 Apr 2025 17:05:01 +1100 Subject: [PATCH] provide an optional direction when shape switching --- packages/excalidraw/components/App.tsx | 1 + packages/excalidraw/components/ShapeSwitch.tsx | 10 ++++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/packages/excalidraw/components/App.tsx b/packages/excalidraw/components/App.tsx index 4152b1fce..fdc34188e 100644 --- a/packages/excalidraw/components/App.tsx +++ b/packages/excalidraw/components/App.tsx @@ -4112,6 +4112,7 @@ class App extends React.Component { switchShapes(this, { generic, linear, + direction: event.shiftKey ? "left" : "right", }) ) { this.store.shouldCaptureIncrement(); diff --git a/packages/excalidraw/components/ShapeSwitch.tsx b/packages/excalidraw/components/ShapeSwitch.tsx index 05ebb1ea6..826779f00 100644 --- a/packages/excalidraw/components/ShapeSwitch.tsx +++ b/packages/excalidraw/components/ShapeSwitch.tsx @@ -408,10 +408,12 @@ export const switchShapes = ( generic, linear, nextType, + direction = "right", }: { generic?: boolean; linear?: boolean; nextType?: GenericSwitchableToolType | LinearSwitchableToolType; + direction?: "left" | "right"; } = {}, ): boolean => { if (!generic && !linear) { @@ -428,6 +430,8 @@ export const switchShapes = ( {}, ); + const advancement = direction === "right" ? 1 : -1; + if (generic) { const selectedGenericSwitchableElements = getGenericSwitchableElements(selectedElements); @@ -445,7 +449,8 @@ export const switchShapes = ( nextType = nextType ?? (GENERIC_SWITCHABLE_SHAPES[ - (index + 1) % GENERIC_SWITCHABLE_SHAPES.length + (index + GENERIC_SWITCHABLE_SHAPES.length + advancement) % + GENERIC_SWITCHABLE_SHAPES.length ] as GenericSwitchableToolType); selectedGenericSwitchableElements.forEach((element) => { @@ -516,7 +521,8 @@ export const switchShapes = ( nextType = nextType ?? (LINEAR_SWITCHABLE_SHAPES[ - (index + 1) % LINEAR_SWITCHABLE_SHAPES.length + (index + LINEAR_SWITCHABLE_SHAPES.length + advancement) % + LINEAR_SWITCHABLE_SHAPES.length ] as LinearSwitchableToolType); selectedElements.forEach((element) => {