diff options
Diffstat (limited to 'ui')
-rw-r--r-- | ui/views/controls/table/table_header.cc | 14 | ||||
-rw-r--r-- | ui/views/controls/table/table_header.h | 6 | ||||
-rw-r--r-- | ui/views/controls/table/table_utils.cc | 25 | ||||
-rw-r--r-- | ui/views/controls/table/table_utils.h | 18 | ||||
-rw-r--r-- | ui/views/controls/table/table_utils_unittest.cc | 70 | ||||
-rw-r--r-- | ui/views/controls/table/table_view.cc | 23 | ||||
-rw-r--r-- | ui/views/controls/table/table_view.h | 4 |
7 files changed, 88 insertions, 72 deletions
diff --git a/ui/views/controls/table/table_header.cc b/ui/views/controls/table/table_header.cc index 16d28e3..c349a6e 100644 --- a/ui/views/controls/table/table_header.cc +++ b/ui/views/controls/table/table_header.cc @@ -6,6 +6,7 @@ #include "third_party/skia/include/core/SkColor.h" #include "ui/gfx/canvas.h" +#include "ui/gfx/text_utils.h" #include "ui/native_theme/native_theme.h" #include "ui/views/background.h" #include "ui/views/controls/table/table_utils.h" @@ -95,7 +96,8 @@ void TableHeader::OnPaint(gfx::Canvas* canvas) { if (width <= 0) continue; - const int title_width = font_.GetStringWidth(columns[i].column.title); + const int title_width = + gfx::GetStringWidth(columns[i].column.title, font_list_); const bool paint_sort_indicator = (columns[i].column.id == sorted_column_id && title_width + kSortIndicatorWidth <= width); @@ -105,10 +107,10 @@ void TableHeader::OnPaint(gfx::Canvas* canvas) { width -= kSortIndicatorWidth; } - canvas->DrawStringInt( - columns[i].column.title, font_, kTextColor, - GetMirroredXWithWidthInView(x, width), kVerticalPadding, width, - height() - kVerticalPadding * 2, + canvas->DrawStringRectWithFlags( + columns[i].column.title, font_list_, kTextColor, + gfx::Rect(GetMirroredXWithWidthInView(x, width), kVerticalPadding, + width, height() - kVerticalPadding * 2), TableColumnAlignmentToCanvasAlignment(columns[i].column.alignment)); if (paint_sort_indicator) { @@ -169,7 +171,7 @@ void TableHeader::OnPaint(gfx::Canvas* canvas) { } gfx::Size TableHeader::GetPreferredSize() { - return gfx::Size(1, kVerticalPadding * 2 + font_.GetHeight()); + return gfx::Size(1, kVerticalPadding * 2 + font_list_.GetHeight()); } gfx::NativeCursor TableHeader::GetCursor(const ui::MouseEvent& event) { diff --git a/ui/views/controls/table/table_header.h b/ui/views/controls/table/table_header.h index 2aa280d..7c9b8cc 100644 --- a/ui/views/controls/table/table_header.h +++ b/ui/views/controls/table/table_header.h @@ -5,7 +5,7 @@ #ifndef UI_VIEWS_CONTROLS_TABLE_TABLE_HEADER_H_ #define UI_VIEWS_CONTROLS_TABLE_TABLE_HEADER_H_ -#include "ui/gfx/font.h" +#include "ui/gfx/font_list.h" #include "ui/views/view.h" #include "ui/views/views_export.h" @@ -25,7 +25,7 @@ class VIEWS_EXPORT TableHeader : public views::View { explicit TableHeader(TableView* table); virtual ~TableHeader(); - const gfx::Font& font() const { return font_; } + const gfx::FontList& font_list() const { return font_list_; } // views::View overrides. virtual void Layout() OVERRIDE; @@ -70,7 +70,7 @@ class VIEWS_EXPORT TableHeader : public views::View { bool is_resizing() const { return resize_details_.get() != NULL; } - const gfx::Font font_; + const gfx::FontList font_list_; TableView* table_; diff --git a/ui/views/controls/table/table_utils.cc b/ui/views/controls/table/table_utils.cc index 1e730d0..393c22d 100644 --- a/ui/views/controls/table/table_utils.cc +++ b/ui/views/controls/table/table_utils.cc @@ -6,26 +6,28 @@ #include "base/logging.h" #include "ui/gfx/canvas.h" -#include "ui/gfx/font.h" +#include "ui/gfx/font_list.h" +#include "ui/gfx/text_utils.h" #include "ui/views/controls/table/table_view.h" namespace views { const int kUnspecifiedColumnWidth = 90; -int WidthForContent(const gfx::Font& header_font, - const gfx::Font& content_font, +int WidthForContent(const gfx::FontList& header_font_list, + const gfx::FontList& content_font_list, int padding, int header_padding, const ui::TableColumn& column, ui::TableModel* model) { int width = header_padding; if (!column.title.empty()) - width = header_font.GetStringWidth(column.title) + header_padding; + width = gfx::GetStringWidth(column.title, header_font_list) + + header_padding; for (int i = 0, row_count = model->RowCount(); i < row_count; ++i) { const int cell_width = - content_font.GetStringWidth(model->GetText(i, column.id)); + gfx::GetStringWidth(model->GetText(i, column.id), content_font_list); width = std::max(width, cell_width); } return width + padding; @@ -34,8 +36,8 @@ int WidthForContent(const gfx::Font& header_font, std::vector<int> CalculateTableColumnSizes( int width, int first_column_padding, - const gfx::Font& header_font, - const gfx::Font& content_font, + const gfx::FontList& header_font_list, + const gfx::FontList& content_font_list, int padding, int header_padding, const std::vector<ui::TableColumn>& columns, @@ -49,11 +51,12 @@ std::vector<int> CalculateTableColumnSizes( if (column.percent > 0) { total_percent += column.percent; // Make sure there is at least enough room for the header. - content_widths[i] = header_font.GetStringWidth(column.title) + padding + - header_padding; + content_widths[i] = gfx::GetStringWidth(column.title, header_font_list) + + padding + header_padding; } else { - content_widths[i] = WidthForContent(header_font, content_font, padding, - header_padding, column, model); + content_widths[i] = WidthForContent(header_font_list, content_font_list, + padding, header_padding, column, + model); if (i == 0) content_widths[i] += first_column_padding; } diff --git a/ui/views/controls/table/table_utils.h b/ui/views/controls/table/table_utils.h index 3c5d4c7..ec38710 100644 --- a/ui/views/controls/table/table_utils.h +++ b/ui/views/controls/table/table_utils.h @@ -11,7 +11,7 @@ #include "ui/views/views_export.h" namespace gfx { -class Font; +class FontList; } namespace views { @@ -23,23 +23,23 @@ VIEWS_EXPORT extern const int kUnspecifiedColumnWidth; // Returns the width needed to display the contents of the specified column. // This is used internally by CalculateTableColumnSizes() and generally not // useful by itself. |header_padding| is padding added to the header. -VIEWS_EXPORT int WidthForContent(const gfx::Font& header_font, - const gfx::Font& content_font, +VIEWS_EXPORT int WidthForContent(const gfx::FontList& header_font_list, + const gfx::FontList& content_font_list, int padding, int header_padding, const ui::TableColumn& column, ui::TableModel* model); // Determines the width for each of the specified columns. |width| is the width -// to fit the columns into. |header_font| the font used to draw the header and -// |content_font| the header used to draw the content. |padding| is extra -// horizontal spaced added to each cell, and |header_padding| added to the -// width needed for the header. +// to fit the columns into. |header_font_list| the font list used to draw the +// header and |content_font_list| the header used to draw the content. |padding| +// is extra horizontal spaced added to each cell, and |header_padding| added to +// the width needed for the header. VIEWS_EXPORT std::vector<int> CalculateTableColumnSizes( int width, int first_column_padding, - const gfx::Font& header_font, - const gfx::Font& content_font, + const gfx::FontList& header_font_list, + const gfx::FontList& content_font_list, int padding, int header_padding, const std::vector<ui::TableColumn>& columns, diff --git a/ui/views/controls/table/table_utils_unittest.cc b/ui/views/controls/table/table_utils_unittest.cc index e6c6369..98b1fd2 100644 --- a/ui/views/controls/table/table_utils_unittest.cc +++ b/ui/views/controls/table/table_utils_unittest.cc @@ -6,7 +6,7 @@ #include "base/strings/string_number_conversions.h" #include "testing/gtest/include/gtest/gtest.h" -#include "ui/gfx/font.h" +#include "ui/gfx/font_list.h" #include "ui/views/controls/table/test_table_model.h" using ui::TableColumn; @@ -40,17 +40,19 @@ TEST(TableUtilsTest, SetWidthHonored) { std::vector<TableColumn> columns; columns.push_back(CreateTableColumnWithWidth(20)); columns.push_back(CreateTableColumnWithWidth(30)); - gfx::Font font; - std::vector<int> result( - CalculateTableColumnSizes(100, 0, font, font, 0, 0, columns, &model)); + gfx::FontList font_list; + std::vector<int> result(CalculateTableColumnSizes( + 100, 0, font_list, font_list, 0, 0, columns, &model)); EXPECT_EQ("20,30", IntVectorToString(result)); // Same with some padding, it should be ignored. - result = CalculateTableColumnSizes(100, 0, font, font, 2, 0, columns, &model); + result = CalculateTableColumnSizes( + 100, 0, font_list, font_list, 2, 0, columns, &model); EXPECT_EQ("20,30", IntVectorToString(result)); // Same with not enough space, it shouldn't matter. - result = CalculateTableColumnSizes(10, 0, font, font, 2, 0, columns, &model); + result = CalculateTableColumnSizes( + 10, 0, font_list, font_list, 2, 0, columns, &model); EXPECT_EQ("20,30", IntVectorToString(result)); } @@ -61,11 +63,12 @@ TEST(TableUtilsTest, LastColumnGetsAllSpace) { std::vector<TableColumn> columns; columns.push_back(ui::TableColumn()); columns.push_back(ui::TableColumn()); - gfx::Font font; - std::vector<int> result( - CalculateTableColumnSizes(500, 0, font, font, 0, 0, columns, &model)); + gfx::FontList font_list; + std::vector<int> result(CalculateTableColumnSizes( + 500, 0, font_list, font_list, 0, 0, columns, &model)); EXPECT_NE(0, result[0]); - EXPECT_GE(result[1], WidthForContent(font, font, 0, 0, columns[1], &model)); + EXPECT_GE(result[1], + WidthForContent(font_list, font_list, 0, 0, columns[1], &model)); EXPECT_EQ(500, result[0] + result[1]); } @@ -77,38 +80,45 @@ TEST(TableUtilsTest, SingleResizableColumn) { columns.push_back(ui::TableColumn()); columns.push_back(ui::TableColumn()); columns[2].percent = 1.0f; - gfx::Font font; - std::vector<int> result( - CalculateTableColumnSizes(500, 0, font, font, 0, 0, columns, &model)); - EXPECT_EQ(result[0], WidthForContent(font, font, 0, 0, columns[0], &model)); - EXPECT_EQ(result[1], WidthForContent(font, font, 0, 0, columns[1], &model)); + gfx::FontList font_list; + std::vector<int> result(CalculateTableColumnSizes( + 500, 0, font_list, font_list, 0, 0, columns, &model)); + EXPECT_EQ(result[0], + WidthForContent(font_list, font_list, 0, 0, columns[0], &model)); + EXPECT_EQ(result[1], + WidthForContent(font_list, font_list, 0, 0, columns[1], &model)); EXPECT_EQ(500 - result[0] - result[1], result[2]); // The same with a slightly larger width passed in. - result = - CalculateTableColumnSizes(1000, 0, font, font, 0, 0, columns, &model); - EXPECT_EQ(result[0], WidthForContent(font, font, 0, 0, columns[0], &model)); - EXPECT_EQ(result[1], WidthForContent(font, font, 0, 0, columns[1], &model)); + result = CalculateTableColumnSizes( + 1000, 0, font_list, font_list, 0, 0, columns, &model); + EXPECT_EQ(result[0], + WidthForContent(font_list, font_list, 0, 0, columns[0], &model)); + EXPECT_EQ(result[1], + WidthForContent(font_list, font_list, 0, 0, columns[1], &model)); EXPECT_EQ(1000 - result[0] - result[1], result[2]); // Verify padding for the first column is honored. - result = - CalculateTableColumnSizes(1000, 10, font, font, 0, 0, columns, &model); + result = CalculateTableColumnSizes( + 1000, 10, font_list, font_list, 0, 0, columns, &model); EXPECT_EQ(result[0], - WidthForContent(font, font, 0, 0, columns[0], &model) + 10); - EXPECT_EQ(result[1], WidthForContent(font, font, 0, 0, columns[1], &model)); + WidthForContent(font_list, font_list, 0, 0, columns[0], &model) + + 10); + EXPECT_EQ(result[1], + WidthForContent(font_list, font_list, 0, 0, columns[1], &model)); EXPECT_EQ(1000 - result[0] - result[1], result[2]); // Just enough space to show the first two columns. Should force last column // to min size. - result = - CalculateTableColumnSizes(1000, 0, font, font, 0, 0, columns, &model); - result = CalculateTableColumnSizes(result[0] + result[1], 0, font, font, 0, 0, - columns, &model); - EXPECT_EQ(result[0], WidthForContent(font, font, 0, 0, columns[0], &model)); - EXPECT_EQ(result[1], WidthForContent(font, font, 0, 0, columns[1], &model)); + result = CalculateTableColumnSizes( + 1000, 0, font_list, font_list, 0, 0, columns, &model); + result = CalculateTableColumnSizes( + result[0] + result[1], 0, font_list, font_list, 0, 0, columns, &model); + EXPECT_EQ(result[0], + WidthForContent(font_list, font_list, 0, 0, columns[0], &model)); + EXPECT_EQ(result[1], + WidthForContent(font_list, font_list, 0, 0, columns[1], &model)); EXPECT_EQ(kUnspecifiedColumnWidth, result[2]); } } // namespace views - diff --git a/ui/views/controls/table/table_view.cc b/ui/views/controls/table/table_view.cc index a23c981..f1a06f4 100644 --- a/ui/views/controls/table/table_view.cc +++ b/ui/views/controls/table/table_view.cc @@ -13,6 +13,7 @@ #include "ui/gfx/image/image_skia.h" #include "ui/gfx/rect_conversions.h" #include "ui/gfx/skia_util.h" +#include "ui/gfx/text_utils.h" #include "ui/native_theme/native_theme.h" #include "ui/views/controls/scroll_view.h" #include "ui/views/controls/table/table_grouper.h" @@ -124,7 +125,7 @@ TableView::TableView(ui::TableModel* model, table_type_(table_type), single_selection_(single_selection), table_view_observer_(NULL), - row_height_(font_.GetHeight() + kTextVerticalPadding * 2), + row_height_(font_list_.GetHeight() + kTextVerticalPadding * 2), last_parent_width_(0), layout_width_(0), grouper_(NULL), @@ -522,14 +523,14 @@ void TableView::OnPaint(gfx::Canvas* canvas) { text_x += kImageSize + kTextHorizontalPadding; } if (text_x < cell_bounds.right() - kTextHorizontalPadding) { - canvas->DrawStringInt( - model_->GetText(model_index, visible_columns_[j].column.id), font_, - is_selected ? selected_fg_color : fg_color, - GetMirroredXWithWidthInView(text_x, cell_bounds.right() - text_x - - kTextHorizontalPadding), - cell_bounds.y() + kTextVerticalPadding, - cell_bounds.right() - text_x, - cell_bounds.height() - kTextVerticalPadding * 2, + canvas->DrawStringRectWithFlags( + model_->GetText(model_index, visible_columns_[j].column.id), + font_list_, is_selected ? selected_fg_color : fg_color, + gfx::Rect(GetMirroredXWithWidthInView( + text_x, cell_bounds.right() - text_x - kTextHorizontalPadding), + cell_bounds.y() + kTextVerticalPadding, + cell_bounds.right() - text_x, + cell_bounds.height() - kTextVerticalPadding * 2), TableColumnAlignmentToCanvasAlignment( visible_columns_[j].column.alignment)); } @@ -684,7 +685,7 @@ void TableView::UpdateVisibleColumnSizes() { first_column_padding += kGroupingIndicatorSize + kTextHorizontalPadding; std::vector<int> sizes = views::CalculateTableColumnSizes( - layout_width_, first_column_padding, header_->font(), font_, + layout_width_, first_column_padding, header_->font_list(), font_list_, std::max(kTextHorizontalPadding, TableHeader::kHorizontalPadding) * 2, TableHeader::kSortIndicatorWidth, columns, model_); DCHECK_EQ(visible_columns_.size(), sizes.size()); @@ -892,7 +893,7 @@ bool TableView::GetTooltipImpl(const gfx::Point& location, AdjustCellBoundsForText(column, &cell_bounds); const int right = std::min(GetVisibleBounds().right(), cell_bounds.right()); if (right > cell_bounds.x() && - font_.GetStringWidth(text) <= (right - cell_bounds.x())) + gfx::GetStringWidth(text, font_list_) <= (right - cell_bounds.x())) return false; if (tooltip) diff --git a/ui/views/controls/table/table_view.h b/ui/views/controls/table/table_view.h index 64cb2a4..982469f 100644 --- a/ui/views/controls/table/table_view.h +++ b/ui/views/controls/table/table_view.h @@ -11,7 +11,7 @@ #include "ui/base/models/list_selection_model.h" #include "ui/base/models/table_model.h" #include "ui/base/models/table_model_observer.h" -#include "ui/gfx/font.h" +#include "ui/gfx/font_list.h" #include "ui/views/view.h" #include "ui/views/views_export.h" @@ -316,7 +316,7 @@ class VIEWS_EXPORT TableView // The selection, in terms of the model. ui::ListSelectionModel selection_model_; - gfx::Font font_; + gfx::FontList font_list_; int row_height_; |