| 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 |