diff options
author | Eirik Aavitsland <eirik.aavitsland@qt.io> | 2020-04-21 15:04:15 +0200 |
---|---|---|
committer | Eirik Aavitsland <eirik.aavitsland@qt.io> | 2020-04-27 14:13:49 +0200 |
commit | aced4ce5e3f37a7efa1d05660b9cf79ce5fd4870 (patch) | |
tree | bbe623a6078c6e6d7d1be930dbe74cbe070c8e16 | |
parent | 9cabb018b54635baed269a82519be110c818c568 (diff) |
Assistant: keep text at the top visible when resizing
After following a link to look up a keyword, resizing the width of the
window would lead to the looked-up position being scroled away. This
fix is adapted from the corresponding fix in Qt Creator,
https://codereview.qt-project.org/c/qt-creator/qt-creator/+/274996
Fixes: QTBUG-34525
Change-Id: Ia9c2aab4b2c8039965eff098ff51dbdcc4967a01
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
(cherry picked from commit b3cdd63d4bdaea09222fb93ffcd5104a2dc0bf2e)
-rw-r--r-- | src/assistant/assistant/helpviewer.h | 2 | ||||
-rw-r--r-- | src/assistant/assistant/helpviewer_qtb.cpp | 21 |
2 files changed, 23 insertions, 0 deletions
diff --git a/src/assistant/assistant/helpviewer.h b/src/assistant/assistant/helpviewer.h index 00e941000..57dc1d280 100644 --- a/src/assistant/assistant/helpviewer.h +++ b/src/assistant/assistant/helpviewer.h @@ -130,6 +130,7 @@ protected: void wheelEvent(QWheelEvent *event) override; void mousePressEvent(QMouseEvent *event) override; void mouseReleaseEvent(QMouseEvent *event) override; + void resizeEvent(QResizeEvent *e) override; private slots: void actionChanged(); @@ -141,6 +142,7 @@ private: void contextMenuEvent(QContextMenuEvent *event) override; QVariant loadResource(int type, const QUrl &name) TEXTBROWSER_OVERRIDE; bool handleForwardBackwardMouseButtons(QMouseEvent *e); + void scrollToTextPosition(int position); private: HelpViewerPrivate *d; diff --git a/src/assistant/assistant/helpviewer_qtb.cpp b/src/assistant/assistant/helpviewer_qtb.cpp index b522e1ba2..48eaea978 100644 --- a/src/assistant/assistant/helpviewer_qtb.cpp +++ b/src/assistant/assistant/helpviewer_qtb.cpp @@ -38,6 +38,7 @@ #include <QtGui/QContextMenuEvent> #include <QtWidgets/QMenu> +#include <QtWidgets/QScrollBar> #ifndef QT_NO_CLIPBOARD #include <QtGui/QClipboard> #endif @@ -312,6 +313,14 @@ void HelpViewer::mouseReleaseEvent(QMouseEvent *e) QTextBrowser::mouseReleaseEvent(e); } + +void HelpViewer::resizeEvent(QResizeEvent *e) +{ + const int topTextPosition = cursorForPosition({width() / 2, 0}).position(); + QTextBrowser::resizeEvent(e); + scrollToTextPosition(topTextPosition); +} + // -- private slots void HelpViewer::actionChanged() @@ -377,4 +386,16 @@ QVariant HelpViewer::loadResource(int type, const QUrl &name) return ba; } + +void HelpViewer::scrollToTextPosition(int position) +{ + QTextCursor tc(document()); + tc.setPosition(position); + const int dy = cursorRect(tc).top(); + if (verticalScrollBar()) { + verticalScrollBar()->setValue( + std::min(verticalScrollBar()->value() + dy, verticalScrollBar()->maximum())); + } +} + QT_END_NAMESPACE |