⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 99273 in webkit


Ignore:
Timestamp:
Nov 4, 2011, 5:28:18 AM (15 years ago)
Author:
kenneth@webkit.org
Message:

[Qt] Support programmatic scrolling with the QTouchWebView

Reviewed by Simon Hausmann.

As more code can be shared between the programmatic scrolling and the
method for ensuring that the contents are within valid bounds, this
patch includes a bit of refactoring as well.

  • UIProcess/API/qt/qdesktopwebview_p.h:

(QDesktopWebViewPrivate::scrollPositionRequested):

  • UIProcess/API/qt/qtouchwebview.cpp:

(QTouchWebViewPrivate::scrollPositionRequested):

  • UIProcess/API/qt/qtouchwebview_p.h:
  • UIProcess/qt/QtTouchViewInterface.cpp:

(WebKit::QtTouchViewInterface::scrollPositionRequested):

  • UIProcess/qt/QtTouchViewInterface.h:
  • UIProcess/qt/QtViewInterface.h:
  • UIProcess/qt/QtViewportInteractionEngine.cpp:

(WebKit::QtViewportInteractionEngine::event):
(WebKit::boundPosition):
(WebKit::QtViewportInteractionEngine::pagePositionRequest):
(WebKit::QtViewportInteractionEngine::computePosRangeForItemAtScale):
(WebKit::QtViewportInteractionEngine::ensureContentWithinViewportBoundary):
(WebKit::QtViewportInteractionEngine::setConstraints):
(WebKit::QtViewportInteractionEngine::pinchGestureEnded):
(WebKit::QtViewportInteractionEngine::contentViewportChanged):

  • UIProcess/qt/QtViewportInteractionEngine.h:
  • UIProcess/qt/QtWebPageProxy.cpp:

(QtWebPageProxy::pageDidRequestScroll):

  • UIProcess/qt/QtWebPageProxy.h:
