diff options
author | Shawn Rutledge <shawn.rutledge@qt.io> | 2020-02-17 16:42:56 +0100 |
---|---|---|
committer | Shawn Rutledge <shawn.rutledge@qt.io> | 2020-02-17 22:33:57 +0100 |
commit | 24cd9f79bf7cf21e275b73ded63ee46bcc706db3 (patch) | |
tree | 3321549de6798817eccb7678005cd662d77de189 /src/pdf/quick/qml | |
parent | 3b3970776c99b6ad7ac13cd8b743fc77a455b98c (diff) |
Rearrange PdfPageView.qml
Now it looks more similar to PdfMultiPageView.qml: public properties
and functions are grouped by functionality, implementation details are
"below the fold", and properties and functions that we don't want to
expose as API are nested inside inner items.
Also fixed ColumnLayout attached properties.
Change-Id: Iafe6f983a34ca6bac9b0d4f3a26aba5a426e0232
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Diffstat (limited to 'src/pdf/quick/qml')
-rw-r--r-- | src/pdf/quick/qml/PdfPageView.qml | 113 |
1 files changed, 57 insertions, 56 deletions
diff --git a/src/pdf/quick/qml/PdfPageView.qml b/src/pdf/quick/qml/PdfPageView.qml index f4d7da0af..ec3cd78e0 100644 --- a/src/pdf/quick/qml/PdfPageView.qml +++ b/src/pdf/quick/qml/PdfPageView.qml @@ -39,19 +39,18 @@ import QtQuick.Pdf 5.15 import QtQuick.Shapes 1.14 Rectangle { - id: paper - width: image.width - height: image.height - // public API // TODO 5.15: required property - property var document: null - property real renderScale: 1 - property alias sourceSize: image.sourceSize - property alias currentPage: navigationStack.currentPage - property alias pageCount: image.frameCount - property alias selectedText: selection.text + property var document: undefined property alias status: image.status + + property alias selectedText: selection.text + function copySelectionToClipboard() { + selection.copyToClipboard() + } + + // page navigation + property alias currentPage: navigationStack.currentPage property alias backEnabled: navigationStack.backAvailable property alias forwardEnabled: navigationStack.forwardAvailable function back() { navigationStack.back() } @@ -59,34 +58,33 @@ Rectangle { function goToPage(page) { goToLocation(page, Qt.point(0, 0), 0) } function goToLocation(page, location, zoom) { if (zoom > 0) - paper.renderScale = zoom + root.renderScale = zoom navigationStack.push(page, location, zoom) } - property real __pageScale: image.paintedWidth / document.pagePointSize(navigationStack.currentPage).width - + // page scaling + property real renderScale: 1 + property alias sourceSize: image.sourceSize function resetScale() { image.sourceSize.width = 0 image.sourceSize.height = 0 - paper.x = 0 - paper.y = 0 - paper.scale = 1 + root.x = 0 + root.y = 0 + root.scale = 1 } - function scaleToWidth(width, height) { - var halfRotation = Math.abs(paper.rotation % 180) + var halfRotation = Math.abs(root.rotation % 180) image.sourceSize = Qt.size((halfRotation > 45 && halfRotation < 135) ? height : width, 0) - paper.x = 0 - paper.y = 0 + root.x = 0 + root.y = 0 image.centerInSize = Qt.size(width, height) image.centerOnLoad = true image.vCenterOnLoad = (halfRotation > 45 && halfRotation < 135) - paper.scale = 1 + root.scale = 1 } - function scaleToPage(width, height) { var windowAspect = width / height - var halfRotation = Math.abs(paper.rotation % 180) + var halfRotation = Math.abs(root.rotation % 180) var pagePointSize = document.pagePointSize(navigationStack.currentPage) if (halfRotation > 45 && halfRotation < 135) { // rotated 90 or 270ยบ @@ -107,7 +105,7 @@ Rectangle { image.centerInSize = Qt.size(width, height) image.centerOnLoad = true image.vCenterOnLoad = true - paper.scale = 1 + root.scale = 1 } // text search @@ -116,29 +114,31 @@ Rectangle { function searchBack() { --searchModel.currentResult } function searchForward() { ++searchModel.currentResult } + // implementation + id: root + width: image.width + height: image.height + PdfSelection { id: selection - document: paper.document + document: root.document page: navigationStack.currentPage - fromPoint: Qt.point(textSelectionDrag.centroid.pressPosition.x / paper.__pageScale, textSelectionDrag.centroid.pressPosition.y / paper.__pageScale) - toPoint: Qt.point(textSelectionDrag.centroid.position.x / paper.__pageScale, textSelectionDrag.centroid.position.y / paper.__pageScale) + fromPoint: Qt.point(textSelectionDrag.centroid.pressPosition.x / image.pageScale, textSelectionDrag.centroid.pressPosition.y / image.pageScale) + toPoint: Qt.point(textSelectionDrag.centroid.position.x / image.pageScale, textSelectionDrag.centroid.position.y / image.pageScale) hold: !textSelectionDrag.active && !tapHandler.pressed } - function copySelectionToClipboard() { - selection.copyToClipboard() - } PdfSearchModel { id: searchModel - document: paper.document === undefined ? null : paper.document - currentPage: navigationStack.currentPage - onCurrentPageChanged: paper.goToPage(currentPage) + document: root.document === undefined ? null : root.document + onCurrentPageChanged: root.goToPage(currentPage) } PdfNavigationStack { id: navigationStack + onCurrentPageChanged: searchModel.currentPage = currentPage // TODO onCurrentLocationChanged: position currentLocation.x and .y in middle // currentPageChanged() MUST occur first! - onCurrentZoomChanged: paper.renderScale = currentZoom + onCurrentZoomChanged: root.renderScale = currentZoom // TODO deal with horizontal location (need WheelHandler or Flickable probably) } @@ -151,27 +151,28 @@ Rectangle { property bool centerOnLoad: false property bool vCenterOnLoad: false property size centerInSize + property real pageScale: image.paintedWidth / document.pagePointSize(navigationStack.currentPage).width + function reRenderIfNecessary() { + var newSourceWidth = image.sourceSize.width * root.scale + var ratio = newSourceWidth / image.sourceSize.width + if (ratio > 1.1 || ratio < 0.9) { + image.sourceSize.width = newSourceWidth + image.sourceSize.height = 0 + root.scale = 1 + } + } onStatusChanged: if (status == Image.Ready && centerOnLoad) { - paper.x = (centerInSize.width - image.implicitWidth) / 2 - paper.y = vCenterOnLoad ? (centerInSize.height - image.implicitHeight) / 2 : 0 + root.x = (centerInSize.width - image.implicitWidth) / 2 + root.y = vCenterOnLoad ? (centerInSize.height - image.implicitHeight) / 2 : 0 centerOnLoad = false vCenterOnLoad = false } } - function reRenderIfNecessary() { - var newSourceWidth = image.sourceSize.width * paper.scale - var ratio = newSourceWidth / image.sourceSize.width - if (ratio > 1.1 || ratio < 0.9) { - image.sourceSize.width = newSourceWidth - image.sourceSize.height = 0 - paper.scale = 1 - } - } onRenderScaleChanged: { image.sourceSize.width = document.pagePointSize(navigationStack.currentPage).width * renderScale image.sourceSize.height = 0 - paper.scale = 1 + root.scale = 1 } Shape { @@ -182,7 +183,7 @@ Rectangle { strokeWidth: 1 strokeColor: "cyan" fillColor: "steelblue" - scale: Qt.size(paper.__pageScale, paper.__pageScale) + scale: Qt.size(image.pageScale, image.pageScale) PathMultiline { paths: searchModel.currentPageBoundingPolygons } @@ -191,14 +192,14 @@ Rectangle { strokeWidth: 1 strokeColor: "orange" fillColor: "cyan" - scale: Qt.size(paper.__pageScale, paper.__pageScale) + scale: Qt.size(image.pageScale, image.pageScale) PathMultiline { paths: searchModel.currentResultBoundingPolygons } } ShapePath { fillColor: "orange" - scale: Qt.size(paper.__pageScale, paper.__pageScale) + scale: Qt.size(image.pageScale, image.pageScale) PathMultiline { paths: selection.geometry } @@ -208,22 +209,22 @@ Rectangle { Repeater { model: PdfLinkModel { id: linkModel - document: paper.document + document: root.document page: navigationStack.currentPage } delegate: Rectangle { color: "transparent" border.color: "lightgrey" - x: rect.x * paper.__pageScale - y: rect.y * paper.__pageScale - width: rect.width * paper.__pageScale - height: rect.height * paper.__pageScale + x: rect.x * image.pageScale + y: rect.y * image.pageScale + width: rect.width * image.pageScale + height: rect.height * image.pageScale MouseArea { // TODO switch to TapHandler / HoverHandler in 5.15 anchors.fill: parent cursorShape: Qt.PointingHandCursor onClicked: { if (page >= 0) - navigationStack.push(page, Qt.point(0, 0), paper.renderScale) + navigationStack.push(page, Qt.point(0, 0), root.renderScale) else Qt.openUrlExternally(url) } @@ -237,7 +238,7 @@ Rectangle { maximumScale: 10 minimumRotation: 0 maximumRotation: 0 - onActiveChanged: if (!active) paper.reRenderIfNecessary() + onActiveChanged: if (!active) image.reRenderIfNecessary() grabPermissions: PinchHandler.TakeOverForbidden // don't allow takeover if pinch has started } DragHandler { |