Compare commits

...

2 Commits

Author SHA1 Message Date
zsviczian
3ad69c661f updated export.test 2023-06-16 22:24:44 +02:00
zsviczian
56ea3c5bd0 rounded images 2023-06-16 22:09:28 +02:00
3 changed files with 35 additions and 4 deletions

View File

@ -251,6 +251,7 @@ const drawImagePlaceholder = (
size,
);
};
const drawElementOnCanvas = (
element: NonDeletedExcalidrawElement,
rc: RoughCanvas,
@ -300,17 +301,35 @@ const drawElementOnCanvas = (
const img = isInitializedImageElement(element)
? renderConfig.imageCache.get(element.fileId)?.image
: undefined;
context.save();
const { width, height } = element;
if (element.roundness) {
const r = getCornerRadius(Math.min(width, height), element) / 4;
context.beginPath();
context.moveTo(r, 0);
context.lineTo(width - r, 0);
context.quadraticCurveTo(width, 0, width, r);
context.lineTo(width, height - r);
context.quadraticCurveTo(width, height, width - r, height);
context.lineTo(r, height);
context.quadraticCurveTo(0, height, 0, height - r);
context.lineTo(0, r);
context.quadraticCurveTo(0, 0, r, 0);
context.closePath();
context.clip();
}
if (img != null && !(img instanceof Promise)) {
context.drawImage(
img,
0 /* hardcoded for the selection box*/,
0,
element.width,
element.height,
width,
height,
);
} else {
drawImagePlaceholder(element, context, renderConfig.zoom.value);
}
context.restore();
break;
}
default: {
@ -1390,7 +1409,14 @@ export const renderElementToSvg = (
image.setAttribute("width", "100%");
image.setAttribute("height", "100%");
image.setAttribute("href", fileData.dataURL);
if (element.roundness) {
const r =
getCornerRadius(
Math.min(element.width, element.height),
element,
) / 4;
image.setAttribute("clip-path", `inset(0% round ${r}px)`);
}
symbol.appendChild(image);
root.prepend(symbol);

View File

@ -29,7 +29,8 @@ export const canChangeRoundness = (type: string) =>
type === "rectangle" ||
type === "arrow" ||
type === "line" ||
type === "diamond";
type === "diamond" ||
type === "image";
export const hasText = (type: string) => type === "text";

View File

@ -118,6 +118,7 @@ describe("export", () => {
scale: [1, 1],
width: 100,
height: 100,
roundness: null,
angle: normalizeAngle(315),
}),
API.createElement({
@ -128,6 +129,7 @@ describe("export", () => {
scale: [-1, 1],
width: 50,
height: 50,
roundness: null,
angle: normalizeAngle(45),
}),
API.createElement({
@ -138,6 +140,7 @@ describe("export", () => {
scale: [1, -1],
width: 100,
height: 100,
roundness: null,
angle: normalizeAngle(45),
}),
API.createElement({
@ -148,6 +151,7 @@ describe("export", () => {
scale: [-1, -1],
width: 50,
height: 50,
roundness: null,
angle: normalizeAngle(315),
}),
];