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;