summaryrefslogtreecommitdiff
path: root/src/plugins/help
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@qt.io>2019-09-24 15:35:54 +0200
committerEike Ziller <eike.ziller@qt.io>2019-09-26 09:31:20 +0000
commit2152d4750c29d0e3aa96bfdb0622bbd1cf83e80d (patch)
tree44b48cc08fab5784175b05146709b64eaa07bae5 /src/plugins/help
parentb4928395d79a58119150673e4a4c60596d3326f1 (diff)
downloadqt-creator-2152d4750c29d0e3aa96bfdb0622bbd1cf83e80d.tar.gz
Help/litehtml: Fix selection drawing for CMake documentation
Don't rely on litehtml calling draw_background for the root element. Manually draw selections first, then let litehtml draw as before. Change-Id: Ic9efd11b564dec1742aa6b6ffcb58133504681ff Reviewed-by: Cristian Adam <cristian.adam@qt.io> Reviewed-by: Eike Ziller <eike.ziller@qt.io>
Diffstat (limited to 'src/plugins/help')
-rw-r--r--src/plugins/help/qlitehtml/container_qpainter.cpp10
-rw-r--r--src/plugins/help/qlitehtml/container_qpainter.h1
-rw-r--r--src/plugins/help/qlitehtml/qlitehtmlwidget.cpp8
3 files changed, 10 insertions, 9 deletions
diff --git a/src/plugins/help/qlitehtml/container_qpainter.cpp b/src/plugins/help/qlitehtml/container_qpainter.cpp
index 341c8b712f..e3751f517c 100644
--- a/src/plugins/help/qlitehtml/container_qpainter.cpp
+++ b/src/plugins/help/qlitehtml/container_qpainter.cpp
@@ -652,11 +652,9 @@ void DocumentContainer::buildIndex()
void DocumentContainer::draw_background(litehtml::uint_ptr hdc, const litehtml::background_paint &bg)
{
- // TODO
auto painter = toQPainter(hdc);
if (bg.is_root) {
// TODO ?
- drawSelection(painter, toQRect(bg.border_box));
return;
}
painter->save();
@@ -935,6 +933,14 @@ void DocumentContainer::render(int width, int height)
m_selection.update();
}
+void DocumentContainer::draw(QPainter *painter, const QRect &clip)
+{
+ drawSelection(painter, clip);
+ const QPoint pos = -m_scrollPosition;
+ const litehtml::position clipRect = {clip.x(), clip.y(), clip.width(), clip.height()};
+ document()->draw(reinterpret_cast<litehtml::uint_ptr>(painter), pos.x(), pos.y(), &clipRect);
+}
+
QVector<QRect> DocumentContainer::mousePressEvent(const QPoint &documentPos,
const QPoint &viewportPos,
Qt::MouseButton button)
diff --git a/src/plugins/help/qlitehtml/container_qpainter.h b/src/plugins/help/qlitehtml/container_qpainter.h
index ab70d0561e..018ea60a37 100644
--- a/src/plugins/help/qlitehtml/container_qpainter.h
+++ b/src/plugins/help/qlitehtml/container_qpainter.h
@@ -143,6 +143,7 @@ public: // outside API
litehtml::document::ptr document() const;
void setScrollPosition(const QPoint &pos);
void render(int width, int height);
+ void draw(QPainter *painter, const QRect &clip);
// these return areas to redraw in document space
QVector<QRect> mousePressEvent(const QPoint &documentPos,
diff --git a/src/plugins/help/qlitehtml/qlitehtmlwidget.cpp b/src/plugins/help/qlitehtml/qlitehtmlwidget.cpp
index 15174036f7..6692d56ffd 100644
--- a/src/plugins/help/qlitehtml/qlitehtmlwidget.cpp
+++ b/src/plugins/help/qlitehtml/qlitehtmlwidget.cpp
@@ -523,17 +523,11 @@ void QLiteHtmlWidget::paintEvent(QPaintEvent *event)
if (!d->documentContainer.document())
return;
d->documentContainer.setScrollPosition(scrollPosition());
- const QPoint pos = -scrollPosition();
- const QRect r = toVirtual(event->rect());
- const litehtml::position clip = {r.x(), r.y(), r.width(), r.height()};
QPainter p(viewport());
p.setWorldTransform(QTransform().scale(d->zoomFactor, d->zoomFactor));
p.setRenderHint(QPainter::SmoothPixmapTransform, true);
p.setRenderHint(QPainter::Antialiasing, true);
- d->documentContainer.document()->draw(reinterpret_cast<litehtml::uint_ptr>(&p),
- pos.x(),
- pos.y(),
- &clip);
+ d->documentContainer.draw(&p, toVirtual(event->rect()));
}
static litehtml::element::ptr elementForY(int y, const litehtml::document::ptr &document)