Fix some longstanding irks in CFX_Matrix

- Initialize in header to identity matrix.
- Add standard operator overloads.
- Use default methods where possible.

This, in turn, identified an unused variable now flagged by the
compiler which was removed from cpdf_array.cpp

Change-Id: I712cdcb1dd11a5a93314d54c836027b2c7ad472e
Reviewed-on: https://pdfium-review.googlesource.com/c/47450
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfapi/parser/cpdf_array.cpp b/core/fpdfapi/parser/cpdf_array.cpp
index 78a52f9..d3f7213 100644
--- a/core/fpdfapi/parser/cpdf_array.cpp
+++ b/core/fpdfapi/parser/cpdf_array.cpp
@@ -80,7 +80,6 @@
 }
 
 CFX_Matrix CPDF_Array::GetMatrix() const {
-  CFX_Matrix matrix;
   if (!IsArray() || m_Objects.size() != 6)
     return CFX_Matrix();
 
diff --git a/core/fxcrt/fx_coordinates.cpp b/core/fxcrt/fx_coordinates.cpp
index fbacb5d..2771992 100644
--- a/core/fxcrt/fx_coordinates.cpp
+++ b/core/fxcrt/fx_coordinates.cpp
@@ -51,15 +51,6 @@
               "FX_RECT vs. RECT mismatch");
 #endif
 
-inline CFX_Matrix ConcatInternal(const CFX_Matrix& left,
-                                 const CFX_Matrix& right) {
-  return CFX_Matrix(
-      left.a * right.a + left.b * right.c, left.a * right.b + left.b * right.d,
-      left.c * right.a + left.d * right.c, left.c * right.b + left.d * right.d,
-      left.e * right.a + left.f * right.c + right.e,
-      left.e * right.b + left.f * right.d + right.f);
-}
-
 }  // namespace
 
 void FX_RECT::Normalize() {
@@ -322,11 +313,11 @@
 }
 
 void CFX_Matrix::Concat(const CFX_Matrix& m) {
-  *this = ConcatInternal(*this, m);
+  *this *= m;
 }
 
 void CFX_Matrix::ConcatPrepend(const CFX_Matrix& m) {
-  *this = ConcatInternal(m, *this);
+  *this = m * (*this);
 }
 
 void CFX_Matrix::ConcatInverse(const CFX_Matrix& src) {
diff --git a/core/fxcrt/fx_coordinates.h b/core/fxcrt/fx_coordinates.h
index 67d3736..16facf3 100644
--- a/core/fxcrt/fx_coordinates.h
+++ b/core/fxcrt/fx_coordinates.h
@@ -521,35 +521,39 @@
 //
 class CFX_Matrix {
  public:
-  CFX_Matrix() { SetIdentity(); }
+  CFX_Matrix() = default;
 
   explicit CFX_Matrix(const float n[6])
       : a(n[0]), b(n[1]), c(n[2]), d(n[3]), e(n[4]), f(n[5]) {}
 
-  CFX_Matrix(const CFX_Matrix& other) = default;
-
   CFX_Matrix(float a1, float b1, float c1, float d1, float e1, float f1)
       : a(a1), b(b1), c(c1), d(d1), e(e1), f(f1) {}
 
-  void operator=(const CFX_Matrix& other) {
-    a = other.a;
-    b = other.b;
-    c = other.c;
-    d = other.d;
-    e = other.e;
-    f = other.f;
-  }
+  CFX_Matrix(const CFX_Matrix& other) = default;
 
   std::tuple<float, float, float, float, float, float> AsTuple() const;
 
-  void SetIdentity() {
-    a = 1;
-    b = 0;
-    c = 0;
-    d = 1;
-    e = 0;
-    f = 0;
+  CFX_Matrix& operator=(const CFX_Matrix& other) = default;
+
+  bool operator==(const CFX_Matrix& other) const {
+    return a == other.a && b == other.b && c == other.c && d == other.d &&
+           e == other.e && f == other.f;
   }
+  bool operator!=(const CFX_Matrix& other) const { return !(*this == other); }
+
+  CFX_Matrix operator*(const CFX_Matrix& right) const {
+    return CFX_Matrix(a * right.a + b * right.c, a * right.b + b * right.d,
+                      c * right.a + d * right.c, c * right.b + d * right.d,
+                      e * right.a + f * right.c + right.e,
+                      e * right.b + f * right.d + right.f);
+  }
+  CFX_Matrix& operator*=(const CFX_Matrix& other) {
+    *this = *this * other;
+    return *this;
+  }
+
+  void SetIdentity() { *this = CFX_Matrix(); }
+  bool IsIdentity() const { return *this == CFX_Matrix(); }
 
   CFX_Matrix GetInverse() const;
 
@@ -558,10 +562,6 @@
   void ConcatInverse(const CFX_Matrix& m);
   void ConcatInversePrepend(const CFX_Matrix& m);
 
-  bool IsIdentity() const {
-    return a == 1 && b == 0 && c == 0 && d == 1 && e == 0 && f == 0;
-  }
-
   bool Is90Rotated() const;
   bool IsScaled() const;
   bool WillScale() const { return a != 1.0f || b != 0 || c != 0 || d != 1.0f; }
@@ -593,12 +593,12 @@
   CFX_RectF TransformRect(const CFX_RectF& rect) const;
   CFX_FloatRect TransformRect(const CFX_FloatRect& rect) const;
 
-  float a;
-  float b;
-  float c;
-  float d;
-  float e;
-  float f;
+  float a = 1.0f;
+  float b = 0.0f;
+  float c = 0.0f;
+  float d = 1.0f;
+  float e = 0.0f;
+  float f = 0.0f;
 };
 
 #endif  // CORE_FXCRT_FX_COORDINATES_H_