Index: src/ports/SkFontHost_linux.cpp |
diff --git a/src/ports/SkFontHost_linux.cpp b/src/ports/SkFontHost_linux.cpp |
index 6003c095c164ee23125a34ca5ed0eedc00005d65..29b6888912a312a59debee655b2036d79dc95a45 100644 |
--- a/src/ports/SkFontHost_linux.cpp |
+++ b/src/ports/SkFontHost_linux.cpp |
@@ -12,6 +12,7 @@ |
#include "SkDescriptor.h" |
#include "SkOSFile.h" |
#include "SkPaint.h" |
+#include "SkRTConf.h" |
#include "SkString.h" |
#include "SkStream.h" |
#include "SkThread.h" |
@@ -101,6 +102,13 @@ private: |
typedef SkTypeface_Custom INHERITED; |
}; |
+// This configuration option is useful if we need to open and hold handles to |
+// all found system font data (e.g., for skfiddle, where the application can't |
+// access the filesystem to read fonts on demand) |
+ |
+SK_CONF_DECLARE(bool, c_CustomTypefaceRetain, "fonts.customFont.retainAllData", false, |
+ "Retain the open stream for each found font on the system."); |
+ |
/** The file SkTypeface implementation for the custom font manager. */ |
class SkTypeface_File : public SkTypeface_Custom { |
public: |
@@ -108,7 +116,12 @@ public: |
const SkString familyName, const char path[], int index) |
: INHERITED(style, isFixedPitch, sysFont, familyName, index) |
, fPath(path) |
- { } |
+ , fStream(NULL) |
+ { |
+ if (c_CustomTypefaceRetain) { |
+ fStream = SkStream::NewFromFile(); |
reed1
2014/11/19 13:58:16
do we need to pass (path) as a parameter?
humper
2014/11/19 14:02:53
:) oops, fixing.
|
+ } |
+ } |
virtual const char* getUniqueString() const SK_OVERRIDE { |
const char* str = strrchr(fPath.c_str(), '/'); |
@@ -121,11 +134,16 @@ public: |
protected: |
virtual SkStream* onOpenStream(int* ttcIndex) const SK_OVERRIDE { |
*ttcIndex = this->getIndex(); |
- return SkStream::NewFromFile(fPath.c_str()); |
+ if (c_CustomTypefaceRetain) { |
reed1
2014/11/19 13:58:16
Can this predicate be changed to just
if (already
humper
2014/11/19 14:02:53
sure, changing.
|
+ return fStream->duplicate(); |
+ } else { |
+ return SkStream::NewFromFile(fPath.c_str()); |
+ } |
} |
private: |
SkString fPath; |
+ SkAutoTUnref<SkStream> fStream; |
typedef SkTypeface_Custom INHERITED; |
}; |