| OLD | NEW |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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_impl.h" | 5 #include "cc/layers/layer_impl.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 66 stacking_order_changed_(false), | 66 stacking_order_changed_(false), |
| 67 double_sided_(true), | 67 double_sided_(true), |
| 68 should_flatten_transform_(true), | 68 should_flatten_transform_(true), |
| 69 should_flatten_transform_from_property_tree_(false), | 69 should_flatten_transform_from_property_tree_(false), |
| 70 layer_property_changed_(false), | 70 layer_property_changed_(false), |
| 71 masks_to_bounds_(false), | 71 masks_to_bounds_(false), |
| 72 contents_opaque_(false), | 72 contents_opaque_(false), |
| 73 is_root_for_isolated_group_(false), | 73 is_root_for_isolated_group_(false), |
| 74 use_parent_backface_visibility_(false), | 74 use_parent_backface_visibility_(false), |
| 75 draws_content_(false), | 75 draws_content_(false), |
| 76 hide_layer_and_subtree_(false), | |
| 77 transform_is_invertible_(true), | 76 transform_is_invertible_(true), |
| 78 is_container_for_fixed_position_layers_(false), | 77 is_container_for_fixed_position_layers_(false), |
| 79 is_affected_by_page_scale_(true), | 78 is_affected_by_page_scale_(true), |
| 80 was_ever_ready_since_last_transform_animation_(true), | 79 was_ever_ready_since_last_transform_animation_(true), |
| 81 background_color_(0), | 80 background_color_(0), |
| 82 opacity_(1.0), | 81 opacity_(1.0), |
| 83 blend_mode_(SkXfermode::kSrcOver_Mode), | 82 blend_mode_(SkXfermode::kSrcOver_Mode), |
| 84 draw_blend_mode_(SkXfermode::kSrcOver_Mode), | 83 draw_blend_mode_(SkXfermode::kSrcOver_Mode), |
| 85 num_descendants_that_draw_content_(0), | 84 num_descendants_that_draw_content_(0), |
| 86 transform_tree_index_(-1), | 85 transform_tree_index_(-1), |
| 87 effect_tree_index_(-1), | 86 effect_tree_index_(-1), |
| 88 clip_tree_index_(-1), | 87 clip_tree_index_(-1), |
| 89 draw_depth_(0.f), | 88 draw_depth_(0.f), |
| 90 needs_push_properties_(false), | 89 needs_push_properties_(false), |
| 91 num_dependents_need_push_properties_(0), | 90 num_dependents_need_push_properties_(0), |
| 92 sorting_context_id_(0), | 91 sorting_context_id_(0), |
| 93 current_draw_mode_(DRAW_MODE_NONE), | 92 current_draw_mode_(DRAW_MODE_NONE), |
| 94 element_id_(0), | 93 element_id_(0), |
| 95 mutable_properties_(kMutablePropertyNone), | 94 mutable_properties_(kMutablePropertyNone), |
| 96 force_render_surface_(false), | 95 force_render_surface_(false), |
| 97 frame_timing_requests_dirty_(false), | 96 frame_timing_requests_dirty_(false), |
| 98 visited_(false), | 97 visited_(false), |
| 99 layer_or_descendant_is_drawn_(false), | 98 layer_or_descendant_is_drawn_(false), |
| 100 layer_or_descendant_has_input_handler_(false), | 99 layer_or_descendant_has_input_handler_(false), |
| 101 sorted_for_recursion_(false), | 100 sorted_for_recursion_(false) { |
| 102 is_hidden_from_property_trees_(false) { | |
| 103 DCHECK_GT(layer_id_, 0); | 101 DCHECK_GT(layer_id_, 0); |
| 104 DCHECK(layer_tree_impl_); | 102 DCHECK(layer_tree_impl_); |
| 105 layer_tree_impl_->RegisterLayer(this); | 103 layer_tree_impl_->RegisterLayer(this); |
| 106 | 104 |
| 107 if (!layer_tree_impl_->settings().use_compositor_animation_timelines) { | 105 if (!layer_tree_impl_->settings().use_compositor_animation_timelines) { |
| 108 AnimationRegistrar* registrar = layer_tree_impl_->GetAnimationRegistrar(); | 106 AnimationRegistrar* registrar = layer_tree_impl_->GetAnimationRegistrar(); |
| 109 layer_animation_controller_ = | 107 layer_animation_controller_ = |
| 110 registrar->GetAnimationControllerForId(layer_id_); | 108 registrar->GetAnimationControllerForId(layer_id_); |
| 111 layer_animation_controller_->AddValueObserver(this); | 109 layer_animation_controller_->AddValueObserver(this); |
| 112 if (IsActive()) { | 110 if (IsActive()) { |
| (...skipping 483 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 596 scoped_ptr<LayerImpl> LayerImpl::CreateLayerImpl(LayerTreeImpl* tree_impl) { | 594 scoped_ptr<LayerImpl> LayerImpl::CreateLayerImpl(LayerTreeImpl* tree_impl) { |
| 597 return LayerImpl::Create(tree_impl, layer_id_, scroll_offset_); | 595 return LayerImpl::Create(tree_impl, layer_id_, scroll_offset_); |
| 598 } | 596 } |
| 599 | 597 |
| 600 void LayerImpl::PushPropertiesTo(LayerImpl* layer) { | 598 void LayerImpl::PushPropertiesTo(LayerImpl* layer) { |
| 601 layer->SetTransformOrigin(transform_origin_); | 599 layer->SetTransformOrigin(transform_origin_); |
| 602 layer->SetBackgroundColor(background_color_); | 600 layer->SetBackgroundColor(background_color_); |
| 603 layer->SetBounds(bounds_); | 601 layer->SetBounds(bounds_); |
| 604 layer->SetDoubleSided(double_sided_); | 602 layer->SetDoubleSided(double_sided_); |
| 605 layer->SetDrawsContent(DrawsContent()); | 603 layer->SetDrawsContent(DrawsContent()); |
| 606 layer->SetHideLayerAndSubtree(hide_layer_and_subtree_); | |
| 607 // If whether layer has render surface changes, we need to update draw | 604 // If whether layer has render surface changes, we need to update draw |
| 608 // properties. | 605 // properties. |
| 609 // TODO(weiliangc): Should be safely removed after impl side is able to | 606 // TODO(weiliangc): Should be safely removed after impl side is able to |
| 610 // update render surfaces without rebuilding property trees. | 607 // update render surfaces without rebuilding property trees. |
| 611 if (layer->has_render_surface() != has_render_surface()) | 608 if (layer->has_render_surface() != has_render_surface()) |
| 612 layer->layer_tree_impl()->set_needs_update_draw_properties(); | 609 layer->layer_tree_impl()->set_needs_update_draw_properties(); |
| 613 layer->SetHasRenderSurface(!!render_surface()); | 610 layer->SetHasRenderSurface(!!render_surface()); |
| 614 layer->SetForceRenderSurface(force_render_surface_); | 611 layer->SetForceRenderSurface(force_render_surface_); |
| 615 layer->SetFilters(filters()); | 612 layer->SetFilters(filters()); |
| 616 layer->SetBackgroundFilters(background_filters()); | 613 layer->SetBackgroundFilters(background_filters()); |
| (...skipping 29 matching lines...) Expand all Loading... |
| 646 | 643 |
| 647 layer->PushScrollOffset(nullptr); | 644 layer->PushScrollOffset(nullptr); |
| 648 | 645 |
| 649 layer->Set3dSortingContextId(sorting_context_id_); | 646 layer->Set3dSortingContextId(sorting_context_id_); |
| 650 layer->SetNumDescendantsThatDrawContent(num_descendants_that_draw_content_); | 647 layer->SetNumDescendantsThatDrawContent(num_descendants_that_draw_content_); |
| 651 | 648 |
| 652 layer->SetTransformTreeIndex(transform_tree_index_); | 649 layer->SetTransformTreeIndex(transform_tree_index_); |
| 653 layer->SetClipTreeIndex(clip_tree_index_); | 650 layer->SetClipTreeIndex(clip_tree_index_); |
| 654 layer->SetEffectTreeIndex(effect_tree_index_); | 651 layer->SetEffectTreeIndex(effect_tree_index_); |
| 655 layer->set_offset_to_transform_parent(offset_to_transform_parent_); | 652 layer->set_offset_to_transform_parent(offset_to_transform_parent_); |
| 656 layer->set_is_hidden_from_property_trees(is_hidden_from_property_trees_); | |
| 657 | 653 |
| 658 LayerImpl* scroll_parent = nullptr; | 654 LayerImpl* scroll_parent = nullptr; |
| 659 if (scroll_parent_) { | 655 if (scroll_parent_) { |
| 660 scroll_parent = layer->layer_tree_impl()->LayerById(scroll_parent_->id()); | 656 scroll_parent = layer->layer_tree_impl()->LayerById(scroll_parent_->id()); |
| 661 DCHECK(scroll_parent); | 657 DCHECK(scroll_parent); |
| 662 } | 658 } |
| 663 | 659 |
| 664 layer->SetScrollParent(scroll_parent); | 660 layer->SetScrollParent(scroll_parent); |
| 665 if (scroll_children_) { | 661 if (scroll_children_) { |
| 666 std::set<LayerImpl*>* scroll_children = new std::set<LayerImpl*>; | 662 std::set<LayerImpl*>* scroll_children = new std::set<LayerImpl*>; |
| (...skipping 456 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1123 } | 1119 } |
| 1124 | 1120 |
| 1125 void LayerImpl::SetDrawsContent(bool draws_content) { | 1121 void LayerImpl::SetDrawsContent(bool draws_content) { |
| 1126 if (draws_content_ == draws_content) | 1122 if (draws_content_ == draws_content) |
| 1127 return; | 1123 return; |
| 1128 | 1124 |
| 1129 draws_content_ = draws_content; | 1125 draws_content_ = draws_content; |
| 1130 NoteLayerPropertyChanged(); | 1126 NoteLayerPropertyChanged(); |
| 1131 } | 1127 } |
| 1132 | 1128 |
| 1133 void LayerImpl::SetHideLayerAndSubtree(bool hide) { | |
| 1134 if (hide_layer_and_subtree_ == hide) | |
| 1135 return; | |
| 1136 | |
| 1137 hide_layer_and_subtree_ = hide; | |
| 1138 NoteLayerPropertyChangedForSubtree(); | |
| 1139 } | |
| 1140 | |
| 1141 void LayerImpl::SetTransformOrigin(const gfx::Point3F& transform_origin) { | 1129 void LayerImpl::SetTransformOrigin(const gfx::Point3F& transform_origin) { |
| 1142 if (transform_origin_ == transform_origin) | 1130 if (transform_origin_ == transform_origin) |
| 1143 return; | 1131 return; |
| 1144 transform_origin_ = transform_origin; | 1132 transform_origin_ = transform_origin; |
| 1145 NoteLayerPropertyChangedForSubtree(); | 1133 NoteLayerPropertyChangedForSubtree(); |
| 1146 } | 1134 } |
| 1147 | 1135 |
| 1148 void LayerImpl::SetBackgroundColor(SkColor background_color) { | 1136 void LayerImpl::SetBackgroundColor(SkColor background_color) { |
| 1149 if (background_color_ == background_color) | 1137 if (background_color_ == background_color) |
| 1150 return; | 1138 return; |
| (...skipping 759 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1910 } | 1898 } |
| 1911 | 1899 |
| 1912 gfx::Rect LayerImpl::GetScaledEnclosingRectInTargetSpace(float scale) const { | 1900 gfx::Rect LayerImpl::GetScaledEnclosingRectInTargetSpace(float scale) const { |
| 1913 gfx::Transform scaled_draw_transform = DrawTransform(); | 1901 gfx::Transform scaled_draw_transform = DrawTransform(); |
| 1914 scaled_draw_transform.Scale(SK_MScalar1 / scale, SK_MScalar1 / scale); | 1902 scaled_draw_transform.Scale(SK_MScalar1 / scale, SK_MScalar1 / scale); |
| 1915 gfx::Size scaled_bounds = gfx::ScaleToCeiledSize(bounds(), scale); | 1903 gfx::Size scaled_bounds = gfx::ScaleToCeiledSize(bounds(), scale); |
| 1916 return MathUtil::MapEnclosingClippedRect(scaled_draw_transform, | 1904 return MathUtil::MapEnclosingClippedRect(scaled_draw_transform, |
| 1917 gfx::Rect(scaled_bounds)); | 1905 gfx::Rect(scaled_bounds)); |
| 1918 } | 1906 } |
| 1919 | 1907 |
| 1920 bool LayerImpl::LayerIsHidden() const { | 1908 bool LayerImpl::IsHidden() const { |
| 1921 if (layer_tree_impl()->settings().use_property_trees) { | 1909 if (layer_tree_impl()->settings().use_property_trees) { |
| 1922 return is_hidden_from_property_trees_; | 1910 EffectTree& effect_tree = layer_tree_impl_->property_trees()->effect_tree; |
| 1911 EffectNode* node = effect_tree.Node(effect_tree_index_); |
| 1912 return node->data.screen_space_opacity == 0.f; |
| 1923 } else { | 1913 } else { |
| 1924 return hide_layer_and_subtree_ || (parent() && parent()->LayerIsHidden()); | 1914 return opacity_ == 0.f || (parent() && parent()->IsHidden()); |
| 1925 } | 1915 } |
| 1926 } | 1916 } |
| 1927 | 1917 |
| 1928 float LayerImpl::GetIdealContentsScale() const { | 1918 float LayerImpl::GetIdealContentsScale() const { |
| 1929 float page_scale = IsAffectedByPageScale() | 1919 float page_scale = IsAffectedByPageScale() |
| 1930 ? layer_tree_impl()->current_page_scale_factor() | 1920 ? layer_tree_impl()->current_page_scale_factor() |
| 1931 : 1.f; | 1921 : 1.f; |
| 1932 float device_scale = layer_tree_impl()->device_scale_factor(); | 1922 float device_scale = layer_tree_impl()->device_scale_factor(); |
| 1933 | 1923 |
| 1934 float default_scale = page_scale * device_scale; | 1924 float default_scale = page_scale * device_scale; |
| 1935 if (!layer_tree_impl() | 1925 if (!layer_tree_impl() |
| 1936 ->settings() | 1926 ->settings() |
| 1937 .layer_transforms_should_scale_layer_contents) { | 1927 .layer_transforms_should_scale_layer_contents) { |
| 1938 return default_scale; | 1928 return default_scale; |
| 1939 } | 1929 } |
| 1940 | 1930 |
| 1941 gfx::Vector2dF transform_scales = MathUtil::ComputeTransform2dScaleComponents( | 1931 gfx::Vector2dF transform_scales = MathUtil::ComputeTransform2dScaleComponents( |
| 1942 DrawTransform(), default_scale); | 1932 DrawTransform(), default_scale); |
| 1943 return std::max(transform_scales.x(), transform_scales.y()); | 1933 return std::max(transform_scales.x(), transform_scales.y()); |
| 1944 } | 1934 } |
| 1945 | 1935 |
| 1946 } // namespace cc | 1936 } // namespace cc |
| OLD | NEW |