Make CPDF_CIDFont::GetVertOrigin() return its results.

Instead of having a void return type and 2 out-parameters, just return a
CFX_Point16. The new type is just an extra template instantiation in
fx_coordinates.h.

Change-Id: I2e086b0ab30cb1fa98975f0fad9115cb80b61717
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/71916
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfapi/font/cpdf_cidfont.cpp b/core/fpdfapi/font/cpdf_cidfont.cpp
index 327dbe2..4ae4f39 100644
--- a/core/fpdfapi/font/cpdf_cidfont.cpp
+++ b/core/fpdfapi/font/cpdf_cidfont.cpp
@@ -527,16 +527,15 @@
   return m_DefaultW1;
 }
 
-void CPDF_CIDFont::GetVertOrigin(uint16_t cid, int16_t& vx, int16_t& vy) const {
+CFX_Point16 CPDF_CIDFont::GetVertOrigin(uint16_t cid) const {
   size_t vertsize = m_VertMetrics.size() / 5;
   if (vertsize) {
     const uint32_t* pTable = m_VertMetrics.data();
     for (size_t i = 0; i < vertsize; i++) {
       const uint32_t* pEntry = pTable + (i * 5);
       if (IsMetricForCID(pEntry, cid)) {
-        vx = static_cast<int16_t>(pEntry[3]);
-        vy = static_cast<int16_t>(pEntry[4]);
-        return;
+        return {static_cast<int16_t>(pEntry[3]),
+                static_cast<int16_t>(pEntry[4])};
       }
     }
   }
@@ -550,8 +549,7 @@
       break;
     }
   }
