Changeset 99273 in webkit
- Timestamp:
- Nov 4, 2011, 5:28:18 AM (15 years ago)
- Location:
- trunk/Source/WebKit2
- Files:
-
- 11 edited
-
ChangeLog (modified) (1 diff)
-
UIProcess/API/qt/qdesktopwebview_p.h (modified) (1 diff)
-
UIProcess/API/qt/qtouchwebview.cpp (modified) (1 diff)
-
UIProcess/API/qt/qtouchwebview_p.h (modified) (1 diff)
-
UIProcess/qt/QtTouchViewInterface.cpp (modified) (1 diff)
-
UIProcess/qt/QtTouchViewInterface.h (modified) (1 diff)
-
UIProcess/qt/QtViewInterface.h (modified) (1 diff)
-
UIProcess/qt/QtViewportInteractionEngine.cpp (modified) (7 diffs)
-
UIProcess/qt/QtViewportInteractionEngine.h (modified) (2 diffs)
-
UIProcess/qt/QtWebPageProxy.cpp (modified) (1 diff)
-
UIProcess/qt/QtWebPageProxy.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit2/ChangeLog
r99256 r99273 1 2011-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 1 34 2011-11-03 Mark Hahnenberg <mhahnenberg@apple.com> 2 35 -
trunk/Source/WebKit2/UIProcess/API/qt/qdesktopwebview_p.h
r99178 r99273 52 52 virtual QSize drawingAreaSize(); 53 53 virtual void contentSizeChanged(const QSize&); 54 virtual void scrollPositionRequested(const QPoint& pos) { } 54 55 55 56 virtual bool isActive(); -
trunk/Source/WebKit2/UIProcess/API/qt/qtouchwebview.cpp
r99199 r99273 45 45 { 46 46 interactionEngine->reset(); 47 } 48 49 void QTouchWebViewPrivate::scrollPositionRequested(const QPoint& pos) 50 { 51 interactionEngine->pagePositionRequest(pos); 47 52 } 48 53 -
trunk/Source/WebKit2/UIProcess/API/qt/qtouchwebview_p.h
r99058 r99273 38 38 39 39 void loadDidCommit(); 40 void scrollPositionRequested(const QPoint& pos); 40 41 void _q_viewportUpdated(); 41 42 void _q_viewportTrajectoryVectorChanged(const QPointF&); -
trunk/Source/WebKit2/UIProcess/qt/QtTouchViewInterface.cpp
r98973 r99273 64 64 m_pageView->setWidth(newSize.width()); 65 65 m_pageView->setHeight(newSize.height()); 66 } 67 68 void QtTouchViewInterface::scrollPositionRequested(const QPoint& pos) 69 { 70 m_viewportView->d_func()->scrollPositionRequested(pos); 66 71 } 67 72 -
trunk/Source/WebKit2/UIProcess/qt/QtTouchViewInterface.h
r99178 r99273 48 48 virtual QSize drawingAreaSize(); 49 49 virtual void contentSizeChanged(const QSize&); 50 virtual void scrollPositionRequested(const QPoint& pos); 50 51 51 52 virtual bool isActive(); -
trunk/Source/WebKit2/UIProcess/qt/QtViewInterface.h
r99178 r99273 59 59 virtual QSize drawingAreaSize() = 0; 60 60 virtual void contentSizeChanged(const QSize&) = 0; 61 virtual void scrollPositionRequested(const QPoint& pos) = 0; 61 62 62 63 virtual bool isActive() = 0; -
trunk/Source/WebKit2/UIProcess/qt/QtViewportInteractionEngine.cpp
r99197 r99273 166 166 const QRectF viewportRect = m_viewport->boundingRect(); 167 167 const QRectF contentRect = m_viewport->mapRectFromItem(m_content, m_content->boundingRect()); 168 const QRectF posRange = computePosRangeForItem Scale(m_content->scale());168 const QRectF posRange = computePosRangeForItemAtScale(m_content->scale()); 169 169 prepareEvent->setContentPosRange(posRange); 170 170 prepareEvent->setViewportSize(viewportRect.size()); … … 196 196 } 197 197 198 QRectF QtViewportInteractionEngine::computePosRangeForItemScale(qreal itemScale) const 198 static 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 204 void 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 220 QRectF QtViewportInteractionEngine::computePosRangeForItemAtScale(qreal itemScale) const 199 221 { 200 222 const QSizeF contentItemSize = m_content->boundingRect().size() * itemScale; … … 207 229 } 208 230 209 void QtViewportInteractionEngine:: animateContentIntoBoundariesIfNeeded()231 void QtViewportInteractionEngine::ensureContentWithinViewportBoundary() 210 232 { 211 233 if (panAnimationActive() || pinchAnimationActive()) … … 223 245 const QPointF viewportHotspot = viewportRect.center(); 224 246 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()); 236 251 237 252 QRectF startVisibleContentRect = m_content->mapRectFromItem(m_viewport, viewportRect); 238 QRectF endVisibleContentRect(endPosition , viewportRect.size() / endItemScale);253 QRectF endVisibleContentRect(endPosition / endItemScale, viewportRect.size() / endItemScale); 239 254 240 255 if (endVisibleContentRect == startVisibleContentRect) … … 285 300 m_constraints = constraints; 286 301 287 animateContentIntoBoundariesIfNeeded();302 ensureContentWithinViewportBoundary(); 288 303 } 289 304 … … 371 386 m_pinchViewportUpdateDeferrer.clear(); 372 387 // FIXME: resume the engine after the animation. 373 animateContentIntoBoundariesIfNeeded();388 ensureContentWithinViewportBoundary(); 374 389 } 375 390 … … 380 395 381 396 ViewportUpdateGuard guard(this); 382 383 animateContentIntoBoundariesIfNeeded(); 397 ensureContentWithinViewportBoundary(); 384 398 } 385 399 -
trunk/Source/WebKit2/UIProcess/qt/QtViewportInteractionEngine.h
r99065 r99273 67 67 void setConstraints(const Constraints&); 68 68 69 void pagePositionRequest(const QPoint& pos); 70 69 71 bool panAnimationActive() const; 70 72 void panGestureStarted(const QPointF& touchPoint, qint64 eventTimestampMillis); … … 94 96 qreal outerBoundedCSSScale(qreal); 95 97 96 QRectF computePosRangeForItem Scale(qreal itemScale) const;97 void animateContentIntoBoundariesIfNeeded();98 QRectF computePosRangeForItemAtScale(qreal itemScale) const; 99 void ensureContentWithinViewportBoundary(); 98 100 99 101 void scaleContent(const QPointF& centerInContentCoordinates, qreal scale); -
trunk/Source/WebKit2/UIProcess/qt/QtWebPageProxy.cpp
r99178 r99273 252 252 } 253 253 254 void QtWebPageProxy::pageDidRequestScroll(const IntPoint& po int)255 { 256 emit scrollRequested(point.x(), point.y());254 void QtWebPageProxy::pageDidRequestScroll(const IntPoint& pos) 255 { 256 m_viewInterface->scrollPositionRequested(pos); 257 257 } 258 258 -
trunk/Source/WebKit2/UIProcess/qt/QtWebPageProxy.h
r99178 r99273 187 187 188 188 public: 189 Q_SIGNAL void scrollRequested(int dx, int dy);190 189 Q_SIGNAL void zoomableAreaFound(const QRect&); 191 190 Q_SIGNAL void updateNavigationState();
Note:
See TracChangeset
for help on using the changeset viewer.