Make SkFontMgr interface const.

COLLABORATOR=mtklein@chromium.org
BUG=skia:
R=reed@google.com, bungeman@google.com, mtklein@chromium.org

Author: mtklein@google.com

Review URL: https://codereview.chromium.org/134643028

git-svn-id: http://skia.googlecode.com/svn/trunk@13314 2bbb7eff-a529-9590-31e7-b0007b416f81
This commit is contained in:
commit-bot@chromium.org 2014-02-04 22:35:01 +00:00
parent 0807ede86d
commit 967dee32ef
7 changed files with 124 additions and 142 deletions

View File

@ -37,15 +37,15 @@ class SK_API SkFontMgr : public SkRefCnt {
public:
SK_DECLARE_INST_COUNT(SkFontMgr)
int countFamilies();
void getFamilyName(int index, SkString* familyName);
SkFontStyleSet* createStyleSet(int index);
int countFamilies() const;
void getFamilyName(int index, SkString* familyName) const;
SkFontStyleSet* createStyleSet(int index) const;
/**
* The caller must call unref() on the returned object.
* Never returns NULL; will return an empty set if the name is not found.
*/
SkFontStyleSet* matchFamily(const char familyName[]);
SkFontStyleSet* matchFamily(const char familyName[]) const;
/**
* Find the closest matching typeface to the specified familyName and style
@ -53,23 +53,23 @@ public:
* object. Will never return NULL, as it will return the default font if
* no matching font is found.
*/
SkTypeface* matchFamilyStyle(const char familyName[], const SkFontStyle&);
SkTypeface* matchFamilyStyle(const char familyName[], const SkFontStyle&) const;
SkTypeface* matchFaceStyle(const SkTypeface*, const SkFontStyle&);
SkTypeface* matchFaceStyle(const SkTypeface*, const SkFontStyle&) const;
/**
* Create a typeface for the specified data and TTC index (pass 0 for none)
* or NULL if the data is not recognized. The caller must call unref() on
* the returned object if it is not null.
*/
SkTypeface* createFromData(SkData*, int ttcIndex = 0);
SkTypeface* createFromData(SkData*, int ttcIndex = 0) const;
/**
* Create a typeface for the specified stream and TTC index
* (pass 0 for none) or NULL if the stream is not recognized. The caller
* must call unref() on the returned object if it is not null.
*/
SkTypeface* createFromStream(SkStream*, int ttcIndex = 0);
SkTypeface* createFromStream(SkStream*, int ttcIndex = 0) const;
/**
* Create a typeface for the specified fileName and TTC index
@ -77,10 +77,10 @@ public:
* not recognized. The caller must call unref() on the returned object
* if it is not null.
*/
SkTypeface* createFromFile(const char path[], int ttcIndex = 0);
SkTypeface* createFromFile(const char path[], int ttcIndex = 0) const;
SkTypeface* legacyCreateTypeface(const char familyName[],
unsigned typefaceStyleBits);
unsigned typefaceStyleBits) const;
/**
* Return a ref to the default fontmgr. The caller must call unref() on
@ -89,24 +89,24 @@ public:
static SkFontMgr* RefDefault();
protected:
virtual int onCountFamilies() = 0;
virtual void onGetFamilyName(int index, SkString* familyName) = 0;
virtual SkFontStyleSet* onCreateStyleSet(int index) = 0;
virtual int onCountFamilies() const = 0;
virtual void onGetFamilyName(int index, SkString* familyName) const = 0;
virtual SkFontStyleSet* onCreateStyleSet(int index)const = 0;
/** May return NULL if the name is not found. */
virtual SkFontStyleSet* onMatchFamily(const char familyName[]) = 0;
virtual SkFontStyleSet* onMatchFamily(const char familyName[]) const = 0;
virtual SkTypeface* onMatchFamilyStyle(const char familyName[],
const SkFontStyle&) = 0;
const SkFontStyle&) const = 0;
virtual SkTypeface* onMatchFaceStyle(const SkTypeface*,
const SkFontStyle&) = 0;
const SkFontStyle&) const = 0;
virtual SkTypeface* onCreateFromData(SkData*, int ttcIndex) = 0;
virtual SkTypeface* onCreateFromStream(SkStream*, int ttcIndex) = 0;
virtual SkTypeface* onCreateFromFile(const char path[], int ttcIndex) = 0;
virtual SkTypeface* onCreateFromData(SkData*, int ttcIndex) const = 0;
virtual SkTypeface* onCreateFromStream(SkStream*, int ttcIndex) const = 0;
virtual SkTypeface* onCreateFromFile(const char path[], int ttcIndex) const = 0;
virtual SkTypeface* onLegacyCreateTypeface(const char familyName[],
unsigned styleBits) = 0;
unsigned styleBits) const = 0;
private:
static SkFontMgr* Factory(); // implemented by porting layer
friend void set_up_default(SkFontMgr** singleton);

