| // 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 UI_GFX_TRANSFORM_OPERATION_H_ |
| #define UI_GFX_TRANSFORM_OPERATION_H_ |
| |
| #include "ui/gfx/geometry_skia_export.h" |
| #include "ui/gfx/transform.h" |
| |
| namespace gfx { |
| class BoxF; |
| |
| struct GEOMETRY_SKIA_EXPORT TransformOperation { |
| enum Type { |
| TRANSFORM_OPERATION_TRANSLATE, |
| TRANSFORM_OPERATION_ROTATE, |
| TRANSFORM_OPERATION_SCALE, |
| TRANSFORM_OPERATION_SKEWX, |
| TRANSFORM_OPERATION_SKEWY, |
| TRANSFORM_OPERATION_SKEW, |
| TRANSFORM_OPERATION_PERSPECTIVE, |
| TRANSFORM_OPERATION_MATRIX, |
| TRANSFORM_OPERATION_IDENTITY |
| }; |
| |
| TransformOperation() : type(TRANSFORM_OPERATION_IDENTITY) {} |
| |
| Type type; |
| gfx::Transform matrix; |
| |
| union { |
| SkScalar perspective_depth; |
| |
| struct { |
| SkScalar x, y; |
| } skew; |
| |
| struct { |
| SkScalar x, y, z; |
| } scale; |
| |
| struct { |
| SkScalar x, y, z; |
| } translate; |
| |
| struct { |
| struct { |
| SkScalar x, y, z; |
| } axis; |
| |
| SkScalar angle; |
| } rotate; |
| }; |
| |
| bool IsIdentity() const; |
| |
| // Sets |matrix| based on type and the union values. |
| void Bake(); |
| |
| bool ApproximatelyEqual(const TransformOperation& other, |
| SkScalar tolerance) const; |
| |
| static bool BlendTransformOperations(const TransformOperation* from, |
| const TransformOperation* to, |
| SkScalar progress, |
| TransformOperation* result); |
| |
| static bool BlendedBoundsForBox(const gfx::BoxF& box, |
| const TransformOperation* from, |
| const TransformOperation* to, |
| SkScalar min_progress, |
| SkScalar max_progress, |
| gfx::BoxF* bounds); |
| }; |
| |
| } // namespace gfx |
| |
| #endif // UI_GFX_TRANSFORM_OPERATION_H_ |