1685cfc0ee13d7c355ae2f4f3d225ad45e945763fepoger@google.com/*
2685cfc0ee13d7c355ae2f4f3d225ad45e945763fepoger@google.com * Copyright 2009 The Android Open Source Project
3685cfc0ee13d7c355ae2f4f3d225ad45e945763fepoger@google.com *
4685cfc0ee13d7c355ae2f4f3d225ad45e945763fepoger@google.com * Use of this source code is governed by a BSD-style license that can be
5685cfc0ee13d7c355ae2f4f3d225ad45e945763fepoger@google.com * found in the LICENSE file.
6685cfc0ee13d7c355ae2f4f3d225ad45e945763fepoger@google.com */
7685cfc0ee13d7c355ae2f4f3d225ad45e945763fepoger@google.com
8b717675a4279ea5218bdee765d748c69df754ab3reed@google.com#include "SkFontLCDConfig.h"
9c775c0b52526f14d8c82896c4dc654f4e5268f42agl@chromium.org
10b717675a4279ea5218bdee765d748c69df754ab3reed@google.comstatic SkFontLCDConfig::LCDOrientation gLCDOrientation = SkFontLCDConfig::kHorizontal_LCDOrientation;
11b717675a4279ea5218bdee765d748c69df754ab3reed@google.comstatic SkFontLCDConfig::LCDOrder gLCDOrder = SkFontLCDConfig::kRGB_LCDOrder;
12c775c0b52526f14d8c82896c4dc654f4e5268f42agl@chromium.org
13b717675a4279ea5218bdee765d748c69df754ab3reed@google.comSkFontLCDConfig::LCDOrientation SkFontLCDConfig::GetSubpixelOrientation() {
14c775c0b52526f14d8c82896c4dc654f4e5268f42agl@chromium.org    return gLCDOrientation;
15c775c0b52526f14d8c82896c4dc654f4e5268f42agl@chromium.org}
16c775c0b52526f14d8c82896c4dc654f4e5268f42agl@chromium.org
17b717675a4279ea5218bdee765d748c69df754ab3reed@google.comvoid SkFontLCDConfig::SetSubpixelOrientation(LCDOrientation orientation) {
18c775c0b52526f14d8c82896c4dc654f4e5268f42agl@chromium.org    gLCDOrientation = orientation;
19c775c0b52526f14d8c82896c4dc654f4e5268f42agl@chromium.org}
20c775c0b52526f14d8c82896c4dc654f4e5268f42agl@chromium.org
21b717675a4279ea5218bdee765d748c69df754ab3reed@google.comSkFontLCDConfig::LCDOrder SkFontLCDConfig::GetSubpixelOrder() {
22c775c0b52526f14d8c82896c4dc654f4e5268f42agl@chromium.org    return gLCDOrder;
23c775c0b52526f14d8c82896c4dc654f4e5268f42agl@chromium.org}
24c775c0b52526f14d8c82896c4dc654f4e5268f42agl@chromium.org
25b717675a4279ea5218bdee765d748c69df754ab3reed@google.comvoid SkFontLCDConfig::SetSubpixelOrder(LCDOrder order) {
26c775c0b52526f14d8c82896c4dc654f4e5268f42agl@chromium.org    gLCDOrder = order;
27c775c0b52526f14d8c82896c4dc654f4e5268f42agl@chromium.org}
28b717675a4279ea5218bdee765d748c69df754ab3reed@google.com
29b717675a4279ea5218bdee765d748c69df754ab3reed@google.com///////////////////////////////////////////////////////////////////////////////
30b717675a4279ea5218bdee765d748c69df754ab3reed@google.com// Legacy wrappers : remove from SkFontHost when webkit switches to new API
31b717675a4279ea5218bdee765d748c69df754ab3reed@google.com
32b717675a4279ea5218bdee765d748c69df754ab3reed@google.com#include "SkFontHost.h"
33b717675a4279ea5218bdee765d748c69df754ab3reed@google.com
34b717675a4279ea5218bdee765d748c69df754ab3reed@google.comSkFontHost::LCDOrientation SkFontHost::GetSubpixelOrientation() {
35b717675a4279ea5218bdee765d748c69df754ab3reed@google.com    return (SkFontHost::LCDOrientation)SkFontLCDConfig::GetSubpixelOrientation();
36b717675a4279ea5218bdee765d748c69df754ab3reed@google.com}
37b717675a4279ea5218bdee765d748c69df754ab3reed@google.com
38b717675a4279ea5218bdee765d748c69df754ab3reed@google.comvoid SkFontHost::SetSubpixelOrientation(LCDOrientation orientation) {
39b717675a4279ea5218bdee765d748c69df754ab3reed@google.com    SkFontLCDConfig::SetSubpixelOrientation((SkFontLCDConfig::LCDOrientation)orientation);
40b717675a4279ea5218bdee765d748c69df754ab3reed@google.com}
41b717675a4279ea5218bdee765d748c69df754ab3reed@google.com
42b717675a4279ea5218bdee765d748c69df754ab3reed@google.comSkFontHost::LCDOrder SkFontHost::GetSubpixelOrder() {
43b717675a4279ea5218bdee765d748c69df754ab3reed@google.com    return (SkFontHost::LCDOrder)SkFontLCDConfig::GetSubpixelOrder();
44b717675a4279ea5218bdee765d748c69df754ab3reed@google.com}
45b717675a4279ea5218bdee765d748c69df754ab3reed@google.com
46b717675a4279ea5218bdee765d748c69df754ab3reed@google.comvoid SkFontHost::SetSubpixelOrder(LCDOrder order) {
47b717675a4279ea5218bdee765d748c69df754ab3reed@google.com    SkFontLCDConfig::SetSubpixelOrder((SkFontLCDConfig::LCDOrder)order);
48b717675a4279ea5218bdee765d748c69df754ab3reed@google.com}
4901ffa71f87664453998e2870808c82610584929areed@google.com
5001ffa71f87664453998e2870808c82610584929areed@google.com///////////////////////////////////////////////////////////////////////////////
5101ffa71f87664453998e2870808c82610584929areed@google.com///////////////////////////////////////////////////////////////////////////////
5201ffa71f87664453998e2870808c82610584929areed@google.com
53ab8665f8e88927b1a9b82aca38483d8a963fd2e0reed@google.com#include "SkFontStyle.h"
54ab8665f8e88927b1a9b82aca38483d8a963fd2e0reed@google.com
55ab8665f8e88927b1a9b82aca38483d8a963fd2e0reed@google.comSkFontStyle::SkFontStyle() {
56ab8665f8e88927b1a9b82aca38483d8a963fd2e0reed@google.com    fUnion.fU32 = 0;
57ab8665f8e88927b1a9b82aca38483d8a963fd2e0reed@google.com    fUnion.fR.fWeight = kNormal_Weight;
58ab8665f8e88927b1a9b82aca38483d8a963fd2e0reed@google.com    fUnion.fR.fWidth = kNormal_Width;
59ab8665f8e88927b1a9b82aca38483d8a963fd2e0reed@google.com    fUnion.fR.fSlant = kUpright_Slant;
60ab8665f8e88927b1a9b82aca38483d8a963fd2e0reed@google.com}
61ab8665f8e88927b1a9b82aca38483d8a963fd2e0reed@google.com
62ab8665f8e88927b1a9b82aca38483d8a963fd2e0reed@google.comSkFontStyle::SkFontStyle(int weight, int width, Slant slant) {
63ab8665f8e88927b1a9b82aca38483d8a963fd2e0reed@google.com    fUnion.fU32 = 0;
64ab8665f8e88927b1a9b82aca38483d8a963fd2e0reed@google.com    fUnion.fR.fWeight = SkPin32(weight, kThin_Weight, kBlack_Weight);
65ab8665f8e88927b1a9b82aca38483d8a963fd2e0reed@google.com    fUnion.fR.fWidth = SkPin32(width, kUltraCondensed_Width, kUltaExpanded_Width);
66ab8665f8e88927b1a9b82aca38483d8a963fd2e0reed@google.com    fUnion.fR.fSlant = SkPin32(slant, kUpright_Slant, kItalic_Slant);
67ab8665f8e88927b1a9b82aca38483d8a963fd2e0reed@google.com}
68ab8665f8e88927b1a9b82aca38483d8a963fd2e0reed@google.com
6901ffa71f87664453998e2870808c82610584929areed@google.com#include "SkFontMgr.h"
7001ffa71f87664453998e2870808c82610584929areed@google.com
712487c826e35dd8dfa470913722ea15f73f8fd99fcommit-bot@chromium.orgSK_DEFINE_INST_COUNT(SkFontStyleSet)
722487c826e35dd8dfa470913722ea15f73f8fd99fcommit-bot@chromium.org
73ab8665f8e88927b1a9b82aca38483d8a963fd2e0reed@google.comclass SkEmptyFontStyleSet : public SkFontStyleSet {
74ab8665f8e88927b1a9b82aca38483d8a963fd2e0reed@google.compublic:
75ab8665f8e88927b1a9b82aca38483d8a963fd2e0reed@google.com    virtual int count() SK_OVERRIDE { return 0; }
76ab8665f8e88927b1a9b82aca38483d8a963fd2e0reed@google.com    virtual void getStyle(int, SkFontStyle*, SkString*) SK_OVERRIDE {
77ab8665f8e88927b1a9b82aca38483d8a963fd2e0reed@google.com        SkASSERT(!"SkFontStyleSet::getStyle called on empty set");
78ab8665f8e88927b1a9b82aca38483d8a963fd2e0reed@google.com    }
79ab8665f8e88927b1a9b82aca38483d8a963fd2e0reed@google.com    virtual SkTypeface* createTypeface(int index) SK_OVERRIDE {
80ab8665f8e88927b1a9b82aca38483d8a963fd2e0reed@google.com        SkASSERT(!"SkFontStyleSet::createTypeface called on empty set");
81ab8665f8e88927b1a9b82aca38483d8a963fd2e0reed@google.com        return NULL;
82ab8665f8e88927b1a9b82aca38483d8a963fd2e0reed@google.com    }
83ab8665f8e88927b1a9b82aca38483d8a963fd2e0reed@google.com    virtual SkTypeface* matchStyle(const SkFontStyle&) SK_OVERRIDE {
84ab8665f8e88927b1a9b82aca38483d8a963fd2e0reed@google.com        return NULL;
85ab8665f8e88927b1a9b82aca38483d8a963fd2e0reed@google.com    }
86ab8665f8e88927b1a9b82aca38483d8a963fd2e0reed@google.com};
87ab8665f8e88927b1a9b82aca38483d8a963fd2e0reed@google.com
88ab8665f8e88927b1a9b82aca38483d8a963fd2e0reed@google.comSkFontStyleSet* SkFontStyleSet::CreateEmpty() {
89ab8665f8e88927b1a9b82aca38483d8a963fd2e0reed@google.com    return SkNEW(SkEmptyFontStyleSet);
90ab8665f8e88927b1a9b82aca38483d8a963fd2e0reed@google.com}
91ab8665f8e88927b1a9b82aca38483d8a963fd2e0reed@google.com
92ab8665f8e88927b1a9b82aca38483d8a963fd2e0reed@google.com///////////////////////////////////////////////////////////////////////////////
93ab8665f8e88927b1a9b82aca38483d8a963fd2e0reed@google.com
942487c826e35dd8dfa470913722ea15f73f8fd99fcommit-bot@chromium.orgSK_DEFINE_INST_COUNT(SkFontMgr)
952487c826e35dd8dfa470913722ea15f73f8fd99fcommit-bot@chromium.org
9624c2df792545bb2f5edf1caba0304a5750dd8bacreed@google.comclass SkEmptyFontMgr : public SkFontMgr {
9724c2df792545bb2f5edf1caba0304a5750dd8bacreed@google.comprotected:
9824c2df792545bb2f5edf1caba0304a5750dd8bacreed@google.com    virtual int onCountFamilies() SK_OVERRIDE {
9924c2df792545bb2f5edf1caba0304a5750dd8bacreed@google.com        return 0;
10024c2df792545bb2f5edf1caba0304a5750dd8bacreed@google.com    }
10124c2df792545bb2f5edf1caba0304a5750dd8bacreed@google.com    virtual void onGetFamilyName(int index, SkString* familyName) SK_OVERRIDE {
10224c2df792545bb2f5edf1caba0304a5750dd8bacreed@google.com        SkASSERT(!"onGetFamilyName called with bad index");
10324c2df792545bb2f5edf1caba0304a5750dd8bacreed@google.com    }
10424c2df792545bb2f5edf1caba0304a5750dd8bacreed@google.com    virtual SkFontStyleSet* onCreateStyleSet(int index) SK_OVERRIDE {
10524c2df792545bb2f5edf1caba0304a5750dd8bacreed@google.com        SkASSERT(!"onCreateStyleSet called with bad index");
10624c2df792545bb2f5edf1caba0304a5750dd8bacreed@google.com        return NULL;
10724c2df792545bb2f5edf1caba0304a5750dd8bacreed@google.com    }
108ab8665f8e88927b1a9b82aca38483d8a963fd2e0reed@google.com    virtual SkFontStyleSet* onMatchFamily(const char[]) SK_OVERRIDE {
109ab8665f8e88927b1a9b82aca38483d8a963fd2e0reed@google.com        return SkFontStyleSet::CreateEmpty();
110ab8665f8e88927b1a9b82aca38483d8a963fd2e0reed@google.com    }
111ab8665f8e88927b1a9b82aca38483d8a963fd2e0reed@google.com
11224c2df792545bb2f5edf1caba0304a5750dd8bacreed@google.com    virtual SkTypeface* onMatchFamilyStyle(const char[],
11324c2df792545bb2f5edf1caba0304a5750dd8bacreed@google.com                                           const SkFontStyle&) SK_OVERRIDE {
11424c2df792545bb2f5edf1caba0304a5750dd8bacreed@google.com        return NULL;
11524c2df792545bb2f5edf1caba0304a5750dd8bacreed@google.com    }
11624c2df792545bb2f5edf1caba0304a5750dd8bacreed@google.com    virtual SkTypeface* onMatchFaceStyle(const SkTypeface*,
11724c2df792545bb2f5edf1caba0304a5750dd8bacreed@google.com                                         const SkFontStyle&) SK_OVERRIDE {
11824c2df792545bb2f5edf1caba0304a5750dd8bacreed@google.com        return NULL;
11924c2df792545bb2f5edf1caba0304a5750dd8bacreed@google.com    }
12024c2df792545bb2f5edf1caba0304a5750dd8bacreed@google.com    virtual SkTypeface* onCreateFromData(SkData*, int) SK_OVERRIDE {
12124c2df792545bb2f5edf1caba0304a5750dd8bacreed@google.com        return NULL;
12224c2df792545bb2f5edf1caba0304a5750dd8bacreed@google.com    }
12324c2df792545bb2f5edf1caba0304a5750dd8bacreed@google.com    virtual SkTypeface* onCreateFromStream(SkStream*, int) SK_OVERRIDE {
12424c2df792545bb2f5edf1caba0304a5750dd8bacreed@google.com        return NULL;
12524c2df792545bb2f5edf1caba0304a5750dd8bacreed@google.com    }
12624c2df792545bb2f5edf1caba0304a5750dd8bacreed@google.com    virtual SkTypeface* onCreateFromFile(const char[], int) SK_OVERRIDE {
12724c2df792545bb2f5edf1caba0304a5750dd8bacreed@google.com        return NULL;
12824c2df792545bb2f5edf1caba0304a5750dd8bacreed@google.com    }
12924c2df792545bb2f5edf1caba0304a5750dd8bacreed@google.com};
13024c2df792545bb2f5edf1caba0304a5750dd8bacreed@google.com
131228b8e0a22ddc9ebdeb3909336f6179a71d9a5bareed@google.comstatic SkFontStyleSet* emptyOnNull(SkFontStyleSet* fsset) {
132228b8e0a22ddc9ebdeb3909336f6179a71d9a5bareed@google.com    if (NULL == fsset) {
133228b8e0a22ddc9ebdeb3909336f6179a71d9a5bareed@google.com        fsset = SkFontStyleSet::CreateEmpty();
134228b8e0a22ddc9ebdeb3909336f6179a71d9a5bareed@google.com    }
135228b8e0a22ddc9ebdeb3909336f6179a71d9a5bareed@google.com    return fsset;
136228b8e0a22ddc9ebdeb3909336f6179a71d9a5bareed@google.com}
137228b8e0a22ddc9ebdeb3909336f6179a71d9a5bareed@google.com
13801ffa71f87664453998e2870808c82610584929areed@google.comint SkFontMgr::countFamilies() {
13901ffa71f87664453998e2870808c82610584929areed@google.com    return this->onCountFamilies();
14001ffa71f87664453998e2870808c82610584929areed@google.com}
14101ffa71f87664453998e2870808c82610584929areed@google.com
14201ffa71f87664453998e2870808c82610584929areed@google.comvoid SkFontMgr::getFamilyName(int index, SkString* familyName) {
14301ffa71f87664453998e2870808c82610584929areed@google.com    this->onGetFamilyName(index, familyName);
14401ffa71f87664453998e2870808c82610584929areed@google.com}
14501ffa71f87664453998e2870808c82610584929areed@google.com
14601ffa71f87664453998e2870808c82610584929areed@google.comSkFontStyleSet* SkFontMgr::createStyleSet(int index) {
147228b8e0a22ddc9ebdeb3909336f6179a71d9a5bareed@google.com    return emptyOnNull(this->onCreateStyleSet(index));
14801ffa71f87664453998e2870808c82610584929areed@google.com}
14901ffa71f87664453998e2870808c82610584929areed@google.com
150ab8665f8e88927b1a9b82aca38483d8a963fd2e0reed@google.comSkFontStyleSet* SkFontMgr::matchFamily(const char familyName[]) {
151228b8e0a22ddc9ebdeb3909336f6179a71d9a5bareed@google.com    return emptyOnNull(this->onMatchFamily(familyName));
152ab8665f8e88927b1a9b82aca38483d8a963fd2e0reed@google.com}
153ab8665f8e88927b1a9b82aca38483d8a963fd2e0reed@google.com
15401ffa71f87664453998e2870808c82610584929areed@google.comSkTypeface* SkFontMgr::matchFamilyStyle(const char familyName[],
15501ffa71f87664453998e2870808c82610584929areed@google.com                                        const SkFontStyle& fs) {
15601ffa71f87664453998e2870808c82610584929areed@google.com    return this->onMatchFamilyStyle(familyName, fs);
15701ffa71f87664453998e2870808c82610584929areed@google.com}
15801ffa71f87664453998e2870808c82610584929areed@google.com
159cb9a1cd72d397d254c18441743b79de0bbc3da09skia.committer@gmail.comSkTypeface* SkFontMgr::matchFaceStyle(const SkTypeface* face,
16001ffa71f87664453998e2870808c82610584929areed@google.com                                      const SkFontStyle& fs) {
16113bc96524bc50bbd362a05aad108f12109ae7d5creed@google.com    return this->onMatchFaceStyle(face, fs);
16201ffa71f87664453998e2870808c82610584929areed@google.com}
16301ffa71f87664453998e2870808c82610584929areed@google.com
16401ffa71f87664453998e2870808c82610584929areed@google.comSkTypeface* SkFontMgr::createFromData(SkData* data, int ttcIndex) {
1659e072dec45762e0ec05363a0b87e6ed56a149db7reed@google.com    if (NULL == data) {
1669e072dec45762e0ec05363a0b87e6ed56a149db7reed@google.com        return NULL;
1679e072dec45762e0ec05363a0b87e6ed56a149db7reed@google.com    }
16801ffa71f87664453998e2870808c82610584929areed@google.com    return this->onCreateFromData(data, ttcIndex);
16901ffa71f87664453998e2870808c82610584929areed@google.com}
17001ffa71f87664453998e2870808c82610584929areed@google.com
17101ffa71f87664453998e2870808c82610584929areed@google.comSkTypeface* SkFontMgr::createFromStream(SkStream* stream, int ttcIndex) {
1729e072dec45762e0ec05363a0b87e6ed56a149db7reed@google.com    if (NULL == stream) {
1739e072dec45762e0ec05363a0b87e6ed56a149db7reed@google.com        return NULL;
1749e072dec45762e0ec05363a0b87e6ed56a149db7reed@google.com    }
17501ffa71f87664453998e2870808c82610584929areed@google.com    return this->onCreateFromStream(stream, ttcIndex);
17601ffa71f87664453998e2870808c82610584929areed@google.com}
17701ffa71f87664453998e2870808c82610584929areed@google.com
17801ffa71f87664453998e2870808c82610584929areed@google.comSkTypeface* SkFontMgr::createFromFile(const char path[], int ttcIndex) {
1799e072dec45762e0ec05363a0b87e6ed56a149db7reed@google.com    if (NULL == path) {
1809e072dec45762e0ec05363a0b87e6ed56a149db7reed@google.com        return NULL;
1819e072dec45762e0ec05363a0b87e6ed56a149db7reed@google.com    }
18201ffa71f87664453998e2870808c82610584929areed@google.com    return this->onCreateFromFile(path, ttcIndex);
18301ffa71f87664453998e2870808c82610584929areed@google.com}
18401ffa71f87664453998e2870808c82610584929areed@google.com
185784cfe25b6ddd0c337cf56462c6ba90d30ed9a5freed@google.comSkTypeface* SkFontMgr::legacyCreateTypeface(const char familyName[],
186784cfe25b6ddd0c337cf56462c6ba90d30ed9a5freed@google.com                                            unsigned styleBits) {
187784cfe25b6ddd0c337cf56462c6ba90d30ed9a5freed@google.com    return this->onLegacyCreateTypeface(familyName, styleBits);
188784cfe25b6ddd0c337cf56462c6ba90d30ed9a5freed@google.com}
189784cfe25b6ddd0c337cf56462c6ba90d30ed9a5freed@google.com
190784cfe25b6ddd0c337cf56462c6ba90d30ed9a5freed@google.comSkTypeface* SkFontMgr::onLegacyCreateTypeface(const char familyName[],
191784cfe25b6ddd0c337cf56462c6ba90d30ed9a5freed@google.com                                              unsigned styleBits) {
192784cfe25b6ddd0c337cf56462c6ba90d30ed9a5freed@google.com    SkASSERT(!"unimplemented");
193784cfe25b6ddd0c337cf56462c6ba90d30ed9a5freed@google.com    return NULL;
194784cfe25b6ddd0c337cf56462c6ba90d30ed9a5freed@google.com}
195784cfe25b6ddd0c337cf56462c6ba90d30ed9a5freed@google.com
19601ffa71f87664453998e2870808c82610584929areed@google.comSkFontMgr* SkFontMgr::RefDefault() {
19701ffa71f87664453998e2870808c82610584929areed@google.com    static SkFontMgr* gFM;
19801ffa71f87664453998e2870808c82610584929areed@google.com    if (NULL == gFM) {
19901ffa71f87664453998e2870808c82610584929areed@google.com        gFM = SkFontMgr::Factory();
20024c2df792545bb2f5edf1caba0304a5750dd8bacreed@google.com        // we never want to return NULL
20124c2df792545bb2f5edf1caba0304a5750dd8bacreed@google.com        if (NULL == gFM) {
20224c2df792545bb2f5edf1caba0304a5750dd8bacreed@google.com            gFM = SkNEW(SkEmptyFontMgr);
20324c2df792545bb2f5edf1caba0304a5750dd8bacreed@google.com        }
20401ffa71f87664453998e2870808c82610584929areed@google.com    }
20501ffa71f87664453998e2870808c82610584929areed@google.com    return SkRef(gFM);
20601ffa71f87664453998e2870808c82610584929areed@google.com}
207784cfe25b6ddd0c337cf56462c6ba90d30ed9a5freed@google.com
208784cfe25b6ddd0c337cf56462c6ba90d30ed9a5freed@google.com//////////////////////////////////////////////////////////////////////////
209784cfe25b6ddd0c337cf56462c6ba90d30ed9a5freed@google.com
210784cfe25b6ddd0c337cf56462c6ba90d30ed9a5freed@google.com#ifdef SK_FONTHOST_USES_FONTMGR
211784cfe25b6ddd0c337cf56462c6ba90d30ed9a5freed@google.com
212784cfe25b6ddd0c337cf56462c6ba90d30ed9a5freed@google.com#if 0
213784cfe25b6ddd0c337cf56462c6ba90d30ed9a5freed@google.comstatic SkFontStyle TypefaceStyleBitsToFontStyle(SkTypeface::Style styleBits) {
214784cfe25b6ddd0c337cf56462c6ba90d30ed9a5freed@google.com    SkFontStyle::Weight weight = (styleBits & SkTypeface::kBold) ?
215784cfe25b6ddd0c337cf56462c6ba90d30ed9a5freed@google.com                                     SkFontStyle::kBold_Weight :
216784cfe25b6ddd0c337cf56462c6ba90d30ed9a5freed@google.com                                     SkFontStyle::kNormal_Weight;
217784cfe25b6ddd0c337cf56462c6ba90d30ed9a5freed@google.com    SkFontStyle::Width width = SkFontStyle::kNormal_Width;
218784cfe25b6ddd0c337cf56462c6ba90d30ed9a5freed@google.com    SkFontStyle::Slant slant = (styleBits & SkTypeface::kItalic) ?
219784cfe25b6ddd0c337cf56462c6ba90d30ed9a5freed@google.com                                     SkFontStyle::kUpright_Slant :
220784cfe25b6ddd0c337cf56462c6ba90d30ed9a5freed@google.com                                     SkFontStyle::kItalic_Slant;
221784cfe25b6ddd0c337cf56462c6ba90d30ed9a5freed@google.com    return SkFontStyle(weight, width, slant);
222784cfe25b6ddd0c337cf56462c6ba90d30ed9a5freed@google.com}
223784cfe25b6ddd0c337cf56462c6ba90d30ed9a5freed@google.com#endif
224784cfe25b6ddd0c337cf56462c6ba90d30ed9a5freed@google.com
225784cfe25b6ddd0c337cf56462c6ba90d30ed9a5freed@google.comSkTypeface* SkFontHost::CreateTypeface(const SkTypeface* familyFace,
226784cfe25b6ddd0c337cf56462c6ba90d30ed9a5freed@google.com                                       const char familyName[],
227784cfe25b6ddd0c337cf56462c6ba90d30ed9a5freed@google.com                                       SkTypeface::Style style) {
228784cfe25b6ddd0c337cf56462c6ba90d30ed9a5freed@google.com    if (familyFace) {
229784cfe25b6ddd0c337cf56462c6ba90d30ed9a5freed@google.com        return familyFace->refMatchingStyle(style);
230784cfe25b6ddd0c337cf56462c6ba90d30ed9a5freed@google.com    } else {
231784cfe25b6ddd0c337cf56462c6ba90d30ed9a5freed@google.com        SkAutoTUnref<SkFontMgr> fm(SkFontMgr::RefDefault());
232784cfe25b6ddd0c337cf56462c6ba90d30ed9a5freed@google.com        return fm->legacyCreateTypeface(familyName, style);
233784cfe25b6ddd0c337cf56462c6ba90d30ed9a5freed@google.com    }
234784cfe25b6ddd0c337cf56462c6ba90d30ed9a5freed@google.com}
235784cfe25b6ddd0c337cf56462c6ba90d30ed9a5freed@google.com
236784cfe25b6ddd0c337cf56462c6ba90d30ed9a5freed@google.comSkTypeface* SkFontHost::CreateTypefaceFromFile(const char path[]) {
237784cfe25b6ddd0c337cf56462c6ba90d30ed9a5freed@google.com    SkAutoTUnref<SkFontMgr> fm(SkFontMgr::RefDefault());
238784cfe25b6ddd0c337cf56462c6ba90d30ed9a5freed@google.com    return fm->createFromFile(path);
239784cfe25b6ddd0c337cf56462c6ba90d30ed9a5freed@google.com}
240784cfe25b6ddd0c337cf56462c6ba90d30ed9a5freed@google.com
241784cfe25b6ddd0c337cf56462c6ba90d30ed9a5freed@google.comSkTypeface* SkFontHost::CreateTypefaceFromStream(SkStream* stream) {
242784cfe25b6ddd0c337cf56462c6ba90d30ed9a5freed@google.com    SkAutoTUnref<SkFontMgr> fm(SkFontMgr::RefDefault());
243784cfe25b6ddd0c337cf56462c6ba90d30ed9a5freed@google.com    return fm->createFromStream(stream);
244784cfe25b6ddd0c337cf56462c6ba90d30ed9a5freed@google.com}
245784cfe25b6ddd0c337cf56462c6ba90d30ed9a5freed@google.com
246784cfe25b6ddd0c337cf56462c6ba90d30ed9a5freed@google.com#endif
247