Changeset 99774 in webkit
- Timestamp:
- Nov 9, 2011, 3:47:45 PM (15 years ago)
- Location:
- trunk/Source
- Files:
-
- 31 edited
-
WebCore/ChangeLog (modified) (1 diff)
-
WebCore/platform/graphics/chromium/GraphicsLayerChromium.cpp (modified) (1 diff)
-
WebCore/platform/graphics/chromium/GraphicsLayerChromium.h (modified) (1 diff)
-
WebCore/platform/graphics/chromium/LayerChromium.cpp (modified) (4 diffs)
-
WebCore/platform/graphics/chromium/LayerChromium.h (modified) (4 diffs)
-
WebCore/platform/graphics/chromium/LayerRendererChromium.cpp (modified) (1 diff)
-
WebCore/platform/graphics/chromium/LayerRendererChromium.h (modified) (2 diffs)
-
WebCore/platform/graphics/chromium/NonCompositedContentHost.cpp (modified) (2 diffs)
-
WebCore/platform/graphics/chromium/NonCompositedContentHost.h (modified) (1 diff)
-
WebCore/platform/graphics/chromium/cc/CCLayerImpl.cpp (modified) (1 diff)
-
WebCore/platform/graphics/chromium/cc/CCLayerImpl.h (modified) (3 diffs)
-
WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp (modified) (4 diffs)
-
WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.h (modified) (4 diffs)
-
WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.h (modified) (1 diff)
-
WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp (modified) (5 diffs)
-
WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.h (modified) (3 diffs)
-
WebCore/platform/graphics/chromium/cc/CCScrollController.h (modified) (1 diff)
-
WebCore/platform/graphics/chromium/cc/CCSingleThreadProxy.cpp (modified) (1 diff)
-
WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp (modified) (2 diffs)
-
WebCore/platform/graphics/chromium/cc/CCThreadProxy.h (modified) (1 diff)
-
WebKit/chromium/ChangeLog (modified) (1 diff)
-
WebKit/chromium/public/WebLayerTreeViewClient.h (modified) (1 diff)
-
WebKit/chromium/public/WebView.h (modified) (1 diff)
-
WebKit/chromium/src/WebCompositorImpl.cpp (modified) (1 diff)
-
WebKit/chromium/src/WebLayerTreeViewImpl.cpp (modified) (1 diff)
-
WebKit/chromium/src/WebLayerTreeViewImpl.h (modified) (1 diff)
-
WebKit/chromium/src/WebViewImpl.cpp (modified) (4 diffs)
-
WebKit/chromium/src/WebViewImpl.h (modified) (2 diffs)
-
WebKit/chromium/tests/CCLayerTreeHostImplTest.cpp (modified) (6 diffs)
-
WebKit/chromium/tests/CCLayerTreeHostTest.cpp (modified) (8 diffs)
-
WebKit/chromium/tests/LayerChromiumTest.cpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r99766 r99774 1 2011-11-09 Alexandre Elias <aelias@google.com> 2 3 [chromium] Add draw-time scale delta to compositor thread 4 https://bugs.webkit.org/show_bug.cgi?id=71595 5 6 Reviewed by James Robinson. 7 8 There are two magnify values: 9 1. The WebKit-side pageScale value corresponding to the resolution of 10 the painted content. 11 2. The Impl-side-only scaleDelta value representing the additional 12 degree of current magnification, applied as a draw transform. WebKit 13 is never explicitly aware of this value and the only way to change it 14 currently is via pinch events (and in the future, double-tap/etc 15 events). At the end of a pinch zoom, we multiply pageScale * 16 scaleDelta and tell WebKit to use it as the new pageScale. 17 18 Scroll offsets and max-extents are maintained in pageScale space. 19 When the scale changes, we need to take care to convert them to the 20 new scale and avoid getting them clamped to the extents at the wrong 21 scale. 22 23 I removed maxScrollPosition on the non-impl side because it makes no 24 sense to precompute it in the presence of an impl-side zoom. Replaced 25 with a simple 'bool m_scrollable'. 26 27 zoomAnimatorTransform is not used because it currently isn't in the 28 branch, and mostly doesn't behave the way we want anyway (it does most 29 things in WebKit thread). We will need to unify these later. 30 31 Also introduce deviceOrPageScaleFactorChanged() call which invalidates 32 layers. 33 34 No new tests (filed 71529 to remember to do it later). 35 36 * platform/graphics/chromium/GraphicsLayerChromium.cpp: 37 (WebCore::GraphicsLayerChromium::deviceOrPageScaleFactorChanged): 38 * platform/graphics/chromium/GraphicsLayerChromium.h: 39 * platform/graphics/chromium/LayerChromium.cpp: 40 (WebCore::LayerChromium::LayerChromium): 41 (WebCore::LayerChromium::setBounds): 42 (WebCore::LayerChromium::pushPropertiesTo): 43 * platform/graphics/chromium/LayerChromium.h: 44 (WebCore::LayerChromium::scrollable): 45 (WebCore::LayerChromium::setScrollable): 46 (WebCore::LayerChromium::pageScaleChanged): 47 * platform/graphics/chromium/LayerRendererChromium.cpp: 48 (WebCore::LayerRendererChromium::drawLayersInternal): 49 * platform/graphics/chromium/LayerRendererChromium.h: 50 (WebCore::LayerRendererChromium::setPageMagnifyTransform): 51 * platform/graphics/chromium/NonCompositedContentHost.cpp: 52 (WebCore::NonCompositedContentHost::setViewport): 53 * platform/graphics/chromium/NonCompositedContentHost.h: 54 (WebCore::NonCompositedContentHost::topLevelRootLayer): 55 * platform/graphics/chromium/cc/CCLayerImpl.cpp: 56 (WebCore::CCLayerImpl::CCLayerImpl): 57 * platform/graphics/chromium/cc/CCLayerImpl.h: 58 (WebCore::CCLayerImpl::scrollable): 59 (WebCore::CCLayerImpl::setScrollable): 60 * platform/graphics/chromium/cc/CCLayerTreeHost.cpp: 61 (WebCore::CCLayerTreeHost::CCLayerTreeHost): 62 (WebCore::CCLayerTreeHost::finishCommitOnImplThread): 63 (WebCore::CCLayerTreeHost::setPageScale): 64 (WebCore::CCLayerTreeHost::setPageScaleFactorLimits): 65 (WebCore::CCLayerTreeHost::applyScrollAndScale): 66 * platform/graphics/chromium/cc/CCLayerTreeHost.h: 67 (WebCore::CCLayerTreeHost::pageScale): 68 * platform/graphics/chromium/cc/CCLayerTreeHostCommon.h: 69 * platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp: 70 (WebCore::CCLayerTreeHostImpl::CCLayerTreeHostImpl): 71 (WebCore::CCLayerTreeHostImpl::commitComplete): 72 (WebCore::findScrollLayer): 73 (WebCore::CCLayerTreeHostImpl::setViewport): 74 (WebCore::CCLayerTreeHostImpl::setPageScale): 75 (WebCore::CCLayerTreeHostImpl::setScaleDelta): 76 (WebCore::CCLayerTreeHostImpl::setPageScaleFactorLimits): 77 (WebCore::CCLayerTreeHostImpl::updateMaxScrollPosition): 78 (WebCore::CCLayerTreeHostImpl::pinchGestureBegin): 79 (WebCore::CCLayerTreeHostImpl::pinchGestureUpdate): 80 (WebCore::CCLayerTreeHostImpl::pinchGestureEnd): 81 (WebCore::CCLayerTreeHostImpl::processScrollDeltas): 82 * platform/graphics/chromium/cc/CCLayerTreeHostImpl.h: 83 (WebCore::CCLayerTreeHostImpl::pageScale): 84 * platform/graphics/chromium/cc/CCScrollController.h: 85 * platform/graphics/chromium/cc/CCSingleThreadProxy.cpp: 86 (WebCore::CCSingleThreadProxy::doCommit): 87 * platform/graphics/chromium/cc/CCThreadProxy.cpp: 88 (WebCore::CCThreadProxy::createBeginFrameAndCommitTaskOnImplThread): 89 (WebCore::CCThreadProxy::beginFrameAndCommit): 90 * platform/graphics/chromium/cc/CCThreadProxy.h: 91 1 92 2011-11-09 Jay Civelli <jcivelli@chromium.org> 2 93 -
trunk/Source/WebCore/platform/graphics/chromium/GraphicsLayerChromium.cpp
r98471 r99774 671 671 } 672 672 673 void GraphicsLayerChromium::deviceOrPageScaleFactorChanged() 674 { 675 if (m_layer) 676 m_layer->pageScaleChanged(); 677 } 678 673 679 bool GraphicsLayerChromium::drawsContent() const 674 680 { -
trunk/Source/WebCore/platform/graphics/chromium/GraphicsLayerChromium.h
r95901 r99774 101 101 virtual void notifySyncRequired(); 102 102 103 virtual void deviceOrPageScaleFactorChanged(); 103 104 private: 104 105 void updateOpacityOnLayer(); -
trunk/Source/WebCore/platform/graphics/chromium/LayerChromium.cpp
r99327 r99774 59 59 , m_layerId(s_nextLayerId++) 60 60 , m_parent(0) 61 , m_scrollable(false) 61 62 , m_anchorPoint(0.5, 0.5) 62 63 , m_backgroundColor(0, 0, 0, 0) … … 73 74 , m_drawOpacity(0) 74 75 , m_targetRenderSurface(0) 76 , m_pageScaleDirty(false) 75 77 { 76 78 } … … 211 213 m_bounds = size; 212 214 213 if (firstResize )215 if (firstResize || m_pageScaleDirty) 214 216 setNeedsDisplay(FloatRect(0, 0, bounds().width(), bounds().height())); 215 217 else 216 218 setNeedsCommit(); 219 220 m_pageScaleDirty = false; 217 221 } 218 222 … … 288 292 layer->setIsNonCompositedContent(m_isNonCompositedContent); 289 293 layer->setMasksToBounds(m_masksToBounds); 290 layer->set MaxScrollPosition(m_maxScrollPosition);294 layer->setScrollable(m_scrollable); 291 295 layer->setName(m_name); 292 296 layer->setOpaque(m_opaque); -
trunk/Source/WebCore/platform/graphics/chromium/LayerChromium.h
r99327 r99774 132 132 void setScrollPosition(const IntPoint& scrollPosition) { m_scrollPosition = scrollPosition; } 133 133 134 const IntSize& maxScrollPosition() const {return m_maxScrollPosition; }135 void set MaxScrollPosition(const IntSize& maxScrollPosition) { m_maxScrollPosition = maxScrollPosition; }134 bool scrollable() const { return m_scrollable; } 135 void setScrollable(bool scrollable) { m_scrollable = true; setNeedsCommit(); } 136 136 137 137 IntSize scrollDelta() const { return IntSize(); } 138 139 bool scrollable() const { return !maxScrollPosition().isZero(); }140 138 141 139 bool doubleSided() const { return m_doubleSided; } … … 165 163 virtual void unreserveContentsTexture() { } 166 164 virtual void bindContentsTexture() { } 165 virtual void pageScaleChanged() { m_pageScaleDirty = true; } 167 166 virtual void protectVisibleTileTextures() { } 168 167 … … 253 252 IntRect m_visibleLayerRect; 254 253 IntPoint m_scrollPosition; 255 IntSize m_maxScrollPosition;254 bool m_scrollable; 256 255 FloatPoint m_position; 257 256 FloatPoint m_anchorPoint; … … 284 283 285 284 String m_name; 285 286 bool m_pageScaleDirty; 286 287 }; 287 288 -
trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp
r99327 r99774 362 362 m_defaultRenderSurface->clearLayerList(); 363 363 364 TransformationMatrix magnifyMatrix(m_pageMagnifyMatrix); 365 // TODO(aelias): These two transformations are redundant; unify zoomAnimator 366 // and impl-thread side matrix. 367 magnifyMatrix.multiply(m_zoomAnimatorTransform); 368 364 369 { 365 370 TRACE_EVENT("LayerRendererChromium::drawLayersInternal::calcDrawEtc", this, 0); 366 CCLayerTreeHostCommon::calculateDrawTransformsAndVisibility(rootDrawLayer, rootDrawLayer, m _zoomAnimatorTransform, m_zoomAnimatorTransform, renderSurfaceLayerList, m_defaultRenderSurface->layerList(), &m_layerSorter, m_capabilities.maxTextureSize);371 CCLayerTreeHostCommon::calculateDrawTransformsAndVisibility(rootDrawLayer, rootDrawLayer, magnifyMatrix, magnifyMatrix, renderSurfaceLayerList, m_defaultRenderSurface->layerList(), &m_layerSorter, m_capabilities.maxTextureSize); 367 372 } 368 373 -
trunk/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h
r98313 r99774 99 99 void viewportChanged(); 100 100 101 void setPageMagnifyTransform(const TransformationMatrix& pageMagnifyMatrix) { m_pageMagnifyMatrix = pageMagnifyMatrix; } 102 101 103 void drawLayers(); 102 104 … … 196 198 TransformationMatrix m_projectionMatrix; 197 199 TransformationMatrix m_windowMatrix; 200 TransformationMatrix m_pageMagnifyMatrix; 198 201 199 202 CCRenderSurface* m_currentRenderSurface; -
trunk/Source/WebCore/platform/graphics/chromium/NonCompositedContentHost.cpp
r99295 r99774 75 75 } 76 76 77 void NonCompositedContentHost::setViewport(const IntSize& viewportSize, const IntSize& contentsSize, const IntPoint& scrollPosition )77 void NonCompositedContentHost::setViewport(const IntSize& viewportSize, const IntSize& contentsSize, const IntPoint& scrollPosition, float pageScale) 78 78 { 79 79 if (!scrollLayer()) … … 84 84 m_viewportSize = viewportSize; 85 85 scrollLayer()->setScrollPosition(scrollPosition); 86 IntSize maxScroll = contentsSize - viewportSize; 87 // The viewport may be larger than the contents in some cases, such as 88 // having a vertical scrollbar but no horizontal overflow. 89 maxScroll.clampNegativeToZero(); 90 91 scrollLayer()->setMaxScrollPosition(maxScroll); 86 // Due to the possibility of pinch zoom, the noncomposited layer is always 87 // assumed to be scrollable. 88 scrollLayer()->setScrollable(true); 92 89 m_graphicsLayer->setSize(contentsSize); 93 90 94 91 if (visibleRectChanged) 95 92 m_graphicsLayer->setNeedsDisplay(); 93 94 if (m_graphicsLayer->pageScaleFactor() != pageScale) 95 m_graphicsLayer->deviceOrPageScaleFactorChanged(); 96 96 } 97 97 -
trunk/Source/WebCore/platform/graphics/chromium/NonCompositedContentHost.h
r99295 r99774 56 56 void setBackgroundColor(const Color&); 57 57 void setScrollLayer(GraphicsLayer*); 58 void setViewport(const IntSize& viewportSize, const IntSize& contentsSize, const IntPoint& scrollPosition );58 void setViewport(const IntSize& viewportSize, const IntSize& contentsSize, const IntPoint& scrollPosition, float pageScale); 59 59 void protectVisibleTileTextures(); 60 GraphicsLayer* topLevelRootLayer() const { return m_graphicsLayer.get(); } 60 61 61 62 private: -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.cpp
r99327 r99774 43 43 , m_anchorPoint(0.5, 0.5) 44 44 , m_anchorPointZ(0) 45 , m_scrollable(false) 45 46 , m_doubleSided(true) 46 47 , m_layerPropertyChanged(false) -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.h
r99327 r99774 159 159 160 160 void scrollBy(const IntSize& scroll); 161 bool scrollable() const { return !maxScrollPosition().isZero(); } 161 162 bool scrollable() const { return m_scrollable; } 163 void setScrollable(bool scrollable) { m_scrollable = scrollable; } 162 164 163 165 const IntRect& visibleLayerRect() const { return m_visibleLayerRect; } … … 217 219 IntSize m_contentBounds; 218 220 IntPoint m_scrollPosition; 219 IntSize m_maxScrollPosition;221 bool m_scrollable; 220 222 Color m_backgroundColor; 221 223 … … 240 242 241 243 IntSize m_scrollDelta; 244 IntSize m_maxScrollPosition; 242 245 243 246 // Properties owned exclusively by this CCLayerImpl. -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp
r99327 r99774 57 57 , m_visible(true) 58 58 , m_haveWheelEventHandlers(false) 59 , m_pageScale(1) 60 , m_minPageScale(1) 61 , m_maxPageScale(1) 59 62 { 60 63 CCMainThread::initialize(); … … 131 134 hostImpl->setZoomAnimatorTransform(m_zoomAnimatorTransform); 132 135 hostImpl->setViewport(viewportSize()); 136 hostImpl->setPageScale(pageScale()); 137 hostImpl->setPageScaleFactorLimits(m_minPageScale, m_maxPageScale); 133 138 134 139 // Synchronize trees, if one exists at all... … … 222 227 { 223 228 m_viewportSize = viewportSize; 229 setNeedsCommit(); 230 } 231 232 void CCLayerTreeHost::setPageScale(float pageScale) 233 { 234 if (pageScale == m_pageScale) 235 return; 236 237 m_pageScale = pageScale; 238 setNeedsCommit(); 239 } 240 241 void CCLayerTreeHost::setPageScaleFactorLimits(float minScale, float maxScale) 242 { 243 if (minScale == m_minPageScale && maxScale == m_maxPageScale) 244 return; 245 246 m_minPageScale = minScale; 247 m_maxPageScale = maxScale; 224 248 setNeedsCommit(); 225 249 } … … 438 462 } 439 463 440 void CCLayerTreeHost::applyScroll Deltas(const CCScrollUpdateSet& info)464 void CCLayerTreeHost::applyScrollAndScale(const CCScrollAndScaleSet& info) 441 465 { 442 466 // FIXME: pushing scroll offsets to non-root layers not implemented 443 if (!info.s ize())444 return; 445 446 ASSERT(info.s ize() == 1);447 IntSize scrollDelta = info [0].scrollDelta;448 m_client->applyScroll Delta(scrollDelta);467 if (!info.scrolls.size()) 468 return; 469 470 ASSERT(info.scrolls.size() == 1); 471 IntSize scrollDelta = info.scrolls[0].scrollDelta; 472 m_client->applyScrollAndScale(scrollDelta, info.pageScale); 449 473 } 450 474 -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.h
r99286 r99774 55 55 public: 56 56 virtual void animateAndLayout(double frameBeginTime) = 0; 57 virtual void applyScroll Delta(const IntSize&) = 0;57 virtual void applyScrollAndScale(const IntSize& scrollDelta, float pageScale) = 0; 58 58 virtual PassRefPtr<GraphicsContext3D> createLayerTreeHostContext3D() = 0; 59 59 virtual void didRecreateGraphicsContext(bool success) = 0; … … 159 159 160 160 const IntSize& viewportSize() const { return m_viewportSize; } 161 162 void setPageScale(float); 163 float pageScale() const { return m_pageScale; } 164 165 void setPageScaleFactorLimits(float minScale, float maxScale); 166 161 167 TextureManager* contentsTextureManager() const; 162 168 … … 169 175 170 176 void updateCompositorResources(GraphicsContext3D*, CCTextureUpdater&); 171 void applyScroll Deltas(const CCScrollUpdateSet&);177 void applyScrollAndScale(const CCScrollAndScaleSet&); 172 178 void startRateLimiter(GraphicsContext3D*); 173 179 void stopRateLimiter(GraphicsContext3D*); … … 210 216 typedef HashMap<GraphicsContext3D*, RefPtr<RateLimiter> > RateLimiterMap; 211 217 RateLimiterMap m_rateLimiters; 218 219 float m_pageScale; 220 float m_minPageScale, m_maxPageScale; 212 221 }; 213 222 -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.h
r99327 r99774 52 52 }; 53 53 54 typedef Vector<CCLayerTreeHostCommon::ScrollUpdateInfo> CCScrollUpdateSet; 54 struct CCScrollAndScaleSet { 55 Vector<CCLayerTreeHostCommon::ScrollUpdateInfo> scrolls; 56 float pageScale; 57 }; 55 58 56 59 template<typename LayerType> -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp
r99286 r99774 51 51 , m_visible(true) 52 52 , m_haveWheelEventHandlers(false) 53 , m_pageScale(1) 54 , m_scaleDelta(1) 55 , m_minPageScale(0) 56 , m_maxPageScale(0) 57 , m_pinchGestureActive(false) 53 58 { 54 59 ASSERT(CCProxy::isImplThread()); … … 69 74 void CCLayerTreeHostImpl::commitComplete() 70 75 { 76 // Recompute max scroll position; must be after layer content bounds are 77 // updated. 78 updateMaxScrollPosition(); 71 79 } 72 80 … … 129 137 return 0; 130 138 131 if ( !layer->maxScrollPosition().isZero())139 if (layer->scrollable()) 132 140 return layer; 133 141 … … 181 189 void CCLayerTreeHostImpl::setViewport(const IntSize& viewportSize) 182 190 { 183 bool changed = viewportSize != m_viewportSize; 191 if (viewportSize == m_viewportSize) 192 return; 193 184 194 m_viewportSize = viewportSize; 185 if (changed) 186 m_layerRenderer->viewportChanged(); 195 updateMaxScrollPosition(); 196 m_layerRenderer->viewportChanged(); 197 } 198 199 void CCLayerTreeHostImpl::setPageScale(float pageScale) 200 { 201 if (!pageScale || pageScale == m_pageScale) 202 return; 203 204 // Maintain constant the product of m_pageScale * m_scaleDelta. 205 float scaleChange = pageScale / m_pageScale; 206 float oldMagnifyScale = m_pageScale * m_scaleDelta; 207 m_pageScale = pageScale; 208 209 setScaleDelta(oldMagnifyScale / pageScale); 210 211 // We also need to convert impl-side scroll deltas to pageScale space. 212 if (m_scrollLayerImpl && m_scrollLayerImpl->scrollable()) { 213 IntSize scrollDelta = m_scrollLayerImpl->scrollDelta(); 214 scrollDelta.scale(scaleChange); 215 m_scrollLayerImpl->setScrollDelta(scrollDelta); 216 } 217 } 218 219 void CCLayerTreeHostImpl::setScaleDelta(float delta) 220 { 221 // Clamp to the current min/max limits. 222 float finalMagnifyScale = m_pageScale * delta; 223 if (m_minPageScale && finalMagnifyScale < m_minPageScale) 224 delta = m_minPageScale / m_pageScale; 225 else if (m_maxPageScale && finalMagnifyScale > m_maxPageScale) 226 delta = m_maxPageScale / m_pageScale; 227 228 if (delta == m_scaleDelta) 229 return; 230 231 m_scaleDelta = delta; 232 233 updateMaxScrollPosition(); 234 235 TransformationMatrix deltaMatrix; 236 deltaMatrix.scale(m_scaleDelta); 237 m_layerRenderer->setPageMagnifyTransform(deltaMatrix); 238 } 239 240 void CCLayerTreeHostImpl::setPageScaleFactorLimits(float minPageScale, float maxPageScale) 241 { 242 m_minPageScale = minPageScale; 243 m_maxPageScale = maxPageScale; 244 245 // This will clamp m_scaleDelta and apply side effects if clamped. 246 setScaleDelta(m_scaleDelta); 247 } 248 249 void CCLayerTreeHostImpl::updateMaxScrollPosition() 250 { 251 if (!m_scrollLayerImpl || !m_scrollLayerImpl->children().size()) 252 return; 253 254 FloatSize viewBounds = m_viewportSize; 255 viewBounds.scale(1 / m_scaleDelta); 256 257 // TODO(aelias): Hardcoding the first child here is weird. Think of 258 // a cleaner way to get the contentBounds on the Impl side. 259 IntSize maxScroll = m_scrollLayerImpl->children()[0]->contentBounds() - expandedIntSize(viewBounds); 260 // The viewport may be larger than the contents in some cases, such as 261 // having a vertical scrollbar but no horizontal overflow. 262 maxScroll.clampNegativeToZero(); 263 264 m_scrollLayerImpl->setMaxScrollPosition(maxScroll); 265 266 // TODO(aelias): Also update sublayers. 187 267 } 188 268 … … 208 288 } 209 289 210 PassOwnPtr<CCScrollUpdateSet> CCLayerTreeHostImpl::processScrollDeltas() 211 { 212 OwnPtr<CCScrollUpdateSet> scrollInfo = adoptPtr(new CCScrollUpdateSet()); 290 void CCLayerTreeHostImpl::pinchGestureBegin() 291 { 292 m_pinchGestureActive = true; 293 } 294 295 void CCLayerTreeHostImpl::pinchGestureUpdate(float magnifyDelta, 296 const IntPoint& anchor) 297 { 298 TRACE_EVENT("CCLayerTreeHostImpl::pinchGestureUpdate", this, 0); 299 300 if (magnifyDelta == 1.0) 301 return; 302 if (!m_scrollLayerImpl) 303 return; 304 305 // Keep the center-of-pinch anchor specified by (x, y) in a stable 306 // position over the course of the magnify. 307 FloatPoint prevScaleAnchor(anchor.x() / m_scaleDelta, anchor.y() / m_scaleDelta); 308 setScaleDelta(m_scaleDelta * magnifyDelta); 309 FloatPoint newScaleAnchor(anchor.x() / m_scaleDelta, anchor.y() / m_scaleDelta); 310 311 FloatSize move = prevScaleAnchor - newScaleAnchor; 312 313 scrollRootLayer(roundedIntSize(move)); 314 315 m_client->setNeedsRedrawOnImplThread(); 316 } 317 318 void CCLayerTreeHostImpl::pinchGestureEnd() 319 { 320 m_pinchGestureActive = false; 321 322 m_client->setNeedsCommitOnImplThread(); 323 } 324 325 PassOwnPtr<CCScrollAndScaleSet> CCLayerTreeHostImpl::processScrollDeltas() 326 { 327 OwnPtr<CCScrollAndScaleSet> scrollInfo = adoptPtr(new CCScrollAndScaleSet()); 328 bool didMove = m_scrollLayerImpl && (!m_scrollLayerImpl->scrollDelta().isZero() || m_scaleDelta != 1.0f); 329 if (!didMove || m_pinchGestureActive) { 330 scrollInfo->pageScale = m_pageScale; 331 return scrollInfo.release(); 332 } 333 213 334 // FIXME: track scrolls from layers other than the root 214 if (m_scrollLayerImpl && !m_scrollLayerImpl->scrollDelta().isZero()) {215 CCLayerTreeHostCommon::ScrollUpdateInfo info;216 info.layerId = m_scrollLayerImpl->id();217 info.scrollDelta = m_scrollLayerImpl->scrollDelta();218 scrollInfo->append(info);219 220 m_scrollLayerImpl->setScrollPosition(m_scrollLayerImpl->scrollPosition() + m_scrollLayerImpl->scrollDelta());221 m_scrollLayerImpl->setPosition(m_scrollLayerImpl->position() - m_scrollLayerImpl->scrollDelta());222 m_scrollLayerImpl->setScrollDelta(IntSize());223 } 335 scrollInfo->pageScale = m_pageScale * m_scaleDelta; 336 CCLayerTreeHostCommon::ScrollUpdateInfo scroll; 337 scroll.layerId = m_scrollLayerImpl->id(); 338 scroll.scrollDelta = m_scrollLayerImpl->scrollDelta(); 339 scrollInfo->scrolls.append(scroll); 340 341 m_scrollLayerImpl->setScrollPosition(m_scrollLayerImpl->scrollPosition() + m_scrollLayerImpl->scrollDelta()); 342 m_scrollLayerImpl->setPosition(m_scrollLayerImpl->position() - m_scrollLayerImpl->scrollDelta()); 343 m_scrollLayerImpl->setScrollDelta(IntSize()); 344 224 345 return scrollInfo.release(); 225 346 } -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.h
r99286 r99774 98 98 void setZoomAnimatorTransform(const TransformationMatrix&); 99 99 100 void setPageScale(float); 101 float pageScale() const { return m_pageScale; } 102 void setPageScaleFactorLimits(float minPageScale, float maxPageScale); 103 100 104 const CCSettings& settings() const { return m_settings; } 101 105 102 PassOwnPtr<CCScrollUpdateSet> processScrollDeltas(); 106 virtual void pinchGestureBegin(); 107 virtual void pinchGestureUpdate(float, const IntPoint&); 108 virtual void pinchGestureEnd(); 109 PassOwnPtr<CCScrollAndScaleSet> processScrollDeltas(); 110 void updateMaxScrollPosition(); 103 111 104 112 protected: … … 109 117 110 118 private: 119 void setScaleDelta(float); 120 111 121 OwnPtr<LayerRendererChromium> m_layerRenderer; 112 122 RefPtr<CCLayerImpl> m_rootLayerImpl; … … 116 126 bool m_visible; 117 127 bool m_haveWheelEventHandlers; 128 129 float m_pageScale; 130 float m_scaleDelta; 131 float m_minPageScale, m_maxPageScale; 132 133 bool m_pinchGestureActive; 118 134 }; 119 135 -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCScrollController.h
r98778 r99774 37 37 virtual void scrollRootLayer(const IntSize&) = 0; 38 38 virtual bool haveWheelEventHandlers() = 0; 39 virtual void pinchGestureBegin() = 0; 40 virtual void pinchGestureUpdate(float magnifyDelta, const IntPoint& anchor) = 0; 41 virtual void pinchGestureEnd() = 0; 39 42 40 43 protected: -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCSingleThreadProxy.cpp
r99033 r99774 167 167 // In the single-threaded case, the scroll deltas should never be 168 168 // touched on the impl layer tree. 169 OwnPtr<CCScroll UpdateSet> scrollInfo = m_layerTreeHostImpl->processScrollDeltas();170 ASSERT(!scrollInfo->s ize());169 OwnPtr<CCScrollAndScaleSet> scrollInfo = m_layerTreeHostImpl->processScrollDeltas(); 170 ASSERT(!scrollInfo->scrolls.size()); 171 171 #endif 172 172 } -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp
r99253 r99774 342 342 int thisTaskSequenceNumber = m_numBeginFrameAndCommitsIssuedOnImplThread; 343 343 m_numBeginFrameAndCommitsIssuedOnImplThread++; 344 OwnPtr<CCScroll UpdateSet> scrollInfo = m_layerTreeHostImpl->processScrollDeltas();344 OwnPtr<CCScrollAndScaleSet> scrollInfo = m_layerTreeHostImpl->processScrollDeltas(); 345 345 return createMainThreadTask(this, &CCThreadProxy::beginFrameAndCommit, thisTaskSequenceNumber, frameBeginTime, scrollInfo.release()); 346 346 } 347 347 348 void CCThreadProxy::beginFrameAndCommit(int sequenceNumber, double frameBeginTime, PassOwnPtr<CCScroll UpdateSet> scrollInfo)348 void CCThreadProxy::beginFrameAndCommit(int sequenceNumber, double frameBeginTime, PassOwnPtr<CCScrollAndScaleSet> scrollInfo) 349 349 { 350 350 TRACE_EVENT("CCThreadProxy::beginFrameAndCommit", this, 0); … … 354 354 355 355 // Scroll deltas need to be applied even if the commit will be dropped. 356 m_layerTreeHost->applyScroll Deltas(*scrollInfo.get());356 m_layerTreeHost->applyScrollAndScale(*scrollInfo.get()); 357 357 358 358 // Drop beginFrameAndCommit calls that occur out of sequence. See createBeginFrameAndCommitTaskOnImplThread for -
trunk/Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.h
r99253 r99774 82 82 83 83 // Called on CCMainThread 84 void beginFrameAndCommit(int sequenceNumber, double frameBeginTime, PassOwnPtr<CCScroll UpdateSet>);84 void beginFrameAndCommit(int sequenceNumber, double frameBeginTime, PassOwnPtr<CCScrollAndScaleSet>); 85 85 void didCommitAndDrawFrame(int frameNumber); 86 86 -
trunk/Source/WebKit/chromium/ChangeLog
r99770 r99774 1 2011-11-09 Alexandre Elias <aelias@google.com> 2 3 [chromium] Add draw-time scale delta to compositor thread 4 https://bugs.webkit.org/show_bug.cgi?id=71595 5 6 Reviewed by James Robinson. 7 8 There are two magnify values: 9 1. The WebKit-side pageScale value corresponding to the resolution of 10 the painted content. 11 2. The Impl-side-only scaleDelta value representing the additional 12 degree of current magnification, applied as a draw transform. WebKit 13 is never explicitly aware of this value and the only way to change it 14 currently is via pinch events (and in the future, double-tap/etc 15 events). At the end of a pinch zoom, we multiply pageScale * 16 scaleDelta and tell WebKit to use it as the new pageScale. 17 18 Scroll offsets and max-extents are maintained in pageScale space. 19 When the scale changes, we need to take care to convert them to the 20 new scale and avoid getting them clamped to the extents at the wrong 21 scale. 22 23 I removed maxScrollPosition on the non-impl side because it makes no 24 sense to precompute it in the presence of an impl-side zoom. Replaced 25 with a simple 'bool m_scrollable'. 26 27 zoomAnimatorTransform is not used because it currently isn't in the 28 branch, and mostly doesn't behave the way we want anyway (it does most 29 things in WebKit thread). We will need to unify these later. 30 31 Also introduce deviceOrPageScaleFactorChanged() call which invalidates 32 layers. 33 34 * public/WebLayerTreeViewClient.h: 35 * public/WebView.h: 36 * src/WebCompositorImpl.cpp: 37 * src/WebLayerTreeViewImpl.cpp: 38 (WebKit::WebLayerTreeViewImpl::applyScrollAndScale): 39 * src/WebLayerTreeViewImpl.h: 40 * src/WebViewImpl.cpp: 41 (WebKit::WebViewImpl::enableFixedLayoutMode): 42 (WebKit::WebViewImpl::setPageScaleFactorLimits): 43 (WebKit::WebViewImpl::applyScrollAndScale): 44 (WebKit::WebViewImpl::updateLayerTreeViewport): 45 * src/WebViewImpl.h: 46 * tests/CCLayerTreeHostImplTest.cpp: 47 (WebKit::CCLayerTreeHostImplTest::expectContains): 48 (WebKit::TEST_F): 49 * tests/CCLayerTreeHostTest.cpp: 50 (WTF::TestHooks::applyScrollAndScale): 51 (WTF::MockLayerTreeHostClient::applyScrollAndScale): 52 (WTF::CCLayerTreeHostTestScrollSimple::beginTest): 53 (WTF::CCLayerTreeHostTestScrollSimple::drawLayersOnCCThread): 54 (WTF::CCLayerTreeHostTestScrollSimple::applyScrollAndScale): 55 (WTF::CCLayerTreeHostTestScrollMultipleRedraw::beginTest): 56 (WTF::CCLayerTreeHostTestScrollMultipleRedraw::drawLayersOnCCThread): 57 (WTF::CCLayerTreeHostTestScrollMultipleRedraw::applyScrollAndScale): 58 1 59 2011-11-09 Dominic Mazzoni <dmazzoni@google.com> 2 60 -
trunk/Source/WebKit/chromium/public/WebLayerTreeViewClient.h
r96990 r99774 38 38 virtual void animateAndLayout(double frameBeginTime) = 0; 39 39 40 // Applies a scroll delta to the root layer. This is triggered by events 41 // sent to the compositor thread through the WebCompositor interface. 42 virtual void applyScrollDelta(const WebSize&) = 0; 40 // Applies a scroll delta to the root layer, which is bundled with a page 41 // scale factor that may apply a CSS transform on the whole document (used 42 // for mobile-device pinch zooming). This is triggered by events sent to the 43 // compositor thread through the WebCompositor interface. 44 virtual void applyScrollAndScale(const WebSize& scrollDelta, float scaleFactor) = 0; 43 45 44 46 // Creates a 3D context suitable for the compositing. This may be called -
trunk/Source/WebKit/chromium/public/WebView.h
r99624 r99774 208 208 WEBKIT_EXPORT static double zoomFactorToZoomLevel(double factor); 209 209 210 // PageScaleFactor will be force-clamped between minPageScale and maxPageScale 211 // (and these values will persist until setPageScaleFactorLimits is called 212 // again). 213 virtual void setPageScaleFactorLimits(float minPageScale, float maxPageScale) = 0; 214 210 215 // Gets the scale factor of the page, where 1.0 is the normal size, > 1.0 211 216 // is scaled up, < 1.0 is scaled down. -
trunk/Source/WebKit/chromium/src/WebCompositorImpl.cpp
r98778 r99774 134 134 135 135 } 136 -
trunk/Source/WebKit/chromium/src/WebLayerTreeViewImpl.cpp
r99286 r99774 66 66 } 67 67 68 void WebLayerTreeViewImpl::applyScroll Delta(const WebCore::IntSize& delta)68 void WebLayerTreeViewImpl::applyScrollAndScale(const WebCore::IntSize& scrollDelta, float pageScale) 69 69 { 70 70 if (m_client) 71 m_client->applyScroll Delta(WebSize(delta));71 m_client->applyScrollAndScale(WebSize(scrollDelta), pageScale); 72 72 } 73 73 -
trunk/Source/WebKit/chromium/src/WebLayerTreeViewImpl.h
r98915 r99774 43 43 virtual ~WebLayerTreeViewImpl(); 44 44 virtual void animateAndLayout(double frameBeginTime); 45 virtual void applyScroll Delta(const WebCore::IntSize&);45 virtual void applyScrollAndScale(const WebCore::IntSize& scrollDelta, float pageScale); 46 46 virtual PassRefPtr<WebCore::GraphicsContext3D> createLayerTreeHostContext3D(); 47 47 virtual void didCommitAndDrawFrame(int frameNumber); -
trunk/Source/WebKit/chromium/src/WebViewImpl.cpp
r99659 r99774 1895 1895 1896 1896 frame->view()->setUseFixedLayout(enable); 1897 1898 #if USE(ACCELERATED_COMPOSITING) 1899 // Also notify the base layer, which RenderLayerCompositor does not see. 1900 if (m_nonCompositedContentHost) { 1901 m_nonCompositedContentHost->topLevelRootLayer()->deviceOrPageScaleFactorChanged(); 1902 updateLayerTreeViewport(); 1903 } 1904 #endif 1905 } 1906 1907 void WebViewImpl::setPageScaleFactorLimits(float minPageScale, float maxPageScale) 1908 { 1909 #if USE(ACCELERATED_COMPOSITING) 1910 m_layerTreeHost->setPageScaleFactorLimits(minPageScale, maxPageScale); 1911 #endif 1897 1912 } 1898 1913 … … 2703 2718 } 2704 2719 2705 void WebViewImpl::applyScroll Delta(const IntSize& scrollDelta)2720 void WebViewImpl::applyScrollAndScale(const IntSize& scrollDelta, float scaleFactor) 2706 2721 { 2707 2722 if (!mainFrameImpl() || !mainFrameImpl()->frameView()) 2708 2723 return; 2709 2724 2710 mainFrameImpl()->frameView()->scrollBy(scrollDelta); 2725 float oldScale = pageScaleFactor(); 2726 if (!oldScale) 2727 oldScale = 1.0f; 2728 2729 if (!scaleFactor || oldScale == scaleFactor) 2730 mainFrameImpl()->frameView()->scrollBy(scrollDelta); 2731 else { 2732 // The page scale changed, so apply a scale and scroll in a single 2733 // operation. The old scroll offset (and passed-in delta) are 2734 // in the old coordinate space, so we first need to multiply them 2735 // by the page scale delta. 2736 WebSize scrollOffset = mainFrame()->scrollOffset(); 2737 scrollOffset.width += scrollDelta.width(); 2738 scrollOffset.height += scrollDelta.height(); 2739 float scaleDelta = scaleFactor / oldScale; 2740 WebPoint scaledScrollOffset(scrollOffset.width * scaleDelta, 2741 scrollOffset.height * scaleDelta); 2742 setPageScaleFactor(scaleFactor, scaledScrollOffset); 2743 } 2711 2744 } 2712 2745 … … 2743 2776 void WebViewImpl::updateLayerTreeViewport() 2744 2777 { 2745 if (!page() )2778 if (!page() || !m_nonCompositedContentHost || !m_layerTreeHost) 2746 2779 return; 2747 2780 … … 2750 2783 IntPoint scroll(view->scrollX(), view->scrollY()); 2751 2784 2752 m_nonCompositedContentHost->setViewport(visibleRect.size(), view->contentsSize(), scroll );2785 m_nonCompositedContentHost->setViewport(visibleRect.size(), view->contentsSize(), scroll, pageScaleFactor()); 2753 2786 m_layerTreeHost->setViewport(visibleRect.size()); 2787 m_layerTreeHost->setPageScale(pageScaleFactor()); 2754 2788 } 2755 2789 -
trunk/Source/WebKit/chromium/src/WebViewImpl.h
r99624 r99774 160 160 virtual float pageScaleFactor() const; 161 161 virtual void setPageScaleFactor(float scaleFactor, const WebPoint& origin); 162 virtual void setPageScaleFactorLimits(float minPageScale, float maxPageScale); 162 163 virtual float deviceScaleFactor() const; 163 164 virtual void setDeviceScaleFactor(float); … … 221 222 // CCLayerTreeHostClient 222 223 virtual void animateAndLayout(double frameBeginTime); 223 virtual void applyScroll Delta(const WebCore::IntSize&);224 virtual void applyScrollAndScale(const WebCore::IntSize&, float); 224 225 virtual PassRefPtr<WebCore::GraphicsContext3D> createLayerTreeHostContext3D(); 225 226 virtual void didCommitAndDrawFrame(int frameNumber); -
trunk/Source/WebKit/chromium/tests/CCLayerTreeHostImplTest.cpp
r98567 r99774 60 60 } 61 61 62 static void expectContains(const CCScroll UpdateSet& scrollInfo, int id, const IntSize& scrollDelta)62 static void expectContains(const CCScrollAndScaleSet& scrollInfo, int id, const IntSize& scrollDelta) 63 63 { 64 64 int timesEncountered = 0; 65 65 66 for (size_t i = 0; i < scrollInfo.s ize(); ++i) {67 if (scrollInfo [i].layerId != id)66 for (size_t i = 0; i < scrollInfo.scrolls.size(); ++i) { 67 if (scrollInfo.scrolls[i].layerId != id) 68 68 continue; 69 ASSERT_EQ(scrollInfo [i].scrollDelta, scrollDelta);69 ASSERT_EQ(scrollInfo.scrolls[i].scrollDelta, scrollDelta); 70 70 timesEncountered++; 71 71 } … … 85 85 ASSERT_FALSE(m_hostImpl->rootLayer()); 86 86 87 OwnPtr<CCScroll UpdateSet> scrollInfo = m_hostImpl->processScrollDeltas();88 ASSERT_EQ(scrollInfo->s ize(), 0u);87 OwnPtr<CCScrollAndScaleSet> scrollInfo = m_hostImpl->processScrollDeltas(); 88 ASSERT_EQ(scrollInfo->scrolls.size(), 0u); 89 89 } 90 90 … … 101 101 expectClearedScrollDeltasRecursive(root.get()); 102 102 103 OwnPtr<CCScroll UpdateSet> scrollInfo;104 105 scrollInfo = m_hostImpl->processScrollDeltas(); 106 ASSERT_EQ(scrollInfo->s ize(), 0u);107 expectClearedScrollDeltasRecursive(root.get()); 108 109 scrollInfo = m_hostImpl->processScrollDeltas(); 110 ASSERT_EQ(scrollInfo->s ize(), 0u);103 OwnPtr<CCScrollAndScaleSet> scrollInfo; 104 105 scrollInfo = m_hostImpl->processScrollDeltas(); 106 ASSERT_EQ(scrollInfo->scrolls.size(), 0u); 107 expectClearedScrollDeltasRecursive(root.get()); 108 109 scrollInfo = m_hostImpl->processScrollDeltas(); 110 ASSERT_EQ(scrollInfo->scrolls.size(), 0u); 111 111 expectClearedScrollDeltasRecursive(root.get()); 112 112 } … … 118 118 RefPtr<CCLayerImpl> root = CCLayerImpl::create(10); 119 119 root->setScrollPosition(scrollPosition); 120 root->setScrollable(true); 120 121 root->setMaxScrollPosition(IntSize(100, 100)); 121 122 root->scrollBy(scrollDelta); 122 123 m_hostImpl->setRootLayer(root); 123 124 124 OwnPtr<CCScroll UpdateSet> scrollInfo;125 OwnPtr<CCScrollAndScaleSet> scrollInfo; 125 126 126 127 scrollInfo = m_hostImpl->processScrollDeltas(); 127 128 ASSERT_EQ(root->scrollPosition(), scrollPosition + scrollDelta); 128 ASSERT_EQ(scrollInfo->s ize(), 1u);129 ASSERT_EQ(scrollInfo->scrolls.size(), 1u); 129 130 expectContains(*scrollInfo.get(), root->id(), scrollDelta); 130 131 expectClearedScrollDeltasRecursive(root.get()); … … 134 135 scrollInfo = m_hostImpl->processScrollDeltas(); 135 136 ASSERT_EQ(root->scrollPosition(), scrollPosition + scrollDelta + scrollDelta2); 136 ASSERT_EQ(scrollInfo->s ize(), 1u);137 ASSERT_EQ(scrollInfo->scrolls.size(), 1u); 137 138 expectContains(*scrollInfo.get(), root->id(), scrollDelta2); 138 139 expectClearedScrollDeltasRecursive(root.get()); … … 141 142 scrollInfo = m_hostImpl->processScrollDeltas(); 142 143 ASSERT_EQ(root->scrollPosition(), scrollPosition + scrollDelta + scrollDelta2); 143 ASSERT_EQ(scrollInfo->s ize(), 0u);144 ASSERT_EQ(scrollInfo->scrolls.size(), 0u); 144 145 expectClearedScrollDeltasRecursive(root.get()); 145 146 } -
trunk/Source/WebKit/chromium/tests/CCLayerTreeHostTest.cpp
r99286 r99774 58 58 virtual void commitCompleteOnCCThread(CCLayerTreeHostImpl*) { } 59 59 virtual void drawLayersOnCCThread(CCLayerTreeHostImpl*) { } 60 virtual void applyScroll Delta(const IntSize&) { }60 virtual void applyScrollAndScale(const IntSize&, float) { } 61 61 }; 62 62 … … 154 154 } 155 155 156 virtual void applyScroll Delta(const IntSize& scrollDelta)157 { 158 m_testHooks->applyScroll Delta(scrollDelta);156 virtual void applyScrollAndScale(const IntSize& scrollDelta, float scale) 157 { 158 m_testHooks->applyScrollAndScale(scrollDelta, scale); 159 159 } 160 160 … … 625 625 virtual void beginTest() 626 626 { 627 m_layerTreeHost->rootLayer()->set MaxScrollPosition(IntSize(100, 100));627 m_layerTreeHost->rootLayer()->setScrollable(true); 628 628 m_layerTreeHost->rootLayer()->setScrollPosition(m_initialScroll); 629 629 postSetNeedsCommitToMainThread(); … … 648 648 EXPECT_EQ(root->scrollDelta(), IntSize()); 649 649 650 root->setScrollable(true); 651 root->setMaxScrollPosition(IntSize(100, 100)); 650 652 root->scrollBy(m_scrollAmount); 651 653 … … 661 663 } 662 664 663 virtual void applyScroll Delta(const IntSize& scrollDelta)665 virtual void applyScrollAndScale(const IntSize& scrollDelta, float scale) 664 666 { 665 667 IntPoint position = m_layerTreeHost->rootLayer()->scrollPosition(); … … 695 697 virtual void beginTest() 696 698 { 697 m_layerTreeHost->rootLayer()->set MaxScrollPosition(IntSize(100, 100));699 m_layerTreeHost->rootLayer()->setScrollable(true); 698 700 m_layerTreeHost->rootLayer()->setScrollPosition(m_initialScroll); 699 701 postSetNeedsCommitToMainThread(); … … 714 716 { 715 717 CCLayerImpl* root = impl->rootLayer(); 718 root->setScrollable(true); 719 root->setMaxScrollPosition(IntSize(100, 100)); 716 720 717 721 if (impl->frameNumber() == 1) { … … 736 740 } 737 741 738 virtual void applyScroll Delta(const IntSize& scrollDelta)742 virtual void applyScrollAndScale(const IntSize& scrollDelta, float scale) 739 743 { 740 744 IntPoint position = m_layerTreeHost->rootLayer()->scrollPosition(); -
trunk/Source/WebKit/chromium/tests/LayerChromiumTest.cpp
r99327 r99774 647 647 EXECUTE_AND_VERIFY_NOTIFY_SYNC_BEHAVIOR(mockDelegate, 1, testLayer->setPosition(FloatPoint(4.0f, 9.0f))); 648 648 EXECUTE_AND_VERIFY_NOTIFY_SYNC_BEHAVIOR(mockDelegate, 1, testLayer->setSublayerTransform(TransformationMatrix())); 649 EXECUTE_AND_VERIFY_NOTIFY_SYNC_BEHAVIOR(mockDelegate, 1, testLayer->setScrollable(true)); 649 650 EXECUTE_AND_VERIFY_NOTIFY_SYNC_BEHAVIOR(mockDelegate, 1, testLayer->setTransform(TransformationMatrix())); 650 651 EXECUTE_AND_VERIFY_NOTIFY_SYNC_BEHAVIOR(mockDelegate, 1, testLayer->setDoubleSided(false));
Note:
See TracChangeset
for help on using the changeset viewer.