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

Side by Side Diff: src/ports/SkFontConfigInterface_direct_google3.cpp

Issue 1471033002: Fix Google3 fonts. (Closed) Base URL: https://skia.googlesource.com/skia@master
Patch Set: Move files back to ports. Created 5 years 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
OLDNEW
(Empty)
1 /*
2 * Copyright 2009 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8 /* migrated from chrome/src/skia/ext/SkFontHost_fontconfig_direct.cpp */
9
10 #include "google_font_file_buffering.h"
11
12 #include "SkFontConfigInterfaceDirect.h"
13 #include "SkMutex.h"
14 #include "SkStream.h"
15 #include "SkString.h"
16 #include "SkTypes.h"
17
18 #include <fontconfig/fontconfig.h>
19
20 // Loads fonts using GoogleFt2ReadFontFromMemory.
21 class SkFontConfigInterfaceDirectGoogle3 : public SkFontConfigInterfaceDirect {
22 public:
23 SkFontConfigInterfaceDirectGoogle3() {}
24 ~SkFontConfigInterfaceDirectGoogle3() override {}
25
26 SkStreamAsset* openStream(const FontIdentity&) override;
27 protected:
28 // Override isValidPattern to return true if the font is in the cache.
29 bool isValidPattern(FcPattern* pattern) override;
30 private:
31 typedef SkFontConfigInterfaceDirect INHERITED;
32 };
33
34 SkFontConfigInterface* SkFontConfigInterface::GetSingletonDirectInterface(SkBase Mutex* mutex) {
bungeman-skia 2015/11/24 21:56:36 It would be nice if this were in SkFontConfigInte
dogben 2015/11/30 17:15:31 Done. Required adding a .h.
35 SkAutoMutexAcquire ac(mutex);
36 static SkFontConfigInterfaceDirectGoogle3* singleton = nullptr;
37 if (singleton == nullptr) {
38 singleton = new SkFontConfigInterfaceDirectGoogle3;
39 }
40 return singleton;
41 }
42
43 bool SkFontConfigInterfaceDirectGoogle3::isValidPattern(FcPattern* pattern) {
44 #ifdef SK_FONT_CONFIG_ONLY_ALLOW_SCALABLE_FONTS
45 FcBool is_scalable;
46 if (FcPatternGetBool(pattern, FC_SCALABLE, 0, &is_scalable) != FcResultMatch
47 || !is_scalable) {
48 return false;
49 }
50 #endif
51
52 const char* c_filename = INHERITED::GetName(pattern, FC_FILE);
53 if (!c_filename) {
54 return false;
55 }
56 // Check if this font has been pre-loaded into memory.
57 const char* unused;
58 if (GoogleFreeType::GoogleFt2ReadFontFromMemory(c_filename, &unused) >= 0) {
59 return true;
60 }
61 return this->INHERITED::valid_pattern(pattern);
62 }
63
64 SkStreamAsset* SkFontConfigInterfaceDirectGoogle3::openStream(const FontIdentity & identity) {
65 const char* c_filename = identity.fString.c_str();
66 // Read the system fonts from the fonts we've pre-loaded into memory.
67 const char* buffer;
68 int length = GoogleFreeType::GoogleFt2ReadFontFromMemory(
69 c_filename, &buffer);
70 if (length >= 0) return new SkMemoryStream(buffer, length);
71 return this->INHERITED::openStream(identity);
72 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698