aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkFontDescriptor.h
diff options
context:
space:
mode:
authorGravatar bungeman <bungeman@google.com>2015-05-14 14:18:02 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2015-05-14 14:18:03 -0700
commit3489ee0f4fa34f124f9de090d12bdc2107d52aa9 (patch)
treed9fc4a423ae383b4aece6459d10b4f4134223692 /src/core/SkFontDescriptor.h
parent86a17e7716c8db858e219a46b9db3817bb770bee (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.h50
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;
};