Index: src/core/SkFontDescriptor.h |
diff --git a/src/core/SkFontDescriptor.h b/src/core/SkFontDescriptor.h |
index 66707ddd3c5e10819ecd87e4d2352ed603c85817..933a36a0952d254d987b5b2dc12970fbc851268b 100644 |
--- a/src/core/SkFontDescriptor.h |
+++ b/src/core/SkFontDescriptor.h |
@@ -12,7 +12,42 @@ |
#include "SkString.h" |
#include "SkTypeface.h" |
-class SkFontDescriptor { |
+class SkFontData { |
+public: |
+ /** This takes ownership of 'stream'. Makes a copy of the data in 'axis'. */ |
+ SkFontData(SkStreamAsset* stream, int index, const SkFixed axis[], int axisCount) |
+ : fStream(stream), fIndex(index), fAxisCount(axisCount), fAxis(axisCount) |
+ { |
+ for (int i = 0; i < axisCount; ++i) { |
+ fAxis[i] = axis[i]; |
+ } |
+ } |
+ SkFontData(const SkFontData& that) |
+ : fStream(that.fStream->duplicate()) |
+ , fIndex(that.fIndex) |
+ , fAxisCount(that.fAxisCount) |
+ , fAxis(fAxisCount) |
+ { |
+ for (int i = 0; i < fAxisCount; ++i) { |
+ fAxis[i] = that.fAxis[i]; |
+ } |
+ } |
+ bool hasStream() const { return fStream.get() != NULL; } |
+ SkStreamAsset* duplicateStream() const { return fStream->duplicate(); } |
+ SkStreamAsset* detachStream() { return fStream.detach(); } |
+ SkStreamAsset* getStream() { return fStream.get(); } |
+ int getIndex() const { return fIndex; } |
+ int getAxisCount() const { return fAxisCount; } |
+ const SkFixed* getAxis() const { return fAxis.get(); } |
+ |
+private: |
+ SkAutoTDelete<SkStreamAsset> fStream; |
+ int fIndex; |
+ int fAxisCount; |
+ SkAutoSTMalloc<4, SkFixed> fAxis; |
+}; |
+ |
+class SkFontDescriptor : SkNoncopyable { |
public: |
SkFontDescriptor(SkTypeface::Style = SkTypeface::kNormal); |
// Does not affect ownership of SkStream. |
@@ -27,25 +62,20 @@ public: |
const char* getFullName() const { return fFullName.c_str(); } |
const char* getPostscriptName() const { return fPostscriptName.c_str(); } |
bool hasFontData() const { return fFontData.get() != NULL; } |
- // Transfers ownership to the caller. |
- SkStreamAsset* transferFontData() { return fFontData.detach(); } |
- int getFontIndex() const { return fFontIndex; } |
+ SkFontData* detachFontData() { return fFontData.detach(); } |
void setFamilyName(const char* name) { fFamilyName.set(name); } |
void setFullName(const char* name) { fFullName.set(name); } |
void setPostscriptName(const char* name) { fPostscriptName.set(name); } |
/** Set the font data only if it is necessary for serialization. |
- * This method takes ownership of the stream (both reference and cursor). |
- */ |
- void setFontData(SkStreamAsset* stream) { fFontData.reset(stream); } |
- void setFontIndex(int index) { fFontIndex = index; } |
+ * This method takes ownership of the font data. */ |
+ void setFontData(SkFontData* data) { fFontData.reset(data); } |
private: |
SkString fFamilyName; |
SkString fFullName; |
SkString fPostscriptName; |
- SkAutoTDelete<SkStreamAsset> fFontData; |
- int fFontIndex; |
+ SkAutoTDelete<SkFontData> fFontData; |
SkTypeface::Style fStyle; |
}; |