12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- // Copyright 2017 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 REMOTING_CLIENT_UI_VIEW_MATRIX_H_
- #define REMOTING_CLIENT_UI_VIEW_MATRIX_H_
- #include <array>
- namespace remoting {
- // A 2D non-skew equally scaled transformation matrix.
- // | SCALE, 0, OFFSET_X, |
- // | 0, SCALE, OFFSET_Y, |
- // | 0, 0, 1 |
- class ViewMatrix {
- public:
- struct Vector2D {
- float x;
- float y;
- };
- // Same as Vector2D. This alias just serves as a context hint.
- using Point = Vector2D;
- // Creates an empty matrix (0 scale and offsets).
- ViewMatrix();
- ViewMatrix(float scale, const Vector2D& offset);
- ~ViewMatrix();
- // Applies the matrix on the point and returns the result.
- Point MapPoint(const Point& point) const;
- // Applies the matrix on the vector and returns the result. This only scales
- // the vector and does not apply offset.
- Vector2D MapVector(const Vector2D& vector) const;
- // Sets the scale factor, with the pivot point at (0, 0). This WON'T affect
- // the offset.
- void SetScale(float scale);
- // Returns the scale of this matrix.
- float GetScale() const;
- // Sets the offset.
- void SetOffset(const Point& offset);
- const Vector2D& GetOffset() const;
- // Adjust the matrix M to M' such that:
- // M * p_a = p_b => M' * p_a = scale * (p_b - pivot) + pivot
- void PostScale(const Point& pivot, float scale);
- // Applies translation to the matrix.
- // M * p_a = p_b => M' * p_a = p_b + delta
- void PostTranslate(const Vector2D& delta);
- // Returns the inverse of this matrix.
- ViewMatrix Invert() const;
- // Returns true if the scale and offsets are both 0.
- bool IsEmpty() const;
- // Converts to the 3x3 matrix array.
- std::array<float, 9> ToMatrixArray() const;
- private:
- float scale_;
- Vector2D offset_;
- };
- } // namespace remoting
- #endif // REMOTING_CLIENT_UI_VIEW_MATRIX_H_
|