diff options
author | Eike Ziller <eike.ziller@qt.io> | 2019-09-24 15:35:54 +0200 |
---|---|---|
committer | Eike Ziller <eike.ziller@qt.io> | 2019-09-26 09:31:20 +0000 |
commit | 2152d4750c29d0e3aa96bfdb0622bbd1cf83e80d (patch) | |
tree | 44b48cc08fab5784175b05146709b64eaa07bae5 /src/plugins/help | |
parent | b4928395d79a58119150673e4a4c60596d3326f1 (diff) | |
download | qt-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.cpp | 10 | ||||
-rw-r--r-- | src/plugins/help/qlitehtml/container_qpainter.h | 1 | ||||
-rw-r--r-- | src/plugins/help/qlitehtml/qlitehtmlwidget.cpp | 8 |
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) |