Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(568)

Side by Side Diff: core/fxge/android/fpf_skiafontmgr.cpp

Issue 2059553002: [Android] Add support for standalone PDFium gn build on Android. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: rebase Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « core/fxge/android/fpf_skiafontmgr.h ('k') | core/fxge/android/fpf_skiamodule.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 12 matching lines...) Expand all
23 #endif 23 #endif
24 static unsigned long FPF_SkiaStream_Read(FXFT_Stream stream, 24 static unsigned long FPF_SkiaStream_Read(FXFT_Stream stream,
25 unsigned long offset, 25 unsigned long offset,
26 unsigned char* buffer, 26 unsigned char* buffer,
27 unsigned long count) { 27 unsigned long count) {
28 IFX_FileRead* pFileRead = (IFX_FileRead*)stream->descriptor.pointer; 28 IFX_FileRead* pFileRead = (IFX_FileRead*)stream->descriptor.pointer;
29 if (!pFileRead) { 29 if (!pFileRead) {
30 return 0; 30 return 0;
31 } 31 }
32 if (count > 0) { 32 if (count > 0) {
33 if (pFileRead->ReadBlock(buffer, (FX_FILESIZE)offset, (size_t)count) != 33 if (!pFileRead->ReadBlock(buffer, (FX_FILESIZE)offset, (size_t)count)) {
34 count) {
35 return 0; 34 return 0;
36 } 35 }
37 } 36 }
38 return count; 37 return count;
39 } 38 }
40 static void FPF_SkiaStream_Close(FXFT_Stream stream) {} 39 static void FPF_SkiaStream_Close(FXFT_Stream stream) {}
41 #ifdef __cplusplus 40 #ifdef __cplusplus
42 }; 41 };
43 #endif 42 #endif
44 struct FPF_SKIAFONTMAP { 43 struct FPF_SKIAFONTMAP {
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
202 bsFont += uCharset; 201 bsFont += uCharset;
203 return FPF_GetHashCode_StringA(bsFont.c_str(), bsFont.GetLength(), TRUE); 202 return FPF_GetHashCode_StringA(bsFont.c_str(), bsFont.GetLength(), TRUE);
204 } 203 }
205 static FX_BOOL FPF_SkiaIsCJK(uint8_t uCharset) { 204 static FX_BOOL FPF_SkiaIsCJK(uint8_t uCharset) {
206 return (uCharset == FXFONT_GB2312_CHARSET) || 205 return (uCharset == FXFONT_GB2312_CHARSET) ||
207 (uCharset == FXFONT_CHINESEBIG5_CHARSET) || 206 (uCharset == FXFONT_CHINESEBIG5_CHARSET) ||
208 (uCharset == FXFONT_HANGEUL_CHARSET) || 207 (uCharset == FXFONT_HANGEUL_CHARSET) ||
209 (uCharset == FXFONT_SHIFTJIS_CHARSET); 208 (uCharset == FXFONT_SHIFTJIS_CHARSET);
210 } 209 }
211 static FX_BOOL FPF_SkiaMaybeSymbol(const CFX_ByteStringC& bsFacename) { 210 static FX_BOOL FPF_SkiaMaybeSymbol(const CFX_ByteStringC& bsFacename) {
212 CFX_ByteString bsName = bsFacename; 211 CFX_ByteString bsName(bsFacename);
213 bsName.MakeLower(); 212 bsName.MakeLower();
214 return bsName.Find("symbol") > -1; 213 return bsName.Find("symbol") > -1;
215 } 214 }
216 static FX_BOOL FPF_SkiaMaybeArabic(const CFX_ByteStringC& bsFacename) { 215 static FX_BOOL FPF_SkiaMaybeArabic(const CFX_ByteStringC& bsFacename) {
217 CFX_ByteString bsName = bsFacename; 216 CFX_ByteString bsName(bsFacename);
218 bsName.MakeLower(); 217 bsName.MakeLower();
219 return bsName.Find("arabic") > -1; 218 return bsName.Find("arabic") > -1;
220 } 219 }
221 CFPF_SkiaFontMgr::CFPF_SkiaFontMgr() : m_bLoaded(FALSE), m_FTLibrary(nullptr) {} 220 CFPF_SkiaFontMgr::CFPF_SkiaFontMgr() : m_bLoaded(FALSE), m_FTLibrary(nullptr) {}
222 CFPF_SkiaFontMgr::~CFPF_SkiaFontMgr() { 221 CFPF_SkiaFontMgr::~CFPF_SkiaFontMgr() {
223 for (const auto& pair : m_FamilyFonts) { 222 for (const auto& pair : m_FamilyFonts) {
224 if (pair.second) 223 if (pair.second)
225 pair.second->Release(); 224 pair.second->Release();
226 } 225 }
227 m_FamilyFonts.clear(); 226 m_FamilyFonts.clear();
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
364 FXFT_Face CFPF_SkiaFontMgr::GetFontFace(const CFX_ByteStringC& bsFile, 363 FXFT_Face CFPF_SkiaFontMgr::GetFontFace(const CFX_ByteStringC& bsFile,
365 int32_t iFaceIndex) { 364 int32_t iFaceIndex) {
366 if (bsFile.IsEmpty()) { 365 if (bsFile.IsEmpty()) {
367 return nullptr; 366 return nullptr;
368 } 367 }
369 if (iFaceIndex < 0) { 368 if (iFaceIndex < 0) {
370 return nullptr; 369 return nullptr;
371 } 370 }
372 FXFT_Open_Args args; 371 FXFT_Open_Args args;
373 args.flags = FT_OPEN_PATHNAME; 372 args.flags = FT_OPEN_PATHNAME;
374 args.pathname = static_cast<FT_String*>(bsFile.c_str()); 373 args.pathname = const_cast<FT_String*>(bsFile.c_str());
375 FXFT_Face face; 374 FXFT_Face face;
376 if (FXFT_Open_Face(m_FTLibrary, &args, iFaceIndex, &face)) { 375 if (FXFT_Open_Face(m_FTLibrary, &args, iFaceIndex, &face)) {
377 return FALSE; 376 return FALSE;
378 } 377 }
379 FXFT_Set_Pixel_Sizes(face, 0, 64); 378 FXFT_Set_Pixel_Sizes(face, 0, 64);
380 return face; 379 return face;
381 } 380 }
382 FXFT_Face CFPF_SkiaFontMgr::GetFontFace(const uint8_t* pBuffer, 381 FXFT_Face CFPF_SkiaFontMgr::GetFontFace(const uint8_t* pBuffer,
383 size_t szBuffer, 382 size_t szBuffer,
384 int32_t iFaceIndex) { 383 int32_t iFaceIndex) {
385 if (!pBuffer || szBuffer < 1) { 384 if (!pBuffer || szBuffer < 1) {
386 return nullptr; 385 return nullptr;
387 } 386 }
388 if (iFaceIndex < 0) { 387 if (iFaceIndex < 0) {
389 return nullptr; 388 return nullptr;
390 } 389 }
391 FXFT_Open_Args args; 390 FXFT_Open_Args args;
392 args.flags = FT_OPEN_MEMORY; 391 args.flags = FT_OPEN_MEMORY;
393 args.memory_base = pBuffer; 392 args.memory_base = pBuffer;
394 args.memory_size = szBuffer; 393 args.memory_size = szBuffer;
395 FXFT_Face face; 394 FXFT_Face face;
396 if (FXFT_Open_Face(m_FTLibrary, &args, iFaceIndex, &face)) { 395 if (FXFT_Open_Face(m_FTLibrary, &args, iFaceIndex, &face)) {
397 return FALSE; 396 return FALSE;
398 } 397 }
399 FXFT_Set_Pixel_Sizes(face, 0, 64); 398 FXFT_Set_Pixel_Sizes(face, 0, 64);
400 return face; 399 return face;
401 } 400 }
402 void CFPF_SkiaFontMgr::ScanPath(const CFX_ByteStringC& path) { 401 void CFPF_SkiaFontMgr::ScanPath(const CFX_ByteString& path) {
403 void* handle = FX_OpenFolder(path.c_str()); 402 void* handle = FX_OpenFolder(path.c_str());
404 if (!handle) { 403 if (!handle) {
405 return; 404 return;
406 } 405 }
407 CFX_ByteString filename; 406 CFX_ByteString filename;
408 FX_BOOL bFolder = FALSE; 407 FX_BOOL bFolder = FALSE;
409 while (FX_GetNextFile(handle, filename, bFolder)) { 408 while (FX_GetNextFile(handle, filename, bFolder)) {
410 if (bFolder) { 409 if (bFolder) {
411 if (filename == "." || filename == "..") { 410 if (filename == "." || filename == "..") {
412 continue; 411 continue;
413 } 412 }
414 } else { 413 } else {
415 CFX_ByteString ext = filename.Right(4); 414 CFX_ByteString ext = filename.Right(4);
416 ext.MakeLower(); 415 ext.MakeLower();
417 if (ext != ".ttf" && ext != ".ttc" && ext != ".otf") { 416 if (ext != ".ttf" && ext != ".ttc" && ext != ".otf") {
418 continue; 417 continue;
419 } 418 }
420 } 419 }
421 CFX_ByteString fullpath = path; 420 CFX_ByteString fullpath(path);
422 fullpath += "/"; 421 fullpath += "/";
423 fullpath += filename; 422 fullpath += filename;
424 if (bFolder) { 423 if (bFolder) {
425 ScanPath(fullpath); 424 ScanPath(fullpath);
426 } else { 425 } else {
427 ScanFile(fullpath); 426 ScanFile(fullpath);
428 } 427 }
429 } 428 }
430 FX_CloseFolder(handle); 429 FX_CloseFolder(handle);
431 } 430 }
432 void CFPF_SkiaFontMgr::ScanFile(const CFX_ByteStringC& file) { 431 void CFPF_SkiaFontMgr::ScanFile(const CFX_ByteString& file) {
433 FXFT_Face face = GetFontFace(file); 432 FXFT_Face face = GetFontFace(file.AsStringC());
434 if (face) { 433 if (face) {
435 CFPF_SkiaPathFont* pFontDesc = new CFPF_SkiaPathFont; 434 CFPF_SkiaPathFont* pFontDesc = new CFPF_SkiaPathFont;
436 pFontDesc->SetPath(file.c_str()); 435 pFontDesc->SetPath(file.c_str());
437 ReportFace(face, pFontDesc); 436 ReportFace(face, pFontDesc);
438 m_FontFaces.push_back(pFontDesc); 437 m_FontFaces.push_back(pFontDesc);
439 FXFT_Done_Face(face); 438 FXFT_Done_Face(face);
440 } 439 }
441 } 440 }
442 static const uint32_t g_FPFSkiaFontCharsets[] = { 441 static const uint32_t g_FPFSkiaFontCharsets[] = {
443 FPF_SKIACHARSET_Ansi, 442 FPF_SKIACHARSET_Ansi,
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
514 } 513 }
515 if (pOS2 && (pOS2->ulCodePageRange1 & (1 << 31))) { 514 if (pOS2 && (pOS2->ulCodePageRange1 & (1 << 31))) {
516 pFontDesc->m_dwStyle |= FXFONT_SYMBOLIC; 515 pFontDesc->m_dwStyle |= FXFONT_SYMBOLIC;
517 } 516 }
518 pFontDesc->m_dwCharsets = FPF_SkiaGetFaceCharset(pOS2); 517 pFontDesc->m_dwCharsets = FPF_SkiaGetFaceCharset(pOS2);
519 pFontDesc->m_iFaceIndex = face->face_index; 518 pFontDesc->m_iFaceIndex = face->face_index;
520 pFontDesc->m_iGlyphNum = face->num_glyphs; 519 pFontDesc->m_iGlyphNum = face->num_glyphs;
521 } 520 }
522 void CFPF_SkiaFontMgr::OutputSystemFonts() {} 521 void CFPF_SkiaFontMgr::OutputSystemFonts() {}
523 #endif 522 #endif
OLDNEW
« no previous file with comments | « core/fxge/android/fpf_skiafontmgr.h ('k') | core/fxge/android/fpf_skiamodule.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698