| Index: core/src/fpdfapi/fpdf_font/fpdf_font_cid.cpp
|
| diff --git a/core/src/fpdfapi/fpdf_font/fpdf_font_cid.cpp b/core/src/fpdfapi/fpdf_font/fpdf_font_cid.cpp
|
| index de6ed1b9b55967eea7d99fd815a06fbe014b3cbc..1a78b1f93cea4c40a5df935db0440316021af462 100644
|
| --- a/core/src/fpdfapi/fpdf_font/fpdf_font_cid.cpp
|
| +++ b/core/src/fpdfapi/fpdf_font/fpdf_font_cid.cpp
|
| @@ -1057,7 +1057,6 @@ CPDF_CIDFont::CPDF_CIDFont()
|
| m_pAnsiWidths(nullptr),
|
| m_bAdobeCourierStd(FALSE),
|
| m_pTTGSUBTable(nullptr) {
|
| - FXSYS_memset(m_CharBBox, 0xff, 256 * sizeof(FX_SMALL_RECT));
|
| }
|
|
|
| CPDF_CIDFont::~CPDF_CIDFont() {
|
| @@ -1299,19 +1298,15 @@ FX_BOOL CPDF_CIDFont::Load() {
|
| return TRUE;
|
| }
|
|
|
| -void CPDF_CIDFont::GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level) {
|
| - if (charcode < 256 && m_CharBBox[charcode].Right != -1) {
|
| - rect.bottom = m_CharBBox[charcode].Bottom;
|
| - rect.left = m_CharBBox[charcode].Left;
|
| - rect.right = m_CharBBox[charcode].Right;
|
| - rect.top = m_CharBBox[charcode].Top;
|
| - return;
|
| - }
|
| +FX_RECT CPDF_CIDFont::GetCharBBox(FX_DWORD charcode, int level) {
|
| + if (charcode < 256 && m_CharBBox[charcode].right != FX_SMALL_RECT::kInvalid)
|
| + return FX_RECT(m_CharBBox[charcode]);
|
| +
|
| + FX_RECT rect;
|
| FX_BOOL bVert = FALSE;
|
| int glyph_index = GlyphFromCharCode(charcode, &bVert);
|
| FXFT_Face face = m_Font.GetFace();
|
| if (face) {
|
| - rect.left = rect.bottom = rect.right = rect.top = 0;
|
| if (FXFT_Is_Face_Tricky(face)) {
|
| int err = FXFT_Load_Glyph(face, glyph_index,
|
| FXFT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH);
|
| @@ -1324,15 +1319,12 @@ void CPDF_CIDFont::GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level) {
|
| int pixel_size_x = ((FXFT_Face)face)->size->metrics.x_ppem;
|
| int pixel_size_y = ((FXFT_Face)face)->size->metrics.y_ppem;
|
| if (pixel_size_x == 0 || pixel_size_y == 0) {
|
| - rect.left = cbox.xMin;
|
| - rect.right = cbox.xMax;
|
| - rect.top = cbox.yMax;
|
| - rect.bottom = cbox.yMin;
|
| + rect = FX_RECT(cbox.xMin, cbox.yMax, cbox.xMax, cbox.yMin);
|
| } else {
|
| - rect.left = cbox.xMin * 1000 / pixel_size_x;
|
| - rect.right = cbox.xMax * 1000 / pixel_size_x;
|
| - rect.top = cbox.yMax * 1000 / pixel_size_y;
|
| - rect.bottom = cbox.yMin * 1000 / pixel_size_y;
|
| + rect = FX_RECT(cbox.xMin * 1000 / pixel_size_x,
|
| + cbox.yMax * 1000 / pixel_size_y,
|
| + cbox.xMax * 1000 / pixel_size_x,
|
| + cbox.yMin * 1000 / pixel_size_y);
|
| }
|
| if (rect.top > FXFT_Get_Face_Ascender(face)) {
|
| rect.top = FXFT_Get_Face_Ascender(face);
|
| @@ -1346,19 +1338,17 @@ void CPDF_CIDFont::GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level) {
|
| } else {
|
| int err = FXFT_Load_Glyph(face, glyph_index, FXFT_LOAD_NO_SCALE);
|
| if (err == 0) {
|
| - rect.left = TT2PDF(FXFT_Get_Glyph_HoriBearingX(face), face);
|
| - rect.right = TT2PDF(
|
| - FXFT_Get_Glyph_HoriBearingX(face) + FXFT_Get_Glyph_Width(face),
|
| - face);
|
| - rect.top = TT2PDF(FXFT_Get_Glyph_HoriBearingY(face), face);
|
| + rect = FX_RECT(TT2PDF(FXFT_Get_Glyph_HoriBearingX(face), face),
|
| + TT2PDF(FXFT_Get_Glyph_HoriBearingY(face), face),
|
| + TT2PDF(FXFT_Get_Glyph_HoriBearingX(face) +
|
| + FXFT_Get_Glyph_Width(face),
|
| + face),
|
| + TT2PDF(FXFT_Get_Glyph_HoriBearingY(face) -
|
| + FXFT_Get_Glyph_Height(face),
|
| + face));
|
| rect.top += rect.top / 64;
|
| - rect.bottom = TT2PDF(
|
| - FXFT_Get_Glyph_HoriBearingY(face) - FXFT_Get_Glyph_Height(face),
|
| - face);
|
| }
|
| }
|
| - } else {
|
| - rect = FX_RECT(0, 0, 0, 0);
|
| }
|
| if (!m_pFontFile && m_Charset == CIDSET_JAPAN1) {
|
| FX_WORD CID = CIDFromCharCode(charcode);
|
| @@ -1375,12 +1365,10 @@ void CPDF_CIDFont::GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level) {
|
| rect = rect_f.GetOutterRect();
|
| }
|
| }
|
| - if (charcode < 256) {
|
| - m_CharBBox[charcode].Bottom = (short)rect.bottom;
|
| - m_CharBBox[charcode].Left = (short)rect.left;
|
| - m_CharBBox[charcode].Right = (short)rect.right;
|
| - m_CharBBox[charcode].Top = (short)rect.top;
|
| - }
|
| + if (charcode < 256)
|
| + m_CharBBox[charcode] = rect.ToSmallRect();
|
| +
|
| + return rect;
|
| }
|
| int CPDF_CIDFont::GetCharWidthF(FX_DWORD charcode, int level) {
|
| if (m_pAnsiWidths && charcode < 0x80) {
|
|
|