mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
91 lines
2.4 KiB
C++
91 lines
2.4 KiB
C++
// Copyright 2013 The Flutter 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_H_
|
|
#define UI_GFX_TRANSFORM_H_
|
|
|
|
#include <iosfwd>
|
|
#include <string>
|
|
|
|
#include "geometry/rect_f.h"
|
|
#include "gfx_export.h"
|
|
|
|
namespace gfx {
|
|
|
|
class RectF;
|
|
|
|
// 4x4 transformation matrix. Transform is cheap and explicitly allows
|
|
// copy/assign.
|
|
class GFX_EXPORT Transform {
|
|
public:
|
|
Transform();
|
|
|
|
Transform(float col1row1,
|
|
float col2row1,
|
|
float col3row1,
|
|
float col4row1,
|
|
float col1row2,
|
|
float col2row2,
|
|
float col3row2,
|
|
float col4row2,
|
|
float col1row3,
|
|
float col2row3,
|
|
float col3row3,
|
|
float col4row3,
|
|
float col1row4,
|
|
float col2row4,
|
|
float col3row4,
|
|
float col4row4);
|
|
// Constructs a transform from explicit 2d elements. All other matrix
|
|
// elements remain the same as the corresponding elements of an identity
|
|
// matrix.
|
|
Transform(float col1row1,
|
|
float col2row1,
|
|
float col1row2,
|
|
float col2row2,
|
|
float x_translation,
|
|
float y_translation);
|
|
|
|
bool operator==(const Transform& rhs) const;
|
|
bool operator!=(const Transform& rhs) const { return !(*this == rhs); };
|
|
|
|
float operator[](int index) const {
|
|
BASE_DCHECK((unsigned)index < 16);
|
|
return matrix_[index];
|
|
}
|
|
|
|
// Returns true if this is the identity matrix.
|
|
bool IsIdentity() const;
|
|
|
|
// Applies the current transformation on a scaling and assigns the result
|
|
// to |this|.
|
|
void Scale(float x, float y);
|
|
|
|
// Applies transformation on the given rect. After the function completes,
|
|
// |rect| will be the smallest axis aligned bounding rect containing the
|
|
// transformed rect.
|
|
void TransformRect(RectF* rect) const;
|
|
|
|
// Applies transformation on the given point
|
|
void TransformPoint(PointF* point) const;
|
|
|
|
std::string ToString() const;
|
|
|
|
private:
|
|
// Row-major array
|
|
float matrix_[16];
|
|
bool is_identity_;
|
|
|
|
void UpdateIdentity();
|
|
};
|
|
|
|
// 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_TRANSFORM_H_
|