| Index: ui/gfx/render_text_harfbuzz.cc
|
| diff --git a/ui/gfx/render_text_harfbuzz.cc b/ui/gfx/render_text_harfbuzz.cc
|
| index fe492c69f1600ce59f5cab612018ef778e7541f8..1d068b3ba7301458a77afa9c4d8d19e75920a082 100644
|
| --- a/ui/gfx/render_text_harfbuzz.cc
|
| +++ b/ui/gfx/render_text_harfbuzz.cc
|
| @@ -36,10 +36,6 @@
|
| #include "ui/gfx/text_utils.h"
|
| #include "ui/gfx/utf16_indexing.h"
|
|
|
| -#if defined(OS_WIN)
|
| -#include "ui/gfx/font_fallback_win.h"
|
| -#endif
|
| -
|
| namespace gfx {
|
|
|
| namespace {
|
| @@ -1508,13 +1504,14 @@ void RenderTextHarfBuzz::ShapeRun(const base::string16& text,
|
| return;
|
| }
|
|
|
| -#if defined(OS_WIN)
|
| + std::string preferred_fallback_family;
|
| +
|
| +#if defined(OS_WIN) || defined(OS_MACOSX)
|
| Font fallback_font(primary_font);
|
| - std::string fallback_family;
|
| const base::char16* run_text = &(text[run->range.start()]);
|
| if (GetFallbackFont(primary_font, run_text, run->range.length(),
|
| &fallback_font)) {
|
| - fallback_family = fallback_font.GetFontName();
|
| + preferred_fallback_family = fallback_font.GetFontName();
|
| if (CompareFamily(text, fallback_font, fallback_font.GetFontRenderParams(),
|
| run, &best_font, &best_render_params,
|
| &best_missing_glyphs))
|
| @@ -1525,8 +1522,10 @@ void RenderTextHarfBuzz::ShapeRun(const base::string16& text,
|
| std::vector<Font> fallback_font_list = GetFallbackFonts(primary_font);
|
|
|
| #if defined(OS_WIN)
|
| - // Append fonts in the fallback list of the fallback font.
|
| - if (!fallback_family.empty()) {
|
| + // Append fonts in the fallback list of the preferred fallback font.
|
| + // TODO(tapted): Investigate whether there's a case that benefits from this on
|
| + // Mac.
|
| + if (!preferred_fallback_family.empty()) {
|
| std::vector<Font> fallback_fonts = GetFallbackFonts(fallback_font);
|
| fallback_font_list.insert(fallback_font_list.end(), fallback_fonts.begin(),
|
| fallback_fonts.end());
|
| @@ -1538,7 +1537,7 @@ void RenderTextHarfBuzz::ShapeRun(const base::string16& text,
|
| // could be a raster font like System, which would not give us a reasonable
|
| // fallback font list.
|
| if (!base::LowerCaseEqualsASCII(primary_font.GetFontName(), "segoe ui") &&
|
| - !base::LowerCaseEqualsASCII(fallback_family, "segoe ui")) {
|
| + !base::LowerCaseEqualsASCII(preferred_fallback_family, "segoe ui")) {
|
| std::vector<Font> default_fallback_families =
|
| GetFallbackFonts(Font("Segoe UI", 13));
|
| fallback_font_list.insert(fallback_font_list.end(),
|
| @@ -1553,14 +1552,10 @@ void RenderTextHarfBuzz::ShapeRun(const base::string16& text,
|
| for (const auto& font : fallback_font_list) {
|
| std::string font_name = font.GetFontName();
|
|
|
| - if (font_name == primary_font.GetFontName())
|
| - continue;
|
| -#if defined(OS_WIN)
|
| - if (font_name == fallback_family)
|
| - continue;
|
| -#endif
|
| - if (fallback_fonts.find(font) != fallback_fonts.end())
|
| + if (font_name == primary_font.GetFontName() ||
|
| + font_name == preferred_fallback_family || fallback_fonts.count(font)) {
|
| continue;
|
| + }
|
|
|
| fallback_fonts.insert(font);
|
|
|
|
|