| Index: cc/animation/transform_operations.cc
|
| diff --git a/cc/animation/transform_operations.cc b/cc/animation/transform_operations.cc
|
| deleted file mode 100644
|
| index 20e8c6a6587abd0f1ca11881062fbf4c75f47199..0000000000000000000000000000000000000000
|
| --- a/cc/animation/transform_operations.cc
|
| +++ /dev/null
|
| @@ -1,319 +0,0 @@
|
| -// Copyright 2013 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/animation/transform_operations.h"
|
| -
|
| -#include <algorithm>
|
| -
|
| -#include "ui/gfx/animation/tween.h"
|
| -#include "ui/gfx/geometry/box_f.h"
|
| -#include "ui/gfx/geometry/vector3d_f.h"
|
| -#include "ui/gfx/transform_util.h"
|
| -
|
| -namespace cc {
|
| -
|
| -TransformOperations::TransformOperations()
|
| - : decomposed_transform_dirty_(true) {
|
| -}
|
| -
|
| -TransformOperations::TransformOperations(const TransformOperations& other) {
|
| - operations_ = other.operations_;
|
| - decomposed_transform_dirty_ = other.decomposed_transform_dirty_;
|
| - if (!decomposed_transform_dirty_) {
|
| - decomposed_transform_.reset(
|
| - new gfx::DecomposedTransform(*other.decomposed_transform_.get()));
|
| - }
|
| -}
|
| -
|
| -TransformOperations::~TransformOperations() {
|
| -}
|
| -
|
| -gfx::Transform TransformOperations::Apply() const {
|
| - gfx::Transform to_return;
|
| - for (size_t i = 0; i < operations_.size(); ++i)
|
| - to_return.PreconcatTransform(operations_[i].matrix);
|
| - return to_return;
|
| -}
|
| -
|
| -gfx::Transform TransformOperations::Blend(const TransformOperations& from,
|
| - SkMScalar progress) const {
|
| - gfx::Transform to_return;
|
| - BlendInternal(from, progress, &to_return);
|
| - return to_return;
|
| -}
|
| -
|
| -bool TransformOperations::BlendedBoundsForBox(const gfx::BoxF& box,
|
| - const TransformOperations& from,
|
| - SkMScalar min_progress,
|
| - SkMScalar max_progress,
|
| - gfx::BoxF* bounds) const {
|
| - *bounds = box;
|
| -
|
| - bool from_identity = from.IsIdentity();
|
| - bool to_identity = IsIdentity();
|
| - if (from_identity && to_identity)
|
| - return true;
|
| -
|
| - if (!MatchesTypes(from))
|
| - return false;
|
| -
|
| - size_t num_operations =
|
| - std::max(from_identity ? 0 : from.operations_.size(),
|
| - to_identity ? 0 : operations_.size());
|
| -
|
| - // Because we are squashing all of the matrices together when applying
|
| - // them to the animation, we must apply them in reverse order when
|
| - // not squashing them.
|
| - for (int i = num_operations - 1; i >= 0; --i) {
|
| - gfx::BoxF bounds_for_operation;
|
| - const TransformOperation* from_op =
|
| - from_identity ? nullptr : &from.operations_[i];
|
| - const TransformOperation* to_op = to_identity ? nullptr : &operations_[i];
|
| - if (!TransformOperation::BlendedBoundsForBox(*bounds,
|
| - from_op,
|
| - to_op,
|
| - min_progress,
|
| - max_progress,
|
| - &bounds_for_operation))
|
| - return false;
|
| - *bounds = bounds_for_operation;
|
| - }
|
| -
|
| - return true;
|
| -}
|
| -
|
| -bool TransformOperations::AffectsScale() const {
|
| - for (size_t i = 0; i < operations_.size(); ++i) {
|
| - if (operations_[i].type == TransformOperation::TRANSFORM_OPERATION_SCALE)
|
| - return true;
|
| - if (operations_[i].type == TransformOperation::TRANSFORM_OPERATION_MATRIX &&
|
| - !operations_[i].matrix.IsIdentityOrTranslation())
|
| - return true;
|
| - }
|
| - return false;
|
| -}
|
| -
|
| -bool TransformOperations::PreservesAxisAlignment() const {
|
| - for (size_t i = 0; i < operations_.size(); ++i) {
|
| - switch (operations_[i].type) {
|
| - case TransformOperation::TRANSFORM_OPERATION_IDENTITY:
|
| - case TransformOperation::TRANSFORM_OPERATION_TRANSLATE:
|
| - case TransformOperation::TRANSFORM_OPERATION_SCALE:
|
| - continue;
|
| - case TransformOperation::TRANSFORM_OPERATION_MATRIX:
|
| - if (!operations_[i].matrix.IsIdentity() &&
|
| - !operations_[i].matrix.IsScaleOrTranslation())
|
| - return false;
|
| - continue;
|
| - case TransformOperation::TRANSFORM_OPERATION_ROTATE:
|
| - case TransformOperation::TRANSFORM_OPERATION_SKEW:
|
| - case TransformOperation::TRANSFORM_OPERATION_PERSPECTIVE:
|
| - return false;
|
| - }
|
| - }
|
| - return true;
|
| -}
|
| -
|
| -bool TransformOperations::IsTranslation() const {
|
| - for (size_t i = 0; i < operations_.size(); ++i) {
|
| - switch (operations_[i].type) {
|
| - case TransformOperation::TRANSFORM_OPERATION_IDENTITY:
|
| - case TransformOperation::TRANSFORM_OPERATION_TRANSLATE:
|
| - continue;
|
| - case TransformOperation::TRANSFORM_OPERATION_MATRIX:
|
| - if (!operations_[i].matrix.IsIdentityOrTranslation())
|
| - return false;
|
| - continue;
|
| - case TransformOperation::TRANSFORM_OPERATION_ROTATE:
|
| - case TransformOperation::TRANSFORM_OPERATION_SCALE:
|
| - case TransformOperation::TRANSFORM_OPERATION_SKEW:
|
| - case TransformOperation::TRANSFORM_OPERATION_PERSPECTIVE:
|
| - return false;
|
| - }
|
| - }
|
| - return true;
|
| -}
|
| -
|
| -bool TransformOperations::ScaleComponent(gfx::Vector3dF* scale) const {
|
| - *scale = gfx::Vector3dF(1.f, 1.f, 1.f);
|
| - bool has_scale_component = false;
|
| - for (size_t i = 0; i < operations_.size(); ++i) {
|
| - switch (operations_[i].type) {
|
| - case TransformOperation::TRANSFORM_OPERATION_IDENTITY:
|
| - case TransformOperation::TRANSFORM_OPERATION_TRANSLATE:
|
| - continue;
|
| - case TransformOperation::TRANSFORM_OPERATION_MATRIX:
|
| - if (!operations_[i].matrix.IsIdentityOrTranslation())
|
| - return false;
|
| - continue;
|
| - case TransformOperation::TRANSFORM_OPERATION_ROTATE:
|
| - case TransformOperation::TRANSFORM_OPERATION_SKEW:
|
| - case TransformOperation::TRANSFORM_OPERATION_PERSPECTIVE:
|
| - return false;
|
| - case TransformOperation::TRANSFORM_OPERATION_SCALE:
|
| - if (has_scale_component)
|
| - return false;
|
| - has_scale_component = true;
|
| - scale->Scale(operations_[i].scale.x,
|
| - operations_[i].scale.y,
|
| - operations_[i].scale.z);
|
| - }
|
| - }
|
| - return true;
|
| -}
|
| -
|
| -bool TransformOperations::MatchesTypes(const TransformOperations& other) const {
|
| - if (IsIdentity() || other.IsIdentity())
|
| - return true;
|
| -
|
| - if (operations_.size() != other.operations_.size())
|
| - return false;
|
| -
|
| - for (size_t i = 0; i < operations_.size(); ++i) {
|
| - if (operations_[i].type != other.operations_[i].type
|
| - && !operations_[i].IsIdentity()
|
| - && !other.operations_[i].IsIdentity())
|
| - return false;
|
| - }
|
| -
|
| - return true;
|
| -}
|
| -
|
| -bool TransformOperations::CanBlendWith(
|
| - const TransformOperations& other) const {
|
| - gfx::Transform dummy;
|
| - return BlendInternal(other, 0.5, &dummy);
|
| -}
|
| -
|
| -void TransformOperations::AppendTranslate(SkMScalar x,
|
| - SkMScalar y,
|
| - SkMScalar z) {
|
| - TransformOperation to_add;
|
| - to_add.matrix.Translate3d(x, y, z);
|
| - to_add.type = TransformOperation::TRANSFORM_OPERATION_TRANSLATE;
|
| - to_add.translate.x = x;
|
| - to_add.translate.y = y;
|
| - to_add.translate.z = z;
|
| - operations_.push_back(to_add);
|
| - decomposed_transform_dirty_ = true;
|
| -}
|
| -
|
| -void TransformOperations::AppendRotate(SkMScalar x,
|
| - SkMScalar y,
|
| - SkMScalar z,
|
| - SkMScalar degrees) {
|
| - TransformOperation to_add;
|
| - to_add.matrix.RotateAbout(gfx::Vector3dF(x, y, z), degrees);
|
| - to_add.type = TransformOperation::TRANSFORM_OPERATION_ROTATE;
|
| - to_add.rotate.axis.x = x;
|
| - to_add.rotate.axis.y = y;
|
| - to_add.rotate.axis.z = z;
|
| - to_add.rotate.angle = degrees;
|
| - operations_.push_back(to_add);
|
| - decomposed_transform_dirty_ = true;
|
| -}
|
| -
|
| -void TransformOperations::AppendScale(SkMScalar x, SkMScalar y, SkMScalar z) {
|
| - TransformOperation to_add;
|
| - to_add.matrix.Scale3d(x, y, z);
|
| - to_add.type = TransformOperation::TRANSFORM_OPERATION_SCALE;
|
| - to_add.scale.x = x;
|
| - to_add.scale.y = y;
|
| - to_add.scale.z = z;
|
| - operations_.push_back(to_add);
|
| - decomposed_transform_dirty_ = true;
|
| -}
|
| -
|
| -void TransformOperations::AppendSkew(SkMScalar x, SkMScalar y) {
|
| - TransformOperation to_add;
|
| - to_add.matrix.SkewX(x);
|
| - to_add.matrix.SkewY(y);
|
| - to_add.type = TransformOperation::TRANSFORM_OPERATION_SKEW;
|
| - to_add.skew.x = x;
|
| - to_add.skew.y = y;
|
| - operations_.push_back(to_add);
|
| - decomposed_transform_dirty_ = true;
|
| -}
|
| -
|
| -void TransformOperations::AppendPerspective(SkMScalar depth) {
|
| - TransformOperation to_add;
|
| - to_add.matrix.ApplyPerspectiveDepth(depth);
|
| - to_add.type = TransformOperation::TRANSFORM_OPERATION_PERSPECTIVE;
|
| - to_add.perspective_depth = depth;
|
| - operations_.push_back(to_add);
|
| - decomposed_transform_dirty_ = true;
|
| -}
|
| -
|
| -void TransformOperations::AppendMatrix(const gfx::Transform& matrix) {
|
| - TransformOperation to_add;
|
| - to_add.matrix = matrix;
|
| - to_add.type = TransformOperation::TRANSFORM_OPERATION_MATRIX;
|
| - operations_.push_back(to_add);
|
| - decomposed_transform_dirty_ = true;
|
| -}
|
| -
|
| -void TransformOperations::AppendIdentity() {
|
| - operations_.push_back(TransformOperation());
|
| -}
|
| -
|
| -bool TransformOperations::IsIdentity() const {
|
| - for (size_t i = 0; i < operations_.size(); ++i) {
|
| - if (!operations_[i].IsIdentity())
|
| - return false;
|
| - }
|
| - return true;
|
| -}
|
| -
|
| -bool TransformOperations::BlendInternal(const TransformOperations& from,
|
| - SkMScalar progress,
|
| - gfx::Transform* result) const {
|
| - bool from_identity = from.IsIdentity();
|
| - bool to_identity = IsIdentity();
|
| - if (from_identity && to_identity)
|
| - return true;
|
| -
|
| - if (MatchesTypes(from)) {
|
| - size_t num_operations =
|
| - std::max(from_identity ? 0 : from.operations_.size(),
|
| - to_identity ? 0 : operations_.size());
|
| - for (size_t i = 0; i < num_operations; ++i) {
|
| - gfx::Transform blended;
|
| - if (!TransformOperation::BlendTransformOperations(
|
| - from_identity ? 0 : &from.operations_[i],
|
| - to_identity ? 0 : &operations_[i],
|
| - progress,
|
| - &blended))
|
| - return false;
|
| - result->PreconcatTransform(blended);
|
| - }
|
| - return true;
|
| - }
|
| -
|
| - if (!ComputeDecomposedTransform() || !from.ComputeDecomposedTransform())
|
| - return false;
|
| -
|
| - gfx::DecomposedTransform to_return;
|
| - if (!gfx::BlendDecomposedTransforms(&to_return,
|
| - *decomposed_transform_.get(),
|
| - *from.decomposed_transform_.get(),
|
| - progress))
|
| - return false;
|
| -
|
| - *result = ComposeTransform(to_return);
|
| - return true;
|
| -}
|
| -
|
| -bool TransformOperations::ComputeDecomposedTransform() const {
|
| - if (decomposed_transform_dirty_) {
|
| - if (!decomposed_transform_)
|
| - decomposed_transform_.reset(new gfx::DecomposedTransform());
|
| - gfx::Transform transform = Apply();
|
| - if (!gfx::DecomposeTransform(decomposed_transform_.get(), transform))
|
| - return false;
|
| - decomposed_transform_dirty_ = false;
|
| - }
|
| - return true;
|
| -}
|
| -
|
| -} // namespace cc
|
|
|