View File

@ -92,38 +92,38 @@ SkFontStyleSet* SkFontStyleSet::CreateEmpty() {
class SkEmptyFontMgr : public SkFontMgr {
protected:
virtual int onCountFamilies() SK_OVERRIDE {
virtual int onCountFamilies() const SK_OVERRIDE {
return 0;
}
virtual void onGetFamilyName(int index, SkString* familyName) SK_OVERRIDE {
virtual void onGetFamilyName(int index, SkString* familyName) const SK_OVERRIDE {
SkDEBUGFAIL("onGetFamilyName called with bad index");
}
virtual SkFontStyleSet* onCreateStyleSet(int index) SK_OVERRIDE {
virtual SkFontStyleSet* onCreateStyleSet(int index) const SK_OVERRIDE {
SkDEBUGFAIL("onCreateStyleSet called with bad index");
return NULL;
}
virtual SkFontStyleSet* onMatchFamily(const char[]) SK_OVERRIDE {
virtual SkFontStyleSet* onMatchFamily(const char[]) const SK_OVERRIDE {
return SkFontStyleSet::CreateEmpty();
}
virtual SkTypeface* onMatchFamilyStyle(const char[],
const SkFontStyle&) SK_OVERRIDE {
const SkFontStyle&) const SK_OVERRIDE {
return NULL;
}
virtual SkTypeface* onMatchFaceStyle(const SkTypeface*,
const SkFontStyle&) SK_OVERRIDE {
const SkFontStyle&) const SK_OVERRIDE {
return NULL;
}
virtual SkTypeface* onCreateFromData(SkData*, int) SK_OVERRIDE {
virtual SkTypeface* onCreateFromData(SkData*, int) const SK_OVERRIDE {
return NULL;
}
virtual SkTypeface* onCreateFromStream(SkStream*, int) SK_OVERRIDE {
virtual SkTypeface* onCreateFromStream(SkStream*, int) const SK_OVERRIDE {
return NULL;
}
virtual SkTypeface* onCreateFromFile(const char[], int) SK_OVERRIDE {
virtual SkTypeface* onCreateFromFile(const char[], int) const SK_OVERRIDE {
return NULL;
}
virtual SkTypeface* onLegacyCreateTypeface(const char [], unsigned) SK_OVERRIDE {
virtual SkTypeface* onLegacyCreateTypeface(const char [], unsigned) const SK_OVERRIDE {
return NULL;
}
};
@ -135,47 +135,47 @@ static SkFontStyleSet* emptyOnNull(SkFontStyleSet* fsset) {
return fsset;
}
int SkFontMgr::countFamilies() {
int SkFontMgr::countFamilies() const {
return this->onCountFamilies();
}
void SkFontMgr::getFamilyName(int index, SkString* familyName) {
void SkFontMgr::getFamilyName(int index, SkString* familyName) const {
this->onGetFamilyName(index, familyName);
}
SkFontStyleSet* SkFontMgr::createStyleSet(int index) {
SkFontStyleSet* SkFontMgr::createStyleSet(int index) const {
return emptyOnNull(this->onCreateStyleSet(index));
}
SkFontStyleSet* SkFontMgr::matchFamily(const char familyName[]) {
SkFontStyleSet* SkFontMgr::matchFamily(const char familyName[]) const {
return emptyOnNull(this->onMatchFamily(familyName));
}
SkTypeface* SkFontMgr::matchFamilyStyle(const char familyName[],
const SkFontStyle& fs) {
const SkFontStyle& fs) const {
return this->onMatchFamilyStyle(familyName, fs);
}
SkTypeface* SkFontMgr::matchFaceStyle(const SkTypeface* face,
const SkFontStyle& fs) {
const SkFontStyle& fs) const {
return this->onMatchFaceStyle(face, fs);
}
SkTypeface* SkFontMgr::createFromData(SkData* data, int ttcIndex) {
SkTypeface* SkFontMgr::createFromData(SkData* data, int ttcIndex) const {
if (NULL == data) {
return NULL;
}
return this->onCreateFromData(data, ttcIndex);
}
SkTypeface* SkFontMgr::createFromStream(SkStream* stream, int ttcIndex) {
SkTypeface* SkFontMgr::createFromStream(SkStream* stream, int ttcIndex) const {
if (NULL == stream) {
return NULL;
}
return this->onCreateFromStream(stream, ttcIndex);
}
SkTypeface* SkFontMgr::createFromFile(const char path[], int ttcIndex) {
SkTypeface* SkFontMgr::createFromFile(const char path[], int ttcIndex) const {
if (NULL == path) {
return NULL;
}
@ -183,7 +183,7 @@ SkTypeface* SkFontMgr::createFromFile(const char path[], int ttcIndex) {
}
SkTypeface* SkFontMgr::legacyCreateTypeface(const char familyName[],
unsigned styleBits) {
unsigned styleBits) const {
return this->onLegacyCreateTypeface(familyName, styleBits);
}

View File

@ -184,40 +184,30 @@ class SkFontMgr_fontconfig : public SkFontMgr {
SkAutoTUnref<SkFontConfigInterface> fFCI;
SkDataTable* fFamilyNames;
void init() {
if (!fFamilyNames) {
fFamilyNames = fFCI->getFamilyNames();
}
}
public:
SkFontMgr_fontconfig(SkFontConfigInterface* fci)
: fFCI(fci)
, fFamilyNames(NULL) {}
, fFamilyNames(fFCI->getFamilyNames()) {}
virtual ~SkFontMgr_fontconfig() {
SkSafeUnref(fFamilyNames);
}
protected:
virtual int onCountFamilies() {
this->init();
virtual int onCountFamilies() const SK_OVERRIDE {
return fFamilyNames->count();
}
virtual void onGetFamilyName(int index, SkString* familyName) {
this->init();
virtual void onGetFamilyName(int index, SkString* familyName) const SK_OVERRIDE {
familyName->set(fFamilyNames->atStr(index));
}
virtual SkFontStyleSet* onCreateStyleSet(int index) {
this->init();
virtual SkFontStyleSet* onCreateStyleSet(int index) const SK_OVERRIDE {
return this->onMatchFamily(fFamilyNames->atStr(index));
}
virtual SkFontStyleSet* onMatchFamily(const char familyName[]) {
this->init();
virtual SkFontStyleSet* onMatchFamily(const char familyName[]) const SK_OVERRIDE {
FcPattern* pattern = FcPatternCreate();
FcPatternAddString(pattern, FC_FAMILY, (FcChar8*)familyName);
@ -261,13 +251,13 @@ protected:
}
virtual SkTypeface* onMatchFamilyStyle(const char familyName[],
const SkFontStyle&) { return NULL; }
const SkFontStyle&) const SK_OVERRIDE { return NULL; }
virtual SkTypeface* onMatchFaceStyle(const SkTypeface*,
const SkFontStyle&) { return NULL; }
const SkFontStyle&) const SK_OVERRIDE { return NULL; }
virtual SkTypeface* onCreateFromData(SkData*, int ttcIndex) { return NULL; }
virtual SkTypeface* onCreateFromData(SkData*, int ttcIndex) const SK_OVERRIDE { return NULL; }
virtual SkTypeface* onCreateFromStream(SkStream* stream, int ttcIndex) {
virtual SkTypeface* onCreateFromStream(SkStream* stream, int ttcIndex) const SK_OVERRIDE {
const size_t length = stream->getLength();
if (!length) {
return NULL;
@ -287,13 +277,13 @@ protected:
return face;
}
virtual SkTypeface* onCreateFromFile(const char path[], int ttcIndex) {
virtual SkTypeface* onCreateFromFile(const char path[], int ttcIndex) const SK_OVERRIDE {
SkAutoTUnref<SkStream> stream(SkStream::NewFromFile(path));
return stream.get() ? this->createFromStream(stream, ttcIndex) : NULL;
}
virtual SkTypeface* onLegacyCreateTypeface(const char familyName[],
unsigned styleBits) SK_OVERRIDE {
unsigned styleBits) const SK_OVERRIDE {
return FontConfigTypeface::LegacyCreateTypeface(NULL, familyName,
(SkTypeface::Style)styleBits);
}

View File

@ -215,21 +215,21 @@ public:
}
protected:
virtual int onCountFamilies() SK_OVERRIDE {
virtual int onCountFamilies() const SK_OVERRIDE {
return fFamilies.count();
}
virtual void onGetFamilyName(int index, SkString* familyName) SK_OVERRIDE {
virtual void onGetFamilyName(int index, SkString* familyName) const SK_OVERRIDE {
SkASSERT(index < fFamilies.count());
familyName->set(fFamilies[index]->fFamilyName);
}
virtual SkFontStyleSet_Custom* onCreateStyleSet(int index) SK_OVERRIDE {
virtual SkFontStyleSet_Custom* onCreateStyleSet(int index) const SK_OVERRIDE {
SkASSERT(index < fFamilies.count());
return SkRef(fFamilies[index].get());
}
virtual SkFontStyleSet_Custom* onMatchFamily(const char familyName[]) SK_OVERRIDE {
virtual SkFontStyleSet_Custom* onMatchFamily(const char familyName[]) const SK_OVERRIDE {
for (int i = 0; i < fFamilies.count(); ++i) {
if (fFamilies[i]->fFamilyName.equals(familyName)) {
return SkRef(fFamilies[i].get());
@ -239,14 +239,14 @@ protected:
}
virtual SkTypeface* onMatchFamilyStyle(const char familyName[],
const SkFontStyle& fontStyle) SK_OVERRIDE
const SkFontStyle& fontStyle) const SK_OVERRIDE
{
SkAutoTUnref<SkFontStyleSet> sset(this->matchFamily(familyName));
return sset->matchStyle(fontStyle);
}
virtual SkTypeface* onMatchFaceStyle(const SkTypeface* familyMember,
const SkFontStyle& fontStyle) SK_OVERRIDE
const SkFontStyle& fontStyle) const SK_OVERRIDE
{
for (int i = 0; i < fFamilies.count(); ++i) {
for (int j = 0; j < fFamilies[i]->fStyles.count(); ++j) {
@ -258,12 +258,12 @@ protected:
return NULL;
}
virtual SkTypeface* onCreateFromData(SkData* data, int ttcIndex) SK_OVERRIDE {
virtual SkTypeface* onCreateFromData(SkData* data, int ttcIndex) const SK_OVERRIDE {
SkAutoTUnref<SkStream> stream(new SkMemoryStream(data));
return this->createFromStream(stream, ttcIndex);
}
virtual SkTypeface* onCreateFromStream(SkStream* stream, int ttcIndex) SK_OVERRIDE {
virtual SkTypeface* onCreateFromStream(SkStream* stream, int ttcIndex) const SK_OVERRIDE {
if (NULL == stream || stream->getLength() <= 0) {
SkDELETE(stream);
return NULL;
@ -279,13 +279,13 @@ protected:
}
}
virtual SkTypeface* onCreateFromFile(const char path[], int ttcIndex) SK_OVERRIDE {
virtual SkTypeface* onCreateFromFile(const char path[], int ttcIndex) const SK_OVERRIDE {
SkAutoTUnref<SkStream> stream(SkStream::NewFromFile(path));
return stream.get() ? this->createFromStream(stream, ttcIndex) : NULL;
}
virtual SkTypeface* onLegacyCreateTypeface(const char familyName[],
unsigned styleBits) SK_OVERRIDE
unsigned styleBits) const SK_OVERRIDE
{
SkTypeface::Style oldStyle = (SkTypeface::Style)styleBits;
SkFontStyle style = SkFontStyle(oldStyle & SkTypeface::kBold

View File

@ -2208,21 +2208,14 @@ private:
};
class SkFontMgr_Mac : public SkFontMgr {
int fCount;
CFArrayRef fNames;
int fCount;
CFStringRef stringAt(int index) const {
SkASSERT((unsigned)index < (unsigned)fCount);
return (CFStringRef)CFArrayGetValueAtIndex(fNames, index);
}
void lazyInit() {
if (NULL == fNames) {
fNames = SkCTFontManagerCopyAvailableFontFamilyNames();
fCount = fNames ? SkToInt(CFArrayGetCount(fNames)) : 0;
}
}
static SkFontStyleSet* CreateSet(CFStringRef cfFamilyName) {
AutoCFRelease<CFMutableDictionaryRef> cfAttr(
CFDictionaryCreateMutable(kCFAllocatorDefault, 0,
@ -2237,20 +2230,20 @@ class SkFontMgr_Mac : public SkFontMgr {
}
public:
SkFontMgr_Mac() : fCount(0), fNames(NULL) {}
SkFontMgr_Mac()
: fNames(SkCTFontManagerCopyAvailableFontFamilyNames())
, fCount(fNames ? SkToInt(CFArrayGetCount(fNames)) : 0) {}
virtual ~SkFontMgr_Mac() {
CFSafeRelease(fNames);
}
protected:
virtual int onCountFamilies() SK_OVERRIDE {
this->lazyInit();
virtual int onCountFamilies() const SK_OVERRIDE {
return fCount;
}
virtual void onGetFamilyName(int index, SkString* familyName) SK_OVERRIDE {
this->lazyInit();
virtual void onGetFamilyName(int index, SkString* familyName) const SK_OVERRIDE {
if ((unsigned)index < (unsigned)fCount) {
CFStringToSkString(this->stringAt(index), familyName);
} else {
@ -2258,31 +2251,30 @@ protected:
}
}
virtual SkFontStyleSet* onCreateStyleSet(int index) SK_OVERRIDE {
this->lazyInit();
virtual SkFontStyleSet* onCreateStyleSet(int index) const SK_OVERRIDE {
if ((unsigned)index >= (unsigned)fCount) {
return NULL;
}
return CreateSet(this->stringAt(index));
}
virtual SkFontStyleSet* onMatchFamily(const char familyName[]) SK_OVERRIDE {
virtual SkFontStyleSet* onMatchFamily(const char familyName[]) const SK_OVERRIDE {
AutoCFRelease<CFStringRef> cfName(make_CFString(familyName));
return CreateSet(cfName);
}
virtual SkTypeface* onMatchFamilyStyle(const char familyName[],
const SkFontStyle&) SK_OVERRIDE {
const SkFontStyle&) const SK_OVERRIDE {
return NULL;
}
virtual SkTypeface* onMatchFaceStyle(const SkTypeface* familyMember,
const SkFontStyle&) SK_OVERRIDE {
const SkFontStyle&) const SK_OVERRIDE {
return NULL;
}
virtual SkTypeface* onCreateFromData(SkData* data,
int ttcIndex) SK_OVERRIDE {
int ttcIndex) const SK_OVERRIDE {
AutoCFRelease<CGDataProviderRef> pr(SkCreateDataProviderFromData(data));
if (NULL == pr) {
return NULL;
@ -2291,7 +2283,7 @@ protected:
}
virtual SkTypeface* onCreateFromStream(SkStream* stream,
int ttcIndex) SK_OVERRIDE {
int ttcIndex) const SK_OVERRIDE {
AutoCFRelease<CGDataProviderRef> pr(SkCreateDataProviderFromStream(stream));
if (NULL == pr) {
return NULL;
@ -2300,7 +2292,7 @@ protected:
}
virtual SkTypeface* onCreateFromFile(const char path[],
int ttcIndex) SK_OVERRIDE {
int ttcIndex) const SK_OVERRIDE {
AutoCFRelease<CGDataProviderRef> pr(CGDataProviderCreateWithFilename(path));
if (NULL == pr) {
return NULL;
@ -2309,7 +2301,7 @@ protected:
}
virtual SkTypeface* onLegacyCreateTypeface(const char familyName[],
unsigned styleBits) SK_OVERRIDE {
unsigned styleBits) const SK_OVERRIDE {
return create_typeface(NULL, familyName, (SkTypeface::Style)styleBits);
}
};

View File

@ -2561,21 +2561,21 @@ public:
}
protected:
virtual int onCountFamilies() SK_OVERRIDE {
virtual int onCountFamilies() const SK_OVERRIDE {
return fLogFontArray.count();
}
virtual void onGetFamilyName(int index, SkString* familyName) SK_OVERRIDE {
virtual void onGetFamilyName(int index, SkString* familyName) const SK_OVERRIDE {
SkASSERT((unsigned)index < (unsigned)fLogFontArray.count());
tchar_to_skstring(fLogFontArray[index].elfLogFont.lfFaceName, familyName);
}
virtual SkFontStyleSet* onCreateStyleSet(int index) SK_OVERRIDE {
virtual SkFontStyleSet* onCreateStyleSet(int index) const SK_OVERRIDE {
SkASSERT((unsigned)index < (unsigned)fLogFontArray.count());
return SkNEW_ARGS(SkFontStyleSetGDI, (fLogFontArray[index].elfLogFont.lfFaceName));
}
virtual SkFontStyleSet* onMatchFamily(const char familyName[]) SK_OVERRIDE {
virtual SkFontStyleSet* onMatchFamily(const char familyName[]) const SK_OVERRIDE {
if (NULL == familyName) {
familyName = ""; // do we need this check???
}
@ -2585,38 +2585,38 @@ protected:
}
virtual SkTypeface* onMatchFamilyStyle(const char familyName[],
const SkFontStyle& fontstyle) SK_OVERRIDE {
const SkFontStyle& fontstyle) const SK_OVERRIDE {
// could be in base impl
SkAutoTUnref<SkFontStyleSet> sset(this->matchFamily(familyName));
return sset->matchStyle(fontstyle);
}
virtual SkTypeface* onMatchFaceStyle(const SkTypeface* familyMember,
const SkFontStyle& fontstyle) SK_OVERRIDE {
const SkFontStyle& fontstyle) const SK_OVERRIDE {
// could be in base impl
SkString familyName;
((LogFontTypeface*)familyMember)->getFamilyName(&familyName);
return this->matchFamilyStyle(familyName.c_str(), fontstyle);
}
virtual SkTypeface* onCreateFromStream(SkStream* stream, int ttcIndex) SK_OVERRIDE {
virtual SkTypeface* onCreateFromStream(SkStream* stream, int ttcIndex) const SK_OVERRIDE {
return create_from_stream(stream);
}
virtual SkTypeface* onCreateFromData(SkData* data, int ttcIndex) SK_OVERRIDE {
virtual SkTypeface* onCreateFromData(SkData* data, int ttcIndex) const SK_OVERRIDE {
// could be in base impl
SkAutoTUnref<SkStream> stream(SkNEW_ARGS(SkMemoryStream, (data)));
return this->createFromStream(stream);
}
virtual SkTypeface* onCreateFromFile(const char path[], int ttcIndex) SK_OVERRIDE {
virtual SkTypeface* onCreateFromFile(const char path[], int ttcIndex) const SK_OVERRIDE {
// could be in base impl
SkAutoTUnref<SkStream> stream(SkStream::NewFromFile(path));
return this->createFromStream(stream);
}
virtual SkTypeface* onLegacyCreateTypeface(const char familyName[],
unsigned styleBits) SK_OVERRIDE {
unsigned styleBits) const SK_OVERRIDE {
LOGFONT lf;
if (NULL == familyName) {
lf = get_default_font();

View File

@ -128,54 +128,54 @@ public:
memcpy(fLocaleName.get(), localeName, localeNameLength * sizeof(WCHAR));
}
SkTypefaceCache* getTypefaceCache() { return &fTFCache; }
SkTypeface* createTypefaceFromDWriteFont(IDWriteFontFace* fontFace,
IDWriteFont* font,
IDWriteFontFamily* fontFamily,
StreamFontFileLoader* = NULL,
IDWriteFontCollectionLoader* = NULL);
IDWriteFontCollectionLoader* = NULL) const;
protected:
virtual int onCountFamilies() SK_OVERRIDE;
virtual void onGetFamilyName(int index, SkString* familyName) SK_OVERRIDE;
virtual SkFontStyleSet* onCreateStyleSet(int index) SK_OVERRIDE;
virtual SkFontStyleSet* onMatchFamily(const char familyName[]) SK_OVERRIDE;
virtual int onCountFamilies() const SK_OVERRIDE;
virtual void onGetFamilyName(int index, SkString* familyName) const SK_OVERRIDE;
virtual SkFontStyleSet* onCreateStyleSet(int index) const SK_OVERRIDE;
virtual SkFontStyleSet* onMatchFamily(const char familyName[]) const SK_OVERRIDE;
virtual SkTypeface* onMatchFamilyStyle(const char familyName[],
const SkFontStyle& fontstyle) SK_OVERRIDE;
const SkFontStyle& fontstyle) const SK_OVERRIDE;
virtual SkTypeface* onMatchFaceStyle(const SkTypeface* familyMember,
const SkFontStyle& fontstyle) SK_OVERRIDE;
virtual SkTypeface* onCreateFromStream(SkStream* stream, int ttcIndex) SK_OVERRIDE;
virtual SkTypeface* onCreateFromData(SkData* data, int ttcIndex) SK_OVERRIDE;
virtual SkTypeface* onCreateFromFile(const char path[], int ttcIndex) SK_OVERRIDE;
const SkFontStyle& fontstyle) const SK_OVERRIDE;
virtual SkTypeface* onCreateFromStream(SkStream* stream, int ttcIndex) const SK_OVERRIDE;
virtual SkTypeface* onCreateFromData(SkData* data, int ttcIndex) const SK_OVERRIDE;
virtual SkTypeface* onCreateFromFile(const char path[], int ttcIndex) const SK_OVERRIDE;
virtual SkTypeface* onLegacyCreateTypeface(const char familyName[],
unsigned styleBits) SK_OVERRIDE;
unsigned styleBits) const SK_OVERRIDE;
private:
HRESULT getByFamilyName(const WCHAR familyName[], IDWriteFontFamily** fontFamily);
HRESULT getDefaultFontFamily(IDWriteFontFamily** fontFamily);
HRESULT getByFamilyName(const WCHAR familyName[], IDWriteFontFamily** fontFamily) const;
HRESULT getDefaultFontFamily(IDWriteFontFamily** fontFamily) const;
SkMutex fTFCacheMutex;
void Add(SkTypeface* face, SkTypeface::Style requestedStyle, bool strong) {
void Add(SkTypeface* face, SkTypeface::Style requestedStyle, bool strong) const {
SkAutoMutexAcquire ama(fTFCacheMutex);
fTFCache.add(face, requestedStyle, strong);
}
SkTypeface* FindByProcAndRef(SkTypefaceCache::FindProc proc, void* ctx) {
SkTypeface* FindByProcAndRef(SkTypefaceCache::FindProc proc, void* ctx) const {
SkAutoMutexAcquire ama(fTFCacheMutex);
SkTypeface* typeface = fTFCache.findByProcAndRef(proc, ctx);
return typeface;
}
friend class SkFontStyleSet_DirectWrite;
SkTScopedComPtr<IDWriteFontCollection> fFontCollection;
SkSMallocWCHAR fLocaleName;
SkTypefaceCache fTFCache;
mutable SkMutex fTFCacheMutex;
mutable SkTypefaceCache fTFCache;
friend class SkFontStyleSet_DirectWrite;
};
class SkFontStyleSet_DirectWrite : public SkFontStyleSet {
public:
SkFontStyleSet_DirectWrite(SkFontMgr_DirectWrite* fontMgr, IDWriteFontFamily* fontFamily)
SkFontStyleSet_DirectWrite(const SkFontMgr_DirectWrite* fontMgr,
IDWriteFontFamily* fontFamily)
: fFontMgr(SkRef(fontMgr))
, fFontFamily(SkRefComPtr(fontFamily))
{ }
@ -186,7 +186,7 @@ public:
virtual SkTypeface* matchStyle(const SkFontStyle& pattern) SK_OVERRIDE;
private:
SkAutoTUnref<SkFontMgr_DirectWrite> fFontMgr;
SkAutoTUnref<const SkFontMgr_DirectWrite> fFontMgr;
SkTScopedComPtr<IDWriteFontFamily> fFontFamily;
};
@ -1661,11 +1661,11 @@ static void get_locale_string(IDWriteLocalizedStrings* names, const WCHAR* prefe
}
SkTypeface* SkFontMgr_DirectWrite::createTypefaceFromDWriteFont(
IDWriteFontFace* fontFace,
IDWriteFont* font,
IDWriteFontFamily* fontFamily,
StreamFontFileLoader* fontFileLoader,
IDWriteFontCollectionLoader* fontCollectionLoader) {
IDWriteFontFace* fontFace,
IDWriteFont* font,
IDWriteFontFamily* fontFamily,
StreamFontFileLoader* fontFileLoader,
IDWriteFontCollectionLoader* fontCollectionLoader) const {
SkTypeface* face = FindByProcAndRef(FindByDWriteFont, font);
if (NULL == face) {
face = DWriteFontTypeface::Create(fontFace, font, fontFamily,
@ -1677,11 +1677,11 @@ SkTypeface* SkFontMgr_DirectWrite::createTypefaceFromDWriteFont(
return face;
}
int SkFontMgr_DirectWrite::onCountFamilies() {
int SkFontMgr_DirectWrite::onCountFamilies() const {
return fFontCollection->GetFontFamilyCount();
}
void SkFontMgr_DirectWrite::onGetFamilyName(int index, SkString* familyName) {
void SkFontMgr_DirectWrite::onGetFamilyName(int index, SkString* familyName) const {
SkTScopedComPtr<IDWriteFontFamily> fontFamily;
HRVM(fFontCollection->GetFontFamily(index, &fontFamily), "Could not get requested family.");
@ -1691,14 +1691,14 @@ void SkFontMgr_DirectWrite::onGetFamilyName(int index, SkString* familyName) {
get_locale_string(familyNames.get(), fLocaleName.get(), familyName);
}
SkFontStyleSet* SkFontMgr_DirectWrite::onCreateStyleSet(int index) {
SkFontStyleSet* SkFontMgr_DirectWrite::onCreateStyleSet(int index) const {
SkTScopedComPtr<IDWriteFontFamily> fontFamily;
HRNM(fFontCollection->GetFontFamily(index, &fontFamily), "Could not get requested family.");
return SkNEW_ARGS(SkFontStyleSet_DirectWrite, (this, fontFamily.get()));
}
SkFontStyleSet* SkFontMgr_DirectWrite::onMatchFamily(const char familyName[]) {
SkFontStyleSet* SkFontMgr_DirectWrite::onMatchFamily(const char familyName[]) const {
SkSMallocWCHAR dwFamilyName;
HRN(cstring_to_wchar(familyName, &dwFamilyName));
@ -1714,13 +1714,13 @@ SkFontStyleSet* SkFontMgr_DirectWrite::onMatchFamily(const char familyName[]) {
}
SkTypeface* SkFontMgr_DirectWrite::onMatchFamilyStyle(const char familyName[],
const SkFontStyle& fontstyle) {
const SkFontStyle& fontstyle) const {
SkAutoTUnref<SkFontStyleSet> sset(this->matchFamily(familyName));
return sset->matchStyle(fontstyle);
}
SkTypeface* SkFontMgr_DirectWrite::onMatchFaceStyle(const SkTypeface* familyMember,
const SkFontStyle& fontstyle) {
const SkFontStyle& fontstyle) const {
SkString familyName;
SkFontStyleSet_DirectWrite sset(
this, ((DWriteFontTypeface*)familyMember)->fDWriteFontFamily.get()
@ -1728,22 +1728,22 @@ SkTypeface* SkFontMgr_DirectWrite::onMatchFaceStyle(const SkTypeface* familyMemb
return sset.matchStyle(fontstyle);
}
SkTypeface* SkFontMgr_DirectWrite::onCreateFromStream(SkStream* stream, int ttcIndex) {
SkTypeface* SkFontMgr_DirectWrite::onCreateFromStream(SkStream* stream, int ttcIndex) const {
return create_from_stream(stream, ttcIndex);
}
SkTypeface* SkFontMgr_DirectWrite::onCreateFromData(SkData* data, int ttcIndex) {
SkTypeface* SkFontMgr_DirectWrite::onCreateFromData(SkData* data, int ttcIndex) const {
SkAutoTUnref<SkStream> stream(SkNEW_ARGS(SkMemoryStream, (data)));
return this->createFromStream(stream, ttcIndex);
}
SkTypeface* SkFontMgr_DirectWrite::onCreateFromFile(const char path[], int ttcIndex) {
SkTypeface* SkFontMgr_DirectWrite::onCreateFromFile(const char path[], int ttcIndex) const {
SkAutoTUnref<SkStream> stream(SkStream::NewFromFile(path));
return this->createFromStream(stream, ttcIndex);
}
HRESULT SkFontMgr_DirectWrite::getByFamilyName(const WCHAR wideFamilyName[],
IDWriteFontFamily** fontFamily) {
IDWriteFontFamily** fontFamily) const {
UINT32 index;
BOOL exists;
HR(fFontCollection->FindFamilyName(wideFamilyName, &index, &exists));
@ -1755,7 +1755,7 @@ HRESULT SkFontMgr_DirectWrite::getByFamilyName(const WCHAR wideFamilyName[],
return S_FALSE;
}
HRESULT SkFontMgr_DirectWrite::getDefaultFontFamily(IDWriteFontFamily** fontFamily) {
HRESULT SkFontMgr_DirectWrite::getDefaultFontFamily(IDWriteFontFamily** fontFamily) const {
NONCLIENTMETRICSW metrics;
metrics.cbSize = sizeof(metrics);
if (0 == SystemParametersInfoW(SPI_GETNONCLIENTMETRICS,
@ -1771,7 +1771,7 @@ HRESULT SkFontMgr_DirectWrite::getDefaultFontFamily(IDWriteFontFamily** fontFami
}
SkTypeface* SkFontMgr_DirectWrite::onLegacyCreateTypeface(const char familyName[],
unsigned styleBits) {
unsigned styleBits) const {
SkTScopedComPtr<IDWriteFontFamily> fontFamily;
if (familyName) {
SkSMallocWCHAR wideFamilyName;