Home | History | Annotate | Download | only in animation
      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_
     75