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_host_impl.h" | 5 #include "cc/trees/layer_tree_host_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 2768 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2779 scroll_tree.ScrollBy(scroll_node, delta, active_tree()); | 2779 scroll_tree.ScrollBy(scroll_node, delta, active_tree()); |
2780 return false; | 2780 return false; |
2781 } | 2781 } |
2782 | 2782 |
2783 scroll_tree.set_currently_scrolling_node(scroll_node->id); | 2783 scroll_tree.set_currently_scrolling_node(scroll_node->id); |
2784 | 2784 |
2785 gfx::ScrollOffset current_offset = | 2785 gfx::ScrollOffset current_offset = |
2786 scroll_tree.current_scroll_offset(scroll_node->owner_id); | 2786 scroll_tree.current_scroll_offset(scroll_node->owner_id); |
2787 gfx::ScrollOffset target_offset = scroll_tree.ClampScrollOffsetToLimits( | 2787 gfx::ScrollOffset target_offset = scroll_tree.ClampScrollOffsetToLimits( |
2788 current_offset + gfx::ScrollOffset(delta), scroll_node); | 2788 current_offset + gfx::ScrollOffset(delta), scroll_node); |
2789 animation_host_->ImplOnlyScrollAnimationCreate(scroll_node->owner_id, | 2789 DCHECK_EQ( |
| 2790 ElementId(active_tree()->LayerById(scroll_node->owner_id)->element_id()), |
| 2791 scroll_node->data.element_id); |
| 2792 |
| 2793 animation_host_->ImplOnlyScrollAnimationCreate(scroll_node->data.element_id, |
2790 target_offset, current_offset); | 2794 target_offset, current_offset); |
2791 | 2795 |
2792 SetNeedsOneBeginImplFrame(); | 2796 SetNeedsOneBeginImplFrame(); |
2793 | 2797 |
2794 return true; | 2798 return true; |
2795 } | 2799 } |
2796 | 2800 |
2797 InputHandler::ScrollStatus LayerTreeHostImpl::ScrollAnimated( | 2801 InputHandler::ScrollStatus LayerTreeHostImpl::ScrollAnimated( |
2798 const gfx::Point& viewport_point, | 2802 const gfx::Point& viewport_point, |
2799 const gfx::Vector2dF& scroll_delta) { | 2803 const gfx::Vector2dF& scroll_delta) { |
(...skipping 998 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3798 active_tree_->max_page_scale_factor()); | 3802 active_tree_->max_page_scale_factor()); |
3799 } | 3803 } |
3800 | 3804 |
3801 void LayerTreeHostImpl::ScrollAnimationAbort(LayerImpl* layer_impl) { | 3805 void LayerTreeHostImpl::ScrollAnimationAbort(LayerImpl* layer_impl) { |
3802 return animation_host_->ScrollAnimationAbort(false /* needs_completion */); | 3806 return animation_host_->ScrollAnimationAbort(false /* needs_completion */); |
3803 } | 3807 } |
3804 | 3808 |
3805 bool LayerTreeHostImpl::ScrollAnimationUpdateTarget( | 3809 bool LayerTreeHostImpl::ScrollAnimationUpdateTarget( |
3806 ScrollNode* scroll_node, | 3810 ScrollNode* scroll_node, |
3807 const gfx::Vector2dF& scroll_delta) { | 3811 const gfx::Vector2dF& scroll_delta) { |
| 3812 DCHECK_EQ( |
| 3813 ElementId(active_tree()->LayerById(scroll_node->owner_id)->element_id()), |
| 3814 scroll_node->data.element_id); |
| 3815 |
3808 return animation_host_->ImplOnlyScrollAnimationUpdateTarget( | 3816 return animation_host_->ImplOnlyScrollAnimationUpdateTarget( |
3809 scroll_node->owner_id, scroll_delta, | 3817 scroll_node->data.element_id, scroll_delta, |
3810 active_tree_->property_trees()->scroll_tree.MaxScrollOffset( | 3818 active_tree_->property_trees()->scroll_tree.MaxScrollOffset( |
3811 scroll_node->id), | 3819 scroll_node->id), |
3812 CurrentBeginFrameArgs().frame_time); | 3820 CurrentBeginFrameArgs().frame_time); |
3813 } | 3821 } |
3814 | 3822 |
3815 bool LayerTreeHostImpl::IsElementInList(ElementId element_id, | 3823 bool LayerTreeHostImpl::IsElementInList(ElementId element_id, |
3816 ElementListType list_type) const { | 3824 ElementListType list_type) const { |
3817 if (list_type == ElementListType::ACTIVE) { | 3825 if (list_type == ElementListType::ACTIVE) { |
3818 return active_tree() ? active_tree()->LayerById(element_id) != nullptr | 3826 return active_tree() |
3819 : false; | 3827 ? active_tree()->LayerByElementId(element_id) != nullptr |
| 3828 : false; |
3820 } else { | 3829 } else { |
3821 if (pending_tree() && pending_tree()->LayerById(element_id)) | 3830 if (pending_tree() && pending_tree()->LayerByElementId(element_id)) |
3822 return true; | 3831 return true; |
3823 if (recycle_tree() && recycle_tree()->LayerById(element_id)) | 3832 if (recycle_tree() && recycle_tree()->LayerByElementId(element_id)) |
3824 return true; | 3833 return true; |
3825 | 3834 |
3826 return false; | 3835 return false; |
3827 } | 3836 } |
3828 } | 3837 } |
3829 | 3838 |
3830 void LayerTreeHostImpl::SetMutatorsNeedCommit() {} | 3839 void LayerTreeHostImpl::SetMutatorsNeedCommit() {} |
3831 | 3840 |
3832 void LayerTreeHostImpl::SetMutatorsNeedRebuildPropertyTrees() {} | 3841 void LayerTreeHostImpl::SetMutatorsNeedRebuildPropertyTrees() {} |
3833 | 3842 |
3834 void LayerTreeHostImpl::SetTreeLayerFilterMutated( | 3843 void LayerTreeHostImpl::SetTreeLayerFilterMutated( |
3835 int layer_id, | 3844 ElementId element_id, |
3836 LayerTreeImpl* tree, | 3845 LayerTreeImpl* tree, |
3837 const FilterOperations& filters) { | 3846 const FilterOperations& filters) { |
3838 if (!tree) | 3847 if (!tree) |
3839 return; | 3848 return; |
3840 | 3849 |
3841 LayerImpl* layer = tree->LayerById(layer_id); | 3850 LayerImpl* layer = tree->LayerByElementId(element_id); |
3842 if (layer) | 3851 if (layer) |
3843 layer->OnFilterAnimated(filters); | 3852 layer->OnFilterAnimated(filters); |
3844 } | 3853 } |
3845 | 3854 |
3846 void LayerTreeHostImpl::SetTreeLayerOpacityMutated(int layer_id, | 3855 void LayerTreeHostImpl::SetTreeLayerOpacityMutated(ElementId element_id, |
3847 LayerTreeImpl* tree, | 3856 LayerTreeImpl* tree, |
3848 float opacity) { | 3857 float opacity) { |
3849 if (!tree) | 3858 if (!tree) |
3850 return; | 3859 return; |
3851 | 3860 |
3852 LayerImpl* layer = tree->LayerById(layer_id); | 3861 LayerImpl* layer = tree->LayerByElementId(element_id); |
3853 if (layer) | 3862 if (layer) |
3854 layer->OnOpacityAnimated(opacity); | 3863 layer->OnOpacityAnimated(opacity); |
3855 } | 3864 } |
3856 | 3865 |
3857 void LayerTreeHostImpl::SetTreeLayerTransformMutated( | 3866 void LayerTreeHostImpl::SetTreeLayerTransformMutated( |
3858 int layer_id, | 3867 ElementId element_id, |
3859 LayerTreeImpl* tree, | 3868 LayerTreeImpl* tree, |
3860 const gfx::Transform& transform) { | 3869 const gfx::Transform& transform) { |
3861 if (!tree) | 3870 if (!tree) |
3862 return; | 3871 return; |
3863 | 3872 |
3864 LayerImpl* layer = tree->LayerById(layer_id); | 3873 LayerImpl* layer = tree->LayerByElementId(element_id); |
3865 if (layer) | 3874 if (layer) |
3866 layer->OnTransformAnimated(transform); | 3875 layer->OnTransformAnimated(transform); |
3867 } | 3876 } |
3868 | 3877 |
3869 void LayerTreeHostImpl::SetTreeLayerScrollOffsetMutated( | 3878 void LayerTreeHostImpl::SetTreeLayerScrollOffsetMutated( |
3870 int layer_id, | 3879 ElementId element_id, |
3871 LayerTreeImpl* tree, | 3880 LayerTreeImpl* tree, |
3872 const gfx::ScrollOffset& scroll_offset) { | 3881 const gfx::ScrollOffset& scroll_offset) { |
3873 if (!tree) | 3882 if (!tree) |
3874 return; | 3883 return; |
3875 | 3884 |
3876 LayerImpl* layer = tree->LayerById(layer_id); | 3885 LayerImpl* layer = tree->LayerByElementId(element_id); |
3877 if (layer) { | 3886 if (layer) { |
3878 layer->OnScrollOffsetAnimated(scroll_offset); | 3887 layer->OnScrollOffsetAnimated(scroll_offset); |
3879 // Run mutation callbacks to respond to updated scroll offset. | 3888 // Run mutation callbacks to respond to updated scroll offset. |
3880 Mutate(CurrentBeginFrameArgs().frame_time); | 3889 Mutate(CurrentBeginFrameArgs().frame_time); |
3881 } | 3890 } |
3882 } | 3891 } |
3883 | 3892 |
3884 bool LayerTreeHostImpl::AnimationsPreserveAxisAlignment( | 3893 bool LayerTreeHostImpl::AnimationsPreserveAxisAlignment( |
3885 const LayerImpl* layer) const { | 3894 const LayerImpl* layer) const { |
3886 return animation_host_->AnimationsPreserveAxisAlignment(layer->id()); | 3895 return animation_host_->AnimationsPreserveAxisAlignment(layer->element_id()); |
3887 } | 3896 } |
3888 | 3897 |
3889 void LayerTreeHostImpl::SetElementFilterMutated( | 3898 void LayerTreeHostImpl::SetElementFilterMutated( |
3890 ElementId element_id, | 3899 ElementId element_id, |
3891 ElementListType list_type, | 3900 ElementListType list_type, |
3892 const FilterOperations& filters) { | 3901 const FilterOperations& filters) { |
3893 if (list_type == ElementListType::ACTIVE) { | 3902 if (list_type == ElementListType::ACTIVE) { |
3894 SetTreeLayerFilterMutated(element_id, active_tree(), filters); | 3903 SetTreeLayerFilterMutated(element_id, active_tree(), filters); |
3895 } else { | 3904 } else { |
3896 SetTreeLayerFilterMutated(element_id, pending_tree(), filters); | 3905 SetTreeLayerFilterMutated(element_id, pending_tree(), filters); |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3935 | 3944 |
3936 void LayerTreeHostImpl::ElementTransformIsAnimatingChanged( | 3945 void LayerTreeHostImpl::ElementTransformIsAnimatingChanged( |
3937 ElementId element_id, | 3946 ElementId element_id, |
3938 ElementListType list_type, | 3947 ElementListType list_type, |
3939 AnimationChangeType change_type, | 3948 AnimationChangeType change_type, |
3940 bool is_animating) { | 3949 bool is_animating) { |
3941 LayerTreeImpl* tree = | 3950 LayerTreeImpl* tree = |
3942 list_type == ElementListType::ACTIVE ? active_tree() : pending_tree(); | 3951 list_type == ElementListType::ACTIVE ? active_tree() : pending_tree(); |
3943 if (!tree) | 3952 if (!tree) |
3944 return; | 3953 return; |
3945 LayerImpl* layer = tree->LayerById(element_id); | 3954 LayerImpl* layer = tree->LayerByElementId(element_id); |
3946 if (layer) { | 3955 if (layer) { |
3947 switch (change_type) { | 3956 switch (change_type) { |
3948 case AnimationChangeType::POTENTIAL: | 3957 case AnimationChangeType::POTENTIAL: |
3949 layer->OnTransformIsPotentiallyAnimatingChanged(is_animating); | 3958 layer->OnTransformIsPotentiallyAnimatingChanged(is_animating); |
3950 break; | 3959 break; |
3951 case AnimationChangeType::RUNNING: | 3960 case AnimationChangeType::RUNNING: |
3952 layer->OnTransformIsCurrentlyAnimatingChanged(is_animating); | 3961 layer->OnTransformIsCurrentlyAnimatingChanged(is_animating); |
3953 break; | 3962 break; |
3954 case AnimationChangeType::BOTH: | 3963 case AnimationChangeType::BOTH: |
3955 layer->OnTransformIsPotentiallyAnimatingChanged(is_animating); | 3964 layer->OnTransformIsPotentiallyAnimatingChanged(is_animating); |
3956 layer->OnTransformIsCurrentlyAnimatingChanged(is_animating); | 3965 layer->OnTransformIsCurrentlyAnimatingChanged(is_animating); |
3957 break; | 3966 break; |
3958 } | 3967 } |
3959 } | 3968 } |
3960 } | 3969 } |
3961 | 3970 |
3962 void LayerTreeHostImpl::ElementOpacityIsAnimatingChanged( | 3971 void LayerTreeHostImpl::ElementOpacityIsAnimatingChanged( |
3963 ElementId element_id, | 3972 ElementId element_id, |
3964 ElementListType list_type, | 3973 ElementListType list_type, |
3965 AnimationChangeType change_type, | 3974 AnimationChangeType change_type, |
3966 bool is_animating) { | 3975 bool is_animating) { |
3967 LayerTreeImpl* tree = | 3976 LayerTreeImpl* tree = |
3968 list_type == ElementListType::ACTIVE ? active_tree() : pending_tree(); | 3977 list_type == ElementListType::ACTIVE ? active_tree() : pending_tree(); |
3969 if (!tree) | 3978 if (!tree) |
3970 return; | 3979 return; |
3971 LayerImpl* layer = tree->LayerById(element_id); | 3980 LayerImpl* layer = tree->LayerByElementId(element_id); |
3972 if (layer) { | 3981 if (layer) { |
3973 switch (change_type) { | 3982 switch (change_type) { |
3974 case AnimationChangeType::POTENTIAL: | 3983 case AnimationChangeType::POTENTIAL: |
3975 layer->OnOpacityIsPotentiallyAnimatingChanged(is_animating); | 3984 layer->OnOpacityIsPotentiallyAnimatingChanged(is_animating); |
3976 break; | 3985 break; |
3977 case AnimationChangeType::RUNNING: | 3986 case AnimationChangeType::RUNNING: |
3978 layer->OnOpacityIsCurrentlyAnimatingChanged(is_animating); | 3987 layer->OnOpacityIsCurrentlyAnimatingChanged(is_animating); |
3979 break; | 3988 break; |
3980 case AnimationChangeType::BOTH: | 3989 case AnimationChangeType::BOTH: |
3981 layer->OnOpacityIsPotentiallyAnimatingChanged(is_animating); | 3990 layer->OnOpacityIsPotentiallyAnimatingChanged(is_animating); |
3982 layer->OnOpacityIsCurrentlyAnimatingChanged(is_animating); | 3991 layer->OnOpacityIsCurrentlyAnimatingChanged(is_animating); |
3983 break; | 3992 break; |
3984 } | 3993 } |
3985 } | 3994 } |
3986 } | 3995 } |
3987 | 3996 |
3988 void LayerTreeHostImpl::ScrollOffsetAnimationFinished() { | 3997 void LayerTreeHostImpl::ScrollOffsetAnimationFinished() { |
3989 // TODO(majidvp): We should pass in the original starting scroll position here | 3998 // TODO(majidvp): We should pass in the original starting scroll position here |
3990 ScrollStateData scroll_state_data; | 3999 ScrollStateData scroll_state_data; |
3991 ScrollState scroll_state(scroll_state_data); | 4000 ScrollState scroll_state(scroll_state_data); |
3992 ScrollEnd(&scroll_state); | 4001 ScrollEnd(&scroll_state); |
3993 } | 4002 } |
3994 | 4003 |
3995 gfx::ScrollOffset LayerTreeHostImpl::GetScrollOffsetForAnimation( | 4004 gfx::ScrollOffset LayerTreeHostImpl::GetScrollOffsetForAnimation( |
3996 ElementId element_id) const { | 4005 ElementId element_id) const { |
3997 if (active_tree()) { | 4006 if (active_tree()) { |
3998 LayerImpl* layer = active_tree()->LayerById(element_id); | 4007 LayerImpl* layer = active_tree()->LayerByElementId(element_id); |
3999 if (layer) | 4008 if (layer) |
4000 return layer->ScrollOffsetForAnimation(); | 4009 return layer->ScrollOffsetForAnimation(); |
4001 } | 4010 } |
4002 | 4011 |
4003 return gfx::ScrollOffset(); | 4012 return gfx::ScrollOffset(); |
4004 } | 4013 } |
4005 | 4014 |
4006 bool LayerTreeHostImpl::SupportsImplScrolling() const { | 4015 bool LayerTreeHostImpl::SupportsImplScrolling() const { |
4007 // Supported in threaded mode. | 4016 // Supported in threaded mode. |
4008 return task_runner_provider_->HasImplThread(); | 4017 return task_runner_provider_->HasImplThread(); |
4009 } | 4018 } |
4010 | 4019 |
4011 bool LayerTreeHostImpl::CommitToActiveTree() const { | 4020 bool LayerTreeHostImpl::CommitToActiveTree() const { |
4012 // In single threaded mode we skip the pending tree and commit directly to the | 4021 // In single threaded mode we skip the pending tree and commit directly to the |
4013 // active tree. | 4022 // active tree. |
4014 return !task_runner_provider_->HasImplThread(); | 4023 return !task_runner_provider_->HasImplThread(); |
4015 } | 4024 } |
4016 | 4025 |
4017 } // namespace cc | 4026 } // namespace cc |
OLD | NEW |