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

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

Powered by Google App Engine
This is Rietveld 408576698