| Index: cc/layers/layer_utils.cc
|
| diff --git a/cc/layers/layer_utils.cc b/cc/layers/layer_utils.cc
|
| deleted file mode 100644
|
| index 888174a46d31eb3484422055c959e943533ff4b1..0000000000000000000000000000000000000000
|
| --- a/cc/layers/layer_utils.cc
|
| +++ /dev/null
|
| @@ -1,146 +0,0 @@
|
| -// Copyright 2014 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "cc/layers/layer_utils.h"
|
| -
|
| -#include "cc/layers/layer_impl.h"
|
| -#include "cc/trees/layer_tree_host_common.h"
|
| -#include "ui/gfx/geometry/box_f.h"
|
| -
|
| -namespace cc {
|
| -
|
| -namespace {
|
| -
|
| -bool HasAnimationThatInflatesBounds(const LayerImpl& layer) {
|
| - return layer.layer_animation_controller()->HasAnimationThatInflatesBounds();
|
| -}
|
| -
|
| -bool HasFilterAnimationThatInflatesBounds(const LayerImpl& layer) {
|
| - return layer.layer_animation_controller()
|
| - ->HasFilterAnimationThatInflatesBounds();
|
| -}
|
| -
|
| -bool HasTransformAnimationThatInflatesBounds(const LayerImpl& layer) {
|
| - return layer.layer_animation_controller()
|
| - ->HasTransformAnimationThatInflatesBounds();
|
| -}
|
| -
|
| -inline bool HasAncestorTransformAnimation(const LayerImpl& layer) {
|
| - return layer.screen_space_transform_is_animating();
|
| -}
|
| -
|
| -inline bool HasAncestorFilterAnimation(const LayerImpl& layer) {
|
| - for (const LayerImpl* current = &layer; current;
|
| - current = current->parent()) {
|
| - if (HasFilterAnimationThatInflatesBounds(*current))
|
| - return true;
|
| - }
|
| -
|
| - return false;
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -bool LayerUtils::GetAnimationBounds(const LayerImpl& layer_in, gfx::BoxF* out) {
|
| - // We don't care about animated bounds for invisible layers.
|
| - if (!layer_in.DrawsContent())
|
| - return false;
|
| -
|
| - // We also don't care for layers that are not animated or a child of an
|
| - // animated layer.
|
| - if (!HasAncestorTransformAnimation(layer_in) &&
|
| - !HasAncestorFilterAnimation(layer_in))
|
| - return false;
|
| -
|
| - // To compute the inflated bounds for a layer, we start by taking its bounds
|
| - // and converting it to a 3d box, and then we transform or inflate it
|
| - // repeatedly as we walk up the layer tree to the root.
|
| - //
|
| - // At each layer we apply the following transformations to the box:
|
| - // 1) We translate so that the anchor point is the origin.
|
| - // 2) We either apply the layer's transform or inflate if the layer's
|
| - // transform is animated.
|
| - // 3) We undo the translation from step 1 and apply a second translation
|
| - // to account for the layer's position.
|
| - //
|
| - gfx::BoxF box(layer_in.bounds().width(), layer_in.bounds().height(), 0.f);
|
| -
|
| - // We want to inflate/transform the box as few times as possible. Each time
|
| - // we do this, we have to make the box axis aligned again, so if we make many
|
| - // small adjustments to the box by transforming it repeatedly rather than
|
| - // once by the product of all these matrices, we will accumulate a bunch of
|
| - // unnecessary inflation because of the the many axis-alignment fixes. This
|
| - // matrix stores said product.
|
| - gfx::Transform coalesced_transform;
|
| -
|
| - for (const LayerImpl* layer = &layer_in; layer; layer = layer->parent()) {
|
| - int transform_origin_x = layer->transform_origin().x();
|
| - int transform_origin_y = layer->transform_origin().y();
|
| - int transform_origin_z = layer->transform_origin().z();
|
| -
|
| - gfx::PointF position = layer->position();
|
| - if (layer->parent() && !HasAnimationThatInflatesBounds(*layer)) {
|
| - // |composite_layer_transform| contains 1 - 4 mentioned above. We compute
|
| - // it separately and apply afterwards because it's a bit more efficient
|
| - // because post-multiplication appears a bit more expensive, so we want
|
| - // to do it only once.
|
| - gfx::Transform composite_layer_transform;
|
| -
|
| - composite_layer_transform.Translate3d(transform_origin_x + position.x(),
|
| - transform_origin_y + position.y(),
|
| - transform_origin_z);
|
| - composite_layer_transform.PreconcatTransform(layer->transform());
|
| - composite_layer_transform.Translate3d(
|
| - -transform_origin_x, -transform_origin_y, -transform_origin_z);
|
| -
|
| - // Add this layer's contributions to the |coalesced_transform|.
|
| - coalesced_transform.ConcatTransform(composite_layer_transform);
|
| - continue;
|
| - }
|
| -
|
| - // First, apply coalesced transform we've been building and reset it.
|
| - coalesced_transform.TransformBox(&box);
|
| - coalesced_transform.MakeIdentity();
|
| -
|
| - // We need to apply the inflation about the layer's anchor point. Rather
|
| - // than doing this via transforms, we'll just shift the box directly.
|
| - box.set_origin(box.origin() + gfx::Vector3dF(-transform_origin_x,
|
| - -transform_origin_y,
|
| - -transform_origin_z));
|
| -
|
| - // Perform the inflation
|
| - if (HasFilterAnimationThatInflatesBounds(*layer)) {
|
| - gfx::BoxF inflated;
|
| - if (!layer->layer_animation_controller()->FilterAnimationBoundsForBox(
|
| - box, &inflated))
|
| - return false;
|
| - box = inflated;
|
| - }
|
| -
|
| - if (HasTransformAnimationThatInflatesBounds(*layer)) {
|
| - gfx::BoxF inflated;
|
| - if (!layer->layer_animation_controller()->TransformAnimationBoundsForBox(
|
| - box, &inflated))
|
| - return false;
|
| - box = inflated;
|
| - }
|
| -
|
| - // Apply step 3) mentioned above.
|
| - box.set_origin(box.origin() +
|
| - gfx::Vector3dF(transform_origin_x + position.x(),
|
| - transform_origin_y + position.y(),
|
| - transform_origin_z));
|
| - }
|
| -
|
| - // If we've got an unapplied coalesced transform at this point, it must still
|
| - // be applied.
|
| - if (!coalesced_transform.IsIdentity())
|
| - coalesced_transform.TransformBox(&box);
|
| -
|
| - *out = box;
|
| -
|
| - return true;
|
| -}
|
| -
|
| -} // namespace cc
|
|
|