|
|
|
|
@ -713,22 +713,8 @@ const drawElementFromCanvas = (
@@ -713,22 +713,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) { |
|
|
|
|
@ -793,7 +779,7 @@ const drawElementFromCanvas = (
@@ -793,7 +779,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, |
|
|
|
|
@ -802,15 +788,30 @@ const drawElementFromCanvas = (
@@ -802,15 +788,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); |
|
|
|
|
|
|
|
|
|
if ( |
|
|
|
|
"scale" in elementWithCanvas.element && |
|
|
|
|
!isPendingImageElement(element, renderConfig) |
|
|
|
|
) { |
|
|
|
|
context.scale( |
|
|
|
|
elementWithCanvas.element.scale[0], |
|
|
|
|
elementWithCanvas.element.scale[1], |
|
|
|
|
); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
context.rotate(element.angle * scaleXFactor * scaleYFactor); |
|
|
|
|
// 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, |
|
|
|
|
@ -905,9 +906,6 @@ export const renderElement = (
@@ -905,9 +906,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"; |
|
|
|
|
@ -973,6 +971,12 @@ export const renderElement = (
@@ -973,6 +971,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); |
|
|
|
|
} |
|
|
|
|
|