| Index: ui/gfx/font_list_impl.cc
|
| diff --git a/ui/gfx/font_list_impl.cc b/ui/gfx/font_list_impl.cc
|
| deleted file mode 100644
|
| index ec6783286960b295316f9094397ce5c0fc0d175f..0000000000000000000000000000000000000000
|
| --- a/ui/gfx/font_list_impl.cc
|
| +++ /dev/null
|
| @@ -1,248 +0,0 @@
|
| -// Copyright 2014 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "ui/gfx/font_list_impl.h"
|
| -
|
| -#include <algorithm>
|
| -
|
| -#include "base/logging.h"
|
| -#include "base/strings/string_number_conversions.h"
|
| -#include "base/strings/string_split.h"
|
| -#include "base/strings/string_util.h"
|
| -#include "ui/gfx/font.h"
|
| -
|
| -namespace {
|
| -
|
| -// Parses font description into |font_names|, |font_style| and |font_size|.
|
| -void ParseFontDescriptionString(const std::string& font_description_string,
|
| - std::vector<std::string>* font_names,
|
| - int* font_style,
|
| - int* font_size) {
|
| - base::SplitString(font_description_string, ',', font_names);
|
| - DCHECK_GT(font_names->size(), 1U);
|
| -
|
| - // The last item is [STYLE_OPTIONS] SIZE.
|
| - std::vector<std::string> styles_size;
|
| - base::SplitString(font_names->back(), ' ', &styles_size);
|
| - DCHECK(!styles_size.empty());
|
| - base::StringToInt(styles_size.back(), font_size);
|
| - DCHECK_GT(*font_size, 0);
|
| - font_names->pop_back();
|
| -
|
| - // Font supports BOLD and ITALIC; underline is supported via RenderText.
|
| - *font_style = 0;
|
| - for (size_t i = 0; i < styles_size.size() - 1; ++i) {
|
| - // Styles are separated by white spaces. base::SplitString splits styles
|
| - // by space, and it inserts empty string for continuous spaces.
|
| - if (styles_size[i].empty())
|
| - continue;
|
| - if (!styles_size[i].compare("Bold"))
|
| - *font_style |= gfx::Font::BOLD;
|
| - else if (!styles_size[i].compare("Italic"))
|
| - *font_style |= gfx::Font::ITALIC;
|
| - else
|
| - NOTREACHED();
|
| - }
|
| -}
|
| -
|
| -// Returns the font style and size as a string.
|
| -std::string FontStyleAndSizeToString(int font_style, int font_size) {
|
| - std::string result;
|
| - if (font_style & gfx::Font::BOLD)
|
| - result += "Bold ";
|
| - if (font_style & gfx::Font::ITALIC)
|
| - result += "Italic ";
|
| - result += base::IntToString(font_size);
|
| - result += "px";
|
| - return result;
|
| -}
|
| -
|
| -// Returns font description from |font_names|, |font_style|, and |font_size|.
|
| -std::string BuildFontDescription(const std::vector<std::string>& font_names,
|
| - int font_style,
|
| - int font_size) {
|
| - std::string description = JoinString(font_names, ',');
|
| - description += "," + FontStyleAndSizeToString(font_style, font_size);
|
| - return description;
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -namespace gfx {
|
| -
|
| -FontListImpl::FontListImpl(const std::string& font_description_string)
|
| - : font_description_string_(font_description_string),
|
| - common_height_(-1),
|
| - common_baseline_(-1),
|
| - font_style_(-1),
|
| - font_size_(-1) {
|
| - DCHECK(!font_description_string.empty());
|
| - // DCHECK description string ends with "px" for size in pixel.
|
| - DCHECK(EndsWith(font_description_string, "px", true));
|
| -}
|
| -
|
| -FontListImpl::FontListImpl(const std::vector<std::string>& font_names,
|
| - int font_style,
|
| - int font_size)
|
| - : font_description_string_(BuildFontDescription(font_names, font_style,
|
| - font_size)),
|
| - common_height_(-1),
|
| - common_baseline_(-1),
|
| - font_style_(font_style),
|
| - font_size_(font_size) {
|
| - DCHECK(!font_names.empty());
|
| - DCHECK(!font_names[0].empty());
|
| -}
|
| -
|
| -FontListImpl::FontListImpl(const std::vector<Font>& fonts)
|
| - : fonts_(fonts),
|
| - common_height_(-1),
|
| - common_baseline_(-1),
|
| - font_style_(-1),
|
| - font_size_(-1) {
|
| - DCHECK(!fonts.empty());
|
| - font_style_ = fonts[0].GetStyle();
|
| - font_size_ = fonts[0].GetFontSize();
|
| -#if DCHECK_IS_ON()
|
| - for (size_t i = 1; i < fonts.size(); ++i) {
|
| - DCHECK_EQ(fonts[i].GetStyle(), font_style_);
|
| - DCHECK_EQ(fonts[i].GetFontSize(), font_size_);
|
| - }
|
| -#endif
|
| -}
|
| -
|
| -FontListImpl::FontListImpl(const Font& font)
|
| - : common_height_(-1),
|
| - common_baseline_(-1),
|
| - font_style_(-1),
|
| - font_size_(-1) {
|
| - fonts_.push_back(font);
|
| -}
|
| -
|
| -FontListImpl* FontListImpl::Derive(int size_delta, int font_style) const {
|
| - // If there is a font vector, derive from that.
|
| - if (!fonts_.empty()) {
|
| - std::vector<Font> fonts = fonts_;
|
| - for (size_t i = 0; i < fonts.size(); ++i)
|
| - fonts[i] = fonts[i].Derive(size_delta, font_style);
|
| - return new FontListImpl(fonts);
|
| - }
|
| -
|
| - // Otherwise, parse the font description string to derive from it.
|
| - std::vector<std::string> font_names;
|
| - int old_size;
|
| - int old_style;
|
| - ParseFontDescriptionString(font_description_string_, &font_names,
|
| - &old_style, &old_size);
|
| - const int size = std::max(1, old_size + size_delta);
|
| - return new FontListImpl(font_names, font_style, size);
|
| -}
|
| -
|
| -int FontListImpl::GetHeight() const {
|
| - if (common_height_ == -1)
|
| - CacheCommonFontHeightAndBaseline();
|
| - return common_height_;
|
| -}
|
| -
|
| -int FontListImpl::GetBaseline() const {
|
| - if (common_baseline_ == -1)
|
| - CacheCommonFontHeightAndBaseline();
|
| - return common_baseline_;
|
| -}
|
| -
|
| -int FontListImpl::GetCapHeight() const {
|
| - // Assume the primary font is used to render Latin characters.
|
| - return GetPrimaryFont().GetCapHeight();
|
| -}
|
| -
|
| -int FontListImpl::GetExpectedTextWidth(int length) const {
|
| - // Rely on the primary font metrics for the time being.
|
| - return GetPrimaryFont().GetExpectedTextWidth(length);
|
| -}
|
| -
|
| -int FontListImpl::GetFontStyle() const {
|
| - if (font_style_ == -1)
|
| - CacheFontStyleAndSize();
|
| - return font_style_;
|
| -}
|
| -
|
| -const std::string& FontListImpl::GetFontDescriptionString() const {
|
| - if (font_description_string_.empty()) {
|
| - DCHECK(!fonts_.empty());
|
| - for (size_t i = 0; i < fonts_.size(); ++i) {
|
| - std::string name = fonts_[i].GetFontName();
|
| - font_description_string_ += name;
|
| - font_description_string_ += ',';
|
| - }
|
| - // All fonts have the same style and size.
|
| - font_description_string_ +=
|
| - FontStyleAndSizeToString(fonts_[0].GetStyle(), fonts_[0].GetFontSize());
|
| - }
|
| - return font_description_string_;
|
| -}
|
| -
|
| -int FontListImpl::GetFontSize() const {
|
| - if (font_size_ == -1)
|
| - CacheFontStyleAndSize();
|
| - return font_size_;
|
| -}
|
| -
|
| -const std::vector<Font>& FontListImpl::GetFonts() const {
|
| - if (fonts_.empty()) {
|
| - DCHECK(!font_description_string_.empty());
|
| -
|
| - std::vector<std::string> font_names;
|
| - // It's possible that gfx::Font::UNDERLINE is specified and it's already
|
| - // stored in |font_style_| but |font_description_string_| doesn't have the
|
| - // underline info. So we should respect |font_style_| as long as it's
|
| - // valid.
|
| - int style = 0;
|
| - ParseFontDescriptionString(font_description_string_, &font_names,
|
| - &style, &font_size_);
|
| - if (font_style_ == -1)
|
| - font_style_ = style;
|
| - for (size_t i = 0; i < font_names.size(); ++i) {
|
| - DCHECK(!font_names[i].empty());
|
| -
|
| - Font font(font_names[i], font_size_);
|
| - if (font_style_ == Font::NORMAL)
|
| - fonts_.push_back(font);
|
| - else
|
| - fonts_.push_back(font.Derive(0, font_style_));
|
| - }
|
| - }
|
| - return fonts_;
|
| -}
|
| -
|
| -const Font& FontListImpl::GetPrimaryFont() const {
|
| - return GetFonts()[0];
|
| -}
|
| -
|
| -FontListImpl::~FontListImpl() {}
|
| -
|
| -void FontListImpl::CacheCommonFontHeightAndBaseline() const {
|
| - int ascent = 0;
|
| - int descent = 0;
|
| - const std::vector<Font>& fonts = GetFonts();
|
| - for (std::vector<Font>::const_iterator i = fonts.begin();
|
| - i != fonts.end(); ++i) {
|
| - ascent = std::max(ascent, i->GetBaseline());
|
| - descent = std::max(descent, i->GetHeight() - i->GetBaseline());
|
| - }
|
| - common_height_ = ascent + descent;
|
| - common_baseline_ = ascent;
|
| -}
|
| -
|
| -void FontListImpl::CacheFontStyleAndSize() const {
|
| - if (!fonts_.empty()) {
|
| - font_style_ = fonts_[0].GetStyle();
|
| - font_size_ = fonts_[0].GetFontSize();
|
| - } else {
|
| - std::vector<std::string> font_names;
|
| - ParseFontDescriptionString(font_description_string_, &font_names,
|
| - &font_style_, &font_size_);
|
| - }
|
| -}
|
| -
|
| -} // namespace gfx
|
|
|