OLD | NEW |
1 // Copyright 2010 The Chromium Authors. All rights reserved. | 1 // Copyright 2010 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/layers/layer.h" | 5 #include "cc/layers/layer.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 1672 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1683 } | 1683 } |
1684 } | 1684 } |
1685 } | 1685 } |
1686 | 1686 |
1687 void Layer::OnScrollOffsetAnimated(const gfx::ScrollOffset& scroll_offset) { | 1687 void Layer::OnScrollOffsetAnimated(const gfx::ScrollOffset& scroll_offset) { |
1688 // Do nothing. Scroll deltas will be sent from the compositor thread back | 1688 // Do nothing. Scroll deltas will be sent from the compositor thread back |
1689 // to the main thread in the same manner as during non-animated | 1689 // to the main thread in the same manner as during non-animated |
1690 // compositor-driven scrolling. | 1690 // compositor-driven scrolling. |
1691 } | 1691 } |
1692 | 1692 |
1693 void Layer::OnTransformIsCurrentlyAnimatingChanged( | 1693 void Layer::OnIsAnimatingChanged(const PropertyAnimationState& mask, |
1694 bool is_currently_animating) { | 1694 const PropertyAnimationState& state) { |
1695 DCHECK(layer_tree_host_); | 1695 DCHECK(layer_tree_host_); |
1696 PropertyTrees* property_trees = layer_tree_->property_trees(); | 1696 PropertyTrees* property_trees = layer_tree_->property_trees(); |
1697 if (!property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM, | |
1698 id())) | |
1699 return; | |
1700 DCHECK_EQ(transform_tree_index(), | |
1701 property_trees->transform_id_to_index_map[id()]); | |
1702 TransformNode* node = | |
1703 property_trees->transform_tree.Node(transform_tree_index()); | |
1704 node->is_currently_animating = is_currently_animating; | |
1705 } | |
1706 | 1697 |
1707 void Layer::OnTransformIsPotentiallyAnimatingChanged( | 1698 TransformNode* transform_node = nullptr; |
1708 bool has_potential_animation) { | 1699 if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM, |
1709 if (!layer_tree_host_) | 1700 id())) { |
1710 return; | 1701 DCHECK_EQ(transform_tree_index(), |
1711 PropertyTrees* property_trees = layer_tree_->property_trees(); | 1702 property_trees->transform_id_to_index_map[id()]); |
1712 if (!property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::TRANSFORM, | 1703 transform_node = |
1713 id())) | 1704 property_trees->transform_tree.Node(transform_tree_index()); |
1714 return; | 1705 } |
1715 DCHECK_EQ(transform_tree_index(), | |
1716 property_trees->transform_id_to_index_map[id()]); | |
1717 TransformNode* node = | |
1718 property_trees->transform_tree.Node(transform_tree_index()); | |
1719 | 1706 |
1720 node->has_potential_animation = has_potential_animation; | 1707 EffectNode* effect_node = nullptr; |
1721 if (has_potential_animation) { | 1708 if (property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::EFFECT, id())) { |
1722 node->has_only_translation_animations = HasOnlyTranslationTransforms(); | 1709 DCHECK_EQ(effect_tree_index(), |
1723 } else { | 1710 property_trees->effect_id_to_index_map[id()]); |
1724 node->has_only_translation_animations = true; | 1711 effect_node = property_trees->effect_tree.Node(effect_tree_index()); |
1725 } | 1712 } |
1726 property_trees->transform_tree.set_needs_update(true); | |
1727 } | |
1728 | 1713 |
1729 void Layer::OnOpacityIsCurrentlyAnimatingChanged(bool is_currently_animating) { | 1714 for (int property = TargetProperty::FIRST_TARGET_PROPERTY; |
1730 DCHECK(layer_tree_host_); | 1715 property <= TargetProperty::LAST_TARGET_PROPERTY; ++property) { |
1731 PropertyTrees* property_trees = layer_tree_->property_trees(); | 1716 switch (property) { |
1732 if (!property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::EFFECT, id())) | 1717 case TargetProperty::TRANSFORM: |
1733 return; | 1718 if (transform_node) { |
1734 DCHECK_EQ(effect_tree_index(), property_trees->effect_id_to_index_map[id()]); | 1719 if (mask.currently_running[property]) |
1735 EffectNode* node = property_trees->effect_tree.Node(effect_tree_index()); | 1720 transform_node->is_currently_animating = |
1736 node->is_currently_animating_opacity = is_currently_animating; | 1721 state.currently_running[property]; |
1737 } | 1722 if (mask.potentially_animating[property]) { |
1738 | 1723 transform_node->has_potential_animation = |
1739 void Layer::OnOpacityIsPotentiallyAnimatingChanged( | 1724 state.potentially_animating[property]; |
1740 bool has_potential_animation) { | 1725 if (state.potentially_animating[property]) { |
1741 DCHECK(layer_tree_host_); | 1726 transform_node->has_only_translation_animations = |
1742 PropertyTrees* property_trees = layer_tree_->property_trees(); | 1727 HasOnlyTranslationTransforms(); |
1743 if (!property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::EFFECT, id())) | 1728 } else { |
1744 return; | 1729 transform_node->has_only_translation_animations = true; |
1745 DCHECK_EQ(effect_tree_index(), property_trees->effect_id_to_index_map[id()]); | 1730 } |
1746 EffectNode* node = property_trees->effect_tree.Node(effect_tree_index()); | 1731 property_trees->transform_tree.set_needs_update(true); |
1747 node->has_potential_opacity_animation = | 1732 } |
1748 has_potential_animation || OpacityCanAnimateOnImplThread(); | 1733 } |
1749 property_trees->effect_tree.set_needs_update(true); | 1734 break; |
1750 } | 1735 case TargetProperty::OPACITY: |
1751 | 1736 if (effect_node) { |
1752 void Layer::OnFilterIsCurrentlyAnimatingChanged(bool is_currently_animating) { | 1737 if (mask.currently_running[property]) |
1753 DCHECK(layer_tree_host_); | 1738 effect_node->is_currently_animating_opacity = |
1754 PropertyTrees* property_trees = layer_tree_->property_trees(); | 1739 state.currently_running[property]; |
1755 if (!property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::EFFECT, id())) | 1740 if (mask.potentially_animating[property]) { |
1756 return; | 1741 effect_node->has_potential_opacity_animation = |
1757 DCHECK_EQ(effect_tree_index(), property_trees->effect_id_to_index_map[id()]); | 1742 state.potentially_animating[property] || |
1758 EffectNode* node = property_trees->effect_tree.Node(effect_tree_index()); | 1743 OpacityCanAnimateOnImplThread(); |
1759 node->is_currently_animating_filter = is_currently_animating; | 1744 property_trees->effect_tree.set_needs_update(true); |
1760 } | 1745 } |
1761 | 1746 } |
1762 void Layer::OnFilterIsPotentiallyAnimatingChanged( | 1747 break; |
1763 bool has_potential_animation) { | 1748 case TargetProperty::FILTER: |
1764 DCHECK(layer_tree_host_); | 1749 if (effect_node) { |
1765 PropertyTrees* property_trees = layer_tree_->property_trees(); | 1750 if (mask.currently_running[property]) |
1766 if (!property_trees->IsInIdToIndexMap(PropertyTrees::TreeType::EFFECT, id())) | 1751 effect_node->is_currently_animating_filter = |
1767 return; | 1752 state.currently_running[property]; |
1768 DCHECK_EQ(effect_tree_index(), property_trees->effect_id_to_index_map[id()]); | 1753 if (mask.potentially_animating[property]) |
1769 EffectNode* node = property_trees->effect_tree.Node(effect_tree_index()); | 1754 effect_node->has_potential_filter_animation = |
1770 node->has_potential_filter_animation = has_potential_animation; | 1755 state.potentially_animating[property]; |
| 1756 } |
| 1757 break; |
| 1758 default: |
| 1759 break; |
| 1760 } |
| 1761 } |
1771 } | 1762 } |
1772 | 1763 |
1773 bool Layer::HasActiveAnimationForTesting() const { | 1764 bool Layer::HasActiveAnimationForTesting() const { |
1774 return layer_tree_host_ | 1765 return layer_tree_host_ |
1775 ? GetAnimationHost()->HasActiveAnimationForTesting(element_id()) | 1766 ? GetAnimationHost()->HasActiveAnimationForTesting(element_id()) |
1776 : false; | 1767 : false; |
1777 } | 1768 } |
1778 | 1769 |
1779 void Layer::SetHasWillChangeTransformHint(bool has_will_change) { | 1770 void Layer::SetHasWillChangeTransformHint(bool has_will_change) { |
1780 if (inputs_.has_will_change_transform_hint == has_will_change) | 1771 if (inputs_.has_will_change_transform_hint == has_will_change) |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1881 DCHECK_NE(transform_tree_index_, TransformTree::kInvalidNodeId); | 1872 DCHECK_NE(transform_tree_index_, TransformTree::kInvalidNodeId); |
1882 return draw_property_utils::ScreenSpaceTransform( | 1873 return draw_property_utils::ScreenSpaceTransform( |
1883 this, layer_tree_->property_trees()->transform_tree); | 1874 this, layer_tree_->property_trees()->transform_tree); |
1884 } | 1875 } |
1885 | 1876 |
1886 LayerTree* Layer::GetLayerTree() const { | 1877 LayerTree* Layer::GetLayerTree() const { |
1887 return layer_tree_; | 1878 return layer_tree_; |
1888 } | 1879 } |
1889 | 1880 |
1890 } // namespace cc | 1881 } // namespace cc |
OLD | NEW |