summaryrefslogtreecommitdiffstats
path: root/ui
diff options
context:
space:
mode:
Diffstat (limited to 'ui')
-rw-r--r--ui/views/controls/table/table_header.cc14
-rw-r--r--ui/views/controls/table/table_header.h6
-rw-r--r--ui/views/controls/table/table_utils.cc25
-rw-r--r--ui/views/controls/table/table_utils.h18
-rw-r--r--ui/views/controls/table/table_utils_unittest.cc70
-rw-r--r--ui/views/controls/table/table_view.cc23
-rw-r--r--ui/views/controls/table/table_view.h4
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_;