aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkTypeface.cpp
diff options
context:
space:
mode:
authorGravatar bungeman <bungeman@google.com>2015-05-13 10:57:09 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2015-05-13 10:57:10 -0700
commit05773ed30920c0214d1433c07cf6360a05476c97 (patch)
tree5da7ade81a22ca07b2018f42b111bc861bf1edcd /src/core/SkTypeface.cpp
parentc5f1c5414fc8f73cbefadcc1b24ec794056fa203 (diff)
Font variations.
Multiple Master and TrueType fonts support variation axes. This implements back-end support for axes on platforms which support it. Review URL: https://codereview.chromium.org/1027373002
Diffstat (limited to 'src/core/SkTypeface.cpp')
-rw-r--r--src/core/SkTypeface.cpp30
1 files changed, 21 insertions, 9 deletions
diff --git a/src/core/SkTypeface.cpp b/src/core/SkTypeface.cpp
index 0f5d70b1a8..6d9759f42c 100644
--- a/src/core/SkTypeface.cpp
+++ b/src/core/SkTypeface.cpp
@@ -143,6 +143,11 @@ SkTypeface* SkTypeface::CreateFromStream(SkStreamAsset* stream, int index) {
return fm->createFromStream(stream, index);
}
+SkTypeface* SkTypeface::CreateFromFontData(SkFontData* data) {
+ SkAutoTUnref<SkFontMgr> fm(SkFontMgr::RefDefault());
+ return fm->createFromFontData(data);
+}
+
SkTypeface* SkTypeface::CreateFromFile(const char path[], int index) {
SkAutoTUnref<SkFontMgr> fm(SkFontMgr::RefDefault());
return fm->createFromFile(path, index);
@@ -156,10 +161,8 @@ void SkTypeface::serialize(SkWStream* wstream) const {
this->onGetFontDescriptor(&desc, &isLocal);
// Embed font data if it's a local font.
- if (isLocal && !desc.hasFontData()) {
- int ttcIndex;
- desc.setFontData(this->onOpenStream(&ttcIndex));
- desc.setFontIndex(ttcIndex);
+ if (!desc.hasFontData()) {
+ desc.setFontData(this->onCreateFontData());
}
desc.serialize(wstream);
}
@@ -171,18 +174,16 @@ void SkTypeface::serializeForcingEmbedding(SkWStream* wstream) const {
// Always embed font data.
if (!desc.hasFontData()) {
- int ttcIndex;
- desc.setFontData(this->onOpenStream(&ttcIndex));
- desc.setFontIndex(ttcIndex);
+ desc.setFontData(this->onCreateFontData());
}
desc.serialize(wstream);
}
SkTypeface* SkTypeface::Deserialize(SkStream* stream) {
SkFontDescriptor desc(stream);
- SkStreamAsset* data = desc.transferFontData();
+ SkFontData* data = desc.detachFontData();
if (data) {
- SkTypeface* typeface = SkTypeface::CreateFromStream(data, desc.getFontIndex());
+ SkTypeface* typeface = SkTypeface::CreateFromFontData(data);
if (typeface) {
return typeface;
}
@@ -218,6 +219,17 @@ SkStreamAsset* SkTypeface::openStream(int* ttcIndex) const {
return this->onOpenStream(ttcIndex);
}
+SkFontData* SkTypeface::createFontData() const {
+ return this->onCreateFontData();
+}
+
+// This implementation is temporary until this method can be made pure virtual.
+SkFontData* SkTypeface::onCreateFontData() const {
+ int index;
+ SkAutoTDelete<SkStreamAsset> stream(this->onOpenStream(&index));
+ return new SkFontData(stream.detach(), index, NULL, 0);
+};
+
int SkTypeface::charsToGlyphs(const void* chars, Encoding encoding,
uint16_t glyphs[], int glyphCount) const {
if (glyphCount <= 0) {