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 <algorithm> | 9 #include <algorithm> |
10 | 10 |
(...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
292 | 292 |
293 void LayerTreeHostImpl::startPageScaleAnimation(gfx::Vector2d targetPosition, bo
ol anchorPoint, float pageScale, base::TimeTicks startTime, base::TimeDelta dura
tion) | 293 void LayerTreeHostImpl::startPageScaleAnimation(gfx::Vector2d targetPosition, bo
ol anchorPoint, float pageScale, base::TimeTicks startTime, base::TimeDelta dura
tion) |
294 { | 294 { |
295 if (!m_rootScrollLayerImpl) | 295 if (!m_rootScrollLayerImpl) |
296 return; | 296 return; |
297 | 297 |
298 gfx::Vector2dF scrollTotal = m_rootScrollLayerImpl->scrollOffset() + m_rootS
crollLayerImpl->scrollDelta(); | 298 gfx::Vector2dF scrollTotal = m_rootScrollLayerImpl->scrollOffset() + m_rootS
crollLayerImpl->scrollDelta(); |
299 gfx::SizeF scaledContentSize = contentSize(); | 299 gfx::SizeF scaledContentSize = contentSize(); |
300 if (!Settings::pageScalePinchZoomEnabled()) { | 300 if (!Settings::pageScalePinchZoomEnabled()) { |
301 scrollTotal.Scale(1 / m_pinchZoomViewport.pageScaleFactor()); | 301 scrollTotal.Scale(1 / m_pinchZoomViewport.pageScaleFactor()); |
302 scaledContentSize = scaledContentSize.Scale(1 / m_pinchZoomViewport.page
ScaleFactor()); | 302 scaledContentSize.Scale(1 / m_pinchZoomViewport.pageScaleFactor()); |
303 } | 303 } |
304 gfx::SizeF viewportSize = m_deviceViewportSize; | 304 gfx::SizeF viewportSize = gfx::ScaleSize(m_deviceViewportSize, 1 / m_deviceS
caleFactor); |
305 viewportSize = viewportSize.Scale(1 / m_deviceScaleFactor); | |
306 | 305 |
307 double startTimeSeconds = (startTime - base::TimeTicks()).InSecondsF(); | 306 double startTimeSeconds = (startTime - base::TimeTicks()).InSecondsF(); |
308 m_pageScaleAnimation = PageScaleAnimation::create(scrollTotal, m_pinchZoomVi
ewport.totalPageScaleFactor(), viewportSize, scaledContentSize, startTimeSeconds
); | 307 m_pageScaleAnimation = PageScaleAnimation::create(scrollTotal, m_pinchZoomVi
ewport.totalPageScaleFactor(), viewportSize, scaledContentSize, startTimeSeconds
); |
309 | 308 |
310 if (anchorPoint) { | 309 if (anchorPoint) { |
311 gfx::Vector2dF anchor(targetPosition); | 310 gfx::Vector2dF anchor(targetPosition); |
312 if (!Settings::pageScalePinchZoomEnabled()) | 311 if (!Settings::pageScalePinchZoomEnabled()) |
313 anchor.Scale(1 / pageScale); | 312 anchor.Scale(1 / pageScale); |
314 m_pageScaleAnimation->zoomWithAnchor(anchor, pageScale, duration.InSecon
dsF()); | 313 m_pageScaleAnimation->zoomWithAnchor(anchor, pageScale, duration.InSecon
dsF()); |
315 } else { | 314 } else { |
(...skipping 662 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
978 } | 977 } |
979 | 978 |
980 void LayerTreeHostImpl::updateMaxScrollOffset() | 979 void LayerTreeHostImpl::updateMaxScrollOffset() |
981 { | 980 { |
982 if (!m_rootScrollLayerImpl || !m_rootScrollLayerImpl->children().size()) | 981 if (!m_rootScrollLayerImpl || !m_rootScrollLayerImpl->children().size()) |
983 return; | 982 return; |
984 | 983 |
985 gfx::SizeF viewBounds = m_deviceViewportSize; | 984 gfx::SizeF viewBounds = m_deviceViewportSize; |
986 if (LayerImpl* clipLayer = m_rootScrollLayerImpl->parent()) { | 985 if (LayerImpl* clipLayer = m_rootScrollLayerImpl->parent()) { |
987 // Compensate for non-overlay scrollbars. | 986 // Compensate for non-overlay scrollbars. |
988 if (clipLayer->masksToBounds()) { | 987 if (clipLayer->masksToBounds()) |
989 viewBounds = clipLayer->bounds(); | 988 viewBounds = gfx::ScaleSize(clipLayer->bounds(), m_deviceScaleFactor
); |
990 viewBounds = viewBounds.Scale(m_deviceScaleFactor); | |
991 } | |
992 } | 989 } |
993 | 990 |
994 gfx::Size contentBounds = contentSize(); | 991 gfx::Size contentBounds = contentSize(); |
995 if (Settings::pageScalePinchZoomEnabled()) { | 992 if (Settings::pageScalePinchZoomEnabled()) { |
996 // Pinch with pageScale scrolls entirely in layout space. contentSize | 993 // Pinch with pageScale scrolls entirely in layout space. contentSize |
997 // returns the bounds including the page scale factor, so calculate the | 994 // returns the bounds including the page scale factor, so calculate the |
998 // pre page-scale layout size here. | 995 // pre page-scale layout size here. |
999 float pageScaleFactor = m_pinchZoomViewport.pageScaleFactor(); | 996 float pageScaleFactor = m_pinchZoomViewport.pageScaleFactor(); |
1000 contentBounds.set_width(contentBounds.width() / pageScaleFactor); | 997 contentBounds.set_width(contentBounds.width() / pageScaleFactor); |
1001 contentBounds.set_height(contentBounds.height() / pageScaleFactor); | 998 contentBounds.set_height(contentBounds.height() / pageScaleFactor); |
1002 } else { | 999 } else { |
1003 viewBounds = viewBounds.Scale(1 / m_pinchZoomViewport.pageScaleDelta()); | 1000 viewBounds.Scale(1 / m_pinchZoomViewport.pageScaleDelta()); |
1004 } | 1001 } |
1005 | 1002 |
1006 gfx::Vector2dF maxScroll = BottomRight(gfx::Rect(contentBounds)) - BottomRig
ht(gfx::RectF(viewBounds)); | 1003 gfx::Vector2dF maxScroll = BottomRight(gfx::Rect(contentBounds)) - BottomRig
ht(gfx::RectF(viewBounds)); |
1007 maxScroll.Scale(1 / m_deviceScaleFactor); | 1004 maxScroll.Scale(1 / m_deviceScaleFactor); |
1008 | 1005 |
1009 // The viewport may be larger than the contents in some cases, such as | 1006 // The viewport may be larger than the contents in some cases, such as |
1010 // having a vertical scrollbar but no horizontal overflow. | 1007 // having a vertical scrollbar but no horizontal overflow. |
1011 maxScroll.ClampToMin(gfx::Vector2dF()); | 1008 maxScroll.ClampToMin(gfx::Vector2dF()); |
1012 | 1009 |
1013 m_rootScrollLayerImpl->setMaxScrollOffset(gfx::ToFlooredVector2d(maxScroll))
; | 1010 m_rootScrollLayerImpl->setMaxScrollOffset(gfx::ToFlooredVector2d(maxScroll))
; |
(...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1283 const float pinchZoomOutSensitivity = 0.95f; | 1280 const float pinchZoomOutSensitivity = 0.95f; |
1284 if (m_pinchZoomViewport.pageScaleDelta() > pinchZoomOutSensitivity) | 1281 if (m_pinchZoomViewport.pageScaleDelta() > pinchZoomOutSensitivity) |
1285 return; | 1282 return; |
1286 | 1283 |
1287 // Compute where the scroll offset/page scale would be if fully pinch-zoomed | 1284 // Compute where the scroll offset/page scale would be if fully pinch-zoomed |
1288 // out from the anchor point. | 1285 // out from the anchor point. |
1289 gfx::Vector2dF scrollBegin = m_rootScrollLayerImpl->scrollOffset() + m_rootS
crollLayerImpl->scrollDelta(); | 1286 gfx::Vector2dF scrollBegin = m_rootScrollLayerImpl->scrollOffset() + m_rootS
crollLayerImpl->scrollDelta(); |
1290 scrollBegin.Scale(m_pinchZoomViewport.pageScaleDelta()); | 1287 scrollBegin.Scale(m_pinchZoomViewport.pageScaleDelta()); |
1291 float scaleBegin = m_pinchZoomViewport.totalPageScaleFactor(); | 1288 float scaleBegin = m_pinchZoomViewport.totalPageScaleFactor(); |
1292 float pageScaleDeltaToSend = m_pinchZoomViewport.minPageScaleFactor() / m_pi
nchZoomViewport.pageScaleFactor(); | 1289 float pageScaleDeltaToSend = m_pinchZoomViewport.minPageScaleFactor() / m_pi
nchZoomViewport.pageScaleFactor(); |
1293 gfx::SizeF scaledContentsSize = contentSize().Scale(pageScaleDeltaToSend); | 1290 gfx::SizeF scaledContentsSize = gfx::ScaleSize(contentSize(), pageScaleDelta
ToSend); |
1294 | 1291 |
1295 gfx::Vector2d anchorOffset = m_previousPinchAnchor.OffsetFromOrigin(); | 1292 gfx::Vector2d anchorOffset = m_previousPinchAnchor.OffsetFromOrigin(); |
1296 gfx::Vector2dF scrollEnd = scrollBegin + anchorOffset; | 1293 gfx::Vector2dF scrollEnd = scrollBegin + anchorOffset; |
1297 scrollEnd.Scale(m_pinchZoomViewport.minPageScaleFactor() / scaleBegin); | 1294 scrollEnd.Scale(m_pinchZoomViewport.minPageScaleFactor() / scaleBegin); |
1298 scrollEnd -= anchorOffset; | 1295 scrollEnd -= anchorOffset; |
1299 scrollEnd.ClampToMax(BottomRight(gfx::RectF(scaledContentsSize)) - BottomRig
ht(gfx::Rect(m_deviceViewportSize))); | 1296 scrollEnd.ClampToMax(BottomRight(gfx::RectF(scaledContentsSize)) - BottomRig
ht(gfx::Rect(m_deviceViewportSize))); |
1300 scrollEnd.ClampToMin(gfx::Vector2d()); | 1297 scrollEnd.ClampToMin(gfx::Vector2d()); |
1301 scrollEnd.Scale(1 / pageScaleDeltaToSend); | 1298 scrollEnd.Scale(1 / pageScaleDeltaToSend); |
1302 scrollEnd.Scale(m_deviceScaleFactor); | 1299 scrollEnd.Scale(m_deviceScaleFactor); |
1303 | 1300 |
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1493 ScrollbarAnimationController* scrollbarController = layer->scrollbarAnimatio
nController(); | 1490 ScrollbarAnimationController* scrollbarController = layer->scrollbarAnimatio
nController(); |
1494 double monotonicTime = (time - base::TimeTicks()).InSecondsF(); | 1491 double monotonicTime = (time - base::TimeTicks()).InSecondsF(); |
1495 if (scrollbarController && scrollbarController->animate(monotonicTime)) | 1492 if (scrollbarController && scrollbarController->animate(monotonicTime)) |
1496 m_client->setNeedsRedrawOnImplThread(); | 1493 m_client->setNeedsRedrawOnImplThread(); |
1497 | 1494 |
1498 for (size_t i = 0; i < layer->children().size(); ++i) | 1495 for (size_t i = 0; i < layer->children().size(); ++i) |
1499 animateScrollbarsRecursive(layer->children()[i], time); | 1496 animateScrollbarsRecursive(layer->children()[i], time); |
1500 } | 1497 } |
1501 | 1498 |
1502 } // namespace cc | 1499 } // namespace cc |
OLD | NEW |