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

Unified Diff: ui/gfx/render_text_win.cc

Issue 331713003: RenderTextHarfBuzz: Implement font fallback for Win and Linux (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix tests; add placeholder impl for Mac Created 6 years, 6 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
« ui/gfx/render_text_harfbuzz.cc ('K') | « ui/gfx/render_text_harfbuzz.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/gfx/render_text_win.cc
diff --git a/ui/gfx/render_text_win.cc b/ui/gfx/render_text_win.cc
index f79577fde0aa9314cd61ddd7b5f209ee71ae1ae4..122d7c15a5096f1c0f8ffd7df0544578e6572dcc 100644
--- a/ui/gfx/render_text_win.cc
+++ b/ui/gfx/render_text_win.cc
@@ -15,7 +15,7 @@
#include "base/win/windows_version.h"
#include "third_party/icu/source/common/unicode/uchar.h"
#include "ui/gfx/canvas.h"
-#include "ui/gfx/font_fallback_win.h"
+#include "ui/gfx/font_fallback.h"
#include "ui/gfx/font_smoothing_win.h"
#include "ui/gfx/platform_font_win.h"
#include "ui/gfx/utf16_indexing.h"
@@ -1060,7 +1060,8 @@ void RenderTextWin::LayoutTextRun(internal::TextRun* run) {
const size_t run_length = run->range.length();
const wchar_t* run_text = &(GetLayoutText()[run->range.start()]);
Font original_font = run->font;
- LinkedFontsIterator fonts(original_font);
+ std::vector<std::string> fallback_fonts =
+ GetFallbackFontFamilies(original_font.GetFontName());
bool tried_cached_font = false;
bool tried_fallback = false;
// Keep track of the font that is able to display the greatest number of
@@ -1068,11 +1069,14 @@ void RenderTextWin::LayoutTextRun(internal::TextRun* run) {
// in the case where no font is able to display the entire run.
int best_partial_font_missing_char_count = INT_MAX;
Font best_partial_font = original_font;
- Font current_font;
run->logical_clusters.reset(new WORD[run_length]);
- while (fonts.NextFont(&current_font)) {
- HRESULT hr = ShapeTextRunWithFont(run, current_font);
+ Font current_font;
+ bool next_font_set = false;
+ for (size_t i = 0; i < fallback_fonts.size();) {
+ HRESULT hr = ShapeTextRunWithFont(run, next_font_set ?
+ current_font : Font(fallback_fonts[i++], original_font.GetFontSize()));
+ next_font_set = false;
bool glyphs_missing = false;
if (hr == USP_E_SCRIPT_NOT_IN_FONT) {
@@ -1106,7 +1110,8 @@ void RenderTextWin::LayoutTextRun(internal::TextRun* run) {
std::map<std::string, Font>::const_iterator it =
successful_substitute_fonts_.find(original_font.GetFontName());
if (it != successful_substitute_fonts_.end()) {
- fonts.SetNextFont(it->second);
+ current_font = it->second;
+ next_font_set = true;
continue;
}
}
@@ -1120,7 +1125,8 @@ void RenderTextWin::LayoutTextRun(internal::TextRun* run) {
Font fallback_font;
if (ChooseFallbackFont(cached_hdc_, run->font, run_text, run_length,
&fallback_font)) {
- fonts.SetNextFont(fallback_font);
+ current_font = fallback_font;
+ next_font_set = true;
continue;
}
}
« ui/gfx/render_text_harfbuzz.cc ('K') | « ui/gfx/render_text_harfbuzz.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698