diff options
author | Eike Ziller <eike.ziller@qt.io> | 2020-03-13 14:06:47 +0100 |
---|---|---|
committer | Eike Ziller <eike.ziller@qt.io> | 2020-03-13 14:17:16 +0000 |
commit | 038e8491eecde99e0fa9cdfac3c5739d7f66a136 (patch) | |
tree | decbe4819efcd83b610fe1f16c940718014b5c1c | |
parent | 11bd2f8debc512cc263b03ccce2186435048f3ba (diff) |
litehtml: Fix selection artifacts with scaled view
If you zoom into a page (Ctrl-+) and then select, artifacts could be
left behind when dragging or removing the selection again.
Fiddle around with coordinate transformations (with regard to rounding)
to fix that.
Change-Id: I68c29d8e3559b90dbb3b93550338e483d14731bf
Reviewed-by: Cristian Adam <cristian.adam@qt.io>
-rw-r--r-- | src/plugins/help/qlitehtml/container_qpainter.cpp | 3 | ||||
-rw-r--r-- | src/plugins/help/qlitehtml/qlitehtmlwidget.cpp | 16 | ||||
-rw-r--r-- | src/plugins/help/qlitehtml/qlitehtmlwidget.h | 2 |
3 files changed, 7 insertions, 14 deletions
diff --git a/src/plugins/help/qlitehtml/container_qpainter.cpp b/src/plugins/help/qlitehtml/container_qpainter.cpp index 559fc0fede..bf98f3f08f 100644 --- a/src/plugins/help/qlitehtml/container_qpainter.cpp +++ b/src/plugins/help/qlitehtml/container_qpainter.cpp @@ -998,8 +998,9 @@ QVector<QRect> DocumentContainer::mouseMoveEvent(const QPoint &documentPos, viewportPos, m_selection.mode); if (element.element) { + redrawRects.append( + m_selection.boundingRect() /*.adjusted(-1, -1, +1, +1)*/); // redraw old selection area m_selection.endElem = element; - redrawRects.append(m_selection.boundingRect()); // redraw old selection area m_selection.update(); redrawRects.append(m_selection.boundingRect()); } diff --git a/src/plugins/help/qlitehtml/qlitehtmlwidget.cpp b/src/plugins/help/qlitehtml/qlitehtmlwidget.cpp index db8c16d5ac..8f455413bc 100644 --- a/src/plugins/help/qlitehtml/qlitehtmlwidget.cpp +++ b/src/plugins/help/qlitehtml/qlitehtmlwidget.cpp @@ -664,21 +664,11 @@ QPoint QLiteHtmlWidget::toVirtual(const QPoint &p) const return {int(p.x() / d->zoomFactor), int(p.y() / d->zoomFactor)}; } -QPoint QLiteHtmlWidget::fromVirtual(const QPoint &p) const -{ - return {int(p.x() * d->zoomFactor), int(p.y() * d->zoomFactor)}; -} - QSize QLiteHtmlWidget::toVirtual(const QSize &s) const { return {int(s.width() / d->zoomFactor), int(s.height() / d->zoomFactor)}; } -QSize QLiteHtmlWidget::fromVirtual(const QSize &s) const -{ - return {int(s.width() * d->zoomFactor + 0.5), int(s.height() * d->zoomFactor + 0.5)}; -} - QRect QLiteHtmlWidget::toVirtual(const QRect &r) const { return {toVirtual(r.topLeft()), toVirtual(r.size())}; @@ -686,5 +676,9 @@ QRect QLiteHtmlWidget::toVirtual(const QRect &r) const QRect QLiteHtmlWidget::fromVirtual(const QRect &r) const { - return {fromVirtual(r.topLeft()), fromVirtual(r.size())}; + const QPoint tl{int(r.x() * d->zoomFactor), int(r.y() * d->zoomFactor)}; + // round size up, and add one since the topleft point was rounded down + const QSize s{int(r.width() * d->zoomFactor + 0.5) + 1, + int(r.height() * d->zoomFactor + 0.5) + 1}; + return {tl, s}; } diff --git a/src/plugins/help/qlitehtml/qlitehtmlwidget.h b/src/plugins/help/qlitehtml/qlitehtmlwidget.h index a79e5824b0..1eed9b1f09 100644 --- a/src/plugins/help/qlitehtml/qlitehtmlwidget.h +++ b/src/plugins/help/qlitehtml/qlitehtmlwidget.h @@ -82,9 +82,7 @@ private: QPoint scrollPosition() const; void htmlPos(const QPoint &pos, QPoint *viewportPos, QPoint *htmlPos) const; QPoint toVirtual(const QPoint &p) const; - QPoint fromVirtual(const QPoint &p) const; QSize toVirtual(const QSize &s) const; - QSize fromVirtual(const QSize &s) const; QRect toVirtual(const QRect &r) const; QRect fromVirtual(const QRect &r) const; |