diff options
author | Simon Hausmann <simon.hausmann@nokia.com> | 2012-01-11 10:03:25 +0100 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@nokia.com> | 2012-01-11 10:03:25 +0100 |
commit | d11f84f5b5cdc0d92a08af01b13472fdd5f9acb9 (patch) | |
tree | b318cf594dc1da2fa48224005945c9157f35bb41 /Source/WebKit2/UIProcess/qt/QtViewportInteractionEngine.cpp | |
parent | 6300a96eca9f152b379f1bcf3d9efdc5572d989a (diff) | |
download | qtwebkit-d11f84f5b5cdc0d92a08af01b13472fdd5f9acb9.tar.gz |
Imported WebKit commit 75bb2fc5882d2e1b3d5572c2961507996cbca5e3 (http://svn.webkit.org/repository/webkit/trunk@104681)
Diffstat (limited to 'Source/WebKit2/UIProcess/qt/QtViewportInteractionEngine.cpp')
-rw-r--r-- | Source/WebKit2/UIProcess/qt/QtViewportInteractionEngine.cpp | 64 |
1 files changed, 33 insertions, 31 deletions
diff --git a/Source/WebKit2/UIProcess/qt/QtViewportInteractionEngine.cpp b/Source/WebKit2/UIProcess/qt/QtViewportInteractionEngine.cpp index 788349ae0..d12eb0bbd 100644 --- a/Source/WebKit2/UIProcess/qt/QtViewportInteractionEngine.cpp +++ b/Source/WebKit2/UIProcess/qt/QtViewportInteractionEngine.cpp @@ -23,10 +23,13 @@ #include "QtViewportInteractionEngine.h" #include "PassOwnPtr.h" +#include "qquickwebpage_p.h" +#include "qquickwebview_p.h" #include <QPointF> #include <QScrollEvent> #include <QScrollPrepareEvent> #include <QScrollerProperties> +#include <QTransform> #include <QWheelEvent> #include <QtQuick/qquickitem.h> @@ -111,7 +114,7 @@ inline QRectF QtViewportInteractionEngine::itemRectFromCSS(const QRectF& cssRect return itemRect; } -QtViewportInteractionEngine::QtViewportInteractionEngine(const QQuickItem* viewport, QQuickItem* content) +QtViewportInteractionEngine::QtViewportInteractionEngine(const QQuickWebView* viewport, QQuickWebPage* content) : m_viewport(viewport) , m_content(content) , m_suspendCount(0) @@ -174,7 +177,7 @@ void QtViewportInteractionEngine::setItemRectVisible(const QRectF& itemRect) qreal itemScale = m_viewport->width() / itemRect.width(); - m_content->setScale(itemScale); + m_content->setContentScale(itemScale); // We need to animate the content but the position represents the viewport hence we need to invert the position here. // To animate the position together with the scale we multiply the position with the current scale; @@ -183,7 +186,7 @@ void QtViewportInteractionEngine::setItemRectVisible(const QRectF& itemRect) bool QtViewportInteractionEngine::animateItemRectVisible(const QRectF& itemRect) { - QRectF currentItemRectVisible = m_content->mapRectFromItem(m_viewport, m_viewport->boundingRect()); + QRectF currentItemRectVisible = m_viewport->mapRectToWebContent(m_viewport->boundingRect()); if (itemRect == currentItemRectVisible) return false; @@ -238,7 +241,7 @@ bool QtViewportInteractionEngine::event(QEvent* event) QScrollPrepareEvent* prepareEvent = static_cast<QScrollPrepareEvent*>(event); const QRectF viewportRect = m_viewport->boundingRect(); const QRectF contentRect = m_viewport->mapRectFromItem(m_content, m_content->boundingRect()); - const QRectF posRange = computePosRangeForItemAtScale(m_content->scale()); + const QRectF posRange = computePosRangeForItemAtScale(m_content->contentScale()); prepareEvent->setContentPosRange(posRange); prepareEvent->setViewportSize(viewportRect.size()); @@ -251,11 +254,11 @@ bool QtViewportInteractionEngine::event(QEvent* event) QScrollEvent* scrollEvent = static_cast<QScrollEvent*>(event); QPointF newPos = -scrollEvent->contentPos() - scrollEvent->overshootDistance(); if (m_content->pos() != newPos) { - QPointF currentPosInContentCoordinates = m_content->mapToItem(m_content->parentItem(), m_content->pos()); - QPointF newPosInContentCoordinates = m_content->mapToItem(m_content->parentItem(), newPos); + QPointF currentPosInCSSCoordinates = m_viewport->mapToWebContent(m_content->pos()); + QPointF newPosInCSSCoordinates = m_viewport->mapToWebContent(newPos); // This must be emitted before viewportUpdateRequested so that the web process knows where to look for tiles. - emit viewportTrajectoryVectorChanged(currentPosInContentCoordinates- newPosInContentCoordinates); + emit viewportTrajectoryVectorChanged(currentPosInCSSCoordinates - newPosInCSSCoordinates); m_content->setPos(newPos); } return true; @@ -297,7 +300,7 @@ void QtViewportInteractionEngine::wheelEvent(QWheelEvent* ev) else newPos.ry() += delta; - QRectF endPosRange = computePosRangeForItemAtScale(m_content->scale()); + QRectF endPosRange = computePosRangeForItemAtScale(m_content->contentScale()); m_content->setPos(-boundPosition(endPosRange.topLeft(), newPos, endPosRange.bottomRight())); } @@ -307,7 +310,7 @@ void QtViewportInteractionEngine::pagePositionRequest(const QPoint& pagePosition if (m_suspendCount) return; - qreal endItemScale = m_content->scale(); // Stay at same scale. + qreal endItemScale = m_content->contentScale(); // Stay at same scale. QRectF endPosRange = computePosRangeForItemAtScale(endItemScale); QPointF endPosition = boundPosition(endPosRange.topLeft(), pagePosition * endItemScale, endPosRange.bottomRight()); @@ -319,7 +322,7 @@ void QtViewportInteractionEngine::pagePositionRequest(const QPoint& pagePosition QRectF QtViewportInteractionEngine::computePosRangeForItemAtScale(qreal itemScale) const { - const QSizeF contentItemSize = m_content->boundingRect().size() * itemScale; + const QSizeF contentItemSize = m_content->contentSize() * itemScale; const QSizeF viewportItemSize = m_viewport->boundingRect().size(); const qreal horizontalRange = contentItemSize.width() - viewportItemSize.width(); @@ -406,7 +409,7 @@ bool QtViewportInteractionEngine::ensureContentWithinViewportBoundary(bool immed const QRectF viewportRect = m_viewport->boundingRect(); QPointF viewportHotspot = viewportRect.center(); - QPointF endPosition = m_content->mapFromItem(m_viewport, viewportHotspot) * endItemScale - viewportHotspot; + QPointF endPosition = m_viewport->mapToWebContent(viewportHotspot) * endItemScale - viewportHotspot; QRectF endPosRange = computePosRangeForItemAtScale(endItemScale); endPosition = boundPosition(endPosRange.topLeft(), endPosition, endPosRange.bottomRight()); @@ -441,7 +444,7 @@ void QtViewportInteractionEngine::applyConstraints(const Constraints& constraint if (!m_hadUserInteraction) { qreal initialScale = innerBoundedCSSScale(m_constraints.initialScale); - m_content->setScale(itemScaleFromCSS(initialScale)); + m_content->setContentScale(itemScaleFromCSS(initialScale)); } // If the web app changes successively changes the viewport on purpose @@ -451,7 +454,7 @@ void QtViewportInteractionEngine::applyConstraints(const Constraints& constraint qreal QtViewportInteractionEngine::currentCSSScale() { - return cssScaleFromItem(m_content->scale()); + return cssScaleFromItem(m_content->contentScale()); } bool QtViewportInteractionEngine::scrollAnimationActive() const @@ -473,15 +476,15 @@ bool QtViewportInteractionEngine::panGestureActive() const return scroller->state() == QScroller::Pressed || scroller->state() == QScroller::Dragging; } -void QtViewportInteractionEngine::panGestureStarted(const QPointF& touchPoint, qint64 eventTimestampMillis) +void QtViewportInteractionEngine::panGestureStarted(const QPointF& viewportTouchPoint, qint64 eventTimestampMillis) { m_hadUserInteraction = true; - scroller()->handleInput(QScroller::InputPress, m_viewport->mapFromItem(m_content, touchPoint), eventTimestampMillis); + scroller()->handleInput(QScroller::InputPress, viewportTouchPoint, eventTimestampMillis); } -void QtViewportInteractionEngine::panGestureRequestUpdate(const QPointF& touchPoint, qint64 eventTimestampMillis) +void QtViewportInteractionEngine::panGestureRequestUpdate(const QPointF& viewportTouchPoint, qint64 eventTimestampMillis) { - scroller()->handleInput(QScroller::InputMove, m_viewport->mapFromItem(m_content, touchPoint), eventTimestampMillis); + scroller()->handleInput(QScroller::InputMove, viewportTouchPoint, eventTimestampMillis); } void QtViewportInteractionEngine::panGestureCancelled() @@ -491,9 +494,9 @@ void QtViewportInteractionEngine::panGestureCancelled() scroller()->stop(); } -void QtViewportInteractionEngine::panGestureEnded(const QPointF& touchPoint, qint64 eventTimestampMillis) +void QtViewportInteractionEngine::panGestureEnded(const QPointF& viewportTouchPoint, qint64 eventTimestampMillis) { - scroller()->handleInput(QScroller::InputRelease, m_viewport->mapFromItem(m_content, touchPoint), eventTimestampMillis); + scroller()->handleInput(QScroller::InputRelease, viewportTouchPoint, eventTimestampMillis); } bool QtViewportInteractionEngine::scaleAnimationActive() const @@ -512,7 +515,7 @@ bool QtViewportInteractionEngine::pinchGestureActive() const return m_pinchStartScale > 0; } -void QtViewportInteractionEngine::pinchGestureStarted(const QPointF& pinchCenterInContentCoordinates) +void QtViewportInteractionEngine::pinchGestureStarted(const QPointF& pinchCenterInViewportCoordinates) { ASSERT(!m_suspendCount); @@ -523,14 +526,14 @@ void QtViewportInteractionEngine::pinchGestureStarted(const QPointF& pinchCenter m_scaleUpdateDeferrer = adoptPtr(new ViewportUpdateDeferrer(this)); - m_lastPinchCenterInViewportCoordinates = m_viewport->mapFromItem(m_content, pinchCenterInContentCoordinates); - m_pinchStartScale = m_content->scale(); + m_lastPinchCenterInViewportCoordinates = pinchCenterInViewportCoordinates; + m_pinchStartScale = m_content->contentScale(); // Reset the tiling look-ahead vector so that tiles all around the viewport will be requested on pinch-end. emit viewportTrajectoryVectorChanged(QPointF()); } -void QtViewportInteractionEngine::pinchGestureRequestUpdate(const QPointF& pinchCenterInContentCoordinates, qreal totalScaleFactor) +void QtViewportInteractionEngine::pinchGestureRequestUpdate(const QPointF& pinchCenterInViewportCoordinates, qreal totalScaleFactor) { ASSERT(m_suspendCount); @@ -544,12 +547,11 @@ void QtViewportInteractionEngine::pinchGestureRequestUpdate(const QPointF& pinch // Allow zooming out beyond mimimum scale on pages that do not explicitly disallow it. const qreal targetCSSScale = outerBoundedCSSScale(cssScale); - QPointF pinchCenterInViewportCoordinates = m_viewport->mapFromItem(m_content, pinchCenterInContentCoordinates); - - scaleContent(pinchCenterInContentCoordinates, targetCSSScale); + scaleContent(m_viewport->mapToWebContent(pinchCenterInViewportCoordinates), targetCSSScale); const QPointF positionDiff = pinchCenterInViewportCoordinates - m_lastPinchCenterInViewportCoordinates; m_lastPinchCenterInViewportCoordinates = pinchCenterInViewportCoordinates; + m_content->setPos(m_content->pos() + positionDiff); } @@ -576,12 +578,12 @@ void QtViewportInteractionEngine::itemSizeChanged() ensureContentWithinViewportBoundary(); } -void QtViewportInteractionEngine::scaleContent(const QPointF& centerInContentCoordinates, qreal cssScale) +void QtViewportInteractionEngine::scaleContent(const QPointF& centerInCSSCoordinates, qreal cssScale) { - QPointF oldPinchCenterOnParent = m_content->mapToItem(m_content->parentItem(), centerInContentCoordinates); - m_content->setScale(itemScaleFromCSS(cssScale)); - QPointF newPinchCenterOnParent = m_content->mapToItem(m_content->parentItem(), centerInContentCoordinates); - m_content->setPos(m_content->pos() - (newPinchCenterOnParent - oldPinchCenterOnParent)); + QPointF oldPinchCenterOnViewport = m_viewport->mapFromWebContent(centerInCSSCoordinates); + m_content->setContentScale(itemScaleFromCSS(cssScale)); + QPointF newPinchCenterOnViewport = m_viewport->mapFromWebContent(centerInCSSCoordinates); + m_content->setPos(m_content->pos() - (newPinchCenterOnViewport - oldPinchCenterOnViewport)); } #include "moc_QtViewportInteractionEngine.cpp" |