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

Unified Diff: ui/gfx/platform_font_pango.cc

Issue 399113005: Use fallback font in PlatformFontPango::DeriveFont(). (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 5 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/gfx/platform_font_pango.cc
diff --git a/ui/gfx/platform_font_pango.cc b/ui/gfx/platform_font_pango.cc
index 2c89ac5baa83d035803e66bf05c0bf492fd48ca3..717dca4680fd4e2821618c20fe1bd1e2163da266 100644
--- a/ui/gfx/platform_font_pango.cc
+++ b/ui/gfx/platform_font_pango.cc
@@ -31,6 +31,32 @@ namespace {
// IsFallbackFontAllowed function in skia/ext/SkFontHost_fontconfig_direct.cpp.
const char* kFallbackFontFamilyName = "sans";
+// Creates a SkTypeface for the passed-in Font::FontStyle and family. If a
+// fallback typeface is used instead of the requested family, |family| will be
+// updated to contain the fallback's family name.
+skia::RefPtr<SkTypeface> CreateSkTypeface(int style, std::string* family) {
+ DCHECK(family);
+
+ int skia_style = SkTypeface::kNormal;
+ if (gfx::Font::BOLD & style)
+ skia_style |= SkTypeface::kBold;
+ if (gfx::Font::ITALIC & style)
+ skia_style |= SkTypeface::kItalic;
+
+ skia::RefPtr<SkTypeface> typeface = skia::AdoptRef(SkTypeface::CreateFromName(
+ family->c_str(), static_cast<SkTypeface::Style>(skia_style)));
Daniel Erat 2014/07/18 01:16:19 note that InitFromDetails() used to always pass th
msw 2014/07/18 03:58:27 Hmm, I wonder if we were always doing setFakeBoldT
+ if (!typeface) {
+ // A non-scalable font such as .pcf is specified. Fall back to a default
+ // scalable font.
+ typeface = skia::AdoptRef(SkTypeface::CreateFromName(
+ kFallbackFontFamilyName, static_cast<SkTypeface::Style>(skia_style)));
Daniel Erat 2014/07/18 01:16:19 i'm less sure about this one. should i uncondition
msw 2014/07/18 03:58:27 I suppose you could add another if (!typeface) blo
Daniel Erat 2014/07/18 04:49:59 i think i'll just watch for crashes, since i don't
Daniel Erat 2014/07/18 14:53:45 just to follow up on this: skia looks like it's do
msw 2014/07/18 17:32:26 Nice! Good call testing that behavior!
+ CHECK(typeface) << "Could not find any font: " << family << ", "
+ << kFallbackFontFamilyName;
+ *family = kFallbackFontFamilyName;
+ }
+ return typeface;
+}
+
} // namespace
namespace gfx {
@@ -139,16 +165,9 @@ Font PlatformFontPango::DeriveFont(int size_delta, int style) const {
DCHECK_GT(new_size, 0);
// If the style changed, we may need to load a new face.
- skia::RefPtr<SkTypeface> typeface = typeface_;
- if (style != style_) {
- int skstyle = SkTypeface::kNormal;
- if (gfx::Font::BOLD & style)
- skstyle |= SkTypeface::kBold;
- if (gfx::Font::ITALIC & style)
- skstyle |= SkTypeface::kItalic;
- typeface = skia::AdoptRef(SkTypeface::CreateFromName(
- font_family_.c_str(), static_cast<SkTypeface::Style>(skstyle)));
- }
+ std::string new_family = font_family_;
+ skia::RefPtr<SkTypeface> typeface =
+ (style == style_) ? typeface_ : CreateSkTypeface(style, &new_family);
// If the size changed, get updated rendering settings.
msw 2014/07/18 03:58:27 Should we also do this if the family (or style) ch
Daniel Erat 2014/07/18 04:49:59 think i mentioned the style question in an earlier
FontRenderParams render_params = font_render_params_;
@@ -159,7 +178,7 @@ Font PlatformFontPango::DeriveFont(int size_delta, int style) const {
}
return Font(new PlatformFontPango(typeface,
- font_family_,
+ new_family,
new_size,
style,
render_params));
@@ -254,21 +273,8 @@ void PlatformFontPango::InitFromDetails(
const FontRenderParams& render_params) {
DCHECK_GT(font_size_pixels, 0);
- typeface_ = typeface;
font_family_ = font_family;
- if (!typeface_) {
- typeface_ = skia::AdoptRef(
- SkTypeface::CreateFromName(font_family.c_str(), SkTypeface::kNormal));
- if (!typeface_) {
- // A non-scalable font such as .pcf is specified. Fall back to a default
- // scalable font.
- typeface_ = skia::AdoptRef(SkTypeface::CreateFromName(
- kFallbackFontFamilyName, SkTypeface::kNormal));
- CHECK(typeface_) << "Could not find any font: " << font_family << ", "
- << kFallbackFontFamilyName;
- font_family_ = kFallbackFontFamilyName;
- }
- }
+ typeface_ = typeface ? typeface : CreateSkTypeface(style, &font_family_);
font_size_pixels_ = font_size_pixels;
style_ = style;
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698