Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/font_list.h" | 5 #include "ui/gfx/font_list.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/lazy_instance.h" | 9 #include "base/lazy_instance.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 166 void FontList::SetDefaultFontDescription(const std::string& font_description) { | 166 void FontList::SetDefaultFontDescription(const std::string& font_description) { |
| 167 // The description string must end with "px" for size in pixel, or must be | 167 // The description string must end with "px" for size in pixel, or must be |
| 168 // the empty string, which specifies to use a single default font. | 168 // the empty string, which specifies to use a single default font. |
| 169 DCHECK(font_description.empty() || | 169 DCHECK(font_description.empty() || |
| 170 EndsWith(font_description, "px", true)); | 170 EndsWith(font_description, "px", true)); |
| 171 | 171 |
| 172 g_default_font_description.Get() = font_description; | 172 g_default_font_description.Get() = font_description; |
| 173 g_default_font_list = NULL; | 173 g_default_font_list = NULL; |
| 174 } | 174 } |
| 175 | 175 |
| 176 FontList FontList::DeriveFontList(int font_style) const { | 176 FontList FontList::Derive(int size_delta, int font_style) const { |
| 177 return DeriveFontListWithSizeDeltaAndStyle(0, font_style); | |
| 178 } | |
| 179 | |
| 180 FontList FontList::DeriveFontListWithSize(int size) const { | |
| 181 DCHECK_GT(size, 0); | |
| 182 return DeriveFontListWithSizeDeltaAndStyle(size - GetFontSize(), | |
| 183 GetFontStyle()); | |
| 184 } | |
| 185 | |
| 186 FontList FontList::DeriveFontListWithSizeDelta(int size_delta) const { | |
| 187 return DeriveFontListWithSizeDeltaAndStyle(size_delta, GetFontStyle()); | |
| 188 } | |
| 189 | |
| 190 FontList FontList::DeriveFontListWithSizeDeltaAndStyle(int size_delta, | |
| 191 int style) const { | |
| 192 // If there is a font vector, derive from that. | 177 // If there is a font vector, derive from that. |
| 193 if (!fonts_.empty()) { | 178 if (!fonts_.empty()) { |
| 194 std::vector<Font> fonts = fonts_; | 179 std::vector<Font> fonts = fonts_; |
| 195 for (size_t i = 0; i < fonts.size(); ++i) | 180 for (size_t i = 0; i < fonts.size(); ++i) |
| 196 fonts[i] = fonts[i].DeriveFont(size_delta, style); | 181 fonts[i] = fonts[i].DeriveFont(size_delta, font_style); |
| 197 return FontList(fonts); | 182 return FontList(fonts); |
| 198 } | 183 } |
| 199 | 184 |
| 200 // Otherwise, parse the font description string to derive from it. | 185 // Otherwise, parse the font description string to derive from it. |
| 201 std::vector<std::string> font_names; | 186 std::vector<std::string> font_names; |
| 202 int old_size; | 187 int old_size; |
| 203 int old_style; | 188 int old_style; |
| 204 ParseFontDescriptionString(font_description_string_, &font_names, | 189 ParseFontDescriptionString(font_description_string_, &font_names, |
| 205 &old_style, &old_size); | 190 &old_style, &old_size); |
| 206 int size = old_size + size_delta; | 191 const int size = std::max(1, old_size + size_delta); |
| 207 DCHECK_GT(size, 0); | 192 return FontList(font_names, font_style, size); |
| 208 return FontList(font_names, style, size); | 193 } |
| 194 | |
| 195 FontList FontList::DeriveWithSizeDelta(int size_delta) const { | |
| 196 return Derive(size_delta, GetFontStyle()); | |
| 197 } | |
| 198 | |
| 199 FontList FontList::DeriveFontListWithSizeDelta(int size_delta) const { | |
|
Alexei Svitkine (slow)
2014/01/20 15:38:10
Remove this one since it's equivalent to DeriveWit
Yuki
2014/01/20 16:43:24
Will do after I rewrite all calls to this method.
| |
| 200 return Derive(size_delta, GetFontStyle()); | |
| 201 } | |
| 202 | |
| 203 FontList FontList::DeriveFontListWithSizeDeltaAndStyle(int size_delta, | |
| 204 int font_style) const { | |
| 205 return Derive(size_delta, font_style); | |
| 209 } | 206 } |
| 210 | 207 |
| 211 int FontList::GetHeight() const { | 208 int FontList::GetHeight() const { |
| 212 if (common_height_ == -1) | 209 if (common_height_ == -1) |
| 213 CacheCommonFontHeightAndBaseline(); | 210 CacheCommonFontHeightAndBaseline(); |
| 214 return common_height_; | 211 return common_height_; |
| 215 } | 212 } |
| 216 | 213 |
| 217 int FontList::GetBaseline() const { | 214 int FontList::GetBaseline() const { |
| 218 if (common_baseline_ == -1) | 215 if (common_baseline_ == -1) |
| 219 CacheCommonFontHeightAndBaseline(); | 216 CacheCommonFontHeightAndBaseline(); |
| 220 return common_baseline_; | 217 return common_baseline_; |
| 221 } | 218 } |
| 222 | 219 |
| 223 int FontList::GetCapHeight() const { | 220 int FontList::GetCapHeight() const { |
| 224 // Assume the primary font is used to render Latin characters. | 221 // Assume the primary font is used to render Latin characters. |
| 225 return GetPrimaryFont().GetCapHeight(); | 222 return GetPrimaryFont().GetCapHeight(); |
| 226 } | 223 } |
| 227 | 224 |
| 228 int FontList::GetStringWidth(const base::string16& text) const { | |
| 229 // Rely on the primary font metrics for the time being. | |
| 230 // TODO(yukishiino): Not only the first font, all the fonts in the list should | |
| 231 // be taken into account to compute the pixels needed to display |text|. | |
| 232 // Also this method, including one in Font class, should be deprecated and | |
| 233 // client code should call Canvas::GetStringWidth(text, font_list) directly. | |
| 234 // Our plan is as follows: | |
| 235 // 1. Introduce the FontList version of Canvas::GetStringWidth(). | |
| 236 // 2. Make client code call Canvas::GetStringWidth(). | |
| 237 // 3. Retire {Font,FontList}::GetStringWidth(). | |
| 238 return GetPrimaryFont().GetStringWidth(text); | |
| 239 } | |
| 240 | |
| 241 int FontList::GetExpectedTextWidth(int length) const { | 225 int FontList::GetExpectedTextWidth(int length) const { |
| 242 // Rely on the primary font metrics for the time being. | 226 // Rely on the primary font metrics for the time being. |
| 243 return GetPrimaryFont().GetExpectedTextWidth(length); | 227 return GetPrimaryFont().GetExpectedTextWidth(length); |
| 244 } | 228 } |
| 245 | 229 |
| 246 int FontList::GetFontStyle() const { | 230 int FontList::GetFontStyle() const { |
| 247 if (font_style_ == -1) | 231 if (font_style_ == -1) |
| 248 CacheFontStyleAndSize(); | 232 CacheFontStyleAndSize(); |
| 249 return font_style_; | 233 return font_style_; |
| 250 } | 234 } |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 319 font_style_ = fonts_[0].GetStyle(); | 303 font_style_ = fonts_[0].GetStyle(); |
| 320 font_size_ = fonts_[0].GetFontSize(); | 304 font_size_ = fonts_[0].GetFontSize(); |
| 321 } else { | 305 } else { |
| 322 std::vector<std::string> font_names; | 306 std::vector<std::string> font_names; |
| 323 ParseFontDescriptionString(font_description_string_, &font_names, | 307 ParseFontDescriptionString(font_description_string_, &font_names, |
| 324 &font_style_, &font_size_); | 308 &font_style_, &font_size_); |
| 325 } | 309 } |
| 326 } | 310 } |
| 327 | 311 |
| 328 } // namespace gfx | 312 } // namespace gfx |
| OLD | NEW |