| Index: chrome/browser/android/vr_shell/textures/ui_texture.cc
|
| diff --git a/chrome/browser/android/vr_shell/textures/ui_texture.cc b/chrome/browser/android/vr_shell/textures/ui_texture.cc
|
| index b5edf11cafcede42e9f3c72f548c09787a5aa0e8..d56fa9e23ee58173b788c27d9a61e200993aaeca 100644
|
| --- a/chrome/browser/android/vr_shell/textures/ui_texture.cc
|
| +++ b/chrome/browser/android/vr_shell/textures/ui_texture.cc
|
| @@ -13,9 +13,10 @@
|
| #include "base/memory/ptr_util.h"
|
| #include "base/strings/string_util.h"
|
| #include "chrome/browser/browser_process.h"
|
| +#include "third_party/icu/source/common/unicode/uscript.h"
|
| #include "third_party/skia/include/core/SkCanvas.h"
|
| -#include "third_party/skia/include/ports/SkFontMgr.h"
|
| #include "ui/gfx/canvas.h"
|
| +#include "ui/gfx/font_fallback_android.h"
|
| #include "ui/gfx/font_list.h"
|
| #include "ui/gl/gl_bindings.h"
|
|
|
| @@ -23,6 +24,15 @@ namespace vr_shell {
|
|
|
| namespace {
|
| constexpr char kDefaultFontFamily[] = "sans-serif";
|
| +
|
| +std::vector<UChar32> CollectDifferentChars(base::string16 text) {
|
| + std::set<UChar32> characters;
|
| + for (base::i18n::UTF16CharIterator it(&text); !it.end(); it.Advance()) {
|
| + characters.insert(it.get());
|
| + }
|
| + return std::vector<UChar32>(characters.begin(), characters.end());
|
| +}
|
| +
|
| } // namespace
|
|
|
| UiTexture::UiTexture() = default;
|
| @@ -32,6 +42,7 @@ UiTexture::~UiTexture() = default;
|
| void UiTexture::DrawAndLayout(SkCanvas* canvas, const gfx::Size& texture_size) {
|
| cc::SkiaPaintCanvas paint_canvas(canvas);
|
| gfx::Canvas gfx_canvas(&paint_canvas, 1.0f);
|
| +
|
| gfx_canvas.DrawColor(SK_ColorTRANSPARENT);
|
| Draw(&gfx_canvas, texture_size);
|
| }
|
| @@ -44,28 +55,11 @@ gfx::FontList UiTexture::GetFontList(int size, base::string16 text) {
|
| gfx::Font default_font(kDefaultFontFamily, size);
|
| std::vector<gfx::Font> fonts{default_font};
|
|
|
| - std::set<wchar_t> characters;
|
| - for (base::i18n::UTF16CharIterator it(&text); !it.end(); it.Advance()) {
|
| - characters.insert(it.get());
|
| - }
|
| - // TODO(acondor): Obtain fallback fonts with gfx::GetFallbackFonts
|
| - // (which is not implemented for android yet) in order to avoid
|
| - // querying per character.
|
| -
|
| - sk_sp<SkFontMgr> font_mgr(SkFontMgr::RefDefault());
|
| std::set<std::string> names;
|
| // TODO(acondor): Query BrowserProcess to obtain the application locale.
|
| - for (wchar_t character : characters) {
|
| - sk_sp<SkTypeface> tf(font_mgr->matchFamilyStyleCharacter(
|
| - kDefaultFontFamily, SkFontStyle(), nullptr, 0, character));
|
| -
|
| - // TODO(acondor): How should we handle no matching font?
|
| - if (!tf)
|
| - continue;
|
| - SkString sk_name;
|
| - tf->getFamilyName(&sk_name);
|
| - std::string name(sk_name.c_str());
|
| - if (name != kDefaultFontFamily)
|
| + for (UChar32 c : CollectDifferentChars(text)) {
|
| + std::string name = gfx::GetFallbackFontNameForChar(default_font, c, "");
|
| + if (!name.empty())
|
| names.insert(name);
|
| }
|
| for (const auto& name : names)
|
|
|