Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6)

Side by Side Diff: cc/layer_tree_host_impl.cc

Issue 11264056: cc: Use gfx:: Geometry types for positions, bounds, and related things. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: some missed intstuff Created 8 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "config.h" 5 #include "config.h"
6 6
7 #include "cc/layer_tree_host_impl.h" 7 #include "cc/layer_tree_host_impl.h"
8 8
9 #include "base/basictypes.h" 9 #include "base/basictypes.h"
10 #include "base/debug/trace_event.h" 10 #include "base/debug/trace_event.h"
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 if (m_sentPageScaleDelta == 1 && pageScaleFactor == m_pageScaleFactor && min PageScaleFactor == m_minPageScaleFactor && maxPageScaleFactor == m_maxPageScaleF actor) 88 if (m_sentPageScaleDelta == 1 && pageScaleFactor == m_pageScaleFactor && min PageScaleFactor == m_minPageScaleFactor && maxPageScaleFactor == m_maxPageScaleF actor)
89 return false; 89 return false;
90 90
91 m_minPageScaleFactor = minPageScaleFactor; 91 m_minPageScaleFactor = minPageScaleFactor;
92 m_maxPageScaleFactor = maxPageScaleFactor; 92 m_maxPageScaleFactor = maxPageScaleFactor;
93 93
94 m_pageScaleFactor = pageScaleFactor; 94 m_pageScaleFactor = pageScaleFactor;
95 return true; 95 return true;
96 } 96 }
97 97
98 FloatRect PinchZoomViewport::bounds() const 98 gfx::RectF PinchZoomViewport::bounds() const
99 { 99 {
100 FloatSize scaledViewportSize = m_layoutViewportSize; 100 gfx::SizeF scaledViewportSize = m_layoutViewportSize;
101 scaledViewportSize.scale(1 / totalPageScaleFactor()); 101 scaledViewportSize = scaledViewportSize.Scale(1 / totalPageScaleFactor());
102 102
103 FloatRect bounds(FloatPoint(0, 0), scaledViewportSize); 103 gfx::RectF bounds(gfx::PointF(), scaledViewportSize);
104 bounds.setLocation(m_pinchViewportScrollDelta); 104 bounds.set_origin(m_pinchViewportScrollDelta);
105 105
106 return bounds; 106 return bounds;
107 } 107 }
108 108
109 FloatSize PinchZoomViewport::applyScroll(FloatSize& delta) 109 FloatSize PinchZoomViewport::applyScroll(FloatSize& delta)
110 { 110 {
111 FloatSize overflow; 111 FloatSize overflow;
112 FloatRect pinchedBounds = bounds(); 112 FloatRect pinchedBounds = cc::FloatRect(bounds());
113 113
114 pinchedBounds.move(delta); 114 pinchedBounds.move(delta);
115 if (pinchedBounds.x() < 0) { 115 if (pinchedBounds.x() < 0) {
116 overflow.setWidth(pinchedBounds.x()); 116 overflow.setWidth(pinchedBounds.x());
117 pinchedBounds.setX(0); 117 pinchedBounds.setX(0);
118 } 118 }
119 119
120 if (pinchedBounds.y() < 0) { 120 if (pinchedBounds.y() < 0) {
121 overflow.setHeight(pinchedBounds.y()); 121 overflow.setHeight(pinchedBounds.y());
122 pinchedBounds.setY(0); 122 pinchedBounds.setY(0);
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
264 bool LayerTreeHostImpl::canDraw() 264 bool LayerTreeHostImpl::canDraw()
265 { 265 {
266 // Note: If you are changing this function or any other function that might 266 // Note: If you are changing this function or any other function that might
267 // affect the result of canDraw, make sure to call m_client->onCanDrawStateC hanged 267 // affect the result of canDraw, make sure to call m_client->onCanDrawStateC hanged
268 // in the proper places and update the notifyIfCanDrawChanged test. 268 // in the proper places and update the notifyIfCanDrawChanged test.
269 269
270 if (!m_rootLayerImpl) { 270 if (!m_rootLayerImpl) {
271 TRACE_EVENT_INSTANT0("cc", "LayerTreeHostImpl::canDraw no root layer"); 271 TRACE_EVENT_INSTANT0("cc", "LayerTreeHostImpl::canDraw no root layer");
272 return false; 272 return false;
273 } 273 }
274 if (deviceViewportSize().isEmpty()) { 274 if (deviceViewportSize().IsEmpty()) {
275 TRACE_EVENT_INSTANT0("cc", "LayerTreeHostImpl::canDraw empty viewport"); 275 TRACE_EVENT_INSTANT0("cc", "LayerTreeHostImpl::canDraw empty viewport");
276 return false; 276 return false;
277 } 277 }
278 if (!m_renderer) { 278 if (!m_renderer) {
279 TRACE_EVENT_INSTANT0("cc", "LayerTreeHostImpl::canDraw no renderer"); 279 TRACE_EVENT_INSTANT0("cc", "LayerTreeHostImpl::canDraw no renderer");
280 return false; 280 return false;
281 } 281 }
282 if (m_contentsTexturesPurged) { 282 if (m_contentsTexturesPurged) {
283 TRACE_EVENT_INSTANT0("cc", "LayerTreeHostImpl::canDraw contents textures purged"); 283 TRACE_EVENT_INSTANT0("cc", "LayerTreeHostImpl::canDraw contents textures purged");
284 return false; 284 return false;
(...skipping 14 matching lines...) Expand all
299 } 299 }
300 300
301 void LayerTreeHostImpl::startPageScaleAnimation(const IntSize& targetPosition, b ool anchorPoint, float pageScale, double startTime, double duration) 301 void LayerTreeHostImpl::startPageScaleAnimation(const IntSize& targetPosition, b ool anchorPoint, float pageScale, double startTime, double duration)
302 { 302 {
303 if (!m_rootScrollLayerImpl) 303 if (!m_rootScrollLayerImpl)
304 return; 304 return;
305 305
306 IntSize scrollTotal = flooredIntSize(m_rootScrollLayerImpl->scrollPosition() + m_rootScrollLayerImpl->scrollDelta()); 306 IntSize scrollTotal = flooredIntSize(m_rootScrollLayerImpl->scrollPosition() + m_rootScrollLayerImpl->scrollDelta());
307 scrollTotal.scale(m_pinchZoomViewport.pageScaleDelta()); 307 scrollTotal.scale(m_pinchZoomViewport.pageScaleDelta());
308 float scaleTotal = m_pinchZoomViewport.totalPageScaleFactor(); 308 float scaleTotal = m_pinchZoomViewport.totalPageScaleFactor();
309 IntSize scaledContentSize = contentSize(); 309 IntSize scaledContentSize = cc::IntSize(contentSize());
310 scaledContentSize.scale(m_pinchZoomViewport.pageScaleDelta()); 310 scaledContentSize.scale(m_pinchZoomViewport.pageScaleDelta());
311 311
312 m_pageScaleAnimation = PageScaleAnimation::create(scrollTotal, scaleTotal, m _deviceViewportSize, scaledContentSize, startTime); 312 m_pageScaleAnimation = PageScaleAnimation::create(scrollTotal, scaleTotal, c c::IntSize(m_deviceViewportSize), scaledContentSize, startTime);
313 313
314 if (anchorPoint) { 314 if (anchorPoint) {
315 IntSize windowAnchor(targetPosition); 315 IntSize windowAnchor(targetPosition);
316 windowAnchor.scale(scaleTotal / pageScale); 316 windowAnchor.scale(scaleTotal / pageScale);
317 windowAnchor -= scrollTotal; 317 windowAnchor -= scrollTotal;
318 m_pageScaleAnimation->zoomWithAnchor(windowAnchor, pageScale, duration); 318 m_pageScaleAnimation->zoomWithAnchor(windowAnchor, pageScale, duration);
319 } else 319 } else
320 m_pageScaleAnimation->zoomTo(targetPosition, pageScale, duration); 320 m_pageScaleAnimation->zoomTo(targetPosition, pageScale, duration);
321 321
322 m_client->setNeedsRedrawOnImplThread(); 322 m_client->setNeedsRedrawOnImplThread();
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
408 RenderPass* targetRenderPass = frame.renderPassesById.get(targetRenderPa ssId); 408 RenderPass* targetRenderPass = frame.renderPassesById.get(targetRenderPa ssId);
409 409
410 occlusionTracker.enterLayer(it); 410 occlusionTracker.enterLayer(it);
411 411
412 AppendQuadsData appendQuadsData(targetRenderPass->id()); 412 AppendQuadsData appendQuadsData(targetRenderPass->id());
413 413
414 if (it.representsContributingRenderSurface()) { 414 if (it.representsContributingRenderSurface()) {
415 RenderPass::Id contributingRenderPassId = it->renderSurface()->rende rPassId(); 415 RenderPass::Id contributingRenderPassId = it->renderSurface()->rende rPassId();
416 RenderPass* contributingRenderPass = frame.renderPassesById.get(cont ributingRenderPassId); 416 RenderPass* contributingRenderPass = frame.renderPassesById.get(cont ributingRenderPassId);
417 targetRenderPass->appendQuadsForRenderSurfaceLayer(*it, contributing RenderPass, &occlusionTracker, appendQuadsData); 417 targetRenderPass->appendQuadsForRenderSurfaceLayer(*it, contributing RenderPass, &occlusionTracker, appendQuadsData);
418 } else if (it.representsItself() && !it->visibleContentRect().isEmpty()) { 418 } else if (it.representsItself() && !it->visibleContentRect().IsEmpty()) {
419 bool hasOcclusionFromOutsideTargetSurface; 419 bool hasOcclusionFromOutsideTargetSurface;
420 if (occlusionTracker.occluded(*it, it->visibleContentRect(), &hasOcc lusionFromOutsideTargetSurface)) 420 if (occlusionTracker.occluded(*it, it->visibleContentRect(), &hasOcc lusionFromOutsideTargetSurface))
421 appendQuadsData.hadOcclusionFromOutsideTargetSurface |= hasOcclu sionFromOutsideTargetSurface; 421 appendQuadsData.hadOcclusionFromOutsideTargetSurface |= hasOcclu sionFromOutsideTargetSurface;
422 else { 422 else {
423 it->willDraw(m_resourceProvider.get()); 423 it->willDraw(m_resourceProvider.get());
424 frame.willDrawLayers.push_back(*it); 424 frame.willDrawLayers.push_back(*it);
425 425
426 if (it->hasContributingDelegatedRenderPasses()) { 426 if (it->hasContributingDelegatedRenderPasses()) {
427 RenderPass::Id contributingRenderPassId = it->firstContribut ingRenderPassId(); 427 RenderPass::Id contributingRenderPassId = it->firstContribut ingRenderPassId();
428 while (frame.renderPassesById.contains(contributingRenderPas sId)) { 428 while (frame.renderPassesById.contains(contributingRenderPas sId)) {
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
504 504
505 void LayerTreeHostImpl::setBackgroundTickingEnabled(bool enabled) 505 void LayerTreeHostImpl::setBackgroundTickingEnabled(bool enabled)
506 { 506 {
507 // Lazily create the timeSource adapter so that we can vary the interval for testing. 507 // Lazily create the timeSource adapter so that we can vary the interval for testing.
508 if (!m_timeSourceClientAdapter) 508 if (!m_timeSourceClientAdapter)
509 m_timeSourceClientAdapter = LayerTreeHostImplTimeSourceAdapter::create(t his, DelayBasedTimeSource::create(lowFrequencyAnimationInterval(), Proxy::curren tThread())); 509 m_timeSourceClientAdapter = LayerTreeHostImplTimeSourceAdapter::create(t his, DelayBasedTimeSource::create(lowFrequencyAnimationInterval(), Proxy::curren tThread()));
510 510
511 m_timeSourceClientAdapter->setActive(enabled); 511 m_timeSourceClientAdapter->setActive(enabled);
512 } 512 }
513 513
514 IntSize LayerTreeHostImpl::contentSize() const 514 gfx::Size LayerTreeHostImpl::contentSize() const
515 { 515 {
516 // TODO(aelias): Hardcoding the first child here is weird. Think of 516 // TODO(aelias): Hardcoding the first child here is weird. Think of
517 // a cleaner way to get the contentBounds on the Impl side. 517 // a cleaner way to get the contentBounds on the Impl side.
518 if (!m_rootScrollLayerImpl || m_rootScrollLayerImpl->children().isEmpty()) 518 if (!m_rootScrollLayerImpl || m_rootScrollLayerImpl->children().isEmpty())
519 return IntSize(); 519 return gfx::Size();
520 return m_rootScrollLayerImpl->children()[0]->contentBounds(); 520 return m_rootScrollLayerImpl->children()[0]->contentBounds();
521 } 521 }
522 522
523 static inline RenderPass* findRenderPassById(RenderPass::Id renderPassId, const LayerTreeHostImpl::FrameData& frame) 523 static inline RenderPass* findRenderPassById(RenderPass::Id renderPassId, const LayerTreeHostImpl::FrameData& frame)
524 { 524 {
525 RenderPassIdHashMap::const_iterator it = frame.renderPassesById.find(renderP assId); 525 RenderPassIdHashMap::const_iterator it = frame.renderPassesById.find(renderP assId);
526 DCHECK(it != frame.renderPassesById.end()); 526 DCHECK(it != frame.renderPassesById.end());
527 return it->second; 527 return it->second;
528 } 528 }
529 529
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after
725 } 725 }
726 726
727 bool LayerTreeHostImpl::swapBuffers() 727 bool LayerTreeHostImpl::swapBuffers()
728 { 728 {
729 DCHECK(m_renderer); 729 DCHECK(m_renderer);
730 730
731 m_fpsCounter->markEndOfFrame(); 731 m_fpsCounter->markEndOfFrame();
732 return m_renderer->swapBuffers(); 732 return m_renderer->swapBuffers();
733 } 733 }
734 734
735 const IntSize& LayerTreeHostImpl::deviceViewportSize() const 735 const gfx::Size& LayerTreeHostImpl::deviceViewportSize() const
736 { 736 {
737 return m_deviceViewportSize; 737 return m_deviceViewportSize;
738 } 738 }
739 739
740 const LayerTreeSettings& LayerTreeHostImpl::settings() const 740 const LayerTreeSettings& LayerTreeHostImpl::settings() const
741 { 741 {
742 return m_settings; 742 return m_settings;
743 } 743 }
744 744
745 void LayerTreeHostImpl::didLoseContext() 745 void LayerTreeHostImpl::didLoseContext()
746 { 746 {
747 m_client->didLoseContextOnImplThread(); 747 m_client->didLoseContextOnImplThread();
748 } 748 }
749 749
750 void LayerTreeHostImpl::onSwapBuffersComplete() 750 void LayerTreeHostImpl::onSwapBuffersComplete()
751 { 751 {
752 m_client->onSwapBuffersCompleteOnImplThread(); 752 m_client->onSwapBuffersCompleteOnImplThread();
753 } 753 }
754 754
755 void LayerTreeHostImpl::readback(void* pixels, const IntRect& rect) 755 void LayerTreeHostImpl::readback(void* pixels, const gfx::Rect& rect)
756 { 756 {
757 DCHECK(m_renderer); 757 DCHECK(m_renderer);
758 m_renderer->getFramebufferPixels(pixels, rect); 758 m_renderer->getFramebufferPixels(pixels, rect);
759 } 759 }
760 760
761 static LayerImpl* findRootScrollLayer(LayerImpl* layer) 761 static LayerImpl* findRootScrollLayer(LayerImpl* layer)
762 { 762 {
763 if (!layer) 763 if (!layer)
764 return 0; 764 return 0;
765 765
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
878 m_contentsTexturesPurged = true; 878 m_contentsTexturesPurged = true;
879 m_client->onCanDrawStateChanged(canDraw()); 879 m_client->onCanDrawStateChanged(canDraw());
880 } 880 }
881 881
882 void LayerTreeHostImpl::resetContentsTexturesPurged() 882 void LayerTreeHostImpl::resetContentsTexturesPurged()
883 { 883 {
884 m_contentsTexturesPurged = false; 884 m_contentsTexturesPurged = false;
885 m_client->onCanDrawStateChanged(canDraw()); 885 m_client->onCanDrawStateChanged(canDraw());
886 } 886 }
887 887
888 void LayerTreeHostImpl::setViewportSize(const IntSize& layoutViewportSize, const IntSize& deviceViewportSize) 888 void LayerTreeHostImpl::setViewportSize(const gfx::Size& layoutViewportSize, con st gfx::Size& deviceViewportSize)
889 { 889 {
890 if (layoutViewportSize == m_layoutViewportSize && deviceViewportSize == m_de viceViewportSize) 890 if (layoutViewportSize == m_layoutViewportSize && deviceViewportSize == m_de viceViewportSize)
891 return; 891 return;
892 892
893 m_layoutViewportSize = layoutViewportSize; 893 m_layoutViewportSize = layoutViewportSize;
894 m_deviceViewportSize = deviceViewportSize; 894 m_deviceViewportSize = deviceViewportSize;
895 895
896 m_pinchZoomViewport.setLayoutViewportSize(FloatSize(layoutViewportSize)); 896 m_pinchZoomViewport.setLayoutViewportSize(FloatSize(layoutViewportSize));
897 897
898 updateMaxScrollPosition(); 898 updateMaxScrollPosition();
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
956 m_pinchZoomViewport.setPageScaleDelta(delta); 956 m_pinchZoomViewport.setPageScaleDelta(delta);
957 957
958 updateMaxScrollPosition(); 958 updateMaxScrollPosition();
959 } 959 }
960 960
961 void LayerTreeHostImpl::updateMaxScrollPosition() 961 void LayerTreeHostImpl::updateMaxScrollPosition()
962 { 962 {
963 if (!m_rootScrollLayerImpl || !m_rootScrollLayerImpl->children().size()) 963 if (!m_rootScrollLayerImpl || !m_rootScrollLayerImpl->children().size())
964 return; 964 return;
965 965
966 FloatSize viewBounds = m_deviceViewportSize; 966 gfx::SizeF viewBounds = m_deviceViewportSize;
967 if (LayerImpl* clipLayer = m_rootScrollLayerImpl->parent()) { 967 if (LayerImpl* clipLayer = m_rootScrollLayerImpl->parent()) {
968 // Compensate for non-overlay scrollbars. 968 // Compensate for non-overlay scrollbars.
969 if (clipLayer->masksToBounds()) { 969 if (clipLayer->masksToBounds()) {
970 viewBounds = clipLayer->bounds(); 970 viewBounds = clipLayer->bounds();
971 viewBounds.scale(m_deviceScaleFactor); 971 viewBounds = viewBounds.Scale(m_deviceScaleFactor);
972 } 972 }
973 } 973 }
974 974
975 IntSize contentBounds = contentSize(); 975 gfx::Size contentBounds = contentSize();
976 if (Settings::pageScalePinchZoomEnabled()) { 976 if (Settings::pageScalePinchZoomEnabled()) {
977 // Pinch with pageScale scrolls entirely in layout space. contentSize 977 // Pinch with pageScale scrolls entirely in layout space. contentSize
978 // returns the bounds including the page scale factor, so calculate the 978 // returns the bounds including the page scale factor, so calculate the
979 // pre page-scale layout size here. 979 // pre page-scale layout size here.
980 float pageScaleFactor = m_pinchZoomViewport.pageScaleFactor(); 980 float pageScaleFactor = m_pinchZoomViewport.pageScaleFactor();
981 contentBounds.setWidth(contentBounds.width() / pageScaleFactor); 981 contentBounds.set_width(contentBounds.width() / pageScaleFactor);
982 contentBounds.setHeight(contentBounds.height() / pageScaleFactor); 982 contentBounds.set_height(contentBounds.height() / pageScaleFactor);
983 } else { 983 } else {
984 viewBounds.scale(1 / m_pinchZoomViewport.pageScaleDelta()); 984 viewBounds = viewBounds.Scale(1 / m_pinchZoomViewport.pageScaleDelta());
985 } 985 }
986 986
987 IntSize maxScroll = contentBounds - expandedIntSize(viewBounds); 987 IntSize maxScroll = cc::IntSize(contentBounds) - expandedIntSize(cc::FloatSi ze(viewBounds));
988 maxScroll.scale(1 / m_deviceScaleFactor); 988 maxScroll.scale(1 / m_deviceScaleFactor);
989 989
990 // The viewport may be larger than the contents in some cases, such as 990 // The viewport may be larger than the contents in some cases, such as
991 // having a vertical scrollbar but no horizontal overflow. 991 // having a vertical scrollbar but no horizontal overflow.
992 maxScroll.clampNegativeToZero(); 992 maxScroll.clampNegativeToZero();
993 993
994 m_rootScrollLayerImpl->setMaxScrollPosition(maxScroll); 994 m_rootScrollLayerImpl->setMaxScrollPosition(maxScroll);
995 } 995 }
996 996
997 void LayerTreeHostImpl::setNeedsRedraw() 997 void LayerTreeHostImpl::setNeedsRedraw()
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
1084 FloatPoint screenSpacePoint = viewportPoint; 1084 FloatPoint screenSpacePoint = viewportPoint;
1085 screenSpacePoint.scale(scaleFromViewportToScreenSpace, scaleFromViewportToSc reenSpace); 1085 screenSpacePoint.scale(scaleFromViewportToScreenSpace, scaleFromViewportToSc reenSpace);
1086 1086
1087 FloatSize screenSpaceDelta = viewportDelta; 1087 FloatSize screenSpaceDelta = viewportDelta;
1088 screenSpaceDelta.scale(scaleFromViewportToScreenSpace, scaleFromViewportToSc reenSpace); 1088 screenSpaceDelta.scale(scaleFromViewportToScreenSpace, scaleFromViewportToSc reenSpace);
1089 1089
1090 // First project the scroll start and end points to local layer space to fin d the scroll delta 1090 // First project the scroll start and end points to local layer space to fin d the scroll delta
1091 // in layer coordinates. 1091 // in layer coordinates.
1092 bool startClipped, endClipped; 1092 bool startClipped, endClipped;
1093 FloatPoint screenSpaceEndPoint = screenSpacePoint + screenSpaceDelta; 1093 FloatPoint screenSpaceEndPoint = screenSpacePoint + screenSpaceDelta;
1094 FloatPoint localStartPoint = MathUtil::projectPoint(inverseScreenSpaceTransf orm, screenSpacePoint, startClipped); 1094 FloatPoint localStartPoint = cc::FloatPoint(MathUtil::projectPoint(inverseSc reenSpaceTransform, screenSpacePoint, startClipped));
1095 FloatPoint localEndPoint = MathUtil::projectPoint(inverseScreenSpaceTransfor m, screenSpaceEndPoint, endClipped); 1095 FloatPoint localEndPoint = cc::FloatPoint(MathUtil::projectPoint(inverseScre enSpaceTransform, screenSpaceEndPoint, endClipped));
1096 1096
1097 // In general scroll point coordinates should not get clipped. 1097 // In general scroll point coordinates should not get clipped.
1098 DCHECK(!startClipped); 1098 DCHECK(!startClipped);
1099 DCHECK(!endClipped); 1099 DCHECK(!endClipped);
1100 if (startClipped || endClipped) 1100 if (startClipped || endClipped)
1101 return FloatSize(); 1101 return FloatSize();
1102 1102
1103 // localStartPoint and localEndPoint are in content space but we want to mov e them to layer space for scrolling. 1103 // localStartPoint and localEndPoint are in content space but we want to mov e them to layer space for scrolling.
1104 float widthScale = 1; 1104 float widthScale = 1;
1105 float heightScale = 1; 1105 float heightScale = 1;
1106 if (!layerImpl.contentBounds().isEmpty() && !layerImpl.bounds().isEmpty()) { 1106 if (!layerImpl.contentBounds().IsEmpty() && !layerImpl.bounds().IsEmpty()) {
1107 widthScale = layerImpl.bounds().width() / static_cast<float>(layerImpl.c ontentBounds().width()); 1107 widthScale = layerImpl.bounds().width() / static_cast<float>(layerImpl.c ontentBounds().width());
1108 heightScale = layerImpl.bounds().height() / static_cast<float>(layerImpl .contentBounds().height()); 1108 heightScale = layerImpl.bounds().height() / static_cast<float>(layerImpl .contentBounds().height());
1109 } 1109 }
1110 localStartPoint.scale(widthScale, heightScale); 1110 localStartPoint.scale(widthScale, heightScale);
1111 localEndPoint.scale(widthScale, heightScale); 1111 localEndPoint.scale(widthScale, heightScale);
1112 1112
1113 // Apply the scroll delta. 1113 // Apply the scroll delta.
1114 FloatSize previousDelta(layerImpl.scrollDelta()); 1114 FloatSize previousDelta(layerImpl.scrollDelta());
1115 FloatSize unscrolled = layerImpl.scrollBy(localEndPoint - localStartPoint); 1115 FloatSize unscrolled = layerImpl.scrollBy(localEndPoint - localStartPoint);
1116 1116
1117 if (viewport) 1117 if (viewport)
1118 viewport->applyScroll(unscrolled); 1118 viewport->applyScroll(unscrolled);
1119 1119
1120 // Get the end point in the layer's content space so we can apply its screen SpaceTransform. 1120 // Get the end point in the layer's content space so we can apply its screen SpaceTransform.
1121 FloatPoint actualLocalEndPoint = localStartPoint + layerImpl.scrollDelta() - previousDelta; 1121 FloatPoint actualLocalEndPoint = localStartPoint + layerImpl.scrollDelta() - previousDelta;
1122 FloatPoint actualLocalContentEndPoint = actualLocalEndPoint; 1122 gfx::PointF actualLocalContentEndPoint = actualLocalEndPoint;
1123 actualLocalContentEndPoint.scale(1 / widthScale, 1 / heightScale); 1123 actualLocalContentEndPoint = actualLocalContentEndPoint.Scale(1 / widthScale , 1 / heightScale);
1124 1124
1125 // Calculate the applied scroll delta in viewport space coordinates. 1125 // Calculate the applied scroll delta in viewport space coordinates.
1126 FloatPoint actualScreenSpaceEndPoint = MathUtil::mapPoint(layerImpl.screenSp aceTransform(), actualLocalContentEndPoint, endClipped); 1126 FloatPoint actualScreenSpaceEndPoint = cc::FloatPoint(MathUtil::mapPoint(lay erImpl.screenSpaceTransform(), actualLocalContentEndPoint, endClipped));
1127 DCHECK(!endClipped); 1127 DCHECK(!endClipped);
1128 if (endClipped) 1128 if (endClipped)
1129 return FloatSize(); 1129 return FloatSize();
1130 FloatPoint actualViewportEndPoint = actualScreenSpaceEndPoint; 1130 FloatPoint actualViewportEndPoint = actualScreenSpaceEndPoint;
1131 actualViewportEndPoint.scale(1 / scaleFromViewportToScreenSpace, 1 / scaleFr omViewportToScreenSpace); 1131 actualViewportEndPoint.scale(1 / scaleFromViewportToScreenSpace, 1 / scaleFr omViewportToScreenSpace);
1132 return actualViewportEndPoint - viewportPoint; 1132 return actualViewportEndPoint - viewportPoint;
1133 } 1133 }
1134 1134
1135 static FloatSize scrollLayerWithLocalDelta(LayerImpl& layerImpl, const FloatSize & localDelta) 1135 static FloatSize scrollLayerWithLocalDelta(LayerImpl& layerImpl, const FloatSize & localDelta)
1136 { 1136 {
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
1201 void LayerTreeHostImpl::pinchGestureBegin() 1201 void LayerTreeHostImpl::pinchGestureBegin()
1202 { 1202 {
1203 m_pinchGestureActive = true; 1203 m_pinchGestureActive = true;
1204 m_previousPinchAnchor = IntPoint(); 1204 m_previousPinchAnchor = IntPoint();
1205 1205
1206 if (m_rootScrollLayerImpl && m_rootScrollLayerImpl->scrollbarAnimationContro ller()) 1206 if (m_rootScrollLayerImpl && m_rootScrollLayerImpl->scrollbarAnimationContro ller())
1207 m_rootScrollLayerImpl->scrollbarAnimationController()->didPinchGestureBe gin(); 1207 m_rootScrollLayerImpl->scrollbarAnimationController()->didPinchGestureBe gin();
1208 } 1208 }
1209 1209
1210 void LayerTreeHostImpl::pinchGestureUpdate(float magnifyDelta, 1210 void LayerTreeHostImpl::pinchGestureUpdate(float magnifyDelta,
1211 const IntPoint& anchor) 1211 const IntPoint& anchor)
1212 { 1212 {
1213 TRACE_EVENT0("cc", "LayerTreeHostImpl::pinchGestureUpdate"); 1213 TRACE_EVENT0("cc", "LayerTreeHostImpl::pinchGestureUpdate");
1214 1214
1215 if (!m_rootScrollLayerImpl) 1215 if (!m_rootScrollLayerImpl)
1216 return; 1216 return;
1217 1217
1218 if (m_previousPinchAnchor == IntPoint::zero()) 1218 if (m_previousPinchAnchor == IntPoint::zero())
1219 m_previousPinchAnchor = anchor; 1219 m_previousPinchAnchor = anchor;
1220 1220
1221 // Keep the center-of-pinch anchor specified by (x, y) in a stable 1221 // Keep the center-of-pinch anchor specified by (x, y) in a stable
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
1274 const float pinchZoomOutSensitivity = 0.95f; 1274 const float pinchZoomOutSensitivity = 0.95f;
1275 if (m_pinchZoomViewport.pageScaleDelta() > pinchZoomOutSensitivity) 1275 if (m_pinchZoomViewport.pageScaleDelta() > pinchZoomOutSensitivity)
1276 return; 1276 return;
1277 1277
1278 // Compute where the scroll offset/page scale would be if fully pinch-zoomed 1278 // Compute where the scroll offset/page scale would be if fully pinch-zoomed
1279 // out from the anchor point. 1279 // out from the anchor point.
1280 IntSize scrollBegin = flooredIntSize(m_rootScrollLayerImpl->scrollPosition() + m_rootScrollLayerImpl->scrollDelta()); 1280 IntSize scrollBegin = flooredIntSize(m_rootScrollLayerImpl->scrollPosition() + m_rootScrollLayerImpl->scrollDelta());
1281 scrollBegin.scale(m_pinchZoomViewport.pageScaleDelta()); 1281 scrollBegin.scale(m_pinchZoomViewport.pageScaleDelta());
1282 float scaleBegin = m_pinchZoomViewport.totalPageScaleFactor(); 1282 float scaleBegin = m_pinchZoomViewport.totalPageScaleFactor();
1283 float pageScaleDeltaToSend = m_pinchZoomViewport.minPageScaleFactor() / m_pi nchZoomViewport.pageScaleFactor(); 1283 float pageScaleDeltaToSend = m_pinchZoomViewport.minPageScaleFactor() / m_pi nchZoomViewport.pageScaleFactor();
1284 FloatSize scaledContentsSize = contentSize(); 1284 gfx::SizeF scaledContentsSize = contentSize().Scale(pageScaleDeltaToSend);
1285 scaledContentsSize.scale(pageScaleDeltaToSend);
1286 1285
1287 FloatSize anchor = toSize(m_previousPinchAnchor); 1286 FloatSize anchor = toSize(m_previousPinchAnchor);
1288 FloatSize scrollEnd = scrollBegin + anchor; 1287 FloatSize scrollEnd = scrollBegin + anchor;
1289 scrollEnd.scale(m_pinchZoomViewport.minPageScaleFactor() / scaleBegin); 1288 scrollEnd.scale(m_pinchZoomViewport.minPageScaleFactor() / scaleBegin);
1290 scrollEnd -= anchor; 1289 scrollEnd -= anchor;
1291 scrollEnd = scrollEnd.shrunkTo(roundedIntSize(scaledContentsSize - m_deviceV iewportSize)).expandedTo(FloatSize(0, 0)); 1290 scrollEnd = scrollEnd.shrunkTo(roundedIntSize(cc::FloatSize(scaledContentsSi ze) - cc::IntSize(m_deviceViewportSize))).expandedTo(FloatSize(0, 0));
1292 scrollEnd.scale(1 / pageScaleDeltaToSend); 1291 scrollEnd.scale(1 / pageScaleDeltaToSend);
1293 scrollEnd.scale(m_deviceScaleFactor); 1292 scrollEnd.scale(m_deviceScaleFactor);
1294 1293
1295 makeScrollAndScaleSet(scrollInfo, roundedIntSize(scrollEnd), m_pinchZoomView port.minPageScaleFactor()); 1294 makeScrollAndScaleSet(scrollInfo, roundedIntSize(scrollEnd), m_pinchZoomView port.minPageScaleFactor());
1296 } 1295 }
1297 1296
1298 void LayerTreeHostImpl::makeScrollAndScaleSet(ScrollAndScaleSet* scrollInfo, con st IntSize& scrollOffset, float pageScale) 1297 void LayerTreeHostImpl::makeScrollAndScaleSet(ScrollAndScaleSet* scrollInfo, con st IntSize& scrollOffset, float pageScale)
1299 { 1298 {
1300 if (!m_rootScrollLayerImpl) 1299 if (!m_rootScrollLayerImpl)
1301 return; 1300 return;
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
1482 1481
1483 ScrollbarAnimationController* scrollbarController = layer->scrollbarAnimatio nController(); 1482 ScrollbarAnimationController* scrollbarController = layer->scrollbarAnimatio nController();
1484 if (scrollbarController && scrollbarController->animate(monotonicTime)) 1483 if (scrollbarController && scrollbarController->animate(monotonicTime))
1485 m_client->setNeedsRedrawOnImplThread(); 1484 m_client->setNeedsRedrawOnImplThread();
1486 1485
1487 for (size_t i = 0; i < layer->children().size(); ++i) 1486 for (size_t i = 0; i < layer->children().size(); ++i)
1488 animateScrollbarsRecursive(layer->children()[i], monotonicTime); 1487 animateScrollbarsRecursive(layer->children()[i], monotonicTime);
1489 } 1488 }
1490 1489
1491 } // namespace cc 1490 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698