// Copyright 2012 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifdef UNSAFE_BUFFERS_BUILD // TODO(crbug.com/354829279): Remove this and convert code to safer constructs. #pragma allow_unsafe_buffers #endif #ifndef UI_GFX_GEOMETRY_TRANSFORM_H_ #define UI_GFX_GEOMETRY_TRANSFORM_H_ #include <iosfwd> #include <memory> #include <optional> #include <string> #include "ui/gfx/geometry/axis_transform2d.h" #include "ui/gfx/geometry/geometry_skia_export.h" #include "ui/gfx/geometry/matrix44.h" namespace gfx { class BoxF; class Rect; class RectF; class Point; class PointF; class Point3F; class QuadF; class Quaternion; class Vector2dF; class Vector3dF; struct DecomposedTransform; // 4x4 Transformation matrix. Depending on the complexity of the matrix, it may // be internally stored as an AxisTransform2d (float precision) or a full // Matrix44 (4x4 double precision). Which one is used only affects precision and // performance. // - On construction (including constructors and static functions returning a // new Transform object), AxisTransform2d will be used if it the matrix will // be 2d scale and/or translation, otherwise Matrix44, with some exceptions // (e.g. ColMajor()) described in the method comments. // - On mutation, if the matrix has been using AxisTransform2d and the result // can still be 2d scale and/or translation, AxisTransform2d will still be // used, otherwise Matrix44, with some exceptions (e.g. set_rc()) described // in the method comments. // - On assignment, the new matrix will keep the choice of the rhs matrix. // class GEOMETRY_SKIA_EXPORT Transform { … }; // This is declared here for use in gtest-based unit tests but is defined in // the //ui/gfx:test_support target. Depend on that to use this in your unit // test. This should not be used in production code - call ToString() instead. void PrintTo(const Transform& transform, ::std::ostream* os); } // namespace gfx #endif // UI_GFX_GEOMETRY_TRANSFORM_H_