// 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_