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 "cc/layer_tree_host_impl.h" | 5 #include "cc/layer_tree_host_impl.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
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 736 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
747 | 747 |
748 void LayerTreeHostImpl::OnCanDrawStateChangedForTree(LayerTreeImpl*) | 748 void LayerTreeHostImpl::OnCanDrawStateChangedForTree(LayerTreeImpl*) |
749 { | 749 { |
750 m_client->onCanDrawStateChanged(canDraw()); | 750 m_client->onCanDrawStateChanged(canDraw()); |
751 } | 751 } |
752 | 752 |
753 CompositorFrameMetadata LayerTreeHostImpl::makeCompositorFrameMetadata() const | 753 CompositorFrameMetadata LayerTreeHostImpl::makeCompositorFrameMetadata() const |
754 { | 754 { |
755 CompositorFrameMetadata metadata; | 755 CompositorFrameMetadata metadata; |
756 metadata.page_scale_factor = m_pinchZoomViewport.total_page_scale_factor(); | 756 metadata.page_scale_factor = m_pinchZoomViewport.total_page_scale_factor(); |
757 metadata.viewport_size = m_pinchZoomViewport.ZoomedViewport().size(); | 757 metadata.viewport_size = activeTree()->ScrollableViewportSize(); |
758 metadata.root_layer_size = activeTree()->ScrollableSize(); | 758 metadata.root_layer_size = activeTree()->ScrollableSize(); |
759 metadata.min_page_scale_factor = m_pinchZoomViewport.min_page_scale_factor()
; | 759 metadata.min_page_scale_factor = m_pinchZoomViewport.min_page_scale_factor()
; |
760 metadata.max_page_scale_factor = m_pinchZoomViewport.max_page_scale_factor()
; | 760 metadata.max_page_scale_factor = m_pinchZoomViewport.max_page_scale_factor()
; |
761 if (m_topControlsManager) { | 761 if (m_topControlsManager) { |
762 metadata.location_bar_offset = gfx::Vector2dF(0.f, m_topControlsManager-
>controls_top_offset()); | 762 metadata.location_bar_offset = gfx::Vector2dF(0.f, m_topControlsManager-
>controls_top_offset()); |
763 metadata.location_bar_content_translation = gfx::Vector2dF(0.f, m_topCon
trolsManager->content_top_offset()); | 763 metadata.location_bar_content_translation = gfx::Vector2dF(0.f, m_topCon
trolsManager->content_top_offset()); |
764 } | 764 } |
765 | 765 |
766 if (!rootScrollLayer()) | 766 if (!rootScrollLayer()) |
767 return metadata; | 767 return metadata; |
(...skipping 360 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1128 return; | 1128 return; |
1129 | 1129 |
1130 m_pinchZoomViewport.set_page_scale_delta(delta); | 1130 m_pinchZoomViewport.set_page_scale_delta(delta); |
1131 | 1131 |
1132 updateMaxScrollOffset(); | 1132 updateMaxScrollOffset(); |
1133 activeTree()->set_needs_update_draw_properties(); | 1133 activeTree()->set_needs_update_draw_properties(); |
1134 if (pendingTree()) | 1134 if (pendingTree()) |
1135 pendingTree()->set_needs_update_draw_properties(); | 1135 pendingTree()->set_needs_update_draw_properties(); |
1136 } | 1136 } |
1137 | 1137 |
1138 gfx::Vector2dF LayerTreeHostImpl::scrollPinchZoomViewport(gfx::Vector2dF delta) | |
1139 { | |
1140 gfx::Vector2dF overflow = m_pinchZoomViewport.ApplyScroll(delta); | |
1141 activeTree()->set_needs_update_draw_properties(); | |
1142 if (pendingTree()) | |
1143 pendingTree()->set_needs_update_draw_properties(); | |
1144 return overflow; | |
1145 } | |
1146 | |
1147 void LayerTreeHostImpl::updateMaxScrollOffset() | 1138 void LayerTreeHostImpl::updateMaxScrollOffset() |
1148 { | 1139 { |
1149 activeTree()->UpdateMaxScrollOffset(); | 1140 activeTree()->UpdateMaxScrollOffset(); |
1150 } | 1141 } |
1151 | 1142 |
1152 void LayerTreeHostImpl::setActiveTreeNeedsUpdateDrawProperties() | 1143 void LayerTreeHostImpl::setActiveTreeNeedsUpdateDrawProperties() |
1153 { | 1144 { |
1154 activeTree()->set_needs_update_draw_properties(); | 1145 activeTree()->set_needs_update_draw_properties(); |
1155 } | 1146 } |
1156 | 1147 |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1252 return gfx::Vector2dF(); | 1243 return gfx::Vector2dF(); |
1253 | 1244 |
1254 // localStartPoint and localEndPoint are in content space but we want to mov
e them to layer space for scrolling. | 1245 // localStartPoint and localEndPoint are in content space but we want to mov
e them to layer space for scrolling. |
1255 float widthScale = 1 / layerImpl->contentsScaleX(); | 1246 float widthScale = 1 / layerImpl->contentsScaleX(); |
1256 float heightScale = 1 / layerImpl->contentsScaleY(); | 1247 float heightScale = 1 / layerImpl->contentsScaleY(); |
1257 localStartPoint.Scale(widthScale, heightScale); | 1248 localStartPoint.Scale(widthScale, heightScale); |
1258 localEndPoint.Scale(widthScale, heightScale); | 1249 localEndPoint.Scale(widthScale, heightScale); |
1259 | 1250 |
1260 // Apply the scroll delta. | 1251 // Apply the scroll delta. |
1261 gfx::Vector2dF previousDelta = layerImpl->scrollDelta(); | 1252 gfx::Vector2dF previousDelta = layerImpl->scrollDelta(); |
1262 gfx::Vector2dF unscrolled = layerImpl->scrollBy(localEndPoint - localStartPo
int); | 1253 layerImpl->scrollBy(localEndPoint - localStartPoint); |
1263 gfx::Vector2dF scrollAmount = localEndPoint - localStartPoint; | |
1264 | |
1265 gfx::Vector2dF viewportAppliedPan; | |
1266 if (m_settings.pageScalePinchZoomEnabled && layerImpl == rootScrollLayer()) | |
1267 viewportAppliedPan = unscrolled - scrollPinchZoomViewport(unscrolled); | |
1268 | 1254 |
1269 // Get the end point in the layer's content space so we can apply its screen
SpaceTransform. | 1255 // Get the end point in the layer's content space so we can apply its screen
SpaceTransform. |
1270 gfx::PointF actualLocalEndPoint = localStartPoint + layerImpl->scrollDelta()
+ viewportAppliedPan - previousDelta; | 1256 gfx::PointF actualLocalEndPoint = localStartPoint + layerImpl->scrollDelta()
- previousDelta; |
1271 gfx::PointF actualLocalContentEndPoint = gfx::ScalePoint(actualLocalEndPoint
, 1 / widthScale, 1 / heightScale); | 1257 gfx::PointF actualLocalContentEndPoint = gfx::ScalePoint(actualLocalEndPoint
, 1 / widthScale, 1 / heightScale); |
1272 | 1258 |
1273 // Calculate the applied scroll delta in viewport space coordinates. | 1259 // Calculate the applied scroll delta in viewport space coordinates. |
1274 gfx::PointF actualScreenSpaceEndPoint = MathUtil::mapPoint(layerImpl->screen
SpaceTransform(), actualLocalContentEndPoint, endClipped); | 1260 gfx::PointF actualScreenSpaceEndPoint = MathUtil::mapPoint(layerImpl->screen
SpaceTransform(), actualLocalContentEndPoint, endClipped); |
1275 DCHECK(!endClipped); | 1261 DCHECK(!endClipped); |
1276 if (endClipped) | 1262 if (endClipped) |
1277 return gfx::Vector2dF(); | 1263 return gfx::Vector2dF(); |
1278 gfx::PointF actualViewportEndPoint = gfx::ScalePoint(actualScreenSpaceEndPoi
nt, 1 / scaleFromViewportToScreenSpace); | 1264 gfx::PointF actualViewportEndPoint = gfx::ScalePoint(actualScreenSpaceEndPoi
nt, 1 / scaleFromViewportToScreenSpace); |
1279 return actualViewportEndPoint - viewportPoint; | 1265 return actualViewportEndPoint - viewportPoint; |
1280 } | 1266 } |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1376 gfx::PointF newScaleAnchor = gfx::ScalePoint(anchor, 1 / pageScaleDelta); | 1362 gfx::PointF newScaleAnchor = gfx::ScalePoint(anchor, 1 / pageScaleDelta); |
1377 gfx::Vector2dF move = previousScaleAnchor - newScaleAnchor; | 1363 gfx::Vector2dF move = previousScaleAnchor - newScaleAnchor; |
1378 | 1364 |
1379 m_previousPinchAnchor = anchor; | 1365 m_previousPinchAnchor = anchor; |
1380 | 1366 |
1381 if (m_settings.pageScalePinchZoomEnabled) { | 1367 if (m_settings.pageScalePinchZoomEnabled) { |
1382 // Compute the application of the delta with respect to the current page
zoom of the page. | 1368 // Compute the application of the delta with respect to the current page
zoom of the page. |
1383 move.Scale(1 / m_pinchZoomViewport.page_scale_factor()); | 1369 move.Scale(1 / m_pinchZoomViewport.page_scale_factor()); |
1384 } | 1370 } |
1385 | 1371 |
1386 gfx::Vector2dF scrollOverflow = m_settings.pageScalePinchZoomEnabled ? scrol
lPinchZoomViewport(move) : move; | 1372 rootScrollLayer()->scrollBy(move); |
1387 rootScrollLayer()->scrollBy(scrollOverflow); | |
1388 | 1373 |
1389 if (rootScrollLayer()->scrollbarAnimationController()) | 1374 if (rootScrollLayer()->scrollbarAnimationController()) |
1390 rootScrollLayer()->scrollbarAnimationController()->didPinchGestureUpdate
(base::TimeTicks::Now()); | 1375 rootScrollLayer()->scrollbarAnimationController()->didPinchGestureUpdate
(base::TimeTicks::Now()); |
1391 | 1376 |
1392 m_client->setNeedsCommitOnImplThread(); | 1377 m_client->setNeedsCommitOnImplThread(); |
1393 m_client->setNeedsRedrawOnImplThread(); | 1378 m_client->setNeedsRedrawOnImplThread(); |
1394 m_client->renewTreePriority(); | 1379 m_client->renewTreePriority(); |
1395 } | 1380 } |
1396 | 1381 |
1397 void LayerTreeHostImpl::pinchGestureEnd() | 1382 void LayerTreeHostImpl::pinchGestureEnd() |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1456 activeTree()->RootScrollLayer()->setSentScrollDelta(scroll.scrollDelta); | 1441 activeTree()->RootScrollLayer()->setSentScrollDelta(scroll.scrollDelta); |
1457 scrollInfo->pageScaleDelta = pageScale / m_pinchZoomViewport.page_scale_fact
or(); | 1442 scrollInfo->pageScaleDelta = pageScale / m_pinchZoomViewport.page_scale_fact
or(); |
1458 m_pinchZoomViewport.set_sent_page_scale_delta(scrollInfo->pageScaleDelta); | 1443 m_pinchZoomViewport.set_sent_page_scale_delta(scrollInfo->pageScaleDelta); |
1459 } | 1444 } |
1460 | 1445 |
1461 static void collectScrollDeltas(ScrollAndScaleSet* scrollInfo, LayerImpl* layerI
mpl) | 1446 static void collectScrollDeltas(ScrollAndScaleSet* scrollInfo, LayerImpl* layerI
mpl) |
1462 { | 1447 { |
1463 if (!layerImpl) | 1448 if (!layerImpl) |
1464 return; | 1449 return; |
1465 | 1450 |
1466 if (!layerImpl->scrollDelta().IsZero()) { | 1451 gfx::Vector2d scrollDelta = gfx::ToFlooredVector2d(layerImpl->scrollDelta())
; |
1467 gfx::Vector2d scrollDelta = gfx::ToFlooredVector2d(layerImpl->scrollDelt
a()); | 1452 if (!scrollDelta.IsZero()) { |
1468 LayerTreeHostCommon::ScrollUpdateInfo scroll; | 1453 LayerTreeHostCommon::ScrollUpdateInfo scroll; |
1469 scroll.layerId = layerImpl->id(); | 1454 scroll.layerId = layerImpl->id(); |
1470 scroll.scrollDelta = scrollDelta; | 1455 scroll.scrollDelta = scrollDelta; |
1471 scrollInfo->scrolls.push_back(scroll); | 1456 scrollInfo->scrolls.push_back(scroll); |
1472 layerImpl->setSentScrollDelta(scrollDelta); | 1457 layerImpl->setSentScrollDelta(scrollDelta); |
1473 } | 1458 } |
1474 | 1459 |
1475 for (size_t i = 0; i < layerImpl->children().size(); ++i) | 1460 for (size_t i = 0; i < layerImpl->children().size(); ++i) |
1476 collectScrollDeltas(scrollInfo, layerImpl->children()[i]); | 1461 collectScrollDeltas(scrollInfo, layerImpl->children()[i]); |
1477 } | 1462 } |
1478 | 1463 |
1479 scoped_ptr<ScrollAndScaleSet> LayerTreeHostImpl::processScrollDeltas() | 1464 scoped_ptr<ScrollAndScaleSet> LayerTreeHostImpl::processScrollDeltas() |
1480 { | 1465 { |
1481 scoped_ptr<ScrollAndScaleSet> scrollInfo(new ScrollAndScaleSet()); | 1466 scoped_ptr<ScrollAndScaleSet> scrollInfo(new ScrollAndScaleSet()); |
1482 | 1467 |
1483 if (m_pinchGestureActive || m_pageScaleAnimation) { | 1468 if (!m_settings.pageScalePinchZoomEnabled && (m_pinchGestureActive || m_page
ScaleAnimation)) { |
1484 scrollInfo->pageScaleDelta = 1; | 1469 scrollInfo->pageScaleDelta = 1; |
1485 m_pinchZoomViewport.set_sent_page_scale_delta(1); | 1470 m_pinchZoomViewport.set_sent_page_scale_delta(1); |
1486 // FIXME(aelias): Make pinch-zoom painting optimization compatible with | 1471 if (m_pinchGestureActive) |
1487 // compositor-side scaling. | |
1488 if (!m_settings.pageScalePinchZoomEnabled && m_pinchGestureActive) | |
1489 computePinchZoomDeltas(scrollInfo.get()); | 1472 computePinchZoomDeltas(scrollInfo.get()); |
1490 else if (m_pageScaleAnimation.get()) | 1473 else if (m_pageScaleAnimation.get()) |
1491 computeDoubleTapZoomDeltas(scrollInfo.get()); | 1474 computeDoubleTapZoomDeltas(scrollInfo.get()); |
1492 return scrollInfo.Pass(); | 1475 return scrollInfo.Pass(); |
1493 } | 1476 } |
1494 | 1477 |
1495 collectScrollDeltas(scrollInfo.get(), rootLayer()); | 1478 collectScrollDeltas(scrollInfo.get(), rootLayer()); |
1496 scrollInfo->pageScaleDelta = m_pinchZoomViewport.page_scale_delta(); | 1479 scrollInfo->pageScaleDelta = m_pinchZoomViewport.page_scale_delta(); |
1497 m_pinchZoomViewport.set_sent_page_scale_delta(scrollInfo->pageScaleDelta); | 1480 m_pinchZoomViewport.set_sent_page_scale_delta(scrollInfo->pageScaleDelta); |
1498 | 1481 |
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1713 LayerImpl* layer = getNonCompositedContentLayerRecursive(tree->RootLayer()); | 1696 LayerImpl* layer = getNonCompositedContentLayerRecursive(tree->RootLayer()); |
1714 return layer ? layer->getPicture() : skia::RefPtr<SkPicture>(); | 1697 return layer ? layer->getPicture() : skia::RefPtr<SkPicture>(); |
1715 } | 1698 } |
1716 | 1699 |
1717 void LayerTreeHostImpl::savePaintTime(const base::TimeDelta& totalPaintTime) | 1700 void LayerTreeHostImpl::savePaintTime(const base::TimeDelta& totalPaintTime) |
1718 { | 1701 { |
1719 m_paintTimeCounter->SavePaintTime(totalPaintTime); | 1702 m_paintTimeCounter->SavePaintTime(totalPaintTime); |
1720 } | 1703 } |
1721 | 1704 |
1722 } // namespace cc | 1705 } // namespace cc |
OLD | NEW |