| // 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. |
| |
| #ifndef CC_ANIMATION_TRANSFORM_OPERATION_H_ |
| #define CC_ANIMATION_TRANSFORM_OPERATION_H_ |
| |
| #include "ui/gfx/transform.h" |
| |
| namespace gfx { |
| class BoxF; |
| } |
| |
| namespace cc { |
| |
| struct TransformOperation { |
| enum Type { |
| TransformOperationTranslate, |
| TransformOperationRotate, |
| TransformOperationScale, |
| TransformOperationSkew, |
| TransformOperationPerspective, |
| TransformOperationMatrix, |
| TransformOperationIdentity |
| }; |
| |
| TransformOperation() |
| : type(TransformOperationIdentity) { |
| } |
| |
| Type type; |
| gfx::Transform matrix; |
| |
| union { |
| SkMScalar perspective_depth; |
| |
| struct { |
| SkMScalar x, y; |
| } skew; |
| |
| struct { |
| SkMScalar x, y, z; |
| } scale; |
| |
| struct { |
| SkMScalar x, y, z; |
| } translate; |
| |
| struct { |
| struct { |
| SkMScalar x, y, z; |
| } axis; |
| |
| SkMScalar angle; |
| } rotate; |
| }; |
| |
| bool IsIdentity() const; |
| static bool BlendTransformOperations(const TransformOperation* from, |
| const TransformOperation* to, |
| SkMScalar progress, |
| gfx::Transform* result); |
| |
| static bool BlendedBoundsForBox(const gfx::BoxF& box, |
| const TransformOperation* from, |
| const TransformOperation* to, |
| SkMScalar min_progress, |
| SkMScalar max_progress, |
| gfx::BoxF* bounds); |
| }; |
| |
| } // namespace cc |
| |
| #endif // CC_ANIMATION_TRANSFORM_OPERATION_H_ |