Chromium Code Reviews| Index: src/ports/SkFontConfigInterface_direct.cpp |
| diff --git a/src/ports/SkFontConfigInterface_direct.cpp b/src/ports/SkFontConfigInterface_direct.cpp |
| index 8a8e4a1b538dfcfa270ed40b24d9f60adb3be023..39dc9ca62c963585292ccbcaa64a5455df6b2c8d 100644 |
| --- a/src/ports/SkFontConfigInterface_direct.cpp |
| +++ b/src/ports/SkFontConfigInterface_direct.cpp |
| @@ -23,6 +23,10 @@ |
| #include <fontconfig/fontconfig.h> |
| #include <unistd.h> |
| +#if defined(GOOGLE3) |
|
bungeman-skia
2015/11/23 19:04:54
I would very much like to minimize this craziness.
|
| +#include "google_font_file_buffering.h" |
| +#endif |
| + |
| size_t SkFontConfigInterface::FontIdentity::writeToMemory(void* addr) const { |
| size_t size = sizeof(fID) + sizeof(fTTCIndex); |
| size += sizeof(int32_t) + sizeof(int32_t) + sizeof(uint8_t); // weight, width, italic |
| @@ -348,9 +352,19 @@ static bool valid_pattern(FcPattern* pattern) { |
| if (!c_filename) { |
| return false; |
| } |
| + |
| +#if defined(GOOGLE3) |
|
bungeman-skia
2015/11/23 21:39:59
This block is harder to remove, but since it wasn'
bungeman-skia
2015/11/24 21:56:36
This block is needed, or at least the 'access' cod
|
| + // Check if this font has been pre-loaded into memory. |
| + const char* unused; |
| + if (GoogleFreeType::GoogleFt2ReadFontFromMemory(c_filename, &unused) >= 0) { |
| + return true; |
| + } |
| +#endif |
| + |
| if (access(c_filename, R_OK) != 0) { |
| return false; |
| } |
| + |
| return true; |
| } |
| @@ -559,7 +573,15 @@ bool SkFontConfigInterfaceDirect::matchFamilyName(const char familyName[], |
| } |
| SkStreamAsset* SkFontConfigInterfaceDirect::openStream(const FontIdentity& identity) { |
| - return SkStream::NewFromFile(identity.fString.c_str()); |
| + const char* c_filename = identity.fString.c_str(); |
| +#if defined(GOOGLE3) |
| + // Read the system fonts from the fonts we've pre-loaded into memory. |
| + const char* buffer; |
| + int length = GoogleFreeType::GoogleFt2ReadFontFromMemory( |
| + c_filename, &buffer); |
| + if (length >= 0) return new SkMemoryStream(buffer, length); |
| +#endif |
| + return SkStream::NewFromFile(c_filename); |
| } |
| /////////////////////////////////////////////////////////////////////////////// |