Index: src/ports/SkFontMgr_android.cpp |
diff --git a/src/ports/SkFontMgr_android.cpp b/src/ports/SkFontMgr_android.cpp |
index 49ca08194be77cb7044779abce2b07b0d87cdeb7..9bb7cb0d689e217a0e2dd46e6fed11f628d8cc34 100644 |
--- a/src/ports/SkFontMgr_android.cpp |
+++ b/src/ports/SkFontMgr_android.cpp |
@@ -28,6 +28,7 @@ static const char* gTestBasePath = NULL; |
class SkTypeface_Android : public SkTypeface_FreeType { |
public: |
SkTypeface_Android(int index, |
+ const SkTArray<SkFixed, true>& axes, |
const SkFontStyle& style, |
bool isFixedPitch, |
const SkString& familyName) |
@@ -42,6 +43,7 @@ protected: |
int fIndex; |
SkString fFamilyName; |
+ const SkTArray<SkFixed, true> fAxes; |
private: |
typedef SkTypeface_FreeType INHERITED; |
@@ -51,12 +53,13 @@ class SkTypeface_AndroidSystem : public SkTypeface_Android { |
public: |
SkTypeface_AndroidSystem(const SkString& pathName, |
int index, |
+ const SkTArray<SkFixed, true>& axes, |
const SkFontStyle& style, |
bool isFixedPitch, |
const SkString& familyName, |
const SkLanguage& lang, |
FontVariant variantStyle) |
- : INHERITED(index, style, isFixedPitch, familyName) |
+ : INHERITED(index, axes, style, isFixedPitch, familyName) |
, fPathName(pathName) |
, fLang(lang) |
, fVariantStyle(variantStyle) { } |
@@ -66,14 +69,16 @@ public: |
SkASSERT(desc); |
SkASSERT(serialize); |
desc->setFamilyName(fFamilyName.c_str()); |
- desc->setFontFileName(fPathName.c_str()); |
- desc->setFontIndex(fIndex); |
*serialize = false; |
} |
SkStreamAsset* onOpenStream(int* ttcIndex) const override { |
*ttcIndex = fIndex; |
return SkStream::NewFromFile(fPathName.c_str()); |
} |
+ SkFontData* onCreateFontData() const SK_OVERRIDE { |
+ return new SkFontData(SkStream::NewFromFile(fPathName.c_str()), fIndex, |
+ fAxes.count(), fAxes.begin()); |
+ } |
const SkString fPathName; |
const SkLanguage fLang; |
@@ -86,10 +91,11 @@ class SkTypeface_AndroidStream : public SkTypeface_Android { |
public: |
SkTypeface_AndroidStream(SkStreamAsset* stream, |
int index, |
+ const SkTArray<SkFixed, true>& axes, |
const SkFontStyle& style, |
bool isFixedPitch, |
const SkString& familyName) |
- : INHERITED(index, style, isFixedPitch, familyName) |
+ : INHERITED(index, axes, style, isFixedPitch, familyName) |
, fStream(stream) { } |
virtual void onGetFontDescriptor(SkFontDescriptor* desc, |
@@ -97,7 +103,6 @@ public: |
SkASSERT(desc); |
SkASSERT(serialize); |
desc->setFamilyName(fFamilyName.c_str()); |
- desc->setFontFileName(NULL); |
*serialize = true; |
} |
@@ -106,6 +111,10 @@ public: |
return fStream->duplicate(); |
} |
+ SkFontData* onCreateFontData() const SK_OVERRIDE { |
+ return new SkFontData(fStream->duplicate(), fIndex, fAxes.count(), fAxes.begin()); |
+ } |
+ |
private: |
SkAutoTDelete<SkStreamAsset> fStream; |
@@ -163,7 +172,7 @@ public: |
} |
fStyles.push_back().reset(SkNEW_ARGS(SkTypeface_AndroidSystem, |
- (pathName, ttcIndex, |
+ (pathName, ttcIndex, fontFile.fAxes, |
style, isFixedWidth, familyName, |
lang, variant))); |
} |
@@ -410,7 +419,20 @@ protected: |
if (!fScanner.scanFont(stream, ttcIndex, &name, &style, &isFixedPitch)) { |
return NULL; |
} |
- return SkNEW_ARGS(SkTypeface_AndroidStream, (stream.detach(), ttcIndex, |
+ return SkNEW_ARGS(SkTypeface_AndroidStream, (stream.detach(), ttcIndex, SkTArray<SkFixed, true>(), |
+ style, isFixedPitch, name)); |
+ } |
+ |
+ SkTypeface* onCreateFromFontData(SkFontData* data) const SK_OVERRIDE { |
+ SkAutoTDelete<SkStreamAsset> stream(data->transferStream()); |
+ bool isFixedPitch; |
+ SkFontStyle style; |
+ SkString name; |
+ if (!fScanner.scanFont(stream, data->getIndex(), &name, &style, &isFixedPitch)) { |
+ return NULL; |
+ } |
+ return SkNEW_ARGS(SkTypeface_AndroidStream, (stream.detach(), data->getIndex(), |
+ SkTArray<SkFixed, true>(data->getAxis(), data->getAxisCount()), |
style, isFixedPitch, name)); |
} |