Add CPDF_ColorState::SetPattern().

A common helper method for patterns, just like SetColor().

Change-Id: Iba6a9b33143d2d1278d05bbc2ce7e26b0ae5d197
Reviewed-on: https://pdfium-review.googlesource.com/30591
Reviewed-by: Henrique Nakashima <hnakashima@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdfapi/page/cpdf_colorstate.cpp b/core/fpdfapi/page/cpdf_colorstate.cpp
index 9abd9f7..05421dc 100644
--- a/core/fpdfapi/page/cpdf_colorstate.cpp
+++ b/core/fpdfapi/page/cpdf_colorstate.cpp
@@ -84,36 +84,13 @@
 void CPDF_ColorState::SetFillPattern(CPDF_Pattern* pPattern,
                                      const std::vector<float>& values) {
   ColorData* pData = m_Ref.GetPrivateCopy();
-  pData->m_FillColor.SetValueForPattern(pPattern, values);
-  int R;
-  int G;
-  int B;
-  bool ret = pData->m_FillColor.GetRGB(&R, &G, &B);
-  if (CPDF_TilingPattern* pTilingPattern = pPattern->AsTilingPattern()) {
-    if (!ret && pTilingPattern->colored()) {
-      pData->m_FillColorRef = 0x00BFBFBF;
-      return;
-    }
-  }
-  pData->m_FillColorRef = ret ? FXSYS_BGR(B, G, R) : 0xFFFFFFFF;
+  SetPattern(pPattern, values, &pData->m_FillColor, &pData->m_FillColorRef);
 }
 
 void CPDF_ColorState::SetStrokePattern(CPDF_Pattern* pPattern,
                                        const std::vector<float>& values) {
   ColorData* pData = m_Ref.GetPrivateCopy();
-  pData->m_StrokeColor.SetValueForPattern(pPattern, values);
-  int R;
-  int G;
-  int B;
-  bool ret = pData->m_StrokeColor.GetRGB(&R, &G, &B);
-  if (CPDF_TilingPattern* pTilingPattern = pPattern->AsTilingPattern()) {
-    if (!ret && pTilingPattern->colored()) {
-      pData->m_StrokeColorRef = 0x00BFBFBF;
-      return;
-    }
-  }
-  pData->m_StrokeColorRef =
-      pData->m_StrokeColor.GetRGB(&R, &G, &B) ? FXSYS_BGR(B, G, R) : 0xFFFFFFFF;
+  SetPattern(pPattern, values, &pData->m_StrokeColor, &pData->m_StrokeColorRef);
 }
 
 void CPDF_ColorState::SetColor(CPDF_ColorSpace* pCS,
@@ -139,6 +116,27 @@
   *colorref = color->GetRGB(&R, &G, &B) ? FXSYS_BGR(B, G, R) : 0xFFFFFFFF;
 }
 
+void CPDF_ColorState::SetPattern(CPDF_Pattern* pPattern,
+                                 const std::vector<float>& values,
+                                 CPDF_Color* color,
+                                 FX_COLORREF* colorref) {
+  ASSERT(color);
+  ASSERT(colorref);
+
+  color->SetValueForPattern(pPattern, values);
+  int R;
+  int G;
+  int B;
+  bool ret = color->GetRGB(&R, &G, &B);
+  if (CPDF_TilingPattern* pTilingPattern = pPattern->AsTilingPattern()) {
+    if (!ret && pTilingPattern->colored()) {
+      *colorref = 0x00BFBFBF;
+      return;
+    }
+  }
+  *colorref = ret ? FXSYS_BGR(B, G, R) : 0xFFFFFFFF;
+}
+
 CPDF_ColorState::ColorData::ColorData()
     : m_FillColorRef(0), m_StrokeColorRef(0) {}
 
diff --git a/core/fpdfapi/page/cpdf_colorstate.h b/core/fpdfapi/page/cpdf_colorstate.h
index a617409..49416db 100644
--- a/core/fpdfapi/page/cpdf_colorstate.h
+++ b/core/fpdfapi/page/cpdf_colorstate.h
@@ -68,6 +68,10 @@
                 const std::vector<float>& values,
                 CPDF_Color* color,
                 FX_COLORREF* colorref);
+  void SetPattern(CPDF_Pattern* pPattern,
+                  const std::vector<float>& values,
+                  CPDF_Color* color,
+                  FX_COLORREF* colorref);
 
   SharedCopyOnWrite<ColorData> m_Ref;
 };