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

Side by Side Diff: cc/CCLayerTreeHostImpl.cpp

Issue 10916279: Chromium compositor change implementing page-scale driven pinch-zoom. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Change m_unpinchedViewportSize and remove unnecessary >1 page scale clamping. Created 8 years, 2 months 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 "CCLayerTreeHostImpl.h" 7 #include "CCLayerTreeHostImpl.h"
8 8
9 #include "base/basictypes.h" 9 #include "base/basictypes.h"
10 #include "CCAppendQuadsData.h" 10 #include "CCAppendQuadsData.h"
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 return; 44 return;
45 } 45 }
46 46
47 TRACE_EVENT_ASYNC_END0("webkit", "CCLayerTreeHostImpl::setVisible", id); 47 TRACE_EVENT_ASYNC_END0("webkit", "CCLayerTreeHostImpl::setVisible", id);
48 } 48 }
49 49
50 } // namespace 50 } // namespace
51 51
52 namespace cc { 52 namespace cc {
53 53
54 CCPinchZoomViewport::CCPinchZoomViewport()
55 : m_pageScaleFactor(1)
56 , m_pageScaleDelta(1)
57 , m_sentPageScaleDelta(1)
58 , m_minPageScaleFactor(0)
59 , m_maxPageScaleFactor(0)
60 {
61 }
62
63 float CCPinchZoomViewport::totalPageScaleFactor() const
64 {
65 return m_pageScaleFactor * m_pageScaleDelta;
66 }
67
68 void CCPinchZoomViewport::setPageScaleDelta(float delta)
69 {
70 // Clamp to the current min/max limits.
71 float totalPageScaleFactor = m_pageScaleFactor * delta;
72 if (m_minPageScaleFactor && totalPageScaleFactor < m_minPageScaleFactor)
73 delta = m_minPageScaleFactor / m_pageScaleFactor;
74 else if (m_maxPageScaleFactor && totalPageScaleFactor > m_maxPageScaleFactor )
75 delta = m_maxPageScaleFactor / m_pageScaleFactor;
76
77 if (delta == m_pageScaleDelta)
78 return;
79
80 m_pageScaleDelta = delta;
81 }
82
83 bool CCPinchZoomViewport::setPageScaleFactorAndLimits(float pageScaleFactor, flo at minPageScaleFactor, float maxPageScaleFactor)
84 {
85 ASSERT(pageScaleFactor);
86
87 if (m_sentPageScaleDelta == 1 && pageScaleFactor == m_pageScaleFactor && min PageScaleFactor == m_minPageScaleFactor && maxPageScaleFactor == m_maxPageScaleF actor)
88 return false;
89
90 m_minPageScaleFactor = minPageScaleFactor;
91 m_maxPageScaleFactor = maxPageScaleFactor;
92
93 m_pageScaleFactor = pageScaleFactor;
94 return true;
95 }
96
97 FloatRect CCPinchZoomViewport::bounds() const
98 {
99 FloatSize scaledViewportSize = m_layoutViewportSize;
100 scaledViewportSize.scale(1 / totalPageScaleFactor());
101
102 FloatRect bounds(FloatPoint(0, 0), scaledViewportSize);
103 bounds.setLocation(m_pinchViewportScrollDelta);
104
105 return bounds;
106 }
107
108 FloatSize CCPinchZoomViewport::applyScroll(FloatSize& delta)
109 {
110 FloatSize overflow;
111 FloatRect pinchedBounds = bounds();
112
113 pinchedBounds.move(delta);
114 if (pinchedBounds.x() < 0) {
115 overflow.setWidth(pinchedBounds.x());
116 pinchedBounds.setX(0);
117 }
118
119 if (pinchedBounds.y() < 0) {
120 overflow.setHeight(pinchedBounds.y());
121 pinchedBounds.setY(0);
122 }
123
124 if (pinchedBounds.maxX() > m_layoutViewportSize.width()) {
125 overflow.setWidth(
126 pinchedBounds.maxX() - m_layoutViewportSize.width());
127 pinchedBounds.move(
128 m_layoutViewportSize.width() - pinchedBounds.maxX(), 0);
129 }
130
131 if (pinchedBounds.maxY() > m_layoutViewportSize.height()) {
132 overflow.setHeight(
133 pinchedBounds.maxY() - m_layoutViewportSize.height());
134 pinchedBounds.move(
135 0, m_layoutViewportSize.height() - pinchedBounds.maxY());
136 }
137 m_pinchViewportScrollDelta = pinchedBounds.location();
138
139 return overflow;
140 }
141
142 WebTransformationMatrix CCPinchZoomViewport::implTransform() const
143 {
144 WebTransformationMatrix transform;
145 transform.scale(m_pageScaleDelta);
146
147 // If the pinch state is applied in the impl, then push it to the
148 // impl transform, otherwise the scale is handled by WebCore.
149 if (CCSettings::pageScalePinchZoomEnabled()) {
150 transform.scale(m_pageScaleFactor);
151 transform.translate(-m_pinchViewportScrollDelta.x(),
152 -m_pinchViewportScrollDelta.y());
153 }
154
155 return transform;
156 }
157
54 class CCLayerTreeHostImplTimeSourceAdapter : public CCTimeSourceClient { 158 class CCLayerTreeHostImplTimeSourceAdapter : public CCTimeSourceClient {
55 public: 159 public:
56 static PassOwnPtr<CCLayerTreeHostImplTimeSourceAdapter> create(CCLayerTreeHo stImpl* layerTreeHostImpl, PassRefPtr<CCDelayBasedTimeSource> timeSource) 160 static PassOwnPtr<CCLayerTreeHostImplTimeSourceAdapter> create(CCLayerTreeHo stImpl* layerTreeHostImpl, PassRefPtr<CCDelayBasedTimeSource> timeSource)
57 { 161 {
58 return adoptPtr(new CCLayerTreeHostImplTimeSourceAdapter(layerTreeHostIm pl, timeSource)); 162 return adoptPtr(new CCLayerTreeHostImplTimeSourceAdapter(layerTreeHostIm pl, timeSource));
59 } 163 }
60 virtual ~CCLayerTreeHostImplTimeSourceAdapter() 164 virtual ~CCLayerTreeHostImplTimeSourceAdapter()
61 { 165 {
62 m_timeSource->setClient(0); 166 m_timeSource->setClient(0);
63 m_timeSource->setActive(false); 167 m_timeSource->setActive(false);
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 , m_rootScrollLayerImpl(0) 216 , m_rootScrollLayerImpl(0)
113 , m_currentlyScrollingLayerImpl(0) 217 , m_currentlyScrollingLayerImpl(0)
114 , m_hudLayerImpl(0) 218 , m_hudLayerImpl(0)
115 , m_scrollingLayerIdFromPreviousTree(-1) 219 , m_scrollingLayerIdFromPreviousTree(-1)
116 , m_scrollDeltaIsInScreenSpace(false) 220 , m_scrollDeltaIsInScreenSpace(false)
117 , m_settings(settings) 221 , m_settings(settings)
118 , m_deviceScaleFactor(1) 222 , m_deviceScaleFactor(1)
119 , m_visible(true) 223 , m_visible(true)
120 , m_contentsTexturesPurged(false) 224 , m_contentsTexturesPurged(false)
121 , m_memoryAllocationLimitBytes(CCPrioritizedTextureManager::defaultMemoryAll ocationLimit()) 225 , m_memoryAllocationLimitBytes(CCPrioritizedTextureManager::defaultMemoryAll ocationLimit())
122 , m_pageScale(1)
123 , m_pageScaleDelta(1)
124 , m_sentPageScaleDelta(1)
125 , m_minPageScale(0)
126 , m_maxPageScale(0)
127 , m_backgroundColor(0) 226 , m_backgroundColor(0)
128 , m_hasTransparentBackground(false) 227 , m_hasTransparentBackground(false)
129 , m_needsAnimateLayers(false) 228 , m_needsAnimateLayers(false)
130 , m_pinchGestureActive(false) 229 , m_pinchGestureActive(false)
131 , m_fpsCounter(CCFrameRateCounter::create()) 230 , m_fpsCounter(CCFrameRateCounter::create())
132 , m_debugRectHistory(CCDebugRectHistory::create()) 231 , m_debugRectHistory(CCDebugRectHistory::create())
133 { 232 {
134 ASSERT(CCProxy::isImplThread()); 233 ASSERT(CCProxy::isImplThread());
135 didVisibilityChange(this, m_visible); 234 didVisibilityChange(this, m_visible);
136 } 235 }
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
192 animateLayers(monotonicTime, wallClockTime); 291 animateLayers(monotonicTime, wallClockTime);
193 animateScrollbars(monotonicTime); 292 animateScrollbars(monotonicTime);
194 } 293 }
195 294
196 void CCLayerTreeHostImpl::startPageScaleAnimation(const IntSize& targetPosition, bool anchorPoint, float pageScale, double startTime, double duration) 295 void CCLayerTreeHostImpl::startPageScaleAnimation(const IntSize& targetPosition, bool anchorPoint, float pageScale, double startTime, double duration)
197 { 296 {
198 if (!m_rootScrollLayerImpl) 297 if (!m_rootScrollLayerImpl)
199 return; 298 return;
200 299
201 IntSize scrollTotal = flooredIntSize(m_rootScrollLayerImpl->scrollPosition() + m_rootScrollLayerImpl->scrollDelta()); 300 IntSize scrollTotal = flooredIntSize(m_rootScrollLayerImpl->scrollPosition() + m_rootScrollLayerImpl->scrollDelta());
202 scrollTotal.scale(m_pageScaleDelta); 301 scrollTotal.scale(m_pinchZoomViewport.pageScaleDelta());
203 float scaleTotal = m_pageScale * m_pageScaleDelta; 302 float scaleTotal = m_pinchZoomViewport.totalPageScaleFactor();
204 IntSize scaledContentSize = contentSize(); 303 IntSize scaledContentSize = contentSize();
205 scaledContentSize.scale(m_pageScaleDelta); 304 scaledContentSize.scale(m_pinchZoomViewport.pageScaleDelta());
206 305
207 m_pageScaleAnimation = CCPageScaleAnimation::create(scrollTotal, scaleTotal, m_deviceViewportSize, scaledContentSize, startTime); 306 m_pageScaleAnimation = CCPageScaleAnimation::create(scrollTotal, scaleTotal, m_deviceViewportSize, scaledContentSize, startTime);
208 307
209 if (anchorPoint) { 308 if (anchorPoint) {
210 IntSize windowAnchor(targetPosition); 309 IntSize windowAnchor(targetPosition);
211 windowAnchor.scale(scaleTotal / pageScale); 310 windowAnchor.scale(scaleTotal / pageScale);
212 windowAnchor -= scrollTotal; 311 windowAnchor -= scrollTotal;
213 m_pageScaleAnimation->zoomWithAnchor(windowAnchor, pageScale, duration); 312 m_pageScaleAnimation->zoomWithAnchor(windowAnchor, pageScale, duration);
214 } else 313 } else
215 m_pageScaleAnimation->zoomTo(targetPosition, pageScale, duration); 314 m_pageScaleAnimation->zoomTo(targetPosition, pageScale, duration);
(...skipping 14 matching lines...) Expand all
230 // damage rect. The root damage rect is then used to scissor each surface. 329 // damage rect. The root damage rect is then used to scissor each surface.
231 330
232 for (int surfaceIndex = renderSurfaceLayerList.size() - 1; surfaceIndex >= 0 ; --surfaceIndex) { 331 for (int surfaceIndex = renderSurfaceLayerList.size() - 1; surfaceIndex >= 0 ; --surfaceIndex) {
233 CCLayerImpl* renderSurfaceLayer = renderSurfaceLayerList[surfaceIndex]; 332 CCLayerImpl* renderSurfaceLayer = renderSurfaceLayerList[surfaceIndex];
234 CCRenderSurface* renderSurface = renderSurfaceLayer->renderSurface(); 333 CCRenderSurface* renderSurface = renderSurfaceLayer->renderSurface();
235 ASSERT(renderSurface); 334 ASSERT(renderSurface);
236 renderSurface->damageTracker()->updateDamageTrackingState(renderSurface- >layerList(), renderSurfaceLayer->id(), renderSurface->surfacePropertyChangedOnl yFromDescendant(), renderSurface->contentRect(), renderSurfaceLayer->maskLayer() , renderSurfaceLayer->filters()); 335 renderSurface->damageTracker()->updateDamageTrackingState(renderSurface- >layerList(), renderSurfaceLayer->id(), renderSurface->surfacePropertyChangedOnl yFromDescendant(), renderSurface->contentRect(), renderSurfaceLayer->maskLayer() , renderSurfaceLayer->filters());
237 } 336 }
238 } 337 }
239 338
339 void CCLayerTreeHostImpl::updateRootScrollLayerImplTransform()
340 {
341 if (m_rootScrollLayerImpl) {
342 m_rootScrollLayerImpl->setImplTransform(implTransform());
343 }
344 }
345
240 void CCLayerTreeHostImpl::calculateRenderSurfaceLayerList(CCLayerList& renderSur faceLayerList) 346 void CCLayerTreeHostImpl::calculateRenderSurfaceLayerList(CCLayerList& renderSur faceLayerList)
241 { 347 {
242 ASSERT(renderSurfaceLayerList.isEmpty()); 348 ASSERT(renderSurfaceLayerList.isEmpty());
243 ASSERT(m_rootLayerImpl); 349 ASSERT(m_rootLayerImpl);
244 ASSERT(m_renderer); // For maxTextureSize. 350 ASSERT(m_renderer); // For maxTextureSize.
245 351
246 { 352 {
353 updateRootScrollLayerImplTransform();
354
247 TRACE_EVENT0("cc", "CCLayerTreeHostImpl::calcDrawEtc"); 355 TRACE_EVENT0("cc", "CCLayerTreeHostImpl::calcDrawEtc");
248 CCLayerTreeHostCommon::calculateDrawTransforms(m_rootLayerImpl.get(), de viceViewportSize(), m_deviceScaleFactor, &m_layerSorter, rendererCapabilities(). maxTextureSize, renderSurfaceLayerList); 356 CCLayerTreeHostCommon::calculateDrawTransforms(m_rootLayerImpl.get(), de viceViewportSize(), m_deviceScaleFactor, &m_layerSorter, rendererCapabilities(). maxTextureSize, renderSurfaceLayerList);
249 CCLayerTreeHostCommon::calculateVisibleRects(renderSurfaceLayerList); 357 CCLayerTreeHostCommon::calculateVisibleRects(renderSurfaceLayerList);
250 358
251 trackDamageForAllSurfaces(m_rootLayerImpl.get(), renderSurfaceLayerList) ; 359 trackDamageForAllSurfaces(m_rootLayerImpl.get(), renderSurfaceLayerList) ;
252 } 360 }
253 } 361 }
254 362
255 void CCLayerTreeHostImpl::FrameData::appendRenderPass(scoped_ptr<CCRenderPass> r enderPass) 363 void CCLayerTreeHostImpl::FrameData::appendRenderPass(scoped_ptr<CCRenderPass> r enderPass)
256 { 364 {
(...skipping 507 matching lines...) Expand 10 before | Expand all | Expand 10 after
764 } 872 }
765 873
766 void CCLayerTreeHostImpl::setViewportSize(const IntSize& layoutViewportSize, con st IntSize& deviceViewportSize) 874 void CCLayerTreeHostImpl::setViewportSize(const IntSize& layoutViewportSize, con st IntSize& deviceViewportSize)
767 { 875 {
768 if (layoutViewportSize == m_layoutViewportSize && deviceViewportSize == m_de viceViewportSize) 876 if (layoutViewportSize == m_layoutViewportSize && deviceViewportSize == m_de viceViewportSize)
769 return; 877 return;
770 878
771 m_layoutViewportSize = layoutViewportSize; 879 m_layoutViewportSize = layoutViewportSize;
772 m_deviceViewportSize = deviceViewportSize; 880 m_deviceViewportSize = deviceViewportSize;
773 881
882 m_pinchZoomViewport.setLayoutViewportSize(FloatSize(layoutViewportSize));
883
774 updateMaxScrollPosition(); 884 updateMaxScrollPosition();
775 885
776 if (m_renderer) 886 if (m_renderer)
777 m_renderer->viewportChanged(); 887 m_renderer->viewportChanged();
778 888
779 m_client->onCanDrawStateChanged(canDraw()); 889 m_client->onCanDrawStateChanged(canDraw());
780 } 890 }
781 891
782 static void adjustScrollsForPageScaleChange(CCLayerImpl* layerImpl, float pageSc aleChange) 892 static void adjustScrollsForPageScaleChange(CCLayerImpl* layerImpl, float pageSc aleChange)
783 { 893 {
(...skipping 13 matching lines...) Expand all
797 907
798 void CCLayerTreeHostImpl::setDeviceScaleFactor(float deviceScaleFactor) 908 void CCLayerTreeHostImpl::setDeviceScaleFactor(float deviceScaleFactor)
799 { 909 {
800 if (deviceScaleFactor == m_deviceScaleFactor) 910 if (deviceScaleFactor == m_deviceScaleFactor)
801 return; 911 return;
802 m_deviceScaleFactor = deviceScaleFactor; 912 m_deviceScaleFactor = deviceScaleFactor;
803 913
804 updateMaxScrollPosition(); 914 updateMaxScrollPosition();
805 } 915 }
806 916
917 float CCLayerTreeHostImpl::pageScaleFactor() const
918 {
919 return m_pinchZoomViewport.pageScaleFactor();
920 }
807 921
808 void CCLayerTreeHostImpl::setPageScaleFactorAndLimits(float pageScale, float min PageScale, float maxPageScale) 922 void CCLayerTreeHostImpl::setPageScaleFactorAndLimits(float pageScaleFactor, flo at minPageScaleFactor, float maxPageScaleFactor)
809 { 923 {
810 if (!pageScale) 924 if (!pageScaleFactor)
811 return; 925 return;
812 926
813 if (m_sentPageScaleDelta == 1 && pageScale == m_pageScale && minPageScale == m_minPageScale && maxPageScale == m_maxPageScale) 927 float pageScaleChange = pageScaleFactor / m_pinchZoomViewport.pageScaleFacto r();
814 return; 928 m_pinchZoomViewport.setPageScaleFactorAndLimits(pageScaleFactor, minPageScal eFactor, maxPageScaleFactor);
815 929
816 m_minPageScale = minPageScale; 930 if (!CCSettings::pageScalePinchZoomEnabled()) {
817 m_maxPageScale = maxPageScale; 931 if (pageScaleChange != 1)
818 932 adjustScrollsForPageScaleChange(m_rootScrollLayerImpl, pageScaleChan ge);
819 float pageScaleChange = pageScale / m_pageScale; 933 }
820 m_pageScale = pageScale;
821
822 if (pageScaleChange != 1)
823 adjustScrollsForPageScaleChange(m_rootScrollLayerImpl, pageScaleChange);
824 934
825 // Clamp delta to limits and refresh display matrix. 935 // Clamp delta to limits and refresh display matrix.
826 setPageScaleDelta(m_pageScaleDelta / m_sentPageScaleDelta); 936 setPageScaleDelta(m_pinchZoomViewport.pageScaleDelta() / m_pinchZoomViewport .sentPageScaleDelta());
827 m_sentPageScaleDelta = 1; 937 m_pinchZoomViewport.setSentPageScaleDelta(1);
828 if (m_rootScrollLayerImpl)
829 m_rootScrollLayerImpl->setPageScaleDelta(m_pageScaleDelta);
830 } 938 }
831 939
832 void CCLayerTreeHostImpl::setPageScaleDelta(float delta) 940 void CCLayerTreeHostImpl::setPageScaleDelta(float delta)
833 { 941 {
834 // Clamp to the current min/max limits. 942 m_pinchZoomViewport.setPageScaleDelta(delta);
835 float finalMagnifyScale = m_pageScale * delta;
836 if (m_minPageScale && finalMagnifyScale < m_minPageScale)
837 delta = m_minPageScale / m_pageScale;
838 else if (m_maxPageScale && finalMagnifyScale > m_maxPageScale)
839 delta = m_maxPageScale / m_pageScale;
840
841 if (delta == m_pageScaleDelta)
842 return;
843
844 m_pageScaleDelta = delta;
845 943
846 updateMaxScrollPosition(); 944 updateMaxScrollPosition();
847 if (m_rootScrollLayerImpl)
848 m_rootScrollLayerImpl->setPageScaleDelta(m_pageScaleDelta);
849 } 945 }
850 946
851 void CCLayerTreeHostImpl::updateMaxScrollPosition() 947 void CCLayerTreeHostImpl::updateMaxScrollPosition()
852 { 948 {
853 if (!m_rootScrollLayerImpl || !m_rootScrollLayerImpl->children().size()) 949 if (!m_rootScrollLayerImpl || !m_rootScrollLayerImpl->children().size())
854 return; 950 return;
855 951
856 FloatSize viewBounds = m_deviceViewportSize; 952 FloatSize viewBounds = m_deviceViewportSize;
857 if (CCLayerImpl* clipLayer = m_rootScrollLayerImpl->parent()) { 953 if (CCLayerImpl* clipLayer = m_rootScrollLayerImpl->parent()) {
858 // Compensate for non-overlay scrollbars. 954 // Compensate for non-overlay scrollbars.
859 if (clipLayer->masksToBounds()) { 955 if (clipLayer->masksToBounds()) {
860 viewBounds = clipLayer->bounds(); 956 viewBounds = clipLayer->bounds();
861 viewBounds.scale(m_deviceScaleFactor); 957 viewBounds.scale(m_deviceScaleFactor);
862 } 958 }
863 } 959 }
864 viewBounds.scale(1 / m_pageScaleDelta);
865 960
866 // maxScroll is computed in physical pixels, but scroll positions are in lay out pixels. 961 IntSize contentBounds = contentSize();
867 IntSize maxScroll = contentSize() - expandedIntSize(viewBounds); 962 if (CCSettings::pageScalePinchZoomEnabled()) {
963 // Pinch with pageScale scrolls entirely in layout space. contentSize
964 // returns the bounds including the page scale factor, so calculate the
965 // pre page-scale layout size here.
966 float pageScaleFactor = m_pinchZoomViewport.pageScaleFactor();
967 contentBounds.setWidth(contentBounds.width() / pageScaleFactor);
968 contentBounds.setHeight(contentBounds.height() / pageScaleFactor);
969 } else {
970 viewBounds.scale(1 / m_pinchZoomViewport.pageScaleDelta());
971 }
972
973 IntSize maxScroll = contentBounds - expandedIntSize(viewBounds);
868 maxScroll.scale(1 / m_deviceScaleFactor); 974 maxScroll.scale(1 / m_deviceScaleFactor);
975
869 // The viewport may be larger than the contents in some cases, such as 976 // The viewport may be larger than the contents in some cases, such as
870 // having a vertical scrollbar but no horizontal overflow. 977 // having a vertical scrollbar but no horizontal overflow.
871 maxScroll.clampNegativeToZero(); 978 maxScroll.clampNegativeToZero();
872 979
873 m_rootScrollLayerImpl->setMaxScrollPosition(maxScroll); 980 m_rootScrollLayerImpl->setMaxScrollPosition(maxScroll);
874 } 981 }
875 982
876 void CCLayerTreeHostImpl::setNeedsRedraw() 983 void CCLayerTreeHostImpl::setNeedsRedraw()
877 { 984 {
878 m_client->setNeedsRedrawOnImplThread(); 985 m_client->setNeedsRedrawOnImplThread();
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
941 m_currentlyScrollingLayerImpl = potentiallyScrollingLayerImpl; 1048 m_currentlyScrollingLayerImpl = potentiallyScrollingLayerImpl;
942 // Gesture events need to be transformed from screen coordinates to loca l layer coordinates 1049 // Gesture events need to be transformed from screen coordinates to loca l layer coordinates
943 // so that the scrolling contents exactly follow the user's finger. In c ontrast, wheel 1050 // so that the scrolling contents exactly follow the user's finger. In c ontrast, wheel
944 // events are already in local layer coordinates so we can just apply th em directly. 1051 // events are already in local layer coordinates so we can just apply th em directly.
945 m_scrollDeltaIsInScreenSpace = (type == Gesture); 1052 m_scrollDeltaIsInScreenSpace = (type == Gesture);
946 return ScrollStarted; 1053 return ScrollStarted;
947 } 1054 }
948 return ScrollIgnored; 1055 return ScrollIgnored;
949 } 1056 }
950 1057
951 static FloatSize scrollLayerWithScreenSpaceDelta(CCLayerImpl& layerImpl, const F loatPoint& screenSpacePoint, const FloatSize& screenSpaceDelta) 1058 static FloatSize scrollLayerWithScreenSpaceDelta(CCPinchZoomViewport* viewport, CCLayerImpl& layerImpl, const FloatPoint& screenSpacePoint, const FloatSize& scr eenSpaceDelta)
952 { 1059 {
953 // Layers with non-invertible screen space transforms should not have passed the scroll hit 1060 // Layers with non-invertible screen space transforms should not have passed the scroll hit
954 // test in the first place. 1061 // test in the first place.
955 ASSERT(layerImpl.screenSpaceTransform().isInvertible()); 1062 ASSERT(layerImpl.screenSpaceTransform().isInvertible());
956 WebTransformationMatrix inverseScreenSpaceTransform = layerImpl.screenSpaceT ransform().inverse(); 1063 WebTransformationMatrix inverseScreenSpaceTransform = layerImpl.screenSpaceT ransform().inverse();
957 1064
958 // First project the scroll start and end points to local layer space to fin d the scroll delta 1065 // First project the scroll start and end points to local layer space to fin d the scroll delta
959 // in layer coordinates. 1066 // in layer coordinates.
960 bool startClipped, endClipped; 1067 bool startClipped, endClipped;
961 FloatPoint screenSpaceEndPoint = screenSpacePoint + screenSpaceDelta; 1068 FloatPoint screenSpaceEndPoint = screenSpacePoint + screenSpaceDelta;
962 FloatPoint localStartPoint = CCMathUtil::projectPoint(inverseScreenSpaceTran sform, screenSpacePoint, startClipped); 1069 FloatPoint localStartPoint = CCMathUtil::projectPoint(inverseScreenSpaceTran sform, screenSpacePoint, startClipped);
963 FloatPoint localEndPoint = CCMathUtil::projectPoint(inverseScreenSpaceTransf orm, screenSpaceEndPoint, endClipped); 1070 FloatPoint localEndPoint = CCMathUtil::projectPoint(inverseScreenSpaceTransf orm, screenSpaceEndPoint, endClipped);
964 1071
965 // In general scroll point coordinates should not get clipped. 1072 // In general scroll point coordinates should not get clipped.
966 ASSERT(!startClipped); 1073 ASSERT(!startClipped);
967 ASSERT(!endClipped); 1074 ASSERT(!endClipped);
968 if (startClipped || endClipped) 1075 if (startClipped || endClipped)
969 return FloatSize(); 1076 return FloatSize();
970 1077
971 // Apply the scroll delta. 1078 // Apply the scroll delta.
972 FloatSize previousDelta(layerImpl.scrollDelta()); 1079 FloatSize previousDelta(layerImpl.scrollDelta());
973 layerImpl.scrollBy(localEndPoint - localStartPoint); 1080 FloatSize unscrolled = layerImpl.scrollBy(localEndPoint - localStartPoint);
1081
1082 if (viewport)
1083 viewport->applyScroll(unscrolled);
974 1084
975 // Calculate the applied scroll delta in screen space coordinates. 1085 // Calculate the applied scroll delta in screen space coordinates.
976 FloatPoint actualLocalEndPoint = localStartPoint + layerImpl.scrollDelta() - previousDelta; 1086 FloatPoint actualLocalEndPoint = localStartPoint + layerImpl.scrollDelta() - previousDelta;
977 FloatPoint actualScreenSpaceEndPoint = CCMathUtil::mapPoint(layerImpl.screen SpaceTransform(), actualLocalEndPoint, endClipped); 1087 FloatPoint actualScreenSpaceEndPoint = CCMathUtil::mapPoint(layerImpl.screen SpaceTransform(), actualLocalEndPoint, endClipped);
978 ASSERT(!endClipped); 1088 ASSERT(!endClipped);
979 if (endClipped) 1089 if (endClipped)
980 return FloatSize(); 1090 return FloatSize();
981 return actualScreenSpaceEndPoint - screenSpacePoint; 1091 return actualScreenSpaceEndPoint - screenSpacePoint;
982 } 1092 }
983 1093
(...skipping 11 matching lines...) Expand all
995 return; 1105 return;
996 1106
997 FloatSize pendingDelta(scrollDelta); 1107 FloatSize pendingDelta(scrollDelta);
998 1108
999 pendingDelta.scale(m_deviceScaleFactor); 1109 pendingDelta.scale(m_deviceScaleFactor);
1000 1110
1001 for (CCLayerImpl* layerImpl = m_currentlyScrollingLayerImpl; layerImpl; laye rImpl = layerImpl->parent()) { 1111 for (CCLayerImpl* layerImpl = m_currentlyScrollingLayerImpl; layerImpl; laye rImpl = layerImpl->parent()) {
1002 if (!layerImpl->scrollable()) 1112 if (!layerImpl->scrollable())
1003 continue; 1113 continue;
1004 1114
1115 CCPinchZoomViewport* viewport = layerImpl == m_rootScrollLayerImpl ? &m_ pinchZoomViewport : 0;
1005 FloatSize appliedDelta; 1116 FloatSize appliedDelta;
1006 if (m_scrollDeltaIsInScreenSpace) 1117 if (m_scrollDeltaIsInScreenSpace)
1007 appliedDelta = scrollLayerWithScreenSpaceDelta(*layerImpl, viewportP oint, pendingDelta); 1118 appliedDelta = scrollLayerWithScreenSpaceDelta(viewport, *layerImpl, viewportPoint, pendingDelta);
1008 else 1119 else
1009 appliedDelta = scrollLayerWithLocalDelta(*layerImpl, pendingDelta); 1120 appliedDelta = scrollLayerWithLocalDelta(*layerImpl, pendingDelta);
1010 1121
1011 // If the layer wasn't able to move, try the next one in the hierarchy. 1122 // If the layer wasn't able to move, try the next one in the hierarchy.
1012 float moveThresholdSquared = 0.1f * 0.1f; 1123 float moveThresholdSquared = 0.1f * 0.1f;
1013 if (appliedDelta.diagonalLengthSquared() < moveThresholdSquared) 1124 if (appliedDelta.diagonalLengthSquared() < moveThresholdSquared)
1014 continue; 1125 continue;
1015 1126
1016 // If the applied delta is within 45 degrees of the input delta, bail ou t to make it easier 1127 // If the applied delta is within 45 degrees of the input delta, bail ou t to make it easier
1017 // to scroll just one layer in one direction without affecting any of it s parents. 1128 // to scroll just one layer in one direction without affecting any of it s parents.
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
1062 TRACE_EVENT0("cc", "CCLayerTreeHostImpl::pinchGestureUpdate"); 1173 TRACE_EVENT0("cc", "CCLayerTreeHostImpl::pinchGestureUpdate");
1063 1174
1064 if (!m_rootScrollLayerImpl) 1175 if (!m_rootScrollLayerImpl)
1065 return; 1176 return;
1066 1177
1067 if (m_previousPinchAnchor == IntPoint::zero()) 1178 if (m_previousPinchAnchor == IntPoint::zero())
1068 m_previousPinchAnchor = anchor; 1179 m_previousPinchAnchor = anchor;
1069 1180
1070 // Keep the center-of-pinch anchor specified by (x, y) in a stable 1181 // Keep the center-of-pinch anchor specified by (x, y) in a stable
1071 // position over the course of the magnify. 1182 // position over the course of the magnify.
1072 FloatPoint previousScaleAnchor(m_previousPinchAnchor.x() / m_pageScaleDelta, m_previousPinchAnchor.y() / m_pageScaleDelta); 1183 float pageScaleDelta = m_pinchZoomViewport.pageScaleDelta();
1073 setPageScaleDelta(m_pageScaleDelta * magnifyDelta); 1184 FloatPoint previousScaleAnchor(m_previousPinchAnchor.x() / pageScaleDelta,
1074 FloatPoint newScaleAnchor(anchor.x() / m_pageScaleDelta, anchor.y() / m_page ScaleDelta); 1185 m_previousPinchAnchor.y() / pageScaleDelta);
1186 setPageScaleDelta(pageScaleDelta * magnifyDelta);
1187 pageScaleDelta = m_pinchZoomViewport.pageScaleDelta();
1188 FloatPoint newScaleAnchor(anchor.x() / pageScaleDelta, anchor.y() / pageScal eDelta);
1075 FloatSize move = previousScaleAnchor - newScaleAnchor; 1189 FloatSize move = previousScaleAnchor - newScaleAnchor;
1076 1190
1077 m_previousPinchAnchor = anchor; 1191 m_previousPinchAnchor = anchor;
1078 1192
1079 m_rootScrollLayerImpl->scrollBy(roundedIntSize(move)); 1193 if (CCSettings::pageScalePinchZoomEnabled()) {
1194 // Compute the application of the delta with respect to the current page zoom of the page.
1195 move.scale(1 / (m_pinchZoomViewport.pageScaleFactor() * m_deviceScaleFac tor));
1196 }
1197
1198 FloatSize scrollOverflow = CCSettings::pageScalePinchZoomEnabled() ? m_pinch ZoomViewport.applyScroll(move) : move;
1199 m_rootScrollLayerImpl->scrollBy(roundedIntSize(scrollOverflow));
1080 1200
1081 if (m_rootScrollLayerImpl->scrollbarAnimationController()) 1201 if (m_rootScrollLayerImpl->scrollbarAnimationController())
1082 m_rootScrollLayerImpl->scrollbarAnimationController()->didPinchGestureUp date(); 1202 m_rootScrollLayerImpl->scrollbarAnimationController()->didPinchGestureUp date();
1083 1203
1084 m_client->setNeedsCommitOnImplThread(); 1204 m_client->setNeedsCommitOnImplThread();
1085 m_client->setNeedsRedrawOnImplThread(); 1205 m_client->setNeedsRedrawOnImplThread();
1086 } 1206 }
1087 1207
1088 void CCLayerTreeHostImpl::pinchGestureEnd() 1208 void CCLayerTreeHostImpl::pinchGestureEnd()
1089 { 1209 {
1090 m_pinchGestureActive = false; 1210 m_pinchGestureActive = false;
1091 1211
1092 if (m_rootScrollLayerImpl && m_rootScrollLayerImpl->scrollbarAnimationContro ller()) 1212 if (m_rootScrollLayerImpl && m_rootScrollLayerImpl->scrollbarAnimationContro ller())
1093 m_rootScrollLayerImpl->scrollbarAnimationController()->didPinchGestureEn d(); 1213 m_rootScrollLayerImpl->scrollbarAnimationController()->didPinchGestureEn d();
1094 1214
1095 m_client->setNeedsCommitOnImplThread(); 1215 m_client->setNeedsCommitOnImplThread();
1096 } 1216 }
1097 1217
1098 void CCLayerTreeHostImpl::computeDoubleTapZoomDeltas(CCScrollAndScaleSet* scroll Info) 1218 void CCLayerTreeHostImpl::computeDoubleTapZoomDeltas(CCScrollAndScaleSet* scroll Info)
1099 { 1219 {
1100 float pageScale = m_pageScaleAnimation->finalPageScale(); 1220 float pageScale = m_pageScaleAnimation->finalPageScale();
1101 IntSize scrollOffset = m_pageScaleAnimation->finalScrollOffset(); 1221 IntSize scrollOffset = m_pageScaleAnimation->finalScrollOffset();
1102 scrollOffset.scale(m_pageScale / pageScale); 1222 scrollOffset.scale(m_pinchZoomViewport.pageScaleFactor() / pageScale);
1103 makeScrollAndScaleSet(scrollInfo, scrollOffset, pageScale); 1223 makeScrollAndScaleSet(scrollInfo, scrollOffset, pageScale);
1104 } 1224 }
1105 1225
1106 void CCLayerTreeHostImpl::computePinchZoomDeltas(CCScrollAndScaleSet* scrollInfo ) 1226 void CCLayerTreeHostImpl::computePinchZoomDeltas(CCScrollAndScaleSet* scrollInfo )
1107 { 1227 {
1108 if (!m_rootScrollLayerImpl) 1228 if (!m_rootScrollLayerImpl)
1109 return; 1229 return;
1110 1230
1111 // Only send fake scroll/zoom deltas if we're pinch zooming out by a 1231 // Only send fake scroll/zoom deltas if we're pinch zooming out by a
1112 // significant amount. This also ensures only one fake delta set will be 1232 // significant amount. This also ensures only one fake delta set will be
1113 // sent. 1233 // sent.
1114 const float pinchZoomOutSensitivity = 0.95f; 1234 const float pinchZoomOutSensitivity = 0.95f;
1115 if (m_pageScaleDelta > pinchZoomOutSensitivity) 1235 if (m_pinchZoomViewport.pageScaleDelta() > pinchZoomOutSensitivity)
1116 return; 1236 return;
1117 1237
1118 // Compute where the scroll offset/page scale would be if fully pinch-zoomed 1238 // Compute where the scroll offset/page scale would be if fully pinch-zoomed
1119 // out from the anchor point. 1239 // out from the anchor point.
1120 IntSize scrollBegin = flooredIntSize(m_rootScrollLayerImpl->scrollPosition() + m_rootScrollLayerImpl->scrollDelta()); 1240 IntSize scrollBegin = flooredIntSize(m_rootScrollLayerImpl->scrollPosition() + m_rootScrollLayerImpl->scrollDelta());
1121 scrollBegin.scale(m_pageScaleDelta); 1241 scrollBegin.scale(m_pinchZoomViewport.pageScaleDelta());
1122 float scaleBegin = m_pageScale * m_pageScaleDelta; 1242 float scaleBegin = m_pinchZoomViewport.totalPageScaleFactor();
1123 float pageScaleDeltaToSend = m_minPageScale / m_pageScale; 1243 float pageScaleDeltaToSend = m_pinchZoomViewport.minPageScaleFactor() / m_pi nchZoomViewport.pageScaleFactor();
1124 FloatSize scaledContentsSize = contentSize(); 1244 FloatSize scaledContentsSize = contentSize();
1125 scaledContentsSize.scale(pageScaleDeltaToSend); 1245 scaledContentsSize.scale(pageScaleDeltaToSend);
1126 1246
1127 FloatSize anchor = toSize(m_previousPinchAnchor); 1247 FloatSize anchor = toSize(m_previousPinchAnchor);
1128 FloatSize scrollEnd = scrollBegin + anchor; 1248 FloatSize scrollEnd = scrollBegin + anchor;
1129 scrollEnd.scale(m_minPageScale / scaleBegin); 1249 scrollEnd.scale(m_pinchZoomViewport.minPageScaleFactor() / scaleBegin);
1130 scrollEnd -= anchor; 1250 scrollEnd -= anchor;
1131 scrollEnd = scrollEnd.shrunkTo(roundedIntSize(scaledContentsSize - m_deviceV iewportSize)).expandedTo(FloatSize(0, 0)); 1251 scrollEnd = scrollEnd.shrunkTo(roundedIntSize(scaledContentsSize - m_deviceV iewportSize)).expandedTo(FloatSize(0, 0));
1132 scrollEnd.scale(1 / pageScaleDeltaToSend); 1252 scrollEnd.scale(1 / pageScaleDeltaToSend);
1133 scrollEnd.scale(m_deviceScaleFactor); 1253 scrollEnd.scale(m_deviceScaleFactor);
1134 1254
1135 makeScrollAndScaleSet(scrollInfo, roundedIntSize(scrollEnd), m_minPageScale) ; 1255 makeScrollAndScaleSet(scrollInfo, roundedIntSize(scrollEnd), m_pinchZoomView port.minPageScaleFactor());
1136 } 1256 }
1137 1257
1138 void CCLayerTreeHostImpl::makeScrollAndScaleSet(CCScrollAndScaleSet* scrollInfo, const IntSize& scrollOffset, float pageScale) 1258 void CCLayerTreeHostImpl::makeScrollAndScaleSet(CCScrollAndScaleSet* scrollInfo, const IntSize& scrollOffset, float pageScale)
1139 { 1259 {
1140 if (!m_rootScrollLayerImpl) 1260 if (!m_rootScrollLayerImpl)
1141 return; 1261 return;
1142 1262
1143 CCLayerTreeHostCommon::ScrollUpdateInfo scroll; 1263 CCLayerTreeHostCommon::ScrollUpdateInfo scroll;
1144 scroll.layerId = m_rootScrollLayerImpl->id(); 1264 scroll.layerId = m_rootScrollLayerImpl->id();
1145 scroll.scrollDelta = scrollOffset - toSize(m_rootScrollLayerImpl->scrollPosi tion()); 1265 scroll.scrollDelta = scrollOffset - toSize(m_rootScrollLayerImpl->scrollPosi tion());
1146 scrollInfo->scrolls.append(scroll); 1266 scrollInfo->scrolls.append(scroll);
1147 m_rootScrollLayerImpl->setSentScrollDelta(scroll.scrollDelta); 1267 m_rootScrollLayerImpl->setSentScrollDelta(scroll.scrollDelta);
1148 m_sentPageScaleDelta = scrollInfo->pageScaleDelta = pageScale / m_pageScale; 1268 scrollInfo->pageScaleDelta = pageScale / m_pinchZoomViewport.pageScaleFactor ();
1269 m_pinchZoomViewport.setSentPageScaleDelta(scrollInfo->pageScaleDelta);
1149 } 1270 }
1150 1271
1151 static void collectScrollDeltas(CCScrollAndScaleSet* scrollInfo, CCLayerImpl* la yerImpl) 1272 static void collectScrollDeltas(CCScrollAndScaleSet* scrollInfo, CCLayerImpl* la yerImpl)
1152 { 1273 {
1153 if (!layerImpl) 1274 if (!layerImpl)
1154 return; 1275 return;
1155 1276
1156 if (!layerImpl->scrollDelta().isZero()) { 1277 if (!layerImpl->scrollDelta().isZero()) {
1157 IntSize scrollDelta = flooredIntSize(layerImpl->scrollDelta()); 1278 IntSize scrollDelta = flooredIntSize(layerImpl->scrollDelta());
1158 CCLayerTreeHostCommon::ScrollUpdateInfo scroll; 1279 CCLayerTreeHostCommon::ScrollUpdateInfo scroll;
1159 scroll.layerId = layerImpl->id(); 1280 scroll.layerId = layerImpl->id();
1160 scroll.scrollDelta = scrollDelta; 1281 scroll.scrollDelta = scrollDelta;
1161 scrollInfo->scrolls.append(scroll); 1282 scrollInfo->scrolls.append(scroll);
1162 layerImpl->setSentScrollDelta(scrollDelta); 1283 layerImpl->setSentScrollDelta(scrollDelta);
1163 } 1284 }
1164 1285
1165 for (size_t i = 0; i < layerImpl->children().size(); ++i) 1286 for (size_t i = 0; i < layerImpl->children().size(); ++i)
1166 collectScrollDeltas(scrollInfo, layerImpl->children()[i]); 1287 collectScrollDeltas(scrollInfo, layerImpl->children()[i]);
1167 } 1288 }
1168 1289
1169 PassOwnPtr<CCScrollAndScaleSet> CCLayerTreeHostImpl::processScrollDeltas() 1290 PassOwnPtr<CCScrollAndScaleSet> CCLayerTreeHostImpl::processScrollDeltas()
1170 { 1291 {
1171 OwnPtr<CCScrollAndScaleSet> scrollInfo = adoptPtr(new CCScrollAndScaleSet()) ; 1292 OwnPtr<CCScrollAndScaleSet> scrollInfo = adoptPtr(new CCScrollAndScaleSet()) ;
1172 1293
1173 if (m_pinchGestureActive || m_pageScaleAnimation) { 1294 if (m_pinchGestureActive || m_pageScaleAnimation) {
1174 m_sentPageScaleDelta = scrollInfo->pageScaleDelta = 1; 1295 scrollInfo->pageScaleDelta = 1;
1175 if (m_pinchGestureActive) 1296 m_pinchZoomViewport.setSentPageScaleDelta(1);
1176 computePinchZoomDeltas(scrollInfo.get()); 1297 // FIXME(aelias): Make these painting optimizations compatible with
1177 else if (m_pageScaleAnimation.get()) 1298 // compositor-side scaling.
1178 computeDoubleTapZoomDeltas(scrollInfo.get()); 1299 if (!CCSettings::pageScalePinchZoomEnabled()) {
1300 if (m_pinchGestureActive)
1301 computePinchZoomDeltas(scrollInfo.get());
1302 else if (m_pageScaleAnimation.get())
1303 computeDoubleTapZoomDeltas(scrollInfo.get());
1304 }
1179 return scrollInfo.release(); 1305 return scrollInfo.release();
1180 } 1306 }
1181 1307
1182 collectScrollDeltas(scrollInfo.get(), m_rootLayerImpl.get()); 1308 collectScrollDeltas(scrollInfo.get(), m_rootLayerImpl.get());
1183 m_sentPageScaleDelta = scrollInfo->pageScaleDelta = m_pageScaleDelta; 1309 scrollInfo->pageScaleDelta = m_pinchZoomViewport.pageScaleDelta();
1310 m_pinchZoomViewport.setSentPageScaleDelta(scrollInfo->pageScaleDelta);
1184 1311
1185 return scrollInfo.release(); 1312 return scrollInfo.release();
1186 } 1313 }
1187 1314
1315 WebTransformationMatrix CCLayerTreeHostImpl::implTransform() const
1316 {
1317 return m_pinchZoomViewport.implTransform();
1318 }
1319
1188 void CCLayerTreeHostImpl::setFullRootLayerDamage() 1320 void CCLayerTreeHostImpl::setFullRootLayerDamage()
1189 { 1321 {
1190 if (m_rootLayerImpl) { 1322 if (m_rootLayerImpl) {
1191 CCRenderSurface* renderSurface = m_rootLayerImpl->renderSurface(); 1323 CCRenderSurface* renderSurface = m_rootLayerImpl->renderSurface();
1192 if (renderSurface) 1324 if (renderSurface)
1193 renderSurface->damageTracker()->forceFullDamageNextUpdate(); 1325 renderSurface->damageTracker()->forceFullDamageNextUpdate();
1194 } 1326 }
1195 } 1327 }
1196 1328
1197 void CCLayerTreeHostImpl::animatePageScale(double monotonicTime) 1329 void CCLayerTreeHostImpl::animatePageScale(double monotonicTime)
1198 { 1330 {
1199 if (!m_pageScaleAnimation || !m_rootScrollLayerImpl) 1331 if (!m_pageScaleAnimation || !m_rootScrollLayerImpl)
1200 return; 1332 return;
1201 1333
1202 IntSize scrollTotal = flooredIntSize(m_rootScrollLayerImpl->scrollPosition() + m_rootScrollLayerImpl->scrollDelta()); 1334 IntSize scrollTotal = flooredIntSize(m_rootScrollLayerImpl->scrollPosition() + m_rootScrollLayerImpl->scrollDelta());
1203 1335
1204 setPageScaleDelta(m_pageScaleAnimation->pageScaleAtTime(monotonicTime) / m_p ageScale); 1336 setPageScaleDelta(m_pageScaleAnimation->pageScaleAtTime(monotonicTime) / m_p inchZoomViewport.pageScaleFactor());
1205 IntSize nextScroll = m_pageScaleAnimation->scrollOffsetAtTime(monotonicTime) ; 1337 IntSize nextScroll = m_pageScaleAnimation->scrollOffsetAtTime(monotonicTime) ;
1206 nextScroll.scale(1 / m_pageScaleDelta); 1338 nextScroll.scale(1 / m_pinchZoomViewport.pageScaleDelta());
1207 m_rootScrollLayerImpl->scrollBy(nextScroll - scrollTotal); 1339 m_rootScrollLayerImpl->scrollBy(nextScroll - scrollTotal);
1208 m_client->setNeedsRedrawOnImplThread(); 1340 m_client->setNeedsRedrawOnImplThread();
1209 1341
1210 if (m_pageScaleAnimation->isAnimationCompleteAtTime(monotonicTime)) { 1342 if (m_pageScaleAnimation->isAnimationCompleteAtTime(monotonicTime)) {
1211 m_pageScaleAnimation.clear(); 1343 m_pageScaleAnimation.clear();
1212 m_client->setNeedsCommitOnImplThread(); 1344 m_client->setNeedsCommitOnImplThread();
1213 } 1345 }
1214 } 1346 }
1215 1347
1216 void CCLayerTreeHostImpl::animateLayers(double monotonicTime, double wallClockTi me) 1348 void CCLayerTreeHostImpl::animateLayers(double monotonicTime, double wallClockTi me)
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
1308 1440
1309 CCScrollbarAnimationController* scrollbarController = layer->scrollbarAnimat ionController(); 1441 CCScrollbarAnimationController* scrollbarController = layer->scrollbarAnimat ionController();
1310 if (scrollbarController && scrollbarController->animate(monotonicTime)) 1442 if (scrollbarController && scrollbarController->animate(monotonicTime))
1311 m_client->setNeedsRedrawOnImplThread(); 1443 m_client->setNeedsRedrawOnImplThread();
1312 1444
1313 for (size_t i = 0; i < layer->children().size(); ++i) 1445 for (size_t i = 0; i < layer->children().size(); ++i)
1314 animateScrollbarsRecursive(layer->children()[i], monotonicTime); 1446 animateScrollbarsRecursive(layer->children()[i], monotonicTime);
1315 } 1447 }
1316 1448
1317 } // namespace cc 1449 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698