diff options
author | Jocelyn Turcotte <jocelyn.turcotte@digia.com> | 2014-02-21 13:53:46 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-02-21 18:21:47 +0100 |
commit | 3aad2a0615449dc8e5bd9fb8d68eaf03733d8eb5 (patch) | |
tree | 4eba5db5bec10c97ca2d902c8ca19298a9007864 | |
parent | 6a2ecb47b9e3c78e7c947549d7d3aff2a903a5fe (diff) |
Implement QWebEnginePage::viewportSize
Keep the size in the page itself, and ask the optionally attached
QWebEngineView only for the rect position.
When the view size change, call setViewportSize on the page like
QtWebKit does.
Change-Id: I735f1509cab9ef9b5d32bf31249a59c919939804
Reviewed-by: Andras Becsi <andras.becsi@digia.com>
6 files changed, 24 insertions, 10 deletions
diff --git a/src/webenginewidgets/api/qwebenginepage.cpp b/src/webenginewidgets/api/qwebenginepage.cpp index 3436d86cf..83f77b4bd 100644 --- a/src/webenginewidgets/api/qwebenginepage.cpp +++ b/src/webenginewidgets/api/qwebenginepage.cpp @@ -216,7 +216,10 @@ void QWebEnginePagePrivate::selectionChanged() QRectF QWebEnginePagePrivate::viewportRect() const { - return view ? view->geometry() : QRectF(); + QRectF rect(QPointF(), viewportSize); + if (view) + rect.setTopLeft(view->rect().topLeft()); + return rect; } qreal QWebEnginePagePrivate::dpiScale() const @@ -500,10 +503,16 @@ void QWebEnginePage::findText(const QString &subString, FindFlags options, const } } -void QWebEnginePage::setViewportSize(const QSize &size) const +QSize QWebEnginePage::viewportSize() const { - Q_UNUSED(size) Q_D(const QWebEnginePage); + return d->viewportSize; +} + +void QWebEnginePage::setViewportSize(const QSize &size) +{ + Q_D(QWebEnginePage); + d->viewportSize = size; if (d->m_rwhvDelegate) d->m_rwhvDelegate->notifyResize(); } diff --git a/src/webenginewidgets/api/qwebenginepage.h b/src/webenginewidgets/api/qwebenginepage.h index aac37bc99..96ffeda3a 100644 --- a/src/webenginewidgets/api/qwebenginepage.h +++ b/src/webenginewidgets/api/qwebenginepage.h @@ -355,7 +355,7 @@ public: virtual void triggerAction(WebAction action, bool checked = false); QSize viewportSize() const; - void setViewportSize(const QSize &size) const; + void setViewportSize(const QSize &size); ViewportAttributes viewportAttributesForSize(const QSize& availableSize) const; QSize preferredContentsSize() const; diff --git a/src/webenginewidgets/api/qwebenginepage_p.h b/src/webenginewidgets/api/qwebenginepage_p.h index ed21c3816..773df00d4 100644 --- a/src/webenginewidgets/api/qwebenginepage_p.h +++ b/src/webenginewidgets/api/qwebenginepage_p.h @@ -142,13 +142,14 @@ public: QExplicitlySharedDataPointer<WebContentsAdapter> adapter; QWebEngineHistory *history; QWebEngineView *view; - mutable QAction *actions[QWebEnginePage::WebActionCount]; + QSize viewportSize; bool m_isLoading; QUrl m_explicitUrl; WebEngineContextMenuData m_menuData; QPointer<RenderWidgetHostViewQtDelegateWebPage> m_rwhvDelegate; mutable CallbackDirectory m_callbacks; + mutable QAction *actions[QWebEnginePage::WebActionCount]; }; QT_END_NAMESPACE diff --git a/src/webenginewidgets/api/qwebengineview.cpp b/src/webenginewidgets/api/qwebengineview.cpp index 3d884f464..a29349052 100644 --- a/src/webenginewidgets/api/qwebengineview.cpp +++ b/src/webenginewidgets/api/qwebengineview.cpp @@ -81,6 +81,7 @@ void QWebEngineViewPrivate::bind(QWebEngineView *view, QWebEnginePage *page) QObject::connect(page, &QWebEnginePage::loadProgress, view, &QWebEngineView::loadProgress); QObject::connect(page, &QWebEnginePage::loadFinished, view, &QWebEngineView::loadFinished); QObject::connect(page, &QWebEnginePage::selectionChanged, view, &QWebEngineView::selectionChanged); + page->setViewportSize(view->size()); } } diff --git a/src/webenginewidgets/render_widget_host_view_qt_delegate_webpage.cpp b/src/webenginewidgets/render_widget_host_view_qt_delegate_webpage.cpp index 2da55f66e..d6e99f4ea 100644 --- a/src/webenginewidgets/render_widget_host_view_qt_delegate_webpage.cpp +++ b/src/webenginewidgets/render_widget_host_view_qt_delegate_webpage.cpp @@ -54,21 +54,22 @@ RenderWidgetHostViewQtDelegateWebPage::RenderWidgetHostViewQtDelegateWebPage(RenderWidgetHostViewQtDelegateClient *client) : m_client(client) , m_page(0) + , m_pagePrivate(0) { } void RenderWidgetHostViewQtDelegateWebPage::initAsChild(WebContentsAdapterClient* container) { - QWebEnginePagePrivate *pagePrivate = static_cast<QWebEnginePagePrivate *>(container); - pagePrivate->m_rwhvDelegate = this; - m_page = pagePrivate->q_func(); + m_pagePrivate = static_cast<QWebEnginePagePrivate *>(container); + m_pagePrivate->m_rwhvDelegate = this; + m_page = m_pagePrivate->q_func(); Q_ASSERT(m_page); } QRectF RenderWidgetHostViewQtDelegateWebPage::screenRect() const { - if (m_page && m_page->view()) - return m_page->view()->rect(); + if (m_pagePrivate) + return m_pagePrivate->viewportRect(); // FIXME: figure out what to do with QWebFrame::contentsSize vs. preferedContentsSize return QRectF(0, 0, 800, 600); } diff --git a/src/webenginewidgets/render_widget_host_view_qt_delegate_webpage.h b/src/webenginewidgets/render_widget_host_view_qt_delegate_webpage.h index 5674e61c1..52988aefa 100644 --- a/src/webenginewidgets/render_widget_host_view_qt_delegate_webpage.h +++ b/src/webenginewidgets/render_widget_host_view_qt_delegate_webpage.h @@ -52,6 +52,7 @@ class BackingStoreQt; QT_BEGIN_NAMESPACE class QWindow; class QWebEnginePage; +class QWebEnginePagePrivate; QT_END_NAMESPACE class RenderWidgetHostViewQtDelegateWebPage : public QObject, public RenderWidgetHostViewQtDelegate @@ -86,6 +87,7 @@ protected: private: RenderWidgetHostViewQtDelegateClient *m_client; QWebEnginePage *m_page; + QWebEnginePagePrivate *m_pagePrivate; }; #endif |