| 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 <algorithm> | 10 #include <algorithm> |
| (...skipping 465 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 476 update_rect_.SetRect(0, 0, 0, 0); | 476 update_rect_.SetRect(0, 0, 0, 0); |
| 477 damage_rect_.SetRect(0, 0, 0, 0); | 477 damage_rect_.SetRect(0, 0, 0, 0); |
| 478 } | 478 } |
| 479 | 479 |
| 480 int LayerImpl::num_copy_requests_in_target_subtree() { | 480 int LayerImpl::num_copy_requests_in_target_subtree() { |
| 481 return GetEffectTree() | 481 return GetEffectTree() |
| 482 .Node(effect_tree_index()) | 482 .Node(effect_tree_index()) |
| 483 ->num_copy_requests_in_subtree; | 483 ->num_copy_requests_in_subtree; |
| 484 } | 484 } |
| 485 | 485 |
| 486 void LayerImpl::UpdatePropertyTreeTransformIsAnimated(bool is_animated) { | |
| 487 if (TransformNode* node = | |
| 488 GetTransformTree().UpdateNodeFromOwningLayerId(id())) { | |
| 489 // A LayerImpl's own current state is insufficient for determining whether | |
| 490 // it owns a TransformNode, since this depends on the state of the | |
| 491 // corresponding Layer at the time of the last commit. For example, if | |
| 492 // |is_animated| is false, this might mean a transform animation just ticked | |
| 493 // past its finish point (so the LayerImpl still owns a TransformNode) or it | |
| 494 // might mean that a transform animation was removed during commit or | |
| 495 // activation (and, in that case, the LayerImpl will no longer own a | |
| 496 // TransformNode, unless it has non-animation-related reasons for owning a | |
| 497 // node). | |
| 498 if (node->has_potential_animation != is_animated) { | |
| 499 node->has_potential_animation = is_animated; | |
| 500 if (is_animated) { | |
| 501 node->has_only_translation_animations = HasOnlyTranslationTransforms(); | |
| 502 } else { | |
| 503 node->has_only_translation_animations = true; | |
| 504 } | |
| 505 | |
| 506 GetTransformTree().set_needs_update(true); | |
| 507 layer_tree_impl()->set_needs_update_draw_properties(); | |
| 508 } | |
| 509 } | |
| 510 } | |
| 511 | |
| 512 void LayerImpl::UpdatePropertyTreeForScrollingAndAnimationIfNeeded() { | 486 void LayerImpl::UpdatePropertyTreeForScrollingAndAnimationIfNeeded() { |
| 513 if (scrollable()) | 487 if (scrollable()) |
| 514 UpdatePropertyTreeScrollOffset(); | 488 UpdatePropertyTreeScrollOffset(); |
| 515 | 489 |
| 516 if (HasAnyAnimationTargetingProperty(TargetProperty::TRANSFORM)) { | 490 if (HasAnyAnimationTargetingProperty(TargetProperty::TRANSFORM)) { |
| 517 UpdatePropertyTreeTransformIsAnimated( | 491 if (TransformNode* node = |
| 518 HasPotentiallyRunningTransformAnimation()); | 492 GetTransformTree().FindNodeFromElementId(element_id())) { |
| 493 bool has_potential_animation = HasPotentiallyRunningTransformAnimation(); |
| 494 if (node->has_potential_animation != has_potential_animation) { |
| 495 node->has_potential_animation = has_potential_animation; |
| 496 node->has_only_translation_animations = HasOnlyTranslationTransforms(); |
| 497 GetTransformTree().set_needs_update(true); |
| 498 layer_tree_impl()->set_needs_update_draw_properties(); |
| 499 } |
| 500 } |
| 519 } | 501 } |
| 520 } | 502 } |
| 521 | 503 |
| 522 gfx::ScrollOffset LayerImpl::ScrollOffsetForAnimation() const { | 504 gfx::ScrollOffset LayerImpl::ScrollOffsetForAnimation() const { |
| 523 return CurrentScrollOffset(); | 505 return CurrentScrollOffset(); |
| 524 } | 506 } |
| 525 | 507 |
| 526 void LayerImpl::OnIsAnimatingChanged(const PropertyAnimationState& mask, | |
| 527 const PropertyAnimationState& state) { | |
| 528 DCHECK(layer_tree_impl_); | |
| 529 | |
| 530 for (int property = TargetProperty::FIRST_TARGET_PROPERTY; | |
| 531 property <= TargetProperty::LAST_TARGET_PROPERTY; ++property) { | |
| 532 if (!mask.currently_running[property] && | |
| 533 !mask.potentially_animating[property]) | |
| 534 continue; | |
| 535 | |
| 536 switch (property) { | |
| 537 case TargetProperty::TRANSFORM: | |
| 538 if (TransformNode* transform_node = | |
| 539 GetTransformTree().UpdateNodeFromOwningLayerId(id())) { | |
| 540 if (mask.currently_running[property]) | |
| 541 transform_node->is_currently_animating = | |
| 542 state.currently_running[property]; | |
| 543 if (mask.potentially_animating[property]) { | |
| 544 UpdatePropertyTreeTransformIsAnimated( | |
| 545 state.potentially_animating[property]); | |
| 546 was_ever_ready_since_last_transform_animation_ = false; | |
| 547 } | |
| 548 } | |
| 549 break; | |
| 550 case TargetProperty::OPACITY: | |
| 551 if (EffectNode* effect_node = | |
| 552 GetEffectTree().UpdateNodeFromOwningLayerId(id())) { | |
| 553 if (mask.currently_running[property]) | |
| 554 effect_node->is_currently_animating_opacity = | |
| 555 state.currently_running[property]; | |
| 556 if (mask.potentially_animating[property]) { | |
| 557 effect_node->has_potential_opacity_animation = | |
| 558 state.potentially_animating[property]; | |
| 559 GetEffectTree().set_needs_update(true); | |
| 560 } | |
| 561 } | |
| 562 break; | |
| 563 case TargetProperty::FILTER: | |
| 564 if (EffectNode* effect_node = | |
| 565 GetEffectTree().UpdateNodeFromOwningLayerId(id())) { | |
| 566 if (mask.currently_running[property]) | |
| 567 effect_node->is_currently_animating_filter = | |
| 568 state.currently_running[property]; | |
| 569 if (mask.potentially_animating[property]) | |
| 570 effect_node->has_potential_filter_animation = | |
| 571 state.potentially_animating[property]; | |
| 572 } | |
| 573 break; | |
| 574 default: | |
| 575 break; | |
| 576 } | |
| 577 } | |
| 578 } | |
| 579 | |
| 580 bool LayerImpl::IsActive() const { | 508 bool LayerImpl::IsActive() const { |
| 581 return layer_tree_impl_->IsActiveTree(); | 509 return layer_tree_impl_->IsActiveTree(); |
| 582 } | 510 } |
| 583 | 511 |
| 584 gfx::Size LayerImpl::bounds() const { | 512 gfx::Size LayerImpl::bounds() const { |
| 585 gfx::Vector2d delta = gfx::ToCeiledVector2d(bounds_delta_); | 513 gfx::Vector2d delta = gfx::ToCeiledVector2d(bounds_delta_); |
| 586 return gfx::Size(bounds_.width() + delta.x(), | 514 return gfx::Size(bounds_.width() + delta.x(), |
| 587 bounds_.height() + delta.y()); | 515 bounds_.height() + delta.y()); |
| 588 } | 516 } |
| 589 | 517 |
| (...skipping 468 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1058 | 986 |
| 1059 ScrollTree& LayerImpl::GetScrollTree() const { | 987 ScrollTree& LayerImpl::GetScrollTree() const { |
| 1060 return GetPropertyTrees()->scroll_tree; | 988 return GetPropertyTrees()->scroll_tree; |
| 1061 } | 989 } |
| 1062 | 990 |
| 1063 TransformTree& LayerImpl::GetTransformTree() const { | 991 TransformTree& LayerImpl::GetTransformTree() const { |
| 1064 return GetPropertyTrees()->transform_tree; | 992 return GetPropertyTrees()->transform_tree; |
| 1065 } | 993 } |
| 1066 | 994 |
| 1067 } // namespace cc | 995 } // namespace cc |
| OLD | NEW |