- Revision
- 118923
- Author
- [email protected]
- Date
- 2012-05-30 08:06:47 -0700 (Wed, 30 May 2012)
Log Message
[Qt] Move ViewportAttribute related methods to the interaction engine.
https://bugs.webkit.org/show_bug.cgi?id=87855
Reviewed by Simon Hausmann.
Move the logic of didChange{ViewportProperties|ContentsSize} to the
interaction engine and update our testing object.
* UIProcess/API/qt/qquickwebview.cpp:
(QQuickWebViewLegacyPrivate::QQuickWebViewLegacyPrivate):
(QQuickWebViewFlickablePrivate::didChangeViewportProperties):
(QQuickWebViewFlickablePrivate::didChangeContentsSize):
* UIProcess/API/qt/qquickwebview_p_p.h:
(QQuickWebViewPrivate):
* UIProcess/API/qt/qwebkittest.cpp:
(QWebKitTest::contentsScale):
(QWebKitTest::devicePixelRatio):
(QWebKitTest::initialScale):
(QWebKitTest::minimumScale):
(QWebKitTest::maximumScale):
(QWebKitTest::isScalable):
(QWebKitTest::layoutSize):
* UIProcess/qt/QtViewportInteractionEngine.cpp:
(WebKit::QtViewportInteractionEngine::viewportAttributesChanged):
(WebKit):
(WebKit::QtViewportInteractionEngine::pageContentsSizeChanged):
* UIProcess/qt/QtViewportInteractionEngine.h:
(QtViewportInteractionEngine):
Modified Paths
Diff
Modified: trunk/Source/WebKit2/ChangeLog (118922 => 118923)
--- trunk/Source/WebKit2/ChangeLog 2012-05-30 14:24:03 UTC (rev 118922)
+++ trunk/Source/WebKit2/ChangeLog 2012-05-30 15:06:47 UTC (rev 118923)
@@ -1,5 +1,36 @@
2012-05-30 Kenneth Rohde Christiansen <[email protected]>
+ [Qt] Move ViewportAttribute related methods to the interaction engine.
+ https://bugs.webkit.org/show_bug.cgi?id=87855
+
+ Reviewed by Simon Hausmann.
+
+ Move the logic of didChange{ViewportProperties|ContentsSize} to the
+ interaction engine and update our testing object.
+
+ * UIProcess/API/qt/qquickwebview.cpp:
+ (QQuickWebViewLegacyPrivate::QQuickWebViewLegacyPrivate):
+ (QQuickWebViewFlickablePrivate::didChangeViewportProperties):
+ (QQuickWebViewFlickablePrivate::didChangeContentsSize):
+ * UIProcess/API/qt/qquickwebview_p_p.h:
+ (QQuickWebViewPrivate):
+ * UIProcess/API/qt/qwebkittest.cpp:
+ (QWebKitTest::contentsScale):
+ (QWebKitTest::devicePixelRatio):
+ (QWebKitTest::initialScale):
+ (QWebKitTest::minimumScale):
+ (QWebKitTest::maximumScale):
+ (QWebKitTest::isScalable):
+ (QWebKitTest::layoutSize):
+ * UIProcess/qt/QtViewportInteractionEngine.cpp:
+ (WebKit::QtViewportInteractionEngine::viewportAttributesChanged):
+ (WebKit):
+ (WebKit::QtViewportInteractionEngine::pageContentsSizeChanged):
+ * UIProcess/qt/QtViewportInteractionEngine.h:
+ (QtViewportInteractionEngine):
+
+2012-05-30 Kenneth Rohde Christiansen <[email protected]>
+
[Qt] Do renames in ViewportInteractionEngine as agreed upon
https://bugs.webkit.org/show_bug.cgi?id=87845
Modified: trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp (118922 => 118923)
--- trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp 2012-05-30 14:24:03 UTC (rev 118922)
+++ trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp 2012-05-30 15:06:47 UTC (rev 118923)
@@ -770,12 +770,6 @@
QQuickWebViewLegacyPrivate::QQuickWebViewLegacyPrivate(QQuickWebView* viewport)
: QQuickWebViewPrivate(viewport)
{
- // Default values for the Legacy view.
- attributes.devicePixelRatio = 1;
- attributes.initialScale = 1;
- attributes.minimumScale = 1;
- attributes.maximumScale = 1;
- attributes.userScalable = 0;
}
void QQuickWebViewLegacyPrivate::initialize(WKContextRef contextRef, WKPageGroupRef pageGroupRef)
@@ -867,30 +861,7 @@
void QQuickWebViewFlickablePrivate::didChangeViewportProperties(const WebCore::ViewportAttributes& newAttributes)
{
- Q_Q(QQuickWebView);
-
- // FIXME: Revise these when implementing fit-to-width.
- WebCore::ViewportAttributes attr = newAttributes;
- WebCore::restrictScaleFactorToInitialScaleIfNotUserScalable(attr);
-
- // FIXME: Resetting here can reset more than needed. For instance it will end deferrers.
- // This needs to be revised at some point.
- interactionEngine->reset();
-
- interactionEngine->setDevicePixelRatio(attr.devicePixelRatio);
-
- interactionEngine->setAllowsUserScaling(!!attr.userScalable);
- interactionEngine->setCSSScaleBounds(attr.minimumScale, attr.maximumScale);
-
- if (!interactionEngine->hadUserInteraction() && !pageIsSuspended)
- interactionEngine->setCSSScale(attr.initialScale);
-
- this->attributes = attr;
- emit q->experimental()->test()->viewportChanged();
-
- // If the web app successively changes the viewport on purpose
- // it wants to be in control and we should disable animations.
- interactionEngine->setPageItemRectVisible(interactionEngine->nearestValidBounds());
+ interactionEngine->viewportAttributesChanged(newAttributes);
}
void QQuickWebViewFlickablePrivate::updateViewportSize()
@@ -963,26 +934,9 @@
void QQuickWebViewFlickablePrivate::didChangeContentsSize(const QSize& newSize)
{
Q_Q(QQuickWebView);
- QSize viewportSize = q->boundingRect().size().toSize();
pageView->setContentsSize(newSize); // emits contentsSizeChanged()
-
- float minimumScale = WebCore::computeMinimumScaleFactorForContentContained(attributes, viewportSize, newSize);
-
- if (!qFuzzyCompare(minimumScale, attributes.minimumScale)) {
- interactionEngine->setCSSScaleBounds(minimumScale, attributes.maximumScale);
- emit q->experimental()->test()->viewportChanged();
-
- if (!interactionEngine->hadUserInteraction() && !pageIsSuspended) {
- // Emits contentsScaleChanged();
- interactionEngine->setCSSScale(minimumScale);
- }
- }
-
- // Emit for testing purposes, so that it can be verified that
- // we didn't do scale adjustment.
- interactionEngine->setPageItemRectVisible(interactionEngine->nearestValidBounds());
- emit q->experimental()->test()->contentsScaleCommitted();
+ interactionEngine->pageContentsSizeChanged(newSize, q->boundingRect().size().toSize());
}
/*!
Modified: trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview_p_p.h (118922 => 118923)
--- trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview_p_p.h 2012-05-30 14:24:03 UTC (rev 118922)
+++ trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview_p_p.h 2012-05-30 15:06:47 UTC (rev 118923)
@@ -192,8 +192,6 @@
QQmlComponent* filePicker;
QQmlComponent* databaseQuotaDialog;
- WebCore::ViewportAttributes attributes;
-
QList<QUrl> userScripts;
bool m_useDefaultContentItemSize;
Modified: trunk/Source/WebKit2/UIProcess/API/qt/qwebkittest.cpp (118922 => 118923)
--- trunk/Source/WebKit2/UIProcess/API/qt/qwebkittest.cpp 2012-05-30 14:24:03 UTC (rev 118922)
+++ trunk/Source/WebKit2/UIProcess/API/qt/qwebkittest.cpp 2012-05-30 15:06:47 UTC (rev 118923)
@@ -120,44 +120,49 @@
QVariant QWebKitTest::contentsScale() const
{
- if (QtViewportInteractionEngine* interactionEngine = m_webViewPrivate->viewportInteractionEngine())
- return interactionEngine->currentCSSScale();
-
- return m_webViewPrivate->attributes.initialScale;
+ if (QtViewportInteractionEngine* viewport = m_webViewPrivate->viewportInteractionEngine())
+ return viewport->currentCSSScale();
+ return QVariant();
}
QVariant QWebKitTest::devicePixelRatio() const
{
- return m_webViewPrivate->attributes.devicePixelRatio;
+ if (QtViewportInteractionEngine* viewport = m_webViewPrivate->viewportInteractionEngine())
+ return viewport->m_devicePixelRatio;
+ return QVariant();
}
QVariant QWebKitTest::initialScale() const
{
- return m_webViewPrivate->attributes.initialScale;
+ if (QtViewportInteractionEngine* viewport = m_webViewPrivate->viewportInteractionEngine())
+ return viewport->m_rawAttributes.initialScale;
+ return QVariant();
}
QVariant QWebKitTest::minimumScale() const
{
- if (QtViewportInteractionEngine* interactionEngine = m_webViewPrivate->viewportInteractionEngine())
- return interactionEngine->m_minimumScale;
-
- return m_webViewPrivate->attributes.minimumScale;
+ if (QtViewportInteractionEngine* viewport = m_webViewPrivate->viewportInteractionEngine())
+ return viewport->m_minimumScale;
+ return QVariant();
}
QVariant QWebKitTest::maximumScale() const
{
- if (QtViewportInteractionEngine* interactionEngine = m_webViewPrivate->viewportInteractionEngine())
- return interactionEngine->m_maximumScale;
-
- return m_webViewPrivate->attributes.maximumScale;
+ if (QtViewportInteractionEngine* viewport = m_webViewPrivate->viewportInteractionEngine())
+ return viewport->m_maximumScale;
+ return QVariant();
}
QVariant QWebKitTest::isScalable() const
{
- return !!m_webViewPrivate->attributes.userScalable;
+ if (QtViewportInteractionEngine* viewport = m_webViewPrivate->viewportInteractionEngine())
+ return !!viewport->m_rawAttributes.userScalable;
+ return QVariant();
}
QVariant QWebKitTest::layoutSize() const
{
- return QSizeF(m_webViewPrivate->attributes.layoutSize);
+ if (QtViewportInteractionEngine* viewport = m_webViewPrivate->viewportInteractionEngine())
+ return QSizeF(viewport->m_rawAttributes.layoutSize);
+ return QVariant();
}
Modified: trunk/Source/WebKit2/UIProcess/qt/QtViewportInteractionEngine.cpp (118922 => 118923)
--- trunk/Source/WebKit2/UIProcess/qt/QtViewportInteractionEngine.cpp 2012-05-30 14:24:03 UTC (rev 118922)
+++ trunk/Source/WebKit2/UIProcess/qt/QtViewportInteractionEngine.cpp 2012-05-30 15:06:47 UTC (rev 118923)
@@ -24,6 +24,7 @@
#include "qquickwebpage_p.h"
#include "qquickwebview_p.h"
+#include "qwebkittest_p.h"
#include <QPointF>
#include <QTransform>
#include <QWheelEvent>
@@ -174,6 +175,55 @@
return innerBoundedCSSScale(cssScale);
}
+void QtViewportInteractionEngine::viewportAttributesChanged(const WebCore::ViewportAttributes& newAttributes)
+{
+ m_rawAttributes = newAttributes;
+ WebCore::restrictScaleFactorToInitialScaleIfNotUserScalable(m_rawAttributes);
+
+ // FIXME: Resetting here can reset more than needed. For instance it will end deferrers.
+ // This needs to be revised at some point.
+ reset();
+
+
+ // FIXME: Should get directly from the webPageProxy.
+ setDevicePixelRatio(m_rawAttributes.devicePixelRatio);
+
+ setAllowsUserScaling(!!m_rawAttributes.userScalable);
+ setCSSScaleBounds(m_rawAttributes.minimumScale, m_rawAttributes.maximumScale);
+
+ if (!m_hadUserInteraction && !m_hasSuspendedContent) {
+ // Emits contentsScaleChanged();
+ setCSSScale(m_rawAttributes.initialScale);
+ }
+
+ emit m_viewportItem->experimental()->test()->viewportChanged();
+
+ // If the web app successively changes the viewport on purpose
+ // it wants to be in control and we should disable animations.
+ setPageItemRectVisible(nearestValidBounds());
+}
+
+void QtViewportInteractionEngine::pageContentsSizeChanged(const QSize& newSize, const QSize& viewportSize)
+{
+ float minimumScale = WebCore::computeMinimumScaleFactorForContentContained(m_rawAttributes, viewportSize, newSize);
+
+ if (!qFuzzyCompare(minimumScale, m_rawAttributes.minimumScale)) {
+ setCSSScaleBounds(minimumScale, m_rawAttributes.maximumScale);
+ emit m_viewportItem->experimental()->test()->viewportChanged();
+
+ if (!m_hadUserInteraction && !m_hasSuspendedContent) {
+ // Emits contentsScaleChanged();
+ setCSSScale(minimumScale);
+ }
+ }
+
+ // Emit for testing purposes, so that it can be verified that
+ // we didn't do scale adjustment.
+ emit m_viewportItem->experimental()->test()->contentsScaleCommitted();
+
+ setPageItemRectVisible(nearestValidBounds());
+}
+
void QtViewportInteractionEngine::setPageItemRectVisible(const QRectF& itemRect)
{
ASSERT_WITH_MESSAGE(m_suspendCount,
Modified: trunk/Source/WebKit2/UIProcess/qt/QtViewportInteractionEngine.h (118922 => 118923)
--- trunk/Source/WebKit2/UIProcess/qt/QtViewportInteractionEngine.h 2012-05-30 14:24:03 UTC (rev 118922)
+++ trunk/Source/WebKit2/UIProcess/qt/QtViewportInteractionEngine.h 2012-05-30 15:06:47 UTC (rev 118923)
@@ -26,6 +26,7 @@
#include <QtCore/QRectF>
#include <QtCore/QVariant>
#include <QtCore/QVariantAnimation>
+#include <WebCore/ViewportArguments.h>
#include <wtf/OwnPtr.h>
QT_BEGIN_NAMESPACE
@@ -91,6 +92,9 @@
void zoomToAreaGestureEnded(const QPointF& touchPoint, const QRectF& targetArea);
void focusEditableArea(const QRectF& caretArea, const QRectF& targetArea);
+ void viewportAttributesChanged(const WebCore::ViewportAttributes&);
+ void pageContentsSizeChanged(const QSize& newSize, const QSize& viewportSize);
+
Q_SIGNALS:
void contentSuspendRequested();
void contentResumeRequested();
@@ -126,6 +130,8 @@
QRectF computePosRangeForPageItemAtScale(qreal itemScale) const;
void scaleContent(const QPointF& centerInCSSCoordinates, qreal cssScale);
+ WebCore::ViewportAttributes m_rawAttributes;
+
bool m_allowsUserScaling;
qreal m_minimumScale;
qreal m_maximumScale;