-  vx = static_cast<int16_t>(dwWidth) / 2;
-  vy = m_DefaultVY;
+  return {static_cast<int16_t>(dwWidth) / 2, m_DefaultVY};
 }
 
 int CPDF_CIDFont::GetGlyphIndex(uint32_t unicode, bool* pVertGlyph) {
diff --git a/core/fpdfapi/font/cpdf_cidfont.h b/core/fpdfapi/font/cpdf_cidfont.h
index 08afc3c..8cb065c 100644
--- a/core/fpdfapi/font/cpdf_cidfont.h
+++ b/core/fpdfapi/font/cpdf_cidfont.h
@@ -11,6 +11,7 @@
 #include <vector>
 
 #include "core/fpdfapi/font/cpdf_font.h"
+#include "core/fxcrt/fx_coordinates.h"
 #include "core/fxcrt/fx_string.h"
 #include "core/fxcrt/fx_system.h"
 #include "core/fxcrt/retain_ptr.h"
@@ -58,7 +59,7 @@
   uint16_t CIDFromCharCode(uint32_t charcode) const;
   const uint8_t* GetCIDTransform(uint16_t cid) const;
   int16_t GetVertWidth(uint16_t cid) const;
-  void GetVertOrigin(uint16_t cid, int16_t& vx, int16_t& vy) const;
+  CFX_Point16 GetVertOrigin(uint16_t cid) const;
   int GetCharSize(uint32_t charcode) const;
 
  private:
diff --git a/core/fpdfapi/page/cpdf_textobject.cpp b/core/fpdfapi/page/cpdf_textobject.cpp
index d32f8b8..d2872af 100644
--- a/core/fpdfapi/page/cpdf_textobject.cpp
+++ b/core/fpdfapi/page/cpdf_textobject.cpp
@@ -48,13 +48,10 @@
   uint16_t cid = pFont->AsCIDFont()->CIDFromCharCode(pInfo->m_CharCode);
   pInfo->m_Origin = CFX_PointF(0, pInfo->m_Origin.x);
 
-  int16_t vx;
-  int16_t vy;
-  pFont->AsCIDFont()->GetVertOrigin(cid, vx, vy);
-
+  CFX_Point16 vertical_origin = pFont->AsCIDFont()->GetVertOrigin(cid);
   float fontsize = GetFontSize();
-  pInfo->m_Origin.x -= fontsize * vx / 1000;
-  pInfo->m_Origin.y -= fontsize * vy / 1000;
+  pInfo->m_Origin.x -= fontsize * vertical_origin.x / 1000;
+  pInfo->m_Origin.y -= fontsize * vertical_origin.y / 1000;
 }
 
 size_t CPDF_TextObject::CountChars() const {
@@ -286,13 +283,11 @@
       charwidth = pFont->GetCharWidthF(charcode) * fontsize / 1000;
     } else {
       uint16_t cid = pCIDFont->CIDFromCharCode(charcode);
-      int16_t vx;
-      int16_t vy;
-      pCIDFont->GetVertOrigin(cid, vx, vy);
-      char_rect.left -= vx;
-      char_rect.right -= vx;
-      char_rect.top -= vy;
-      char_rect.bottom -= vy;
+      CFX_Point16 vertical_origin = pCIDFont->GetVertOrigin(cid);
+      char_rect.left -= vertical_origin.x;
+      char_rect.right -= vertical_origin.x;
+      char_rect.top -= vertical_origin.y;
+      char_rect.bottom -= vertical_origin.y;
       min_x = std::min(
           min_x, static_cast<float>(std::min(char_rect.left, char_rect.right)));
       max_x = std::max(
diff --git a/core/fpdfapi/render/charposlist.cpp b/core/fpdfapi/render/charposlist.cpp
index 25842ca..d398ec1 100644
--- a/core/fpdfapi/render/charposlist.cpp
+++ b/core/fpdfapi/render/charposlist.cpp
@@ -118,11 +118,9 @@
     if (is_vertical_writing) {
       text_char_pos.m_Origin = CFX_PointF(0, text_char_pos.m_Origin.x);
 
-      int16_t vx;
-      int16_t vy;
-      cid_font->GetVertOrigin(cid, vx, vy);
-      text_char_pos.m_Origin.x -= font_size * vx / 1000;
-      text_char_pos.m_Origin.y -= font_size * vy / 1000;
+      CFX_Point16 vertical_origin = cid_font->GetVertOrigin(cid);
+      text_char_pos.m_Origin.x -= font_size * vertical_origin.x / 1000;
+      text_char_pos.m_Origin.y -= font_size * vertical_origin.y / 1000;
     }
 
     const uint8_t* cid_transform = cid_font->GetCIDTransform(cid);
diff --git a/core/fxcrt/fx_coordinates.h b/core/fxcrt/fx_coordinates.h
index 2eb0279..9bb029f 100644
--- a/core/fxcrt/fx_coordinates.h
+++ b/core/fxcrt/fx_coordinates.h
@@ -55,6 +55,7 @@
   BaseType x;
   BaseType y;
 };
+using CFX_Point16 = CFX_PTemplate<int16_t>;
 using CFX_Point = CFX_PTemplate<int32_t>;
 using CFX_PointF = CFX_PTemplate<float>;
 
diff --git a/fpdfsdk/fpdf_text.cpp b/fpdfsdk/fpdf_text.cpp
index ad44680..4ea780e 100644
--- a/fpdfsdk/fpdf_text.cpp
+++ b/fpdfsdk/fpdf_text.cpp
@@ -248,11 +248,9 @@
       CPDF_CIDFont* pCIDFont = charinfo.m_pTextObj->GetFont()->AsCIDFont();
       uint16_t cid = pCIDFont->CIDFromCharCode(charinfo.m_CharCode);
 
-      int16_t vx;
-      int16_t vy;
-      pCIDFont->GetVertOrigin(cid, vx, vy);
-      double offsetx = (vx - 500) * font_size / 1000.0;
-      double offsety = vy * font_size / 1000.0;
+      CFX_Point16 vertical_origin = pCIDFont->GetVertOrigin(cid);
+      double offsetx = (vertical_origin.x - 500) * font_size / 1000.0;
+      double offsety = vertical_origin.y * font_size / 1000.0;
       int16_t vert_width = pCIDFont->GetVertWidth(cid);
       double height = vert_width * font_size / 1000.0;