Switch CPDF_MeshStream to use FX_RGB

Consistently use this struct instead of std::array.

Change-Id: I9ccfd55834bc0a118d9e6c937604be6796005522
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/117817
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Thomas Sepez <tsepez@google.com>
diff --git a/core/fpdfapi/page/cpdf_meshstream.cpp b/core/fpdfapi/page/cpdf_meshstream.cpp
index ea90c58..1036c2b 100644
--- a/core/fpdfapi/page/cpdf_meshstream.cpp
+++ b/core/fpdfapi/page/cpdf_meshstream.cpp
@@ -200,7 +200,7 @@
   return pos;
 }
 
-std::array<float, 3> CPDF_MeshStream::ReadColor() const {
+FX_RGB<float> CPDF_MeshStream::ReadColor() const {
   DCHECK(ShouldCheckBPC(m_type));
 
   float color_value[kMaxComponents];
@@ -210,9 +210,9 @@
                                          m_ComponentMax;
   }
 
-  std::array<float, 3> rgb = {};
+  FX_RGB<float> rgb = {};
   if (m_funcs.empty()) {
-    m_pCS->GetRGB(color_value, &rgb[0], &rgb[1], &rgb[2]);
+    m_pCS->GetRGB(color_value, &rgb.red, &rgb.green, &rgb.blue);
     return rgb;
   }
 
@@ -223,7 +223,7 @@
     }
   }
 
-  m_pCS->GetRGB(result, &rgb[0], &rgb[1], &rgb[2]);
+  m_pCS->GetRGB(result, &rgb.red, &rgb.green, &rgb.blue);
   return rgb;
 }
 
diff --git a/core/fpdfapi/page/cpdf_meshstream.h b/core/fpdfapi/page/cpdf_meshstream.h
index 48c68e7..591a0be 100644
--- a/core/fpdfapi/page/cpdf_meshstream.h
+++ b/core/fpdfapi/page/cpdf_meshstream.h
@@ -9,12 +9,12 @@
 
 #include <stdint.h>
 
-#include <array>
 #include <memory>
 #include <vector>
 
 #include "core/fpdfapi/page/cpdf_shadingpattern.h"
 #include "core/fxcrt/retain_ptr.h"
+#include "core/fxge/dib/fx_dib.h"
 
 class CPDF_StreamAcc;
 
@@ -25,7 +25,7 @@
   ~CPDF_MeshVertex();
 
   CFX_PointF position;
-  std::array<float, 3> rgb = {};
+  FX_RGB<float> rgb = {};
 };
 
 class CFX_BitStream;
@@ -53,7 +53,7 @@
 
   uint32_t ReadFlag() const;
   CFX_PointF ReadCoords() const;
-  std::array<float, 3> ReadColor() const;
+  FX_RGB<float> ReadColor() const;
 
   bool ReadVertex(const CFX_Matrix& pObject2Bitmap,
                   CPDF_MeshVertex* vertex,
diff --git a/core/fpdfapi/render/cpdf_rendershading.cpp b/core/fpdfapi/render/cpdf_rendershading.cpp
index 7b9b557..93fc3a0 100644
--- a/core/fpdfapi/render/cpdf_rendershading.cpp
+++ b/core/fpdfapi/render/cpdf_rendershading.cpp
@@ -371,11 +371,11 @@
 
       float y_dist = (y - position1.y) / (position2.y - position1.y);
       r[nIntersects] =
-          vertex1.rgb[0] + ((vertex2.rgb[0] - vertex1.rgb[0]) * y_dist);
-      g[nIntersects] =
-          vertex1.rgb[1] + ((vertex2.rgb[1] - vertex1.rgb[1]) * y_dist);
+          vertex1.rgb.red + ((vertex2.rgb.red - vertex1.rgb.red) * y_dist);
+      g[nIntersects] = vertex1.rgb.green +
+                       ((vertex2.rgb.green - vertex1.rgb.green) * y_dist);
       b[nIntersects] =
-          vertex1.rgb[2] + ((vertex2.rgb[2] - vertex1.rgb[2]) * y_dist);
+          vertex1.rgb.blue + ((vertex2.rgb.blue - vertex1.rgb.blue) * y_dist);
       nIntersects++;
     }
     if (nIntersects != 2)
@@ -848,10 +848,10 @@
       if (!stream.CanReadColor())
         break;
 
-      std::array<float, 3> rgb = stream.ReadColor();
-      patch.patch_colors[i].comp[0] = static_cast<int32_t>(rgb[0] * 255);
-      patch.patch_colors[i].comp[1] = static_cast<int32_t>(rgb[1] * 255);
-      patch.patch_colors[i].comp[2] = static_cast<int32_t>(rgb[2] * 255);
+      FX_RGB<float> rgb = stream.ReadColor();
+      patch.patch_colors[i].comp[0] = static_cast<int32_t>(rgb.red * 255);
+      patch.patch_colors[i].comp[1] = static_cast<int32_t>(rgb.green * 255);
+      patch.patch_colors[i].comp[2] = static_cast<int32_t>(rgb.blue * 255);
     }
 
     CFX_FloatRect bbox =
diff --git a/core/fxge/skia/fx_skia_device.cpp b/core/fxge/skia/fx_skia_device.cpp
index e4dbbf9..f8043b2 100644
--- a/core/fxge/skia/fx_skia_device.cpp
+++ b/core/fxge/skia/fx_skia_device.cpp
@@ -1329,12 +1329,10 @@
         cubics[i].fY = point.y;
       }
       for (size_t i = start_color; i < std::size(colors); ++i) {
-        float r;
-        float g;
-        float b;
-        std::tie(r, g, b) = stream.ReadColor();
-        colors[i] = SkColorSetARGB(0xFF, (U8CPU)(r * 255), (U8CPU)(g * 255),
-                                   (U8CPU)(b * 255));
+        FX_RGB<float> rgb = stream.ReadColor();
+        colors[i] =
+            SkColorSetARGB(0xFF, (U8CPU)(rgb.red * 255),
+                           (U8CPU)(rgb.green * 255), (U8CPU)(rgb.blue * 255));
       }
       m_pCanvas->drawPatch(cubics, colors, /*texCoords=*/nullptr,
                            SkBlendMode::kDst, paint);