Chromium Code Reviews| Index: remoting/client/simple_matrix.h |
| diff --git a/remoting/client/simple_matrix.h b/remoting/client/simple_matrix.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..2ceb7a3fbdd33edf0dbe25c8fa8fbde05aae0255 |
| --- /dev/null |
| +++ b/remoting/client/simple_matrix.h |
| @@ -0,0 +1,57 @@ |
| +// 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_SIMPLE_MATRIX_H_ |
| +#define REMOTING_CLIENT_SIMPLE_MATRIX_H_ |
|
joedow
2017/04/28 21:29:53
Maybe just call this matrix? It isn't clear why i
Yuwei
2017/04/28 23:53:41
I called it simple because it only needs 3 paramet
|
| + |
| +#include "remoting/client/viewport_geometry.h" |
| + |
| +namespace remoting { |
| + |
| +// A 2D non-skew equally scaled transformation matrix. |
| +// | SCALE, 0, OFFSET_X, | |
| +// | 0, SCALE, OFFSET_Y, | |
| +// | 0, 0, 1 | |
| +class SimpleMatrix { |
|
Yuwei
2017/04/28 02:10:51
It's possible to use Skia to do matrix calculation
joedow
2017/04/28 21:29:53
I think saving ~1MB is a good reason since our pac
|
| + public: |
| + SimpleMatrix(float scale, const Vector2D& offset); |
| + |
| + ~SimpleMatrix(); |
| + |
| + // 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; |
| + |
| + // 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. |
| + SimpleMatrix Invert() const; |
| + |
| + // Converts to the 3x3 matrix array. |
| + std::array<float, 9> ToMatrixArray() const; |
| + |
| + private: |
| + float scale_; |
| + Vector2D offset_; |
| +}; |
| + |
| +} // namespace remoting |
| + |
| +#endif // REMOTING_CLIENT_SIMPLE_MATRIX_H_ |