OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |