OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "ui/gfx/render_text_harfbuzz.h" | 5 #include "ui/gfx/render_text_harfbuzz.h" |
6 | 6 |
7 #include <limits> | 7 #include <limits> |
8 #include <map> | 8 #include <map> |
9 | 9 |
10 #include "base/i18n/bidi_line_iterator.h" | 10 #include "base/i18n/bidi_line_iterator.h" |
(...skipping 1176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1187 #if defined(OS_WIN) | 1187 #if defined(OS_WIN) |
1188 // Append fonts in the fallback list of the Uniscribe font. | 1188 // Append fonts in the fallback list of the Uniscribe font. |
1189 if (!uniscribe_family.empty()) { | 1189 if (!uniscribe_family.empty()) { |
1190 std::vector<std::string> uniscribe_fallbacks = | 1190 std::vector<std::string> uniscribe_fallbacks = |
1191 GetFallbackFontFamilies(uniscribe_family); | 1191 GetFallbackFontFamilies(uniscribe_family); |
1192 fallback_families.insert(fallback_families.end(), | 1192 fallback_families.insert(fallback_families.end(), |
1193 uniscribe_fallbacks.begin(), uniscribe_fallbacks.end()); | 1193 uniscribe_fallbacks.begin(), uniscribe_fallbacks.end()); |
1194 } | 1194 } |
1195 #endif | 1195 #endif |
1196 | 1196 |
1197 // Get rid of duplicate fonts in the fallback list. We use the std::unique | |
1198 // algorithm for this. However for this function to work we need to sort | |
1199 // the font list as the unique algorithm relies on duplicates being adjacent. | |
1200 // TODO(ananta) | |
1201 // Sorting the list changes the order in which fonts are evaluated. This may | |
1202 // cause problems in the way some characters appear. It may be best to do | |
1203 // font fallback on the same lines as blink or skia which do this based on | |
1204 // character glyph mapping. | |
1205 std::sort(fallback_families.begin(), fallback_families.end()); | |
1206 fallback_families.erase(std::unique( | |
1207 fallback_families.begin(), fallback_families.end()), | |
1208 fallback_families.end()); | |
1209 | |
1210 // Try shaping with the fallback fonts. | 1197 // Try shaping with the fallback fonts. |
1211 for (const auto& family : fallback_families) { | 1198 for (const auto& family : fallback_families) { |
1212 if (family == primary_family) | 1199 if (family == primary_family) |
1213 continue; | 1200 continue; |
1214 #if defined(OS_WIN) | 1201 #if defined(OS_WIN) |
1215 if (family == uniscribe_family) | 1202 if (family == uniscribe_family) |
1216 continue; | 1203 continue; |
1217 #endif | 1204 #endif |
1218 FontRenderParamsQuery query(false); | 1205 FontRenderParamsQuery query(false); |
1219 query.families.push_back(family); | 1206 query.families.push_back(family); |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1342 if (!run->render_params.subpixel_positioning) | 1329 if (!run->render_params.subpixel_positioning) |
1343 run->width = std::floor(run->width + 0.5f); | 1330 run->width = std::floor(run->width + 0.5f); |
1344 } | 1331 } |
1345 | 1332 |
1346 hb_buffer_destroy(buffer); | 1333 hb_buffer_destroy(buffer); |
1347 hb_font_destroy(harfbuzz_font); | 1334 hb_font_destroy(harfbuzz_font); |
1348 return true; | 1335 return true; |
1349 } | 1336 } |
1350 | 1337 |
1351 } // namespace gfx | 1338 } // namespace gfx |
OLD | NEW |