| OLD | NEW |
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 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/fxcrt/include/fx_system.h" | 7 #include "core/fxcrt/include/fx_system.h" |
| 8 | 8 |
| 9 #if _FX_OS_ == _FX_ANDROID_ | 9 #if _FX_OS_ == _FX_ANDROID_ |
| 10 | 10 |
| (...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 241 if (m_bLoaded) { | 241 if (m_bLoaded) { |
| 242 return; | 242 return; |
| 243 } | 243 } |
| 244 ScanPath("/system/fonts"); | 244 ScanPath("/system/fonts"); |
| 245 OutputSystemFonts(); | 245 OutputSystemFonts(); |
| 246 m_bLoaded = TRUE; | 246 m_bLoaded = TRUE; |
| 247 } | 247 } |
| 248 void CFPF_SkiaFontMgr::LoadPrivateFont(IFX_FileRead* pFontFile) {} | 248 void CFPF_SkiaFontMgr::LoadPrivateFont(IFX_FileRead* pFontFile) {} |
| 249 void CFPF_SkiaFontMgr::LoadPrivateFont(const CFX_ByteStringC& bsFileName) {} | 249 void CFPF_SkiaFontMgr::LoadPrivateFont(const CFX_ByteStringC& bsFileName) {} |
| 250 void CFPF_SkiaFontMgr::LoadPrivateFont(void* pBuffer, size_t szBuffer) {} | 250 void CFPF_SkiaFontMgr::LoadPrivateFont(void* pBuffer, size_t szBuffer) {} |
| 251 |
| 251 CFPF_SkiaFont* CFPF_SkiaFontMgr::CreateFont(const CFX_ByteStringC& bsFamilyname, | 252 CFPF_SkiaFont* CFPF_SkiaFontMgr::CreateFont(const CFX_ByteStringC& bsFamilyname, |
| 252 uint8_t uCharset, | 253 uint8_t uCharset, |
| 253 uint32_t dwStyle, | 254 uint32_t dwStyle, |
| 254 uint32_t dwMatch) { | 255 uint32_t dwMatch) { |
| 255 uint32_t dwHash = FPF_SKIAGetFamilyHash(bsFamilyname, dwStyle, uCharset); | 256 uint32_t dwHash = FPF_SKIAGetFamilyHash(bsFamilyname, dwStyle, uCharset); |
| 256 auto it = m_FamilyFonts.find(dwHash); | 257 auto it = m_FamilyFonts.find(dwHash); |
| 257 if (it != m_FamilyFonts.end() && it->second) | 258 if (it != m_FamilyFonts.end() && it->second) |
| 258 return it->second->Retain(); | 259 return it->second->Retain(); |
| 259 | 260 |
| 260 uint32_t dwFaceName = FPF_SKIANormalizeFontName(bsFamilyname); | 261 uint32_t dwFaceName = FPF_SKIANormalizeFontName(bsFamilyname); |
| 261 uint32_t dwSubst = FPF_SkiaGetSubstFont(dwFaceName); | 262 uint32_t dwSubst = FPF_SkiaGetSubstFont(dwFaceName); |
| 262 uint32_t dwSubstSans = FPF_SkiaGetSansFont(dwFaceName); | 263 uint32_t dwSubstSans = FPF_SkiaGetSansFont(dwFaceName); |
| 263 FX_BOOL bMaybeSymbol = FPF_SkiaMaybeSymbol(bsFamilyname); | 264 FX_BOOL bMaybeSymbol = FPF_SkiaMaybeSymbol(bsFamilyname); |
| 264 if (uCharset != FXFONT_ARABIC_CHARSET && FPF_SkiaMaybeArabic(bsFamilyname)) { | 265 if (uCharset != FXFONT_ARABIC_CHARSET && FPF_SkiaMaybeArabic(bsFamilyname)) { |
| 265 uCharset = FXFONT_ARABIC_CHARSET; | 266 uCharset = FXFONT_ARABIC_CHARSET; |
| 266 } else if (uCharset == FXFONT_ANSI_CHARSET && | 267 } else if (uCharset == FXFONT_ANSI_CHARSET && |
| 267 (dwMatch & FPF_MATCHFONT_REPLACEANSI)) { | 268 (dwMatch & FPF_MATCHFONT_REPLACEANSI)) { |
| 268 uCharset = FXFONT_DEFAULT_CHARSET; | 269 uCharset = FXFONT_DEFAULT_CHARSET; |
| 269 } | 270 } |
| 270 int32_t nExpectVal = FPF_SKIAMATCHWEIGHT_NAME1 + FPF_SKIAMATCHWEIGHT_1 * 3 + | 271 int32_t nExpectVal = FPF_SKIAMATCHWEIGHT_NAME1 + FPF_SKIAMATCHWEIGHT_1 * 3 + |
| 271 FPF_SKIAMATCHWEIGHT_2 * 2; | 272 FPF_SKIAMATCHWEIGHT_2 * 2; |
| 272 int32_t nItem = -1; | 273 CFPF_SkiaFontDescriptor* pBestFontDes = nullptr; |
| 273 int32_t nMax = -1; | 274 int32_t nMax = -1; |
| 274 int32_t nGlyphNum = 0; | 275 int32_t nGlyphNum = 0; |
| 275 for (auto it = m_FontFaces.rbegin(); it != m_FontFaces.rend(); ++it) { | 276 for (auto it = m_FontFaces.rbegin(); it != m_FontFaces.rend(); ++it) { |
| 276 CFPF_SkiaPathFont* pFontDes = static_cast<CFPF_SkiaPathFont*>(*it); | 277 CFPF_SkiaPathFont* pFontDes = static_cast<CFPF_SkiaPathFont*>(*it); |
| 277 if (!(pFontDes->m_dwCharsets & FPF_SkiaGetCharset(uCharset))) { | 278 if (!(pFontDes->m_dwCharsets & FPF_SkiaGetCharset(uCharset))) { |
| 278 continue; | 279 continue; |
| 279 } | 280 } |
| 280 int32_t nFind = 0; | 281 int32_t nFind = 0; |
| 281 uint32_t dwSysFontName = FPF_SKIANormalizeFontName(pFontDes->m_pFamily); | 282 uint32_t dwSysFontName = FPF_SKIANormalizeFontName(pFontDes->m_pFamily); |
| 282 if (dwFaceName == dwSysFontName) { | 283 if (dwFaceName == dwSysFontName) { |
| (...skipping 16 matching lines...) Expand all Loading... |
| 299 if ((dwStyle & FXFONT_SCRIPT) == (pFontDes->m_dwStyle & FXFONT_SCRIPT)) { | 300 if ((dwStyle & FXFONT_SCRIPT) == (pFontDes->m_dwStyle & FXFONT_SCRIPT)) { |
| 300 nFind += FPF_SKIAMATCHWEIGHT_2; | 301 nFind += FPF_SKIAMATCHWEIGHT_2; |
| 301 } | 302 } |
| 302 if (dwSubst == dwSysFontName || dwSubstSans == dwSysFontName) { | 303 if (dwSubst == dwSysFontName || dwSubstSans == dwSysFontName) { |
| 303 nFind += FPF_SKIAMATCHWEIGHT_NAME2; | 304 nFind += FPF_SKIAMATCHWEIGHT_NAME2; |
| 304 bMatchedName = true; | 305 bMatchedName = true; |
| 305 } | 306 } |
| 306 if (uCharset == FXFONT_DEFAULT_CHARSET || bMaybeSymbol) { | 307 if (uCharset == FXFONT_DEFAULT_CHARSET || bMaybeSymbol) { |
| 307 if (nFind > nMax && bMatchedName) { | 308 if (nFind > nMax && bMatchedName) { |
| 308 nMax = nFind; | 309 nMax = nFind; |
| 309 nItem = it - m_FontFaces.rbegin(); | 310 pBestFontDes = *it; |
| 310 } | 311 } |
| 311 } else if (FPF_SkiaIsCJK(uCharset)) { | 312 } else if (FPF_SkiaIsCJK(uCharset)) { |
| 312 if (bMatchedName || pFontDes->m_iGlyphNum > nGlyphNum) { | 313 if (bMatchedName || pFontDes->m_iGlyphNum > nGlyphNum) { |
| 313 nItem = it - m_FontFaces.rbegin(); | 314 pBestFontDes = *it; |
| 314 nGlyphNum = pFontDes->m_iGlyphNum; | 315 nGlyphNum = pFontDes->m_iGlyphNum; |
| 315 } | 316 } |
| 316 } else if (nFind > nMax) { | 317 } else if (nFind > nMax) { |
| 317 nMax = nFind; | 318 nMax = nFind; |
| 318 nItem = it - m_FontFaces.rbegin(); | 319 pBestFontDes = *it; |
| 319 } | 320 } |
| 320 if (nExpectVal <= nFind) { | 321 if (nExpectVal <= nFind) { |
| 321 nItem = it - m_FontFaces.rbegin(); | 322 pBestFontDes = *it; |
| 322 break; | 323 break; |
| 323 } | 324 } |
| 324 } | 325 } |
| 325 if (nItem > -1) { | 326 if (pBestFontDes) { |
| 326 CFPF_SkiaFontDescriptor* pFontDes = m_FontFaces[nItem]; | |
| 327 CFPF_SkiaFont* pFont = new CFPF_SkiaFont; | 327 CFPF_SkiaFont* pFont = new CFPF_SkiaFont; |
| 328 if (pFont->InitFont(this, pFontDes, bsFamilyname, dwStyle, uCharset)) { | 328 if (pFont->InitFont(this, pBestFontDes, bsFamilyname, dwStyle, uCharset)) { |
| 329 m_FamilyFonts[dwHash] = pFont; | 329 m_FamilyFonts[dwHash] = pFont; |
| 330 return pFont->Retain(); | 330 return pFont->Retain(); |
| 331 } | 331 } |
| 332 pFont->Release(); | 332 pFont->Release(); |
| 333 } | 333 } |
| 334 return nullptr; | 334 return nullptr; |
| 335 } | 335 } |
| 336 |
| 336 FXFT_Face CFPF_SkiaFontMgr::GetFontFace(IFX_FileRead* pFileRead, | 337 FXFT_Face CFPF_SkiaFontMgr::GetFontFace(IFX_FileRead* pFileRead, |
| 337 int32_t iFaceIndex) { | 338 int32_t iFaceIndex) { |
| 338 if (!pFileRead) { | 339 if (!pFileRead) { |
| 339 return nullptr; | 340 return nullptr; |
| 340 } | 341 } |
| 341 if (pFileRead->GetSize() == 0) { | 342 if (pFileRead->GetSize() == 0) { |
| 342 return nullptr; | 343 return nullptr; |
| 343 } | 344 } |
| 344 if (iFaceIndex < 0) { | 345 if (iFaceIndex < 0) { |
| 345 return nullptr; | 346 return nullptr; |
| (...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 513 } | 514 } |
| 514 if (pOS2 && (pOS2->ulCodePageRange1 & (1 << 31))) { | 515 if (pOS2 && (pOS2->ulCodePageRange1 & (1 << 31))) { |
| 515 pFontDesc->m_dwStyle |= FXFONT_SYMBOLIC; | 516 pFontDesc->m_dwStyle |= FXFONT_SYMBOLIC; |
| 516 } | 517 } |
| 517 pFontDesc->m_dwCharsets = FPF_SkiaGetFaceCharset(pOS2); | 518 pFontDesc->m_dwCharsets = FPF_SkiaGetFaceCharset(pOS2); |
| 518 pFontDesc->m_iFaceIndex = face->face_index; | 519 pFontDesc->m_iFaceIndex = face->face_index; |
| 519 pFontDesc->m_iGlyphNum = face->num_glyphs; | 520 pFontDesc->m_iGlyphNum = face->num_glyphs; |
| 520 } | 521 } |
| 521 void CFPF_SkiaFontMgr::OutputSystemFonts() {} | 522 void CFPF_SkiaFontMgr::OutputSystemFonts() {} |
| 522 #endif | 523 #endif |
| OLD | NEW |