aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@qt.io>2020-03-13 14:06:47 +0100
committerEike Ziller <eike.ziller@qt.io>2020-03-13 14:17:16 +0000
commit038e8491eecde99e0fa9cdfac3c5739d7f66a136 (patch)
treedecbe4819efcd83b610fe1f16c940718014b5c1c
parent11bd2f8debc512cc263b03ccce2186435048f3ba (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.cpp3
-rw-r--r--src/plugins/help/qlitehtml/qlitehtmlwidget.cpp16
-rw-r--r--src/plugins/help/qlitehtml/qlitehtmlwidget.h2
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;