Skip to content

Commit 9f1f5b7

Browse files
committed
StickyGraphicsView: Map scene rect to viewport in floats
1 parent 6f1e208 commit 9f1f5b7

File tree

1 file changed

+17
-2
lines changed

1 file changed

+17
-2
lines changed

Orange/widgets/utils/stickygraphicsview.py

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import math
33

44
from PyQt5.QtCore import Qt, QRectF, QEvent, QCoreApplication, QObject, QPointF
5-
from PyQt5.QtGui import QBrush, QPalette, QTransform
5+
from PyQt5.QtGui import QBrush, QPalette, QTransform, QPolygonF
66
from PyQt5.QtWidgets import (
77
QGraphicsView, QGraphicsScene, QWidget, QVBoxLayout, QSizePolicy,
88
QScrollBar, QGraphicsDropShadowEffect
@@ -218,7 +218,8 @@ def __updateView(self, view: QGraphicsView, rect: QRectF) -> None:
218218
container.setVisible(False)
219219
return
220220
# map the rect to (main) viewport coordinates
221-
viewrect = self.mapFromScene(rect).boundingRect()
221+
viewrect = qgraphicsview_map_rect_from_scene(self, rect).boundingRect()
222+
viewrect = viewrect.toAlignedRect()
222223
viewportrect = self.viewport().rect()
223224
visible = not (viewrect.top() >= viewportrect.top()
224225
and viewrect.bottom() <= viewportrect.y() + viewportrect.height())
@@ -248,6 +249,20 @@ def viewportEvent(self, event: QEvent) -> bool:
248249
return super().viewportEvent(event)
249250

250251

252+
def qgraphicsview_map_rect_from_scene(
253+
view: QGraphicsView, rect: QRectF
254+
) -> QPolygonF:
255+
"""Like QGraphicsView.mapFromScene(QRectF) but returning a QPolygonF
256+
(without rounding).
257+
"""
258+
tr = view.viewportTransform()
259+
p1 = tr.map(rect.topLeft())
260+
p2 = tr.map(rect.topRight())
261+
p3 = tr.map(rect.bottomRight())
262+
p4 = tr.map(rect.bottomLeft())
263+
return QPolygonF([p1, p2, p3, p4])
264+
265+
251266
def main(args): # pragma: no cover
252267
# pylint: disable=import-outside-toplevel,protected-access
253268
from PyQt5.QtWidgets import QApplication, QAction

0 commit comments

Comments
 (0)