OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2011 Google Inc. | 2 * Copyright 2011 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #include "SkTypes.h" | 8 #include "SkTypes.h" |
9 #undef GetGlyphIndices | 9 #undef GetGlyphIndices |
10 | 10 |
(...skipping 1656 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1667 } | 1667 } |
1668 | 1668 |
1669 HRESULT SkFontMgr_DirectWrite::getByFamilyName(const WCHAR wideFamilyName[], | 1669 HRESULT SkFontMgr_DirectWrite::getByFamilyName(const WCHAR wideFamilyName[], |
1670 IDWriteFontFamily** fontFamily) c
onst { | 1670 IDWriteFontFamily** fontFamily) c
onst { |
1671 UINT32 index; | 1671 UINT32 index; |
1672 BOOL exists; | 1672 BOOL exists; |
1673 HR(fFontCollection->FindFamilyName(wideFamilyName, &index, &exists)); | 1673 HR(fFontCollection->FindFamilyName(wideFamilyName, &index, &exists)); |
1674 | 1674 |
1675 if (exists) { | 1675 if (exists) { |
1676 HR(fFontCollection->GetFontFamily(index, fontFamily)); | 1676 HR(fFontCollection->GetFontFamily(index, fontFamily)); |
1677 return S_OK; | |
1678 } | 1677 } |
1679 return S_FALSE; | 1678 return S_OK; |
1680 } | 1679 } |
1681 | 1680 |
1682 HRESULT SkFontMgr_DirectWrite::getDefaultFontFamily(IDWriteFontFamily** fontFami
ly) const { | 1681 HRESULT SkFontMgr_DirectWrite::getDefaultFontFamily(IDWriteFontFamily** fontFami
ly) const { |
1683 NONCLIENTMETRICSW metrics; | 1682 NONCLIENTMETRICSW metrics; |
1684 metrics.cbSize = sizeof(metrics); | 1683 metrics.cbSize = sizeof(metrics); |
1685 if (0 == SystemParametersInfoW(SPI_GETNONCLIENTMETRICS, | 1684 if (0 == SystemParametersInfoW(SPI_GETNONCLIENTMETRICS, |
1686 sizeof(metrics), | 1685 sizeof(metrics), |
1687 &metrics, | 1686 &metrics, |
1688 0)) { | 1687 0)) { |
1689 return E_UNEXPECTED; | 1688 return E_UNEXPECTED; |
1690 } | 1689 } |
1691 HRM(this->getByFamilyName(metrics.lfMessageFont.lfFaceName, fontFamily), | 1690 HRM(this->getByFamilyName(metrics.lfMessageFont.lfFaceName, fontFamily), |
1692 "Could not create DWrite font family from LOGFONT."); | 1691 "Could not create DWrite font family from LOGFONT."); |
1693 | |
1694 return S_OK; | 1692 return S_OK; |
1695 } | 1693 } |
1696 | 1694 |
1697 SkTypeface* SkFontMgr_DirectWrite::onLegacyCreateTypeface(const char familyName[
], | 1695 SkTypeface* SkFontMgr_DirectWrite::onLegacyCreateTypeface(const char familyName[
], |
1698 unsigned styleBits) co
nst { | 1696 unsigned styleBits) co
nst { |
1699 SkTScopedComPtr<IDWriteFontFamily> fontFamily; | 1697 SkTScopedComPtr<IDWriteFontFamily> fontFamily; |
1700 if (familyName) { | 1698 if (familyName) { |
1701 SkSMallocWCHAR wideFamilyName; | 1699 SkSMallocWCHAR wideFamilyName; |
1702 if (SUCCEEDED(sk_cstring_to_wchar(familyName, &wideFamilyName))) { | 1700 if (SUCCEEDED(sk_cstring_to_wchar(familyName, &wideFamilyName))) { |
1703 this->getByFamilyName(wideFamilyName, &fontFamily); | 1701 this->getByFamilyName(wideFamilyName, &fontFamily); |
1704 } | 1702 } |
1705 } | 1703 } |
1706 | 1704 |
1707 if (NULL == fontFamily.get()) { | 1705 if (NULL == fontFamily.get()) { |
1708 // No family with given name, try default. | 1706 // No family with given name, try default. |
1709 HRNM(this->getDefaultFontFamily(&fontFamily), "Could not get default fon
t family."); | 1707 HRNM(this->getDefaultFontFamily(&fontFamily), "Could not get default fon
t family."); |
1710 } | 1708 } |
1711 | 1709 |
| 1710 if (NULL == fontFamily.get()) { |
| 1711 // Could not obtain the default font. |
| 1712 HRNM(fFontCollection->GetFontFamily(0, &fontFamily), |
| 1713 "Could not get default-default font family."); |
| 1714 } |
| 1715 |
1712 SkTScopedComPtr<IDWriteFont> font; | 1716 SkTScopedComPtr<IDWriteFont> font; |
1713 DWRITE_FONT_WEIGHT weight = (styleBits & SkTypeface::kBold) | 1717 DWRITE_FONT_WEIGHT weight = (styleBits & SkTypeface::kBold) |
1714 ? DWRITE_FONT_WEIGHT_BOLD | 1718 ? DWRITE_FONT_WEIGHT_BOLD |
1715 : DWRITE_FONT_WEIGHT_NORMAL; | 1719 : DWRITE_FONT_WEIGHT_NORMAL; |
1716 DWRITE_FONT_STRETCH stretch = DWRITE_FONT_STRETCH_NORMAL; | 1720 DWRITE_FONT_STRETCH stretch = DWRITE_FONT_STRETCH_NORMAL; |
1717 DWRITE_FONT_STYLE italic = (styleBits & SkTypeface::kItalic) | 1721 DWRITE_FONT_STYLE italic = (styleBits & SkTypeface::kItalic) |
1718 ? DWRITE_FONT_STYLE_ITALIC | 1722 ? DWRITE_FONT_STYLE_ITALIC |
1719 : DWRITE_FONT_STYLE_NORMAL; | 1723 : DWRITE_FONT_STYLE_NORMAL; |
1720 HRNM(fontFamily->GetFirstMatchingFont(weight, stretch, italic, &font), | 1724 HRNM(fontFamily->GetFirstMatchingFont(weight, stretch, italic, &font), |
1721 "Could not get matching font."); | 1725 "Could not get matching font."); |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1834 } | 1838 } |
1835 | 1839 |
1836 #include "SkFontMgr_indirect.h" | 1840 #include "SkFontMgr_indirect.h" |
1837 SkFontMgr* SkFontMgr_New_DirectWriteRenderer(SkRemotableFontMgr* proxy) { | 1841 SkFontMgr* SkFontMgr_New_DirectWriteRenderer(SkRemotableFontMgr* proxy) { |
1838 SkAutoTUnref<SkFontMgr> impl(SkFontMgr_New_DirectWrite()); | 1842 SkAutoTUnref<SkFontMgr> impl(SkFontMgr_New_DirectWrite()); |
1839 if (impl.get() == NULL) { | 1843 if (impl.get() == NULL) { |
1840 return NULL; | 1844 return NULL; |
1841 } | 1845 } |
1842 return SkNEW_ARGS(SkFontMgr_Indirect, (impl.get(), proxy)); | 1846 return SkNEW_ARGS(SkFontMgr_Indirect, (impl.get(), proxy)); |
1843 } | 1847 } |
OLD | NEW |