Location:
trunk/Source/WebKit2
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r99256 r99273  
     12011-11-04  Kenneth Rohde Christiansen  <kenneth@webkit.org>
     2
     3        [Qt] Support programmatic scrolling with the QTouchWebView
     4
     5        Reviewed by Simon Hausmann.
     6
     7        As more code can be shared between the programmatic scrolling and the
     8        method for ensuring that the contents are within valid bounds, this
     9        patch includes a bit of refactoring as well.
     10
     11        * UIProcess/API/qt/qdesktopwebview_p.h:
     12        (QDesktopWebViewPrivate::scrollPositionRequested):
     13        * UIProcess/API/qt/qtouchwebview.cpp:
     14        (QTouchWebViewPrivate::scrollPositionRequested):
     15        * UIProcess/API/qt/qtouchwebview_p.h:
     16        * UIProcess/qt/QtTouchViewInterface.cpp:
     17        (WebKit::QtTouchViewInterface::scrollPositionRequested):
     18        * UIProcess/qt/QtTouchViewInterface.h:
     19        * UIProcess/qt/QtViewInterface.h:
     20        * UIProcess/qt/QtViewportInteractionEngine.cpp:
     21        (WebKit::QtViewportInteractionEngine::event):
     22        (WebKit::boundPosition):
     23        (WebKit::QtViewportInteractionEngine::pagePositionRequest):
     24        (WebKit::QtViewportInteractionEngine::computePosRangeForItemAtScale):
     25        (WebKit::QtViewportInteractionEngine::ensureContentWithinViewportBoundary):
     26        (WebKit::QtViewportInteractionEngine::setConstraints):
     27        (WebKit::QtViewportInteractionEngine::pinchGestureEnded):
     28        (WebKit::QtViewportInteractionEngine::contentViewportChanged):
     29        * UIProcess/qt/QtViewportInteractionEngine.h:
     30        * UIProcess/qt/QtWebPageProxy.cpp:
     31        (QtWebPageProxy::pageDidRequestScroll):
     32        * UIProcess/qt/QtWebPageProxy.h:
     33
    1342011-11-03  Mark Hahnenberg  <mhahnenberg@apple.com>
    235
  • trunk/Source/WebKit2/UIProcess/API/qt/qdesktopwebview_p.h

    r99178 r99273  
    5252    virtual QSize drawingAreaSize();
    5353    virtual void contentSizeChanged(const QSize&);
     54    virtual void scrollPositionRequested(const QPoint& pos) { }
    5455
    5556    virtual bool isActive();
  • trunk/Source/WebKit2/UIProcess/API/qt/qtouchwebview.cpp

    r99199 r99273  
    4545{
    4646    interactionEngine->reset();
     47}
     48
     49void QTouchWebViewPrivate::scrollPositionRequested(const QPoint& pos)
     50{
     51    interactionEngine->pagePositionRequest(pos);
    4752}
    4853
  • trunk/Source/WebKit2/UIProcess/API/qt/qtouchwebview_p.h

    r99058 r99273  
    3838
    3939    void loadDidCommit();
     40    void scrollPositionRequested(const QPoint& pos);
    4041    void _q_viewportUpdated();
    4142    void _q_viewportTrajectoryVectorChanged(const QPointF&);
  • trunk/Source/WebKit2/UIProcess/qt/QtTouchViewInterface.cpp

    r98973 r99273  
    6464    m_pageView->setWidth(newSize.width());
    6565    m_pageView->setHeight(newSize.height());
     66}
     67
     68void QtTouchViewInterface::scrollPositionRequested(const QPoint& pos)
     69{
     70    m_viewportView->d_func()->scrollPositionRequested(pos);
    6671}
    6772
  • trunk/Source/WebKit2/UIProcess/qt/QtTouchViewInterface.h

    r99178 r99273  
    4848    virtual QSize drawingAreaSize();
    4949    virtual void contentSizeChanged(const QSize&);
     50    virtual void scrollPositionRequested(const QPoint& pos);
    5051
    5152    virtual bool isActive();
  • trunk/Source/WebKit2/UIProcess/qt/QtViewInterface.h

    r99178 r99273  
    5959    virtual QSize drawingAreaSize() = 0;
    6060    virtual void contentSizeChanged(const QSize&) = 0;
     61    virtual void scrollPositionRequested(const QPoint& pos) = 0;
    6162
    6263    virtual bool isActive() = 0;
  • trunk/Source/WebKit2/UIProcess/qt/QtViewportInteractionEngine.cpp

    r99197 r99273  
    166166        const QRectF viewportRect = m_viewport->boundingRect();
    167167        const QRectF contentRect = m_viewport->mapRectFromItem(m_content, m_content->boundingRect());
    168         const QRectF posRange = computePosRangeForItemScale(m_content->scale());
     168        const QRectF posRange = computePosRangeForItemAtScale(m_content->scale());
    169169        prepareEvent->setContentPosRange(posRange);
    170170        prepareEvent->setViewportSize(viewportRect.size());
     
    196196}
    197197
    198 QRectF QtViewportInteractionEngine::computePosRangeForItemScale(qreal itemScale) const
     198static inline QPointF boundPosition(const QPointF minPosition, const QPointF& position, const QPointF& maxPosition)
     199{
     200    return QPointF(qBound(minPosition.x(), position.x(), maxPosition.x()),
     201                   qBound(minPosition.y(), position.y(), maxPosition.y()));
     202}
     203
     204void QtViewportInteractionEngine::pagePositionRequest(const QPoint& pagePosition)
     205{
     206    // FIXME: Assert when we are suspending properly.
     207    if (panAnimationActive() || pinchAnimationActive() || m_pinchViewportUpdateDeferrer)
     208        return; // Ignore.
     209
     210    qreal endItemScale = m_content->scale(); // Stay at same scale.
     211
     212    QRectF endPosRange = computePosRangeForItemAtScale(endItemScale);
     213    QPointF endPosition = boundPosition(endPosRange.topLeft(), pagePosition * endItemScale, endPosRange.bottomRight());
     214
     215    QRectF endVisibleContentRect(endPosition / endItemScale, m_viewport->boundingRect().size() / endItemScale);
     216
     217    updateVisibleRect(endVisibleContentRect);
     218}
     219
     220QRectF QtViewportInteractionEngine::computePosRangeForItemAtScale(qreal itemScale) const
    199221{
    200222    const QSizeF contentItemSize = m_content->boundingRect().size() * itemScale;
     
    207229}
    208230
    209 void QtViewportInteractionEngine::animateContentIntoBoundariesIfNeeded()
     231void QtViewportInteractionEngine::ensureContentWithinViewportBoundary()
    210232{
    211233    if (panAnimationActive() || pinchAnimationActive())
     
    223245    const QPointF viewportHotspot = viewportRect.center();
    224246
    225     QPointF endPosition = m_content->mapFromItem(m_viewport, viewportHotspot) - viewportHotspot / endItemScale;
    226 
    227     QRectF endPosRange = computePosRangeForItemScale(endItemScale);
    228     // Map from valid bounds in viewport coords to end contents coords.
    229     endPosRange.setSize(endPosRange.size() / endItemScale);
    230 
    231     QPointF minValue = endPosRange.topLeft();
    232     QPointF maxValue = endPosRange.bottomRight();
    233 
    234     endPosition.setX(qBound(minValue.x(), endPosition.x(), maxValue.x()));
    235     endPosition.setY(qBound(minValue.y(), endPosition.y(), maxValue.y()));
     247    QPointF endPosition = m_content->mapFromItem(m_viewport, viewportHotspot) * endItemScale - viewportHotspot;
     248
     249    QRectF endPosRange = computePosRangeForItemAtScale(endItemScale);
     250    endPosition = boundPosition(endPosRange.topLeft(), endPosition, endPosRange.bottomRight());
    236251
    237252    QRectF startVisibleContentRect = m_content->mapRectFromItem(m_viewport, viewportRect);
    238     QRectF endVisibleContentRect(endPosition, viewportRect.size() / endItemScale);
     253    QRectF endVisibleContentRect(endPosition / endItemScale, viewportRect.size() / endItemScale);
    239254
    240255    if (endVisibleContentRect == startVisibleContentRect)
     
    285300    m_constraints = constraints;
    286301
    287     animateContentIntoBoundariesIfNeeded();
     302    ensureContentWithinViewportBoundary();
    288303}
    289304
     
    371386    m_pinchViewportUpdateDeferrer.clear();
    372387    // FIXME: resume the engine after the animation.
    373     animateContentIntoBoundariesIfNeeded();
     388    ensureContentWithinViewportBoundary();
    374389}
    375390
     
    380395
    381396    ViewportUpdateGuard guard(this);
    382 
    383     animateContentIntoBoundariesIfNeeded();
     397    ensureContentWithinViewportBoundary();
    384398}
    385399
  • trunk/Source/WebKit2/UIProcess/qt/QtViewportInteractionEngine.h

    r99065 r99273  
    6767    void setConstraints(const Constraints&);
    6868
     69    void pagePositionRequest(const QPoint& pos);
     70
    6971    bool panAnimationActive() const;
    7072    void panGestureStarted(const QPointF& touchPoint, qint64 eventTimestampMillis);
     
    9496    qreal outerBoundedCSSScale(qreal);
    9597
    96     QRectF computePosRangeForItemScale(qreal itemScale) const;
    97     void animateContentIntoBoundariesIfNeeded();
     98    QRectF computePosRangeForItemAtScale(qreal itemScale) const;
     99    void ensureContentWithinViewportBoundary();
    98100
    99101    void scaleContent(const QPointF& centerInContentCoordinates, qreal scale);
  • trunk/Source/WebKit2/UIProcess/qt/QtWebPageProxy.cpp

    r99178 r99273  
    252252}
    253253
    254 void QtWebPageProxy::pageDidRequestScroll(const IntPoint& point)
    255 {
    256     emit scrollRequested(point.x(), point.y());
     254void QtWebPageProxy::pageDidRequestScroll(const IntPoint& pos)
     255{
     256    m_viewInterface->scrollPositionRequested(pos);
    257257}
    258258
  • trunk/Source/WebKit2/UIProcess/qt/QtWebPageProxy.h

    r99178 r99273  
    187187
    188188public:
    189     Q_SIGNAL void scrollRequested(int dx, int dy);
    190189    Q_SIGNAL void zoomableAreaFound(const QRect&);
    191190    Q_SIGNAL void updateNavigationState();
Note: See TracChangeset for help on using the changeset viewer.