diff --git a/src/components/DraggableElement.vue b/src/components/DraggableElement.vue index e0fade4..df9e7ab 100644 --- a/src/components/DraggableElement.vue +++ b/src/components/DraggableElement.vue @@ -171,7 +171,7 @@ export default { const width = this.object.width + this.resizeOffsetW return { left: `${(x + width / 2) * scale}px`, - top: `${(y - 48) * scale}px`, + top: `${(y - 60) * scale}px`, transform: 'translateX(-50%)', } }, @@ -318,7 +318,7 @@ export default { return } - const minSize = 16 + const minSize = 16 / (this.pagesScale || 1) let newWidth = this.startWidth let newHeight = this.startHeight let newLeft = this.startLeft @@ -471,35 +471,43 @@ export default { box-shadow: inset 0 0 0 2px #2563eb; } .resize-handle { + all: unset; position: absolute; - width: 10px; - height: 10px; + width: 12px; + height: 12px; + min-width: 0; + min-height: 0; background: #2563eb; border: 1px solid #ffffff; - border-radius: 2px; + border-radius: 3px; padding: 0; margin: 0; + line-height: 0; + font-size: 0; + box-sizing: border-box; + display: block; + appearance: none; cursor: pointer; z-index: 200; } .handle-top-left { - top: -6px; - left: -6px; + top: -7px; + left: -7px; cursor: nwse-resize; } .handle-top-right { - top: -6px; - right: -6px; + top: -7px; + right: -7px; cursor: nesw-resize; } .handle-bottom-left { - bottom: -6px; - left: -6px; + bottom: -7px; + left: -7px; cursor: nesw-resize; } .handle-bottom-right { - bottom: -6px; - right: -6px; + bottom: -7px; + right: -7px; cursor: nwse-resize; } diff --git a/src/components/PDFElements.vue b/src/components/PDFElements.vue index f0539ee..0219c96 100644 --- a/src/components/PDFElements.vue +++ b/src/components/PDFElements.vue @@ -24,6 +24,8 @@ SPDX-License-Identifier: AGPL-3.0-or-later />
+ > + +
= this.pdfDocuments.length) return [] const doc = this.pdfDocuments[docIndex] - const scale = this.scale || 1 const result = [] doc.allObjects.forEach((pageObjects, pageIndex) => { const pageRef = this.getPageComponent(docIndex, pageIndex) if (!pageRef) return - const measurement = pageRef.getCanvasMeasurement() - const normalizedCanvasHeight = measurement.canvasHeight / scale + const pagesScale = doc.pagesScale[pageIndex] || 1 + const normalizedCanvasHeight = measurement.canvasHeight / pagesScale pageObjects.forEach(object => { result.push({ ...object, pageIndex, pageNumber: pageIndex + 1, - scale, + scale: pagesScale, normalizedCoordinates: { llx: parseInt(object.x, 10), lly: parseInt(normalizedCanvasHeight - object.y, 10), ury: parseInt(normalizedCanvasHeight - object.y - object.height, 10), + width: parseInt(object.width, 10), + height: parseInt(object.height, 10), }, }) }) @@ -729,10 +738,27 @@ export default { deleteObject(docIndex, objectId) { if (docIndex < 0 || docIndex >= this.pdfDocuments.length) return const doc = this.pdfDocuments[docIndex] - doc.allObjects = doc.allObjects.map(objects => - objects.filter(object => object.id !== objectId), + let deletedObject = null + let deletedPageIndex = -1 + + doc.allObjects = doc.allObjects.map((objects, pageIndex) => + objects.filter(object => { + if (object.id === objectId) { + deletedObject = object + deletedPageIndex = pageIndex + return false + } + return true + }), ) delete this.objectIndexCache[`${docIndex}-${objectId}`] + if (deletedObject) { + this.$emit('pdf-elements:delete-object', { + object: deletedObject, + docIndex, + pageIndex: deletedPageIndex, + }) + } }, checkAndMoveObjectPage(docIndex, objectId, mouseX, mouseY) {