| OLD | NEW |
| 1 // Copyright 2016 PDFium Authors. All rights reserved. | 1 // Copyright 2016 PDFium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | 6 |
| 7 #include "core/fxge/android/cfpf_skiafont.h" | 7 #include "core/fxge/android/cfpf_skiafont.h" |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 | 10 |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 80 FXFT_Get_Face_Ascender(m_Face)); | 80 FXFT_Get_Face_Ascender(m_Face)); |
| 81 } | 81 } |
| 82 | 82 |
| 83 int32_t CFPF_SkiaFont::GetDescent() const { | 83 int32_t CFPF_SkiaFont::GetDescent() const { |
| 84 if (!m_Face) | 84 if (!m_Face) |
| 85 return 0; | 85 return 0; |
| 86 return FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face), | 86 return FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face), |
| 87 FXFT_Get_Face_Descender(m_Face)); | 87 FXFT_Get_Face_Descender(m_Face)); |
| 88 } | 88 } |
| 89 | 89 |
| 90 FX_BOOL CFPF_SkiaFont::GetGlyphBBox(int32_t iGlyphIndex, FX_RECT& rtBBox) { | 90 bool CFPF_SkiaFont::GetGlyphBBox(int32_t iGlyphIndex, FX_RECT& rtBBox) { |
| 91 if (!m_Face) | 91 if (!m_Face) |
| 92 return FALSE; | 92 return false; |
| 93 if (FXFT_Is_Face_Tricky(m_Face)) { | 93 if (FXFT_Is_Face_Tricky(m_Face)) { |
| 94 if (FXFT_Set_Char_Size(m_Face, 0, 1000 * 64, 72, 72)) | 94 if (FXFT_Set_Char_Size(m_Face, 0, 1000 * 64, 72, 72)) |
| 95 return FALSE; | 95 return false; |
| 96 if (FXFT_Load_Glyph(m_Face, iGlyphIndex, | 96 if (FXFT_Load_Glyph(m_Face, iGlyphIndex, |
| 97 FXFT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH)) { | 97 FXFT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH)) { |
| 98 FXFT_Set_Pixel_Sizes(m_Face, 0, 64); | 98 FXFT_Set_Pixel_Sizes(m_Face, 0, 64); |
| 99 return FALSE; | 99 return false; |
| 100 } | 100 } |
| 101 FXFT_Glyph glyph; | 101 FXFT_Glyph glyph; |
| 102 if (FXFT_Get_Glyph(m_Face->glyph, &glyph)) { | 102 if (FXFT_Get_Glyph(m_Face->glyph, &glyph)) { |
| 103 FXFT_Set_Pixel_Sizes(m_Face, 0, 64); | 103 FXFT_Set_Pixel_Sizes(m_Face, 0, 64); |
| 104 return FALSE; | 104 return false; |
| 105 } | 105 } |
| 106 FXFT_BBox cbox; | 106 FXFT_BBox cbox; |
| 107 FXFT_Glyph_Get_CBox(glyph, FXFT_GLYPH_BBOX_PIXELS, &cbox); | 107 FXFT_Glyph_Get_CBox(glyph, FXFT_GLYPH_BBOX_PIXELS, &cbox); |
| 108 int32_t x_ppem = m_Face->size->metrics.x_ppem; | 108 int32_t x_ppem = m_Face->size->metrics.x_ppem; |
| 109 int32_t y_ppem = m_Face->size->metrics.y_ppem; | 109 int32_t y_ppem = m_Face->size->metrics.y_ppem; |
| 110 rtBBox.left = FPF_EM_ADJUST(x_ppem, cbox.xMin); | 110 rtBBox.left = FPF_EM_ADJUST(x_ppem, cbox.xMin); |
| 111 rtBBox.right = FPF_EM_ADJUST(x_ppem, cbox.xMax); | 111 rtBBox.right = FPF_EM_ADJUST(x_ppem, cbox.xMax); |
| 112 rtBBox.top = FPF_EM_ADJUST(y_ppem, cbox.yMax); | 112 rtBBox.top = FPF_EM_ADJUST(y_ppem, cbox.yMax); |
| 113 rtBBox.bottom = FPF_EM_ADJUST(y_ppem, cbox.yMin); | 113 rtBBox.bottom = FPF_EM_ADJUST(y_ppem, cbox.yMin); |
| 114 rtBBox.top = std::min(rtBBox.top, GetAscent()); | 114 rtBBox.top = std::min(rtBBox.top, GetAscent()); |
| 115 rtBBox.bottom = std::max(rtBBox.bottom, GetDescent()); | 115 rtBBox.bottom = std::max(rtBBox.bottom, GetDescent()); |
| 116 FXFT_Done_Glyph(glyph); | 116 FXFT_Done_Glyph(glyph); |
| 117 return FXFT_Set_Pixel_Sizes(m_Face, 0, 64) == 0; | 117 return FXFT_Set_Pixel_Sizes(m_Face, 0, 64) == 0; |
| 118 } | 118 } |
| 119 if (FXFT_Load_Glyph( | 119 if (FXFT_Load_Glyph( |
| 120 m_Face, iGlyphIndex, | 120 m_Face, iGlyphIndex, |
| 121 FXFT_LOAD_NO_SCALE | FXFT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH)) { | 121 FXFT_LOAD_NO_SCALE | FXFT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH)) { |
| 122 return FALSE; | 122 return false; |
| 123 } | 123 } |
| 124 rtBBox.left = FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face), | 124 rtBBox.left = FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face), |
| 125 FXFT_Get_Glyph_HoriBearingX(m_Face)); | 125 FXFT_Get_Glyph_HoriBearingX(m_Face)); |
| 126 rtBBox.bottom = FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face), | 126 rtBBox.bottom = FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face), |
| 127 FXFT_Get_Glyph_HoriBearingY(m_Face)); | 127 FXFT_Get_Glyph_HoriBearingY(m_Face)); |
| 128 rtBBox.right = FPF_EM_ADJUST( | 128 rtBBox.right = FPF_EM_ADJUST( |
| 129 FXFT_Get_Face_UnitsPerEM(m_Face), | 129 FXFT_Get_Face_UnitsPerEM(m_Face), |
| 130 FXFT_Get_Glyph_HoriBearingX(m_Face) + FXFT_Get_Glyph_Width(m_Face)); | 130 FXFT_Get_Glyph_HoriBearingX(m_Face) + FXFT_Get_Glyph_Width(m_Face)); |
| 131 rtBBox.top = FPF_EM_ADJUST( | 131 rtBBox.top = FPF_EM_ADJUST( |
| 132 FXFT_Get_Face_UnitsPerEM(m_Face), | 132 FXFT_Get_Face_UnitsPerEM(m_Face), |
| 133 FXFT_Get_Glyph_HoriBearingY(m_Face) - FXFT_Get_Glyph_Height(m_Face)); | 133 FXFT_Get_Glyph_HoriBearingY(m_Face) - FXFT_Get_Glyph_Height(m_Face)); |
| 134 return TRUE; | 134 return true; |
| 135 } | 135 } |
| 136 | 136 |
| 137 FX_BOOL CFPF_SkiaFont::GetBBox(FX_RECT& rtBBox) { | 137 bool CFPF_SkiaFont::GetBBox(FX_RECT& rtBBox) { |
| 138 if (!m_Face) { | 138 if (!m_Face) { |
| 139 return FALSE; | 139 return false; |
| 140 } | 140 } |
| 141 rtBBox.left = FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face), | 141 rtBBox.left = FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face), |
| 142 FXFT_Get_Face_xMin(m_Face)); | 142 FXFT_Get_Face_xMin(m_Face)); |
| 143 rtBBox.top = FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face), | 143 rtBBox.top = FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face), |
| 144 FXFT_Get_Face_yMin(m_Face)); | 144 FXFT_Get_Face_yMin(m_Face)); |
| 145 rtBBox.right = FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face), | 145 rtBBox.right = FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face), |
| 146 FXFT_Get_Face_xMax(m_Face)); | 146 FXFT_Get_Face_xMax(m_Face)); |
| 147 rtBBox.bottom = FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face), | 147 rtBBox.bottom = FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face), |
| 148 FXFT_Get_Face_yMax(m_Face)); | 148 FXFT_Get_Face_yMax(m_Face)); |
| 149 return TRUE; | 149 return true; |
| 150 } | 150 } |
| 151 | 151 |
| 152 int32_t CFPF_SkiaFont::GetHeight() const { | 152 int32_t CFPF_SkiaFont::GetHeight() const { |
| 153 if (!m_Face) | 153 if (!m_Face) |
| 154 return 0; | 154 return 0; |
| 155 return FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face), | 155 return FPF_EM_ADJUST(FXFT_Get_Face_UnitsPerEM(m_Face), |
| 156 FXFT_Get_Face_Height(m_Face)); | 156 FXFT_Get_Face_Height(m_Face)); |
| 157 } | 157 } |
| 158 | 158 |
| 159 int32_t CFPF_SkiaFont::GetItalicAngle() const { | 159 int32_t CFPF_SkiaFont::GetItalicAngle() const { |
| (...skipping 12 matching lines...) Expand all Loading... |
| 172 uint32_t dwSize) { | 172 uint32_t dwSize) { |
| 173 if (!m_Face) | 173 if (!m_Face) |
| 174 return 0; | 174 return 0; |
| 175 | 175 |
| 176 FT_ULong ulSize = pdfium::base::checked_cast<FT_ULong>(dwSize); | 176 FT_ULong ulSize = pdfium::base::checked_cast<FT_ULong>(dwSize); |
| 177 if (FXFT_Load_Sfnt_Table(m_Face, dwTable, 0, pBuffer, &ulSize)) | 177 if (FXFT_Load_Sfnt_Table(m_Face, dwTable, 0, pBuffer, &ulSize)) |
| 178 return 0; | 178 return 0; |
| 179 return pdfium::base::checked_cast<uint32_t>(ulSize); | 179 return pdfium::base::checked_cast<uint32_t>(ulSize); |
| 180 } | 180 } |
| 181 | 181 |
| 182 FX_BOOL CFPF_SkiaFont::InitFont(CFPF_SkiaFontMgr* pFontMgr, | 182 bool CFPF_SkiaFont::InitFont(CFPF_SkiaFontMgr* pFontMgr, |
| 183 CFPF_SkiaFontDescriptor* pFontDes, | 183 CFPF_SkiaFontDescriptor* pFontDes, |
| 184 const CFX_ByteStringC& bsFamily, | 184 const CFX_ByteStringC& bsFamily, |
| 185 uint32_t dwStyle, | 185 uint32_t dwStyle, |
| 186 uint8_t uCharset) { | 186 uint8_t uCharset) { |
| 187 if (!pFontMgr || !pFontDes) | 187 if (!pFontMgr || !pFontDes) |
| 188 return FALSE; | 188 return false; |
| 189 | 189 |
| 190 switch (pFontDes->GetType()) { | 190 switch (pFontDes->GetType()) { |
| 191 case FPF_SKIAFONTTYPE_Path: { | 191 case FPF_SKIAFONTTYPE_Path: { |
| 192 CFPF_SkiaPathFont* pFont = (CFPF_SkiaPathFont*)pFontDes; | 192 CFPF_SkiaPathFont* pFont = (CFPF_SkiaPathFont*)pFontDes; |
| 193 m_Face = pFontMgr->GetFontFace(pFont->m_pPath, pFont->m_iFaceIndex); | 193 m_Face = pFontMgr->GetFontFace(pFont->m_pPath, pFont->m_iFaceIndex); |
| 194 break; | 194 break; |
| 195 } | 195 } |
| 196 case FPF_SKIAFONTTYPE_File: { | 196 case FPF_SKIAFONTTYPE_File: { |
| 197 CFPF_SkiaFileFont* pFont = (CFPF_SkiaFileFont*)pFontDes; | 197 CFPF_SkiaFileFont* pFont = (CFPF_SkiaFileFont*)pFontDes; |
| 198 m_Face = pFontMgr->GetFontFace(pFont->m_pFile, pFont->m_iFaceIndex); | 198 m_Face = pFontMgr->GetFontFace(pFont->m_pFile, pFont->m_iFaceIndex); |
| 199 break; | 199 break; |
| 200 } | 200 } |
| 201 case FPF_SKIAFONTTYPE_Buffer: { | 201 case FPF_SKIAFONTTYPE_Buffer: { |
| 202 CFPF_SkiaBufferFont* pFont = (CFPF_SkiaBufferFont*)pFontDes; | 202 CFPF_SkiaBufferFont* pFont = (CFPF_SkiaBufferFont*)pFontDes; |
| 203 m_Face = pFontMgr->GetFontFace((const uint8_t*)pFont->m_pBuffer, | 203 m_Face = pFontMgr->GetFontFace((const uint8_t*)pFont->m_pBuffer, |
| 204 pFont->m_szBuffer, pFont->m_iFaceIndex); | 204 pFont->m_szBuffer, pFont->m_iFaceIndex); |
| 205 break; | 205 break; |
| 206 } | 206 } |
| 207 default: | 207 default: |
| 208 return FALSE; | 208 return false; |
| 209 } | 209 } |
| 210 if (!m_Face) | 210 if (!m_Face) |
| 211 return FALSE; | 211 return false; |
| 212 | 212 |
| 213 m_dwStyle = dwStyle; | 213 m_dwStyle = dwStyle; |
| 214 m_uCharset = uCharset; | 214 m_uCharset = uCharset; |
| 215 m_pFontMgr = pFontMgr; | 215 m_pFontMgr = pFontMgr; |
| 216 m_pFontDes = pFontDes; | 216 m_pFontDes = pFontDes; |
| 217 m_dwRefCount = 1; | 217 m_dwRefCount = 1; |
| 218 return TRUE; | 218 return true; |
| 219 } | 219 } |
| OLD | NEW |