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 737 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
748 | 748 |
749 void LayerTreeHostImpl::OnCanDrawStateChangedForTree(LayerTreeImpl*) | 749 void LayerTreeHostImpl::OnCanDrawStateChangedForTree(LayerTreeImpl*) |
750 { | 750 { |
751 m_client->onCanDrawStateChanged(canDraw()); | 751 m_client->onCanDrawStateChanged(canDraw()); |
752 } | 752 } |
753 | 753 |
754 CompositorFrameMetadata LayerTreeHostImpl::makeCompositorFrameMetadata() const | 754 CompositorFrameMetadata LayerTreeHostImpl::makeCompositorFrameMetadata() const |
755 { | 755 { |
756 CompositorFrameMetadata metadata; | 756 CompositorFrameMetadata metadata; |
757 metadata.page_scale_factor = m_pinchZoomViewport.total_page_scale_factor(); | 757 metadata.page_scale_factor = m_pinchZoomViewport.total_page_scale_factor(); |
758 metadata.viewport_size = m_pinchZoomViewport.ZoomedViewport().size(); | 758 metadata.viewport_size = activeTree()->ScrollableViewportSize(); |
759 metadata.root_layer_size = activeTree()->ScrollableSize(); | 759 metadata.root_layer_size = activeTree()->ScrollableSize(); |
760 metadata.min_page_scale_factor = m_pinchZoomViewport.min_page_scale_factor()
; | 760 metadata.min_page_scale_factor = m_pinchZoomViewport.min_page_scale_factor()
; |
761 metadata.max_page_scale_factor = m_pinchZoomViewport.max_page_scale_factor()
; | 761 metadata.max_page_scale_factor = m_pinchZoomViewport.max_page_scale_factor()
; |
762 if (m_topControlsManager) { | 762 if (m_topControlsManager) { |
763 metadata.location_bar_offset = gfx::Vector2dF(0.f, m_topControlsManager-
>controls_top_offset()); | 763 metadata.location_bar_offset = gfx::Vector2dF(0.f, m_topControlsManager-
>controls_top_offset()); |
764 metadata.location_bar_content_translation = gfx::Vector2dF(0.f, m_topCon
trolsManager->content_top_offset()); | 764 metadata.location_bar_content_translation = gfx::Vector2dF(0.f, m_topCon
trolsManager->content_top_offset()); |
765 } | 765 } |
766 | 766 |
767 if (!rootScrollLayer()) | 767 if (!rootScrollLayer()) |
768 return metadata; | 768 return metadata; |
(...skipping 389 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1158 return; | 1158 return; |
1159 | 1159 |
1160 m_pinchZoomViewport.set_page_scale_delta(delta); | 1160 m_pinchZoomViewport.set_page_scale_delta(delta); |
1161 | 1161 |
1162 updateMaxScrollOffset(); | 1162 updateMaxScrollOffset(); |
1163 activeTree()->set_needs_update_draw_properties(); | 1163 activeTree()->set_needs_update_draw_properties(); |
1164 if (pendingTree()) | 1164 if (pendingTree()) |
1165 pendingTree()->set_needs_update_draw_properties(); | 1165 pendingTree()->set_needs_update_draw_properties(); |
1166 } | 1166 } |
1167 | 1167 |
1168 gfx::Vector2dF LayerTreeHostImpl::scrollPinchZoomViewport(gfx::Vector2dF delta) | |
1169 { | |
1170 gfx::Vector2dF overflow = m_pinchZoomViewport.ApplyScroll(delta); | |
1171 activeTree()->set_needs_update_draw_properties(); | |
1172 if (pendingTree()) | |
1173 pendingTree()->set_needs_update_draw_properties(); | |
1174 return overflow; | |
1175 } | |
1176 | |
1177 void LayerTreeHostImpl::updateMaxScrollOffset() | 1168 void LayerTreeHostImpl::updateMaxScrollOffset() |
1178 { | 1169 { |
1179 activeTree()->UpdateMaxScrollOffset(); | 1170 activeTree()->UpdateMaxScrollOffset(); |
1180 } | 1171 } |
1181 | 1172 |
1182 void LayerTreeHostImpl::setActiveTreeNeedsUpdateDrawProperties() | 1173 void LayerTreeHostImpl::setActiveTreeNeedsUpdateDrawProperties() |
1183 { | 1174 { |
1184 activeTree()->set_needs_update_draw_properties(); | 1175 activeTree()->set_needs_update_draw_properties(); |
1185 } | 1176 } |
1186 | 1177 |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1282 return gfx::Vector2dF(); | 1273 return gfx::Vector2dF(); |
1283 | 1274 |
1284 // localStartPoint and localEndPoint are in content space but we want to mov
e them to layer space for scrolling. | 1275 // localStartPoint and localEndPoint are in content space but we want to mov
e them to layer space for scrolling. |
1285 float widthScale = 1 / layerImpl->contentsScaleX(); | 1276 float widthScale = 1 / layerImpl->contentsScaleX(); |
1286 float heightScale = 1 / layerImpl->contentsScaleY(); | 1277 float heightScale = 1 / layerImpl->contentsScaleY(); |
1287 localStartPoint.Scale(widthScale, heightScale); | 1278 localStartPoint.Scale(widthScale, heightScale); |
1288 localEndPoint.Scale(widthScale, heightScale); | 1279 localEndPoint.Scale(widthScale, heightScale); |
1289 | 1280 |
1290 // Apply the scroll delta. | 1281 // Apply the scroll delta. |
1291 gfx::Vector2dF previousDelta = layerImpl->scrollDelta(); | 1282 gfx::Vector2dF previousDelta = layerImpl->scrollDelta(); |
1292 gfx::Vector2dF unscrolled = layerImpl->scrollBy(localEndPoint - localStartPo
int); | 1283 layerImpl->scrollBy(localEndPoint - localStartPoint); |
1293 gfx::Vector2dF scrollAmount = localEndPoint - localStartPoint; | |
1294 | |
1295 gfx::Vector2dF viewportAppliedPan; | |
1296 if (m_settings.pageScalePinchZoomEnabled && layerImpl == rootScrollLayer()) | |
1297 viewportAppliedPan = unscrolled - scrollPinchZoomViewport(unscrolled); | |
1298 | 1284 |
1299 // Get the end point in the layer's content space so we can apply its screen
SpaceTransform. | 1285 // Get the end point in the layer's content space so we can apply its screen
SpaceTransform. |
1300 gfx::PointF actualLocalEndPoint = localStartPoint + layerImpl->scrollDelta()
+ viewportAppliedPan - previousDelta; | 1286 gfx::PointF actualLocalEndPoint = localStartPoint + layerImpl->scrollDelta()
- previousDelta; |
1301 gfx::PointF actualLocalContentEndPoint = gfx::ScalePoint(actualLocalEndPoint
, 1 / widthScale, 1 / heightScale); | 1287 gfx::PointF actualLocalContentEndPoint = gfx::ScalePoint(actualLocalEndPoint
, 1 / widthScale, 1 / heightScale); |
1302 | 1288 |
1303 // Calculate the applied scroll delta in viewport space coordinates. | 1289 // Calculate the applied scroll delta in viewport space coordinates. |
1304 gfx::PointF actualScreenSpaceEndPoint = MathUtil::mapPoint(layerImpl->screen
SpaceTransform(), actualLocalContentEndPoint, endClipped); | 1290 gfx::PointF actualScreenSpaceEndPoint = MathUtil::mapPoint(layerImpl->screen
SpaceTransform(), actualLocalContentEndPoint, endClipped); |
1305 DCHECK(!endClipped); | 1291 DCHECK(!endClipped); |
1306 if (endClipped) | 1292 if (endClipped) |
1307 return gfx::Vector2dF(); | 1293 return gfx::Vector2dF(); |
1308 gfx::PointF actualViewportEndPoint = gfx::ScalePoint(actualScreenSpaceEndPoi
nt, 1 / scaleFromViewportToScreenSpace); | 1294 gfx::PointF actualViewportEndPoint = gfx::ScalePoint(actualScreenSpaceEndPoi
nt, 1 / scaleFromViewportToScreenSpace); |
1309 return actualViewportEndPoint - viewportPoint; | 1295 return actualViewportEndPoint - viewportPoint; |
1310 } | 1296 } |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1406 gfx::PointF newScaleAnchor = gfx::ScalePoint(anchor, 1 / pageScaleDelta); | 1392 gfx::PointF newScaleAnchor = gfx::ScalePoint(anchor, 1 / pageScaleDelta); |
1407 gfx::Vector2dF move = previousScaleAnchor - newScaleAnchor; | 1393 gfx::Vector2dF move = previousScaleAnchor - newScaleAnchor; |
1408 | 1394 |
1409 m_previousPinchAnchor = anchor; | 1395 m_previousPinchAnchor = anchor; |
1410 | 1396 |
1411 if (m_settings.pageScalePinchZoomEnabled) { | 1397 if (m_settings.pageScalePinchZoomEnabled) { |
1412 // Compute the application of the delta with respect to the current page
zoom of the page. | 1398 // Compute the application of the delta with respect to the current page
zoom of the page. |
1413 move.Scale(1 / m_pinchZoomViewport.page_scale_factor()); | 1399 move.Scale(1 / m_pinchZoomViewport.page_scale_factor()); |
1414 } | 1400 } |
1415 | 1401 |
1416 gfx::Vector2dF scrollOverflow = m_settings.pageScalePinchZoomEnabled ? scrol
lPinchZoomViewport(move) : move; | 1402 rootScrollLayer()->scrollBy(move); |
1417 rootScrollLayer()->scrollBy(scrollOverflow); | |
1418 | 1403 |
1419 if (rootScrollLayer()->scrollbarAnimationController()) | 1404 if (rootScrollLayer()->scrollbarAnimationController()) |
1420 rootScrollLayer()->scrollbarAnimationController()->didPinchGestureUpdate
(base::TimeTicks::Now()); | 1405 rootScrollLayer()->scrollbarAnimationController()->didPinchGestureUpdate
(base::TimeTicks::Now()); |
1421 | 1406 |
1422 m_client->setNeedsCommitOnImplThread(); | 1407 m_client->setNeedsCommitOnImplThread(); |
1423 m_client->setNeedsRedrawOnImplThread(); | 1408 m_client->setNeedsRedrawOnImplThread(); |
1424 m_client->renewTreePriority(); | 1409 m_client->renewTreePriority(); |
1425 } | 1410 } |
1426 | 1411 |
1427 void LayerTreeHostImpl::pinchGestureEnd() | 1412 void LayerTreeHostImpl::pinchGestureEnd() |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1486 activeTree()->RootScrollLayer()->setSentScrollDelta(scroll.scrollDelta); | 1471 activeTree()->RootScrollLayer()->setSentScrollDelta(scroll.scrollDelta); |
1487 scrollInfo->pageScaleDelta = pageScale / m_pinchZoomViewport.page_scale_fact
or(); | 1472 scrollInfo->pageScaleDelta = pageScale / m_pinchZoomViewport.page_scale_fact
or(); |
1488 m_pinchZoomViewport.set_sent_page_scale_delta(scrollInfo->pageScaleDelta); | 1473 m_pinchZoomViewport.set_sent_page_scale_delta(scrollInfo->pageScaleDelta); |
1489 } | 1474 } |
1490 | 1475 |
1491 static void collectScrollDeltas(ScrollAndScaleSet* scrollInfo, LayerImpl* layerI
mpl) | 1476 static void collectScrollDeltas(ScrollAndScaleSet* scrollInfo, LayerImpl* layerI
mpl) |
1492 { | 1477 { |
1493 if (!layerImpl) | 1478 if (!layerImpl) |
1494 return; | 1479 return; |
1495 | 1480 |
1496 if (!layerImpl->scrollDelta().IsZero()) { | 1481 gfx::Vector2d scrollDelta = gfx::ToFlooredVector2d(layerImpl->scrollDelta())
; |
1497 gfx::Vector2d scrollDelta = gfx::ToFlooredVector2d(layerImpl->scrollDelt
a()); | 1482 if (!scrollDelta.IsZero()) { |
1498 LayerTreeHostCommon::ScrollUpdateInfo scroll; | 1483 LayerTreeHostCommon::ScrollUpdateInfo scroll; |
1499 scroll.layerId = layerImpl->id(); | 1484 scroll.layerId = layerImpl->id(); |
1500 scroll.scrollDelta = scrollDelta; | 1485 scroll.scrollDelta = scrollDelta; |
1501 scrollInfo->scrolls.push_back(scroll); | 1486 scrollInfo->scrolls.push_back(scroll); |
1502 layerImpl->setSentScrollDelta(scrollDelta); | 1487 layerImpl->setSentScrollDelta(scrollDelta); |
1503 } | 1488 } |
1504 | 1489 |
1505 for (size_t i = 0; i < layerImpl->children().size(); ++i) | 1490 for (size_t i = 0; i < layerImpl->children().size(); ++i) |
1506 collectScrollDeltas(scrollInfo, layerImpl->children()[i]); | 1491 collectScrollDeltas(scrollInfo, layerImpl->children()[i]); |
1507 } | 1492 } |
1508 | 1493 |
1509 scoped_ptr<ScrollAndScaleSet> LayerTreeHostImpl::processScrollDeltas() | 1494 scoped_ptr<ScrollAndScaleSet> LayerTreeHostImpl::processScrollDeltas() |
1510 { | 1495 { |
1511 scoped_ptr<ScrollAndScaleSet> scrollInfo(new ScrollAndScaleSet()); | 1496 scoped_ptr<ScrollAndScaleSet> scrollInfo(new ScrollAndScaleSet()); |
1512 | 1497 |
1513 if (m_pinchGestureActive || m_pageScaleAnimation) { | 1498 if (!m_settings.pageScalePinchZoomEnabled && (m_pinchGestureActive || m_page
ScaleAnimation)) { |
1514 scrollInfo->pageScaleDelta = 1; | 1499 scrollInfo->pageScaleDelta = 1; |
1515 m_pinchZoomViewport.set_sent_page_scale_delta(1); | 1500 m_pinchZoomViewport.set_sent_page_scale_delta(1); |
1516 // FIXME(aelias): Make pinch-zoom painting optimization compatible with | 1501 if (m_pinchGestureActive) |
1517 // compositor-side scaling. | |
1518 if (!m_settings.pageScalePinchZoomEnabled && m_pinchGestureActive) | |
1519 computePinchZoomDeltas(scrollInfo.get()); | 1502 computePinchZoomDeltas(scrollInfo.get()); |
1520 else if (m_pageScaleAnimation.get()) | 1503 else if (m_pageScaleAnimation.get()) |
1521 computeDoubleTapZoomDeltas(scrollInfo.get()); | 1504 computeDoubleTapZoomDeltas(scrollInfo.get()); |
1522 return scrollInfo.Pass(); | 1505 return scrollInfo.Pass(); |
1523 } | 1506 } |
1524 | 1507 |
1525 collectScrollDeltas(scrollInfo.get(), rootLayer()); | 1508 collectScrollDeltas(scrollInfo.get(), rootLayer()); |
1526 scrollInfo->pageScaleDelta = m_pinchZoomViewport.page_scale_delta(); | 1509 scrollInfo->pageScaleDelta = m_pinchZoomViewport.page_scale_delta(); |
1527 m_pinchZoomViewport.set_sent_page_scale_delta(scrollInfo->pageScaleDelta); | 1510 m_pinchZoomViewport.set_sent_page_scale_delta(scrollInfo->pageScaleDelta); |
1528 | 1511 |
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1755 LayerImpl* layer = getNonCompositedContentLayerRecursive(tree->RootLayer()); | 1738 LayerImpl* layer = getNonCompositedContentLayerRecursive(tree->RootLayer()); |
1756 return layer ? layer->getPicture() : skia::RefPtr<SkPicture>(); | 1739 return layer ? layer->getPicture() : skia::RefPtr<SkPicture>(); |
1757 } | 1740 } |
1758 | 1741 |
1759 void LayerTreeHostImpl::savePaintTime(const base::TimeDelta& totalPaintTime) | 1742 void LayerTreeHostImpl::savePaintTime(const base::TimeDelta& totalPaintTime) |
1760 { | 1743 { |
1761 m_paintTimeCounter->SavePaintTime(totalPaintTime); | 1744 m_paintTimeCounter->SavePaintTime(totalPaintTime); |
1762 } | 1745 } |
1763 | 1746 |
1764 } // namespace cc | 1747 } // namespace cc |
OLD | NEW |