diff options
author | bungeman <bungeman@google.com> | 2015-05-14 14:18:02 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-05-14 14:18:03 -0700 |
commit | 3489ee0f4fa34f124f9de090d12bdc2107d52aa9 (patch) | |
tree | d9fc4a423ae383b4aece6459d10b4f4134223692 /src/core/SkFontDescriptor.h | |
parent | 86a17e7716c8db858e219a46b9db3817bb770bee (diff) |
Font variations.
Multiple Master and TrueType fonts support variation axes.
This implements back-end support for axes on platforms which
support it.
Committed: https://skia.googlesource.com/skia/+/05773ed30920c0214d1433c07cf6360a05476c97
Review URL: https://codereview.chromium.org/1027373002
Diffstat (limited to 'src/core/SkFontDescriptor.h')
-rw-r--r-- | src/core/SkFontDescriptor.h | 50 |
1 files changed, 40 insertions, 10 deletions
diff --git a/src/core/SkFontDescriptor.h b/src/core/SkFontDescriptor.h index 66707ddd3c..933a36a095 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; }; |