From 3aad2a0615449dc8e5bd9fb8d68eaf03733d8eb5 Mon Sep 17 00:00:00 2001 From: Jocelyn Turcotte Date: Fri, 21 Feb 2014 13:53:46 +0100 Subject: 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 --- src/webenginewidgets/api/qwebenginepage.cpp | 15 ++++++++++++--- src/webenginewidgets/api/qwebenginepage.h | 2 +- src/webenginewidgets/api/qwebenginepage_p.h | 3 ++- src/webenginewidgets/api/qwebengineview.cpp | 1 + .../render_widget_host_view_qt_delegate_webpage.cpp | 11 ++++++----- .../render_widget_host_view_qt_delegate_webpage.h | 2 ++ 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 adapter; QWebEngineHistory *history; QWebEngineView *view; - mutable QAction *actions[QWebEnginePage::WebActionCount]; + QSize viewportSize; bool m_isLoading; QUrl m_explicitUrl; WebEngineContextMenuData m_menuData; QPointer 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(container); - pagePrivate->m_rwhvDelegate = this; - m_page = pagePrivate->q_func(); + m_pagePrivate = static_cast(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 -- cgit v1.2.3