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

Unified Diff: ui/base/resource/resource_bundle.cc

Issue 1689623004: Start removing enum ui::ResourceBundle::FontStyle, fix MacViews font sizes (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix transcription error Created 4 years, 10 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
« no previous file with comments | « ui/base/resource/resource_bundle.h ('k') | ui/base/ui_base.gyp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/base/resource/resource_bundle.cc
diff --git a/ui/base/resource/resource_bundle.cc b/ui/base/resource/resource_bundle.cc
index 536b9fce0c844814e391bdaef8cecf20edc665d1..d4af658df57bc0f98769a8b206b7b21625ac92f4 100644
--- a/ui/base/resource/resource_bundle.cc
+++ b/ui/base/resource/resource_bundle.cc
@@ -62,11 +62,6 @@ namespace ui {
namespace {
-// Font sizes relative to base font.
-const int kSmallFontSizeDelta = -1;
-const int kMediumFontSizeDelta = 3;
-const int kLargeFontSizeDelta = 8;
-
// PNG-related constants.
const unsigned char kPngMagic[8] = { 0x89, 'P', 'N', 'G', 13, 10, 26, 10 };
const size_t kPngChunkMetadataSize = 12; // length, type, crc32
@@ -535,29 +530,72 @@ base::string16 ResourceBundle::GetLocalizedString(int message_id) {
return msg;
}
-const gfx::FontList& ResourceBundle::GetFontList(FontStyle style) {
- {
- base::AutoLock lock_scope(*images_and_fonts_lock_);
- LoadFontsIfNecessary();
- }
- switch (style) {
- case BoldFont:
- return *bold_font_list_;
+const gfx::FontList& ResourceBundle::GetFontListWithDelta(
+ int size_delta,
+ gfx::Font::FontStyle style) {
+ base::AutoLock lock_scope(*images_and_fonts_lock_);
+
+ typedef std::pair<int, gfx::Font::FontStyle> Key;
+ const Key styled_key(size_delta, style);
+
+ auto found = font_cache_.find(styled_key);
+ if (found != font_cache_.end())
+ return found->second;
+
+ const Key base_key(0, gfx::Font::NORMAL);
+ gfx::FontList& base = font_cache_[base_key];
+ if (styled_key == base_key)
+ return base;
+
+ // Fonts of a given style are derived from the unstyled font of the same size.
+ // Cache the unstyled font by first inserting a default-constructed font list.
+ // Then, derive it for the initial insertion, or use the iterator that points
+ // to the existing entry that the insertion collided with.
+ const Key sized_key(size_delta, gfx::Font::NORMAL);
+ auto sized = font_cache_.insert(std::make_pair(sized_key, gfx::FontList()));
+ if (sized.second)
+ sized.first->second = base.DeriveWithSizeDelta(size_delta);
+ if (styled_key == sized_key)
+ return sized.first->second;
+
+ auto styled = font_cache_.insert(std::make_pair(styled_key, gfx::FontList()));
+ DCHECK(styled.second); // Otherwise font_cache_.find(..) would have found it.
+ styled.first->second = sized.first->second.DeriveWithStyle(
+ sized.first->second.GetFontStyle() | style);
+ return styled.first->second;
+}
+
+const gfx::Font& ResourceBundle::GetFontWithDelta(int size_delta,
+ gfx::Font::FontStyle style) {
+ return GetFontListWithDelta(size_delta, style).GetPrimaryFont();
+}
+
+const gfx::FontList& ResourceBundle::GetFontList(FontStyle legacy_style) {
+ gfx::Font::FontStyle font_style = gfx::Font::NORMAL;
+ if (legacy_style == BoldFont || legacy_style == SmallBoldFont ||
+ legacy_style == MediumBoldFont || legacy_style == LargeBoldFont)
+ font_style = gfx::Font::BOLD;
+
+ int size_delta = 0;
+ switch (legacy_style) {
case SmallFont:
- return *small_font_list_;
- case MediumFont:
- return *medium_font_list_;
case SmallBoldFont:
- return *small_bold_font_list_;
+ size_delta = kSmallFontDelta;
+ break;
+ case MediumFont:
case MediumBoldFont:
- return *medium_bold_font_list_;
+ size_delta = kMediumFontDelta;
+ break;
case LargeFont:
- return *large_font_list_;
case LargeBoldFont:
- return *large_bold_font_list_;
- default:
- return *base_font_list_;
+ size_delta = kLargeFontDelta;
+ break;
+ case BaseFont:
+ case BoldFont:
+ break;
}
+
+ return GetFontListWithDelta(size_delta, font_style);
}
const gfx::Font& ResourceBundle::GetFont(FontStyle style) {
@@ -567,8 +605,7 @@ const gfx::Font& ResourceBundle::GetFont(FontStyle style) {
void ResourceBundle::ReloadFonts() {
base::AutoLock lock_scope(*images_and_fonts_lock_);
InitDefaultFontList();
- base_font_list_.reset();
- LoadFontsIfNecessary();
+ font_cache_.clear();
}
ScaleFactor ResourceBundle::GetMaxScaleFactor() const {
@@ -745,34 +782,6 @@ void ResourceBundle::InitDefaultFontList() {
#endif
}
-void ResourceBundle::LoadFontsIfNecessary() {
- images_and_fonts_lock_->AssertAcquired();
- if (base_font_list_)
- return;
-
- base_font_list_.reset(new gfx::FontList());
- bold_font_list_.reset(new gfx::FontList(base_font_list_->DeriveWithStyle(
- base_font_list_->GetFontStyle() | gfx::Font::BOLD)));
-
- small_font_list_.reset(new gfx::FontList(
- base_font_list_->DeriveWithSizeDelta(kSmallFontSizeDelta)));
- small_bold_font_list_.reset(
- new gfx::FontList(small_font_list_->DeriveWithStyle(
- small_font_list_->GetFontStyle() | gfx::Font::BOLD)));
-
- medium_font_list_.reset(new gfx::FontList(
- base_font_list_->DeriveWithSizeDelta(kMediumFontSizeDelta)));
- medium_bold_font_list_.reset(
- new gfx::FontList(medium_font_list_->DeriveWithStyle(
- medium_font_list_->GetFontStyle() | gfx::Font::BOLD)));
-
- large_font_list_.reset(new gfx::FontList(
- base_font_list_->DeriveWithSizeDelta(kLargeFontSizeDelta)));
- large_bold_font_list_.reset(
- new gfx::FontList(large_font_list_->DeriveWithStyle(
- large_font_list_->GetFontStyle() | gfx::Font::BOLD)));
-}
-
bool ResourceBundle::LoadBitmap(const ResourceHandle& data_handle,
int resource_id,
SkBitmap* bitmap,
« no previous file with comments | « ui/base/resource/resource_bundle.h ('k') | ui/base/ui_base.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698