Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(111)

Side by Side Diff: src/ports/SkFontMgr_win_dw.cpp

Issue 1921903002: Add oblique as a slant. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: static_assert what can be. Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/ports/SkFontMgr_fontconfig.cpp ('k') | src/ports/SkRemotableFontMgr_win_dw.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2014 Google Inc. 2 * Copyright 2014 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 #if defined(SK_BUILD_FOR_WIN32) 9 #if defined(SK_BUILD_FOR_WIN32)
10 10
(...skipping 966 matching lines...) Expand 10 before | Expand all | Expand 10 after
977 HRNM(this->getDefaultFontFamily(&fontFamily), "Could not get default fon t family."); 977 HRNM(this->getDefaultFontFamily(&fontFamily), "Could not get default fon t family.");
978 } 978 }
979 979
980 if (nullptr == fontFamily.get()) { 980 if (nullptr == fontFamily.get()) {
981 // Could not obtain the default font. 981 // Could not obtain the default font.
982 HRNM(fFontCollection->GetFontFamily(0, &fontFamily), 982 HRNM(fFontCollection->GetFontFamily(0, &fontFamily),
983 "Could not get default-default font family."); 983 "Could not get default-default font family.");
984 } 984 }
985 985
986 SkTScopedComPtr<IDWriteFont> font; 986 SkTScopedComPtr<IDWriteFont> font;
987 DWRITE_FONT_WEIGHT weight = (DWRITE_FONT_WEIGHT)style.weight(); 987 DWriteStyle dwStyle(style);
988 DWRITE_FONT_STRETCH stretch = (DWRITE_FONT_STRETCH)style.width(); 988 HRNM(fontFamily->GetFirstMatchingFont(dwStyle.fWeight, dwStyle.fWidth, dwSty le.fSlant, &font),
989 DWRITE_FONT_STYLE italic = style.isItalic() ? DWRITE_FONT_STYLE_ITALIC
990 : DWRITE_FONT_STYLE_NORMAL;
991 HRNM(fontFamily->GetFirstMatchingFont(weight, stretch, italic, &font),
992 "Could not get matching font."); 989 "Could not get matching font.");
993 990
994 SkTScopedComPtr<IDWriteFontFace> fontFace; 991 SkTScopedComPtr<IDWriteFontFace> fontFace;
995 HRNM(font->CreateFontFace(&fontFace), "Could not create font face."); 992 HRNM(font->CreateFontFace(&fontFace), "Could not create font face.");
996 993
997 return this->createTypefaceFromDWriteFont(fontFace.get(), font.get(), fontFa mily.get()); 994 return this->createTypefaceFromDWriteFont(fontFace.get(), font.get(), fontFa mily.get());
998 } 995 }
999 996
1000 /////////////////////////////////////////////////////////////////////////////// 997 ///////////////////////////////////////////////////////////////////////////////
1001 998
1002 int SkFontStyleSet_DirectWrite::count() { 999 int SkFontStyleSet_DirectWrite::count() {
1003 return fFontFamily->GetFontCount(); 1000 return fFontFamily->GetFontCount();
1004 } 1001 }
1005 1002
1006 SkTypeface* SkFontStyleSet_DirectWrite::createTypeface(int index) { 1003 SkTypeface* SkFontStyleSet_DirectWrite::createTypeface(int index) {
1007 SkTScopedComPtr<IDWriteFont> font; 1004 SkTScopedComPtr<IDWriteFont> font;
1008 HRNM(fFontFamily->GetFont(index, &font), "Could not get font."); 1005 HRNM(fFontFamily->GetFont(index, &font), "Could not get font.");
1009 1006
1010 SkTScopedComPtr<IDWriteFontFace> fontFace; 1007 SkTScopedComPtr<IDWriteFontFace> fontFace;
1011 HRNM(font->CreateFontFace(&fontFace), "Could not create font face."); 1008 HRNM(font->CreateFontFace(&fontFace), "Could not create font face.");
1012 1009
1013 return fFontMgr->createTypefaceFromDWriteFont(fontFace.get(), font.get(), fF ontFamily.get()); 1010 return fFontMgr->createTypefaceFromDWriteFont(fontFace.get(), font.get(), fF ontFamily.get());
1014 } 1011 }
1015 1012
1016 void SkFontStyleSet_DirectWrite::getStyle(int index, SkFontStyle* fs, SkString* styleName) { 1013 void SkFontStyleSet_DirectWrite::getStyle(int index, SkFontStyle* fs, SkString* styleName) {
1017 SkTScopedComPtr<IDWriteFont> font; 1014 SkTScopedComPtr<IDWriteFont> font;
1018 HRVM(fFontFamily->GetFont(index, &font), "Could not get font."); 1015 HRVM(fFontFamily->GetFont(index, &font), "Could not get font.");
1019 1016
1020 if (fs) { 1017 if (fs) {
1021 SkFontStyle::Slant slant; 1018 *fs = get_style(font.get());
1022 switch (font->GetStyle()) {
1023 case DWRITE_FONT_STYLE_NORMAL:
1024 slant = SkFontStyle::kUpright_Slant;
1025 break;
1026 case DWRITE_FONT_STYLE_OBLIQUE:
1027 case DWRITE_FONT_STYLE_ITALIC:
1028 slant = SkFontStyle::kItalic_Slant;
1029 break;
1030 default:
1031 SkASSERT(false);
1032 }
1033
1034 int weight = font->GetWeight();
1035 int width = font->GetStretch();
1036
1037 *fs = SkFontStyle(weight, width, slant);
1038 } 1019 }
1039 1020
1040 if (styleName) { 1021 if (styleName) {
1041 SkTScopedComPtr<IDWriteLocalizedStrings> faceNames; 1022 SkTScopedComPtr<IDWriteLocalizedStrings> faceNames;
1042 if (SUCCEEDED(font->GetFaceNames(&faceNames))) { 1023 if (SUCCEEDED(font->GetFaceNames(&faceNames))) {
1043 sk_get_locale_string(faceNames.get(), fFontMgr->fLocaleName.get(), s tyleName); 1024 sk_get_locale_string(faceNames.get(), fFontMgr->fLocaleName.get(), s tyleName);
1044 } 1025 }
1045 } 1026 }
1046 } 1027 }
1047 1028
1048 SkTypeface* SkFontStyleSet_DirectWrite::matchStyle(const SkFontStyle& pattern) { 1029 SkTypeface* SkFontStyleSet_DirectWrite::matchStyle(const SkFontStyle& pattern) {
1049 DWRITE_FONT_STYLE slant;
1050 switch (pattern.slant()) {
1051 case SkFontStyle::kUpright_Slant:
1052 slant = DWRITE_FONT_STYLE_NORMAL;
1053 break;
1054 case SkFontStyle::kItalic_Slant:
1055 slant = DWRITE_FONT_STYLE_ITALIC;
1056 break;
1057 default:
1058 SkASSERT(false);
1059 }
1060
1061 DWRITE_FONT_WEIGHT weight = (DWRITE_FONT_WEIGHT)pattern.weight();
1062 DWRITE_FONT_STRETCH width = (DWRITE_FONT_STRETCH)pattern.width();
1063
1064 SkTScopedComPtr<IDWriteFont> font; 1030 SkTScopedComPtr<IDWriteFont> font;
1031 DWriteStyle dwStyle(pattern);
1065 // TODO: perhaps use GetMatchingFonts and get the least simulated? 1032 // TODO: perhaps use GetMatchingFonts and get the least simulated?
1066 HRNM(fFontFamily->GetFirstMatchingFont(weight, width, slant, &font), 1033 HRNM(fFontFamily->GetFirstMatchingFont(dwStyle.fWeight, dwStyle.fWidth, dwSt yle.fSlant, &font),
1067 "Could not match font in family."); 1034 "Could not match font in family.");
1068 1035
1069 SkTScopedComPtr<IDWriteFontFace> fontFace; 1036 SkTScopedComPtr<IDWriteFontFace> fontFace;
1070 HRNM(font->CreateFontFace(&fontFace), "Could not create font face."); 1037 HRNM(font->CreateFontFace(&fontFace), "Could not create font face.");
1071 1038
1072 return fFontMgr->createTypefaceFromDWriteFont(fontFace.get(), font.get(), 1039 return fFontMgr->createTypefaceFromDWriteFont(fontFace.get(), font.get(),
1073 fFontFamily.get()); 1040 fFontFamily.get());
1074 } 1041 }
1075 1042
1076 //////////////////////////////////////////////////////////////////////////////// 1043 ////////////////////////////////////////////////////////////////////////////////
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
1119 1086
1120 #include "SkFontMgr_indirect.h" 1087 #include "SkFontMgr_indirect.h"
1121 SK_API SkFontMgr* SkFontMgr_New_DirectWriteRenderer(SkRemotableFontMgr* proxy) { 1088 SK_API SkFontMgr* SkFontMgr_New_DirectWriteRenderer(SkRemotableFontMgr* proxy) {
1122 SkAutoTUnref<SkFontMgr> impl(SkFontMgr_New_DirectWrite()); 1089 SkAutoTUnref<SkFontMgr> impl(SkFontMgr_New_DirectWrite());
1123 if (impl.get() == nullptr) { 1090 if (impl.get() == nullptr) {
1124 return nullptr; 1091 return nullptr;
1125 } 1092 }
1126 return new SkFontMgr_Indirect(impl.get(), proxy); 1093 return new SkFontMgr_Indirect(impl.get(), proxy);
1127 } 1094 }
1128 #endif//defined(SK_BUILD_FOR_WIN32) 1095 #endif//defined(SK_BUILD_FOR_WIN32)
OLDNEW
« no previous file with comments | « src/ports/SkFontMgr_fontconfig.cpp ('k') | src/ports/SkRemotableFontMgr_win_dw.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698