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/trees/layer_tree_impl.h" | 5 #include "cc/trees/layer_tree_impl.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <algorithm> | 10 #include <algorithm> |
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
239 current_offset += InnerViewportScrollLayer()->CurrentScrollOffset(); | 239 current_offset += InnerViewportScrollLayer()->CurrentScrollOffset(); |
240 if (OuterViewportContainerLayer()) | 240 if (OuterViewportContainerLayer()) |
241 clip_size.SetToMin(OuterViewportContainerLayer()->BoundsForScrolling()); | 241 clip_size.SetToMin(OuterViewportContainerLayer()->BoundsForScrolling()); |
242 clip_size.Scale(1 / current_page_scale_factor()); | 242 clip_size.Scale(1 / current_page_scale_factor()); |
243 } | 243 } |
244 | 244 |
245 bool scrollbar_needs_animation = false; | 245 bool scrollbar_needs_animation = false; |
246 bool clip_layer_size_did_change = false; | 246 bool clip_layer_size_did_change = false; |
247 bool scroll_layer_size_did_change = false; | 247 bool scroll_layer_size_did_change = false; |
248 bool y_offset_did_change = false; | 248 bool y_offset_did_change = false; |
249 for (ScrollbarLayerImplBase* scrollbar : ScrollbarsFor(scroll_layer_id)) { | 249 for (auto* scrollbar : ScrollbarsFor(scroll_layer->element_id())) { |
250 if (scrollbar->orientation() == HORIZONTAL) { | 250 if (scrollbar->orientation() == HORIZONTAL) { |
251 scrollbar_needs_animation |= scrollbar->SetCurrentPos(current_offset.x()); | 251 scrollbar_needs_animation |= scrollbar->SetCurrentPos(current_offset.x()); |
252 clip_layer_size_did_change |= | 252 clip_layer_size_did_change |= |
253 scrollbar->SetClipLayerLength(clip_size.width()); | 253 scrollbar->SetClipLayerLength(clip_size.width()); |
254 scroll_layer_size_did_change |= | 254 scroll_layer_size_did_change |= |
255 scrollbar->SetScrollLayerLength(scroll_size.width()); | 255 scrollbar->SetScrollLayerLength(scroll_size.width()); |
256 } else { | 256 } else { |
257 scrollbar_needs_animation |= y_offset_did_change |= | 257 scrollbar_needs_animation |= y_offset_did_change |= |
258 scrollbar->SetCurrentPos(current_offset.y()); | 258 scrollbar->SetCurrentPos(current_offset.y()); |
259 clip_layer_size_did_change |= | 259 clip_layer_size_did_change |= |
(...skipping 1200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1460 | 1460 |
1461 gfx::Size LayerTreeImpl::DrawViewportSize() const { | 1461 gfx::Size LayerTreeImpl::DrawViewportSize() const { |
1462 return layer_tree_host_impl_->DrawViewportSize(); | 1462 return layer_tree_host_impl_->DrawViewportSize(); |
1463 } | 1463 } |
1464 | 1464 |
1465 const gfx::Rect LayerTreeImpl::ViewportRectForTilePriority() const { | 1465 const gfx::Rect LayerTreeImpl::ViewportRectForTilePriority() const { |
1466 return layer_tree_host_impl_->ViewportRectForTilePriority(); | 1466 return layer_tree_host_impl_->ViewportRectForTilePriority(); |
1467 } | 1467 } |
1468 | 1468 |
1469 std::unique_ptr<ScrollbarAnimationController> | 1469 std::unique_ptr<ScrollbarAnimationController> |
1470 LayerTreeImpl::CreateScrollbarAnimationController(int scroll_layer_id) { | 1470 LayerTreeImpl::CreateScrollbarAnimationController(ElementId scroll_element_id) { |
1471 DCHECK(!settings().scrollbar_fade_out_delay.is_zero()); | 1471 DCHECK(!settings().scrollbar_fade_out_delay.is_zero()); |
1472 DCHECK(!settings().scrollbar_fade_out_duration.is_zero()); | 1472 DCHECK(!settings().scrollbar_fade_out_duration.is_zero()); |
1473 base::TimeDelta fade_out_delay = settings().scrollbar_fade_out_delay; | 1473 base::TimeDelta fade_out_delay = settings().scrollbar_fade_out_delay; |
1474 base::TimeDelta fade_out_resize_delay = | 1474 base::TimeDelta fade_out_resize_delay = |
1475 settings().scrollbar_fade_out_resize_delay; | 1475 settings().scrollbar_fade_out_resize_delay; |
1476 base::TimeDelta fade_out_duration = settings().scrollbar_fade_out_duration; | 1476 base::TimeDelta fade_out_duration = settings().scrollbar_fade_out_duration; |
1477 switch (settings().scrollbar_animator) { | 1477 switch (settings().scrollbar_animator) { |
1478 case LayerTreeSettings::ANDROID_OVERLAY: { | 1478 case LayerTreeSettings::ANDROID_OVERLAY: { |
1479 return ScrollbarAnimationController:: | 1479 return ScrollbarAnimationController:: |
1480 CreateScrollbarAnimationControllerAndroid( | 1480 CreateScrollbarAnimationControllerAndroid( |
1481 scroll_layer_id, layer_tree_host_impl_, fade_out_delay, | 1481 scroll_element_id, layer_tree_host_impl_, fade_out_delay, |
1482 fade_out_resize_delay, fade_out_duration); | 1482 fade_out_resize_delay, fade_out_duration); |
1483 } | 1483 } |
1484 case LayerTreeSettings::AURA_OVERLAY: { | 1484 case LayerTreeSettings::AURA_OVERLAY: { |
1485 DCHECK(!settings().scrollbar_show_delay.is_zero()); | 1485 DCHECK(!settings().scrollbar_show_delay.is_zero()); |
1486 base::TimeDelta show_delay = settings().scrollbar_show_delay; | 1486 base::TimeDelta show_delay = settings().scrollbar_show_delay; |
1487 base::TimeDelta thinning_duration = | 1487 base::TimeDelta thinning_duration = |
1488 settings().scrollbar_thinning_duration; | 1488 settings().scrollbar_thinning_duration; |
1489 return ScrollbarAnimationController:: | 1489 return ScrollbarAnimationController:: |
1490 CreateScrollbarAnimationControllerAuraOverlay( | 1490 CreateScrollbarAnimationControllerAuraOverlay( |
1491 scroll_layer_id, layer_tree_host_impl_, show_delay, | 1491 scroll_element_id, layer_tree_host_impl_, show_delay, |
1492 fade_out_delay, fade_out_resize_delay, fade_out_duration, | 1492 fade_out_delay, fade_out_resize_delay, fade_out_duration, |
1493 thinning_duration); | 1493 thinning_duration); |
1494 } | 1494 } |
1495 case LayerTreeSettings::NO_ANIMATOR: | 1495 case LayerTreeSettings::NO_ANIMATOR: |
1496 NOTREACHED(); | 1496 NOTREACHED(); |
1497 break; | 1497 break; |
1498 } | 1498 } |
1499 return nullptr; | 1499 return nullptr; |
1500 } | 1500 } |
1501 | 1501 |
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1713 } | 1713 } |
1714 | 1714 |
1715 void LayerTreeImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) { | 1715 void LayerTreeImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) { |
1716 std::vector<PictureLayerImpl*>::iterator it = | 1716 std::vector<PictureLayerImpl*>::iterator it = |
1717 std::find(picture_layers_.begin(), picture_layers_.end(), layer); | 1717 std::find(picture_layers_.begin(), picture_layers_.end(), layer); |
1718 DCHECK(it != picture_layers_.end()); | 1718 DCHECK(it != picture_layers_.end()); |
1719 picture_layers_.erase(it); | 1719 picture_layers_.erase(it); |
1720 } | 1720 } |
1721 | 1721 |
1722 void LayerTreeImpl::RegisterScrollbar(ScrollbarLayerImplBase* scrollbar_layer) { | 1722 void LayerTreeImpl::RegisterScrollbar(ScrollbarLayerImplBase* scrollbar_layer) { |
1723 if (scrollbar_layer->ScrollLayerId() == Layer::INVALID_ID) | 1723 ElementId scroll_element_id = scrollbar_layer->scroll_element_id(); |
| 1724 if (!scroll_element_id) |
1724 return; | 1725 return; |
1725 | 1726 |
1726 scrollbar_map_.insert(std::pair<int, int>(scrollbar_layer->ScrollLayerId(), | 1727 element_id_to_scrollbar_layer_ids_.insert( |
1727 scrollbar_layer->id())); | 1728 std::pair<ElementId, int>(scroll_element_id, scrollbar_layer->id())); |
1728 if (IsActiveTree() && scrollbar_layer->is_overlay_scrollbar()) { | 1729 if (IsActiveTree() && scrollbar_layer->is_overlay_scrollbar()) { |
1729 auto scroll_layer_id = scrollbar_layer->ScrollLayerId(); | |
1730 layer_tree_host_impl_->RegisterScrollbarAnimationController( | 1730 layer_tree_host_impl_->RegisterScrollbarAnimationController( |
1731 scroll_layer_id, scrollbar_layer->scroll_element_id()); | 1731 scroll_element_id); |
1732 } | 1732 } |
1733 | 1733 |
1734 DidUpdateScrollState(scrollbar_layer->ScrollLayerId()); | 1734 DidUpdateScrollState(scrollbar_layer->ScrollLayerId()); |
1735 } | 1735 } |
1736 | 1736 |
1737 void LayerTreeImpl::UnregisterScrollbar( | 1737 void LayerTreeImpl::UnregisterScrollbar( |
1738 ScrollbarLayerImplBase* scrollbar_layer) { | 1738 ScrollbarLayerImplBase* scrollbar_layer) { |
1739 int scroll_layer_id = scrollbar_layer->ScrollLayerId(); | 1739 ElementId scroll_element_id = scrollbar_layer->scroll_element_id(); |
1740 if (scroll_layer_id == Layer::INVALID_ID) | 1740 if (!scroll_element_id) |
1741 return; | 1741 return; |
1742 | 1742 |
1743 auto scrollbar_range = scrollbar_map_.equal_range(scroll_layer_id); | 1743 auto scrollbar_range = |
| 1744 element_id_to_scrollbar_layer_ids_.equal_range(scroll_element_id); |
1744 for (auto i = scrollbar_range.first; i != scrollbar_range.second; ++i) | 1745 for (auto i = scrollbar_range.first; i != scrollbar_range.second; ++i) |
1745 if (i->second == scrollbar_layer->id()) { | 1746 if (i->second == scrollbar_layer->id()) { |
1746 scrollbar_map_.erase(i); | 1747 element_id_to_scrollbar_layer_ids_.erase(i); |
1747 break; | 1748 break; |
1748 } | 1749 } |
1749 | 1750 |
1750 if (IsActiveTree() && scrollbar_map_.count(scroll_layer_id) == 0) { | 1751 if (IsActiveTree() && |
| 1752 element_id_to_scrollbar_layer_ids_.count(scroll_element_id) == 0) { |
1751 layer_tree_host_impl_->UnregisterScrollbarAnimationController( | 1753 layer_tree_host_impl_->UnregisterScrollbarAnimationController( |
1752 scrollbar_layer->scroll_element_id()); | 1754 scroll_element_id); |
1753 } | 1755 } |
1754 } | 1756 } |
1755 | 1757 |
1756 ScrollbarSet LayerTreeImpl::ScrollbarsFor(int scroll_layer_id) const { | 1758 ScrollbarSet LayerTreeImpl::ScrollbarsFor(ElementId scroll_element_id) const { |
1757 ScrollbarSet scrollbars; | 1759 ScrollbarSet scrollbars; |
1758 auto scrollbar_range = scrollbar_map_.equal_range(scroll_layer_id); | 1760 auto scrollbar_range = |
| 1761 element_id_to_scrollbar_layer_ids_.equal_range(scroll_element_id); |
1759 for (auto i = scrollbar_range.first; i != scrollbar_range.second; ++i) | 1762 for (auto i = scrollbar_range.first; i != scrollbar_range.second; ++i) |
1760 scrollbars.insert(LayerById(i->second)->ToScrollbarLayer()); | 1763 scrollbars.insert(LayerById(i->second)->ToScrollbarLayer()); |
1761 return scrollbars; | 1764 return scrollbars; |
1762 } | 1765 } |
1763 | 1766 |
1764 void LayerTreeImpl::RegisterScrollLayer(LayerImpl* layer) { | 1767 void LayerTreeImpl::RegisterScrollLayer(LayerImpl* layer) { |
1765 if (layer->scroll_clip_layer_id() == Layer::INVALID_ID) | 1768 if (layer->scroll_clip_layer_id() == Layer::INVALID_ID) |
1766 return; | 1769 return; |
1767 | 1770 |
1768 clip_scroll_map_.insert( | 1771 clip_scroll_map_.insert( |
(...skipping 412 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2181 | 2184 |
2182 void LayerTreeImpl::ResetAllChangeTracking() { | 2185 void LayerTreeImpl::ResetAllChangeTracking() { |
2183 layers_that_should_push_properties_.clear(); | 2186 layers_that_should_push_properties_.clear(); |
2184 // Iterate over all layers, including masks. | 2187 // Iterate over all layers, including masks. |
2185 for (auto& layer : *layers_) | 2188 for (auto& layer : *layers_) |
2186 layer->ResetChangeTracking(); | 2189 layer->ResetChangeTracking(); |
2187 property_trees_.ResetAllChangeTracking(); | 2190 property_trees_.ResetAllChangeTracking(); |
2188 } | 2191 } |
2189 | 2192 |
2190 } // namespace cc | 2193 } // namespace cc |
OLD | NEW |