|  | // 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 { | 
|  | TRANSFORM_OPERATION_TRANSLATE, | 
|  | TRANSFORM_OPERATION_ROTATE, | 
|  | TRANSFORM_OPERATION_SCALE, | 
|  | TRANSFORM_OPERATION_SKEW, | 
|  | TRANSFORM_OPERATION_PERSPECTIVE, | 
|  | TRANSFORM_OPERATION_MATRIX, | 
|  | TRANSFORM_OPERATION_IDENTITY | 
|  | }; | 
|  |  | 
|  | TransformOperation() : type(TRANSFORM_OPERATION_IDENTITY) {} | 
|  |  | 
|  | 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_ |