Merge remote-tracking branch 'origin/master' into danieljgeiger-mathjax
This commit is contained in:
commit
f86d0f9102
@ -557,10 +557,10 @@ export const resizeSingleElement = (
|
||||
mutateElement(element, {
|
||||
scale: [
|
||||
// defaulting because scaleX/Y can be 0/-0
|
||||
(Math.sign(scaleX) || stateAtResizeStart.scale[0]) *
|
||||
stateAtResizeStart.scale[0],
|
||||
(Math.sign(scaleY) || stateAtResizeStart.scale[1]) *
|
||||
stateAtResizeStart.scale[1],
|
||||
(Math.sign(newBoundsX2 - stateAtResizeStart.x) ||
|
||||
stateAtResizeStart.scale[0]) * stateAtResizeStart.scale[0],
|
||||
(Math.sign(newBoundsY2 - stateAtResizeStart.y) ||
|
||||
stateAtResizeStart.scale[1]) * stateAtResizeStart.scale[1],
|
||||
],
|
||||
});
|
||||
}
|
||||
|
@ -720,22 +720,8 @@ const drawElementFromCanvas = (
|
||||
const cx = ((x1 + x2) / 2 + renderConfig.scrollX) * window.devicePixelRatio;
|
||||
const cy = ((y1 + y2) / 2 + renderConfig.scrollY) * window.devicePixelRatio;
|
||||
|
||||
const _isPendingImageElement = isPendingImageElement(element, renderConfig);
|
||||
|
||||
const scaleXFactor =
|
||||
"scale" in elementWithCanvas.element && !_isPendingImageElement
|
||||
? elementWithCanvas.element.scale[0]
|
||||
: 1;
|
||||
const scaleYFactor =
|
||||
"scale" in elementWithCanvas.element && !_isPendingImageElement
|
||||
? elementWithCanvas.element.scale[1]
|
||||
: 1;
|
||||
|
||||
context.save();
|
||||
context.scale(
|
||||
(1 / window.devicePixelRatio) * scaleXFactor,
|
||||
(1 / window.devicePixelRatio) * scaleYFactor,
|
||||
);
|
||||
context.scale(1 / window.devicePixelRatio, 1 / window.devicePixelRatio);
|
||||
const boundTextElement = getBoundTextElement(element);
|
||||
|
||||
if (isArrowElement(element) && boundTextElement) {
|
||||
@ -800,7 +786,7 @@ const drawElementFromCanvas = (
|
||||
zoom,
|
||||
);
|
||||
|
||||
context.translate(cx * scaleXFactor, cy * scaleYFactor);
|
||||
context.translate(cx, cy);
|
||||
context.drawImage(
|
||||
tempCanvas,
|
||||
(-(x2 - x1) / 2) * window.devicePixelRatio - offsetX / zoom - padding,
|
||||
@ -809,15 +795,30 @@ const drawElementFromCanvas = (
|
||||
tempCanvas.height / zoom,
|
||||
);
|
||||
} else {
|
||||
context.translate(cx * scaleXFactor, cy * scaleYFactor);
|
||||
// we translate context to element center so that rotation and scale
|
||||
// originates from the element center
|
||||
context.translate(cx, cy);
|
||||
|
||||
context.rotate(element.angle * scaleXFactor * scaleYFactor);
|
||||
context.rotate(element.angle);
|
||||
|
||||
if (
|
||||
"scale" in elementWithCanvas.element &&
|
||||
!isPendingImageElement(element, renderConfig)
|
||||
) {
|
||||
context.scale(
|
||||
elementWithCanvas.element.scale[0],
|
||||
elementWithCanvas.element.scale[1],
|
||||
);
|
||||
}
|
||||
|
||||
// revert afterwards we don't have account for it during drawing
|
||||
context.translate(-cx, -cy);
|
||||
|
||||
context.drawImage(
|
||||
elementWithCanvas.canvas!,
|
||||
(-(x2 - x1) / 2) * window.devicePixelRatio -
|
||||
(x1 + renderConfig.scrollX) * window.devicePixelRatio -
|
||||
(padding * elementWithCanvas.canvasZoom) / elementWithCanvas.canvasZoom,
|
||||
(-(y2 - y1) / 2) * window.devicePixelRatio -
|
||||
(y1 + renderConfig.scrollY) * window.devicePixelRatio -
|
||||
(padding * elementWithCanvas.canvasZoom) / elementWithCanvas.canvasZoom,
|
||||
elementWithCanvas.canvas!.width / elementWithCanvas.canvasZoom,
|
||||
elementWithCanvas.canvas!.height / elementWithCanvas.canvasZoom,
|
||||
@ -912,9 +913,6 @@ export const renderElement = (
|
||||
}
|
||||
context.save();
|
||||
context.translate(cx, cy);
|
||||
if (element.type === "image") {
|
||||
context.scale(element.scale[0], element.scale[1]);
|
||||
}
|
||||
|
||||
if (shouldResetImageFilter(element, renderConfig)) {
|
||||
context.filter = "none";
|
||||
@ -980,6 +978,12 @@ export const renderElement = (
|
||||
);
|
||||
} else {
|
||||
context.rotate(element.angle);
|
||||
|
||||
if (element.type === "image") {
|
||||
// note: scale must be applied *after* rotating
|
||||
context.scale(element.scale[0], element.scale[1]);
|
||||
}
|
||||
|
||||
context.translate(-shiftX, -shiftY);
|
||||
drawElementOnCanvas(element, rc, context, renderConfig);
|
||||
}
|
||||
|
@ -41,8 +41,8 @@ export const centerScrollOn = ({
|
||||
zoom: Zoom;
|
||||
}) => {
|
||||
return {
|
||||
scrollX: (viewportDimensions.width / 2) * (1 / zoom.value) - scenePoint.x,
|
||||
scrollY: (viewportDimensions.height / 2) * (1 / zoom.value) - scenePoint.y,
|
||||
scrollX: viewportDimensions.width / 2 / zoom.value - scenePoint.x,
|
||||
scrollY: viewportDimensions.height / 2 / zoom.value - scenePoint.y,
|
||||
};
|
||||
};
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -352,9 +352,8 @@ export const viewportCoordsToSceneCoords = (
|
||||
scrollY: number;
|
||||
},
|
||||
) => {
|
||||
const invScale = 1 / zoom.value;
|
||||
const x = (clientX - offsetLeft) * invScale - scrollX;
|
||||
const y = (clientY - offsetTop) * invScale - scrollY;
|
||||
const x = (clientX - offsetLeft) / zoom.value - scrollX;
|
||||
const y = (clientY - offsetTop) / zoom.value - scrollY;
|
||||
|
||||
return { x, y };
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user