- add sources.
[platform/framework/web/crosswalk.git] / src / cc / animation / transform_operation.h
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef CC_ANIMATION_TRANSFORM_OPERATION_H_
6 #define CC_ANIMATION_TRANSFORM_OPERATION_H_
7
8 #include "ui/gfx/transform.h"
9
10 namespace gfx {
11 class BoxF;
12 }
13
14 namespace cc {
15
16 struct TransformOperation {
17   enum Type {
18     TransformOperationTranslate,
19     TransformOperationRotate,
20     TransformOperationScale,
21     TransformOperationSkew,
22     TransformOperationPerspective,
23     TransformOperationMatrix,
24     TransformOperationIdentity
25   };
26
27   TransformOperation()
28       : type(TransformOperationIdentity) {
29   }
30
31   Type type;
32   gfx::Transform matrix;
33
34   union {
35     SkMScalar perspective_depth;
36
37     struct {
38       SkMScalar x, y;
39     } skew;
40
41     struct {
42       SkMScalar x, y, z;
43     } scale;
44
45     struct {
46       SkMScalar x, y, z;
47     } translate;
48
49     struct {
50       struct {
51         SkMScalar x, y, z;
52       } axis;
53
54       SkMScalar angle;
55     } rotate;
56   };
57
58   bool IsIdentity() const;
59   static bool BlendTransformOperations(const TransformOperation* from,
60                                        const TransformOperation* to,
61                                        SkMScalar progress,
62                                        gfx::Transform* result);
63
64   static bool BlendedBoundsForBox(const gfx::BoxF& box,
65                                   const TransformOperation* from,
66                                   const TransformOperation* to,
67                                   SkMScalar min_progress,
68                                   SkMScalar max_progress,
69                                   gfx::BoxF* bounds);
70 };
71
72 }  // namespace cc
73
74 #endif  // CC_ANIMATION_TRANSFORM_OPERATION_H_