Skip to content

Commit fc3824c

Browse files
authored
Merge pull request #16 from LibreSign/fix/elements-position
fix: elements position
2 parents 7789b02 + e8224b9 commit fc3824c

2 files changed

Lines changed: 63 additions & 29 deletions

File tree

src/components/DraggableElement.vue

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ export default {
171171
const width = this.object.width + this.resizeOffsetW
172172
return {
173173
left: `${(x + width / 2) * scale}px`,
174-
top: `${(y - 48) * scale}px`,
174+
top: `${(y - 60) * scale}px`,
175175
transform: 'translateX(-50%)',
176176
}
177177
},
@@ -318,7 +318,7 @@ export default {
318318
return
319319
}
320320
321-
const minSize = 16
321+
const minSize = 16 / (this.pagesScale || 1)
322322
let newWidth = this.startWidth
323323
let newHeight = this.startHeight
324324
let newLeft = this.startLeft
@@ -471,35 +471,43 @@ export default {
471471
box-shadow: inset 0 0 0 2px #2563eb;
472472
}
473473
.resize-handle {
474+
all: unset;
474475
position: absolute;
475-
width: 10px;
476-
height: 10px;
476+
width: 12px;
477+
height: 12px;
478+
min-width: 0;
479+
min-height: 0;
477480
background: #2563eb;
478481
border: 1px solid #ffffff;
479-
border-radius: 2px;
482+
border-radius: 3px;
480483
padding: 0;
481484
margin: 0;
485+
line-height: 0;
486+
font-size: 0;
487+
box-sizing: border-box;
488+
display: block;
489+
appearance: none;
482490
cursor: pointer;
483491
z-index: 200;
484492
}
485493
.handle-top-left {
486-
top: -6px;
487-
left: -6px;
494+
top: -7px;
495+
left: -7px;
488496
cursor: nwse-resize;
489497
}
490498
.handle-top-right {
491-
top: -6px;
492-
right: -6px;
499+
top: -7px;
500+
right: -7px;
493501
cursor: nesw-resize;
494502
}
495503
.handle-bottom-left {
496-
bottom: -6px;
497-
left: -6px;
504+
bottom: -7px;
505+
left: -7px;
498506
cursor: nesw-resize;
499507
}
500508
.handle-bottom-right {
501-
bottom: -6px;
502-
right: -6px;
509+
bottom: -7px;
510+
right: -7px;
503511
cursor: nwse-resize;
504512
}
505513
</style>

src/components/PDFElements.vue

Lines changed: 42 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ SPDX-License-Identifier: AGPL-3.0-or-later
2424
/>
2525
<div
2626
class="overlay"
27+
@mousemove="handleMouseMove"
28+
@touchmove="handleMouseMove"
2729
>
2830
<div
2931
v-if="isAddingMode && previewPageDocIndex === docIndex && previewPageIndex === pIndex && previewElement && previewVisible"
@@ -36,10 +38,16 @@ SPDX-License-Identifier: AGPL-3.0-or-later
3638
}"
3739
>
3840
<slot
39-
name="custom"
41+
:name="previewElement.type ? `element-${previewElement.type}` : 'custom'"
4042
:object="previewElement"
4143
:isSelected="false"
42-
/>
44+
>
45+
<slot
46+
name="custom"
47+
:object="previewElement"
48+
:isSelected="false"
49+
/>
50+
</slot>
4351
</div>
4452

4553
<DraggableElement
@@ -463,17 +471,17 @@ export default {
463471
464472
const canvasEl = this.getPageCanvasElement(docIndex, pageIndex)
465473
const pagesScale = this.pdfDocuments[docIndex]?.pagesScale?.[pageIndex] || 1
466-
const layoutWidth = canvasEl?.offsetWidth || rect.width
467-
const layoutHeight = canvasEl?.offsetHeight || rect.height
468-
const layoutScaleX = layoutWidth ? rect.width / layoutWidth : 1
469-
const layoutScaleY = layoutHeight ? rect.height / layoutHeight : 1
474+
const renderWidth = canvasEl?.width || rect.width
475+
const renderHeight = canvasEl?.height || rect.height
476+
const layoutScaleX = renderWidth ? rect.width / renderWidth : 1
477+
const layoutScaleY = renderHeight ? rect.height / renderHeight : 1
470478
const relX = (clientX - rect.left) / layoutScaleX / pagesScale
471479
const relY = (clientY - rect.top) / layoutScaleY / pagesScale
472480
473-
const pageWidth = layoutWidth / pagesScale
474-
const pageHeight = layoutHeight / pagesScale
475-
this.previewScale.x = pagesScale * layoutScaleX
476-
this.previewScale.y = pagesScale * layoutScaleY
481+
const pageWidth = renderWidth / pagesScale
482+
const pageHeight = renderHeight / pagesScale
483+
this.previewScale.x = pagesScale
484+
this.previewScale.y = pagesScale
477485
let x = relX - this.previewElement.width / 2
478486
let y = relY - this.previewElement.height / 2
479487
@@ -593,26 +601,27 @@ export default {
593601
if (docIndex < 0 || docIndex >= this.pdfDocuments.length) return []
594602
595603
const doc = this.pdfDocuments[docIndex]
596-
const scale = this.scale || 1
597604
const result = []
598605
599606
doc.allObjects.forEach((pageObjects, pageIndex) => {
600607
const pageRef = this.getPageComponent(docIndex, pageIndex)
601608
if (!pageRef) return
602-
603609
const measurement = pageRef.getCanvasMeasurement()
604-
const normalizedCanvasHeight = measurement.canvasHeight / scale
610+
const pagesScale = doc.pagesScale[pageIndex] || 1
611+
const normalizedCanvasHeight = measurement.canvasHeight / pagesScale
605612
606613
pageObjects.forEach(object => {
607614
result.push({
608615
...object,
609616
pageIndex,
610617
pageNumber: pageIndex + 1,
611-
scale,
618+
scale: pagesScale,
612619
normalizedCoordinates: {
613620
llx: parseInt(object.x, 10),
614621
lly: parseInt(normalizedCanvasHeight - object.y, 10),
615622
ury: parseInt(normalizedCanvasHeight - object.y - object.height, 10),
623+
width: parseInt(object.width, 10),
624+
height: parseInt(object.height, 10),
616625
},
617626
})
618627
})
@@ -729,10 +738,27 @@ export default {
729738
deleteObject(docIndex, objectId) {
730739
if (docIndex < 0 || docIndex >= this.pdfDocuments.length) return
731740
const doc = this.pdfDocuments[docIndex]
732-
doc.allObjects = doc.allObjects.map(objects =>
733-
objects.filter(object => object.id !== objectId),
741+
let deletedObject = null
742+
let deletedPageIndex = -1
743+
744+
doc.allObjects = doc.allObjects.map((objects, pageIndex) =>
745+
objects.filter(object => {
746+
if (object.id === objectId) {
747+
deletedObject = object
748+
deletedPageIndex = pageIndex
749+
return false
750+
}
751+
return true
752+
}),
734753
)
735754
delete this.objectIndexCache[`${docIndex}-${objectId}`]
755+
if (deletedObject) {
756+
this.$emit('pdf-elements:delete-object', {
757+
object: deletedObject,
758+
docIndex,
759+
pageIndex: deletedPageIndex,
760+
})
761+
}
736762
},
737763
738764
checkAndMoveObjectPage(docIndex, objectId, mouseX, mouseY) {

0 commit comments

Comments
 (0)