mirror of
https://github.com/excalidraw/excalidraw.git
synced 2024-11-02 03:25:53 +01:00
fix: apply the right type of roundness when pasting styles (#5979)
* fix: only paste roundness when target and source elements are of the same type * apply roundness when pasting across different types * simplify Co-authored-by: dwelle <luzar.david@gmail.com>
This commit is contained in:
parent
0ebe6292a3
commit
8466eb0eef
@ -13,7 +13,11 @@ import {
|
|||||||
DEFAULT_TEXT_ALIGN,
|
DEFAULT_TEXT_ALIGN,
|
||||||
} from "../constants";
|
} from "../constants";
|
||||||
import { getBoundTextElement } from "../element/textElement";
|
import { getBoundTextElement } from "../element/textElement";
|
||||||
import { hasBoundTextElement } from "../element/typeChecks";
|
import {
|
||||||
|
hasBoundTextElement,
|
||||||
|
canApplyRoundnessTypeToElement,
|
||||||
|
getDefaultRoundnessTypeForElement,
|
||||||
|
} from "../element/typeChecks";
|
||||||
import { getSelectedElements } from "../scene";
|
import { getSelectedElements } from "../scene";
|
||||||
|
|
||||||
// `copiedStyles` is exported only for tests.
|
// `copiedStyles` is exported only for tests.
|
||||||
@ -77,7 +81,14 @@ export const actionPasteStyles = register({
|
|||||||
fillStyle: elementStylesToCopyFrom?.fillStyle,
|
fillStyle: elementStylesToCopyFrom?.fillStyle,
|
||||||
opacity: elementStylesToCopyFrom?.opacity,
|
opacity: elementStylesToCopyFrom?.opacity,
|
||||||
roughness: elementStylesToCopyFrom?.roughness,
|
roughness: elementStylesToCopyFrom?.roughness,
|
||||||
roundness: elementStylesToCopyFrom?.roundness,
|
roundness: elementStylesToCopyFrom.roundness
|
||||||
|
? canApplyRoundnessTypeToElement(
|
||||||
|
elementStylesToCopyFrom.roundness.type,
|
||||||
|
element,
|
||||||
|
)
|
||||||
|
? elementStylesToCopyFrom.roundness
|
||||||
|
: getDefaultRoundnessTypeForElement(element)
|
||||||
|
: null,
|
||||||
});
|
});
|
||||||
|
|
||||||
if (isTextElement(newElement)) {
|
if (isTextElement(newElement)) {
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
import { ROUNDNESS } from "../constants";
|
||||||
import { AppState } from "../types";
|
import { AppState } from "../types";
|
||||||
import {
|
import {
|
||||||
ExcalidrawElement,
|
ExcalidrawElement,
|
||||||
@ -10,6 +11,7 @@ import {
|
|||||||
ExcalidrawImageElement,
|
ExcalidrawImageElement,
|
||||||
ExcalidrawTextElementWithContainer,
|
ExcalidrawTextElementWithContainer,
|
||||||
ExcalidrawTextContainer,
|
ExcalidrawTextContainer,
|
||||||
|
RoundnessType,
|
||||||
} from "./types";
|
} from "./types";
|
||||||
|
|
||||||
export const isGenericElement = (
|
export const isGenericElement = (
|
||||||
@ -154,3 +156,51 @@ export const isBoundToContainer = (
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const isUsingAdaptiveRadius = (type: string) => type === "rectangle";
|
export const isUsingAdaptiveRadius = (type: string) => type === "rectangle";
|
||||||
|
|
||||||
|
export const isUsingProportionalRadius = (type: string) =>
|
||||||
|
type === "line" || type === "arrow" || type === "diamond";
|
||||||
|
|
||||||
|
export const canApplyRoundnessTypeToElement = (
|
||||||
|
roundnessType: RoundnessType,
|
||||||
|
element: ExcalidrawElement,
|
||||||
|
) => {
|
||||||
|
if (
|
||||||
|
(roundnessType === ROUNDNESS.ADAPTIVE_RADIUS ||
|
||||||
|
// if legacy roundness, it can be applied to elements that currently
|
||||||
|
// use adaptive radius
|
||||||
|
roundnessType === ROUNDNESS.LEGACY) &&
|
||||||
|
isUsingAdaptiveRadius(element.type)
|
||||||
|
) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (
|
||||||
|
roundnessType === ROUNDNESS.PROPORTIONAL_RADIUS &&
|
||||||
|
isUsingProportionalRadius(element.type)
|
||||||
|
) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const getDefaultRoundnessTypeForElement = (
|
||||||
|
element: ExcalidrawElement,
|
||||||
|
) => {
|
||||||
|
if (
|
||||||
|
element.type === "arrow" ||
|
||||||
|
element.type === "line" ||
|
||||||
|
element.type === "diamond"
|
||||||
|
) {
|
||||||
|
return {
|
||||||
|
type: ROUNDNESS.PROPORTIONAL_RADIUS,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (element.type === "rectangle") {
|
||||||
|
return {
|
||||||
|
type: ROUNDNESS.ADAPTIVE_RADIUS,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user