diff -r 2a3c6f6f88b6 -r 63135ab601e7 src/eric7/PdfViewer/PdfView.py --- a/src/eric7/PdfViewer/PdfView.py Fri Jan 20 17:31:29 2023 +0100 +++ b/src/eric7/PdfViewer/PdfView.py Mon Jan 23 17:12:03 2023 +0100 @@ -13,10 +13,18 @@ from dataclasses import dataclass from PyQt6.QtCore import ( - QSize, Qt, pyqtSlot, QEvent, QSizeF, QRect, QPoint, QPointF, QRectF, - pyqtSignal + QEvent, + QPoint, + QPointF, + QRect, + QRectF, + QSize, + QSizeF, + Qt, + pyqtSignal, + pyqtSlot, ) -from PyQt6.QtGui import QGuiApplication, QPainter, QColor, QPen +from PyQt6.QtGui import QColor, QGuiApplication, QPainter, QPen from PyQt6.QtPdf import QPdfDocument, QPdfLink from PyQt6.QtPdfWidgets import QPdfView from PyQt6.QtWidgets import QRubberBand @@ -56,6 +64,8 @@ class PdfView(QPdfView): """ Class implementing a specialized PDF view. + + @signal selectionAvailable(bool) emitted to indicate the availability of a selection """ MarkerColors = { @@ -177,9 +187,12 @@ pageSize = pageSize.scaled( viewportSize, Qt.AspectRatioMode.KeepAspectRatio ) - zoomFactor = pageSize.width() / ( - self.document().pagePointSize(curPage) * self.__screenResolution - ).width() + zoomFactor = ( + pageSize.width() + / ( + self.document().pagePointSize(curPage) * self.__screenResolution + ).width() + ) return zoomFactor @pyqtSlot() @@ -297,11 +310,13 @@ ) factor = self.__zoomFactorForMode(self.zoomMode()) selectionSize = ( - QSizeF(translatedRubber.size()) / factor + QSizeF(translatedRubber.size()) + / factor / self.__screenResolution ) selectionTopLeft = ( - QPointF(translatedRubber.topLeft()) / factor + QPointF(translatedRubber.topLeft()) + / factor / self.__screenResolution ) selectionRect = QRectF(selectionTopLeft, selectionSize) @@ -380,9 +395,9 @@ for page in self.__markerGeometries: for markerGeom in self.__markerGeometries[page]: if markerGeom.rectangle.intersects(self.__documentViewport): - painter.setPen(QPen( - PdfView.MarkerColors[markerGeom.markerType][0], 2 - )) + painter.setPen( + QPen(PdfView.MarkerColors[markerGeom.markerType][0], 2) + ) painter.setBrush(PdfView.MarkerColors[markerGeom.markerType][1]) painter.drawRect(markerGeom.rectangle) painter.end() @@ -398,7 +413,7 @@ y = self.verticalScrollBar().value() width = self.viewport().width() height = self.viewport().height() - + docViewport = QRect(x, y, width, height) if self.__documentViewport == docViewport: return @@ -424,14 +439,14 @@ document = self.document() margins = self.documentMargins() - + if document is None or document.status() != QPdfDocument.Status.Ready: return pageCount = document.pageCount() - + totalWidth = 0 - + startPage = ( self.pageNavigator().currentPage() if self.pageMode() == QPdfView.PageMode.SinglePage @@ -447,7 +462,8 @@ for page in range(startPage, endPage): if self.zoomMode() == QPdfView.ZoomMode.Custom: pageSize = QSizeF( - document.pagePointSize(page) * self.__screenResolution + document.pagePointSize(page) + * self.__screenResolution * self.zoomFactor() ).toSize() elif self.zoomMode() == QPdfView.ZoomMode.FitToWidth: @@ -459,9 +475,8 @@ ) / pageSize.width() pageSize *= factor elif self.zoomMode() == QPdfView.ZoomMode.FitInView: - viewportSize = ( - self.__documentViewport.size() - + QSize(-margins.left() - margins.right(), -self.pageSpacing()) + viewportSize = self.__documentViewport.size() + QSize( + -margins.left() - margins.right(), -self.pageSpacing() ) pageSize = QSizeF( document.pagePointSize(page) * self.__screenResolution @@ -522,7 +537,8 @@ QSizeF(marker.rectangle.size()) * factor * self.__screenResolution ).toSize() markerTopLeft = ( - QPointF(marker.rectangle.topLeft()) * factor + QPointF(marker.rectangle.topLeft()) + * factor * self.__screenResolution ).toPoint() @@ -530,7 +546,7 @@ self.__markerGeometries[page].append( PdfMarkerGeometry( rectangle=markerGeometry.translated(offset), - markerType=marker.markerType + markerType=marker.markerType, ) ) @@ -639,7 +655,8 @@ """ for page in self.__markers: markersList = [ - m for m in self.__markers[page] + m + for m in self.__markers[page] if m.markerType == PdfMarkerType.SELECTION ] if markersList: