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

Side by Side Diff: ui/views/examples/text_example.cc

Issue 2869803005: Support finer grained font weights on Mac. (Closed)
Patch Set: self review - tested normal twice Created 3 years, 7 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 unified diff | Download patch
« no previous file with comments | « ui/views/examples/text_example.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/views/examples/text_example.h" 5 #include "ui/views/examples/text_example.h"
6 6
7 #include "base/macros.h" 7 #include "base/macros.h"
8 #include "base/memory/ptr_util.h" 8 #include "base/memory/ptr_util.h"
9 #include "base/strings/utf_string_conversions.h" 9 #include "base/strings/utf_string_conversions.h"
10 #include "ui/gfx/canvas.h" 10 #include "ui/gfx/canvas.h"
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
43 L"\x5e9\x5dc\x5d5\x5dd \x5d4\x5e2\x5d5\x5dc\x5dd! " 43 L"\x5e9\x5dc\x5d5\x5dd \x5d4\x5e2\x5d5\x5dc\x5dd! "
44 L"\x5e9\x5dc\x5d5\x5dd \x5d4\x5e2\x5d5\x5dc\x5dd! " 44 L"\x5e9\x5dc\x5d5\x5dd \x5d4\x5e2\x5d5\x5dc\x5dd! "
45 L"\x5e9\x5dc\x5d5\x5dd \x5d4\x5e2\x5d5\x5dc\x5dd! " 45 L"\x5e9\x5dc\x5d5\x5dd \x5d4\x5e2\x5d5\x5dc\x5dd! "
46 L"\x5e9\x5dc\x5d5\x5dd \x5d4\x5e2\x5d5\x5dc\x5dd! " 46 L"\x5e9\x5dc\x5d5\x5dd \x5d4\x5e2\x5d5\x5dc\x5dd! "
47 L"\x5e9\x5dc\x5d5\x5dd \x5d4\x5e2\x5d5\x5dc\x5dd!"; 47 L"\x5e9\x5dc\x5d5\x5dd \x5d4\x5e2\x5d5\x5dc\x5dd!";
48 48
49 const char* kTextExamples[] = { "Short", "Long", "Ampersands", "RTL Hebrew", }; 49 const char* kTextExamples[] = { "Short", "Long", "Ampersands", "RTL Hebrew", };
50 const char* kElideBehaviors[] = { "Elide", "No Elide", "Fade", }; 50 const char* kElideBehaviors[] = { "Elide", "No Elide", "Fade", };
51 const char* kPrefixOptions[] = { "Default", "Show", "Hide", }; 51 const char* kPrefixOptions[] = { "Default", "Show", "Hide", };
52 const char* kHorizontalAligments[] = { "Default", "Left", "Center", "Right", }; 52 const char* kHorizontalAligments[] = { "Default", "Left", "Center", "Right", };
53 constexpr const char* kWeightLabels[] = {
54 "Thin", "Extra Light", "Light", "Normal", "Medium",
55 "Semibold", "Bold", "Extra Bold", "Black",
56 };
57 constexpr gfx::Font::Weight kFontWeights[]{
58 gfx::Font::Weight::THIN, gfx::Font::Weight::EXTRA_LIGHT,
59 gfx::Font::Weight::LIGHT, gfx::Font::Weight::NORMAL,
60 gfx::Font::Weight::MEDIUM, gfx::Font::Weight::SEMIBOLD,
61 gfx::Font::Weight::BOLD, gfx::Font::Weight::EXTRA_BOLD,
62 gfx::Font::Weight::BLACK,
63 };
53 64
54 // Toggles bit |flag| on |flags| based on state of |checkbox|. 65 // Toggles bit |flag| on |flags| based on state of |checkbox|.
55 void SetFlagFromCheckbox(Checkbox* checkbox, int* flags, int flag) { 66 void SetFlagFromCheckbox(Checkbox* checkbox, int* flags, int flag) {
56 if (checkbox->checked()) 67 if (checkbox->checked())
57 *flags |= flag; 68 *flags |= flag;
58 else 69 else
59 *flags &= ~flag; 70 *flags &= ~flag;
60 } 71 }
61 72
62 } // namespace 73 } // namespace
(...skipping 17 matching lines...) Expand all
80 canvas->DrawStringRectWithFlags(text_, font_list_, color, bounds, flags_); 91 canvas->DrawStringRectWithFlags(text_, font_list_, color, bounds, flags_);
81 } 92 }
82 } 93 }
83 94
84 int flags() const { return flags_; } 95 int flags() const { return flags_; }
85 void set_flags(int flags) { flags_ = flags; } 96 void set_flags(int flags) { flags_ = flags; }
86 void set_text(const base::string16& text) { text_ = text; } 97 void set_text(const base::string16& text) { text_ = text; }
87 void set_elide(gfx::ElideBehavior elide) { elide_ = elide; } 98 void set_elide(gfx::ElideBehavior elide) { elide_ = elide; }
88 99
89 int GetStyle() const { return font_list_.GetFontStyle(); } 100 int GetStyle() const { return font_list_.GetFontStyle(); }
90 void SetStyle(int style) { font_list_ = font_list_.DeriveWithStyle(style); } 101 void SetStyle(int style) {
102 base_font_ = base_font_.DeriveWithStyle(style);
103 font_list_ = font_list_.DeriveWithStyle(style);
104 }
91 105
92 gfx::Font::Weight GetWeight() const { return font_list_.GetFontWeight(); } 106 gfx::Font::Weight GetWeight() const { return font_list_.GetFontWeight(); }
93 void SetWeight(gfx::Font::Weight weight) { 107 void SetWeight(gfx::Font::Weight weight) {
94 font_list_ = font_list_.DeriveWithWeight(weight); 108 font_list_ = base_font_.DeriveWithWeight(weight);
95 } 109 }
96 110
97 private: 111 private:
98 // The font used for drawing the text. 112 // The font used for drawing the text.
99 gfx::FontList font_list_; 113 gfx::FontList font_list_;
100 114
115 // The font without any bold attributes. Mac font APIs struggle to derive UI
116 // fonts from a base font that isn't NORMAL or BOLD.
117 gfx::FontList base_font_;
118
101 // The text to draw. 119 // The text to draw.
102 base::string16 text_; 120 base::string16 text_;
103 121
104 // Text flags for passing to |DrawStringRect()|. 122 // Text flags for passing to |DrawStringRect()|.
105 int flags_; 123 int flags_;
106 124
107 // The eliding, fading, or truncating behavior. 125 // The eliding, fading, or truncating behavior.
108 gfx::ElideBehavior elide_; 126 gfx::ElideBehavior elide_;
109 127
110 DISALLOW_COPY_AND_ASSIGN(TextExampleView); 128 DISALLOW_COPY_AND_ASSIGN(TextExampleView);
111 }; 129 };
112 130
113 TextExample::TextExample() : ExampleBase("Text Styles") {} 131 TextExample::TextExample() : ExampleBase("Text Styles") {}
114 132
115 TextExample::~TextExample() { 133 TextExample::~TextExample() {
116 // Remove the views first as some reference combobox models. 134 // Remove the views first as some reference combobox models.
117 container()->RemoveAllChildViews(true); 135 container()->RemoveAllChildViews(true);
118 } 136 }
119 137
120 Checkbox* TextExample::AddCheckbox(GridLayout* layout, const char* name) { 138 Checkbox* TextExample::AddCheckbox(GridLayout* layout, const char* name) {
121 Checkbox* checkbox = new Checkbox(base::ASCIIToUTF16(name)); 139 Checkbox* checkbox = new Checkbox(base::ASCIIToUTF16(name));
122 checkbox->set_listener(this); 140 checkbox->set_listener(this);
123 layout->AddView(checkbox); 141 layout->AddView(checkbox);
124 return checkbox; 142 return checkbox;
125 } 143 }
126 144
127 Combobox* TextExample::AddCombobox(GridLayout* layout, 145 Combobox* TextExample::AddCombobox(GridLayout* layout,
128 const char* name, 146 const char* name,
129 const char** strings, 147 const char* const* strings,
130 int count) { 148 int count) {
131 layout->StartRow(0, 0); 149 layout->StartRow(0, 0);
132 layout->AddView(new Label(base::ASCIIToUTF16(name))); 150 layout->AddView(new Label(base::ASCIIToUTF16(name)));
133 example_combobox_model_.push_back( 151 example_combobox_model_.push_back(
134 base::MakeUnique<ExampleComboboxModel>(strings, count)); 152 base::MakeUnique<ExampleComboboxModel>(strings, count));
135 Combobox* combobox = new Combobox(example_combobox_model_.back().get()); 153 Combobox* combobox = new Combobox(example_combobox_model_.back().get());
136 combobox->SetSelectedIndex(0); 154 combobox->SetSelectedIndex(0);
137 combobox->set_listener(this); 155 combobox->set_listener(this);
138 layout->AddView(combobox, kNumColumns - 1, 1); 156 layout->AddView(combobox, kNumColumns - 1, 1);
139 return combobox; 157 return combobox;
(...skipping 16 matching lines...) Expand all
156 column_set->AddPaddingColumn(0, 8); 174 column_set->AddPaddingColumn(0, 8);
157 175
158 h_align_cb_ = AddCombobox(layout, "H-Align", kHorizontalAligments, 176 h_align_cb_ = AddCombobox(layout, "H-Align", kHorizontalAligments,
159 arraysize(kHorizontalAligments)); 177 arraysize(kHorizontalAligments));
160 eliding_cb_ = AddCombobox(layout, "Eliding", kElideBehaviors, 178 eliding_cb_ = AddCombobox(layout, "Eliding", kElideBehaviors,
161 arraysize(kElideBehaviors)); 179 arraysize(kElideBehaviors));
162 prefix_cb_ = AddCombobox(layout, "Prefix", kPrefixOptions, 180 prefix_cb_ = AddCombobox(layout, "Prefix", kPrefixOptions,
163 arraysize(kPrefixOptions)); 181 arraysize(kPrefixOptions));
164 text_cb_ = AddCombobox(layout, "Example Text", kTextExamples, 182 text_cb_ = AddCombobox(layout, "Example Text", kTextExamples,
165 arraysize(kTextExamples)); 183 arraysize(kTextExamples));
184 weight_cb_ = AddCombobox(layout, "Font Weight", kWeightLabels,
185 arraysize(kWeightLabels));
186 weight_cb_->SelectValue(base::ASCIIToUTF16("Normal"));
166 187
167 layout->StartRow(0, 0); 188 layout->StartRow(0, 0);
168 multiline_checkbox_ = AddCheckbox(layout, "Multiline"); 189 multiline_checkbox_ = AddCheckbox(layout, "Multiline");
169 break_checkbox_ = AddCheckbox(layout, "Character Break"); 190 break_checkbox_ = AddCheckbox(layout, "Character Break");
170 bold_checkbox_ = AddCheckbox(layout, "Bold");
171 italic_checkbox_ = AddCheckbox(layout, "Italic"); 191 italic_checkbox_ = AddCheckbox(layout, "Italic");
172 underline_checkbox_ = AddCheckbox(layout, "Underline"); 192 underline_checkbox_ = AddCheckbox(layout, "Underline");
173 193
174 layout->AddPaddingRow(0, 20); 194 layout->AddPaddingRow(0, 20);
175 column_set = layout->AddColumnSet(1); 195 column_set = layout->AddColumnSet(1);
176 column_set->AddPaddingColumn(0, 16); 196 column_set->AddPaddingColumn(0, 16);
177 column_set->AddColumn(GridLayout::FILL, GridLayout::FILL, 197 column_set->AddColumn(GridLayout::FILL, GridLayout::FILL,
178 1, GridLayout::USE_PREF, 0, 0); 198 1, GridLayout::USE_PREF, 0, 0);
179 column_set->AddPaddingColumn(0, 16); 199 column_set->AddPaddingColumn(0, 16);
180 layout->StartRow(1, 1); 200 layout->StartRow(1, 1);
181 layout->AddView(text_view_); 201 layout->AddView(text_view_);
182 layout->AddPaddingRow(0, 8); 202 layout->AddPaddingRow(0, 8);
183 } 203 }
184 204
185 void TextExample::ButtonPressed(Button* button, const ui::Event& event) { 205 void TextExample::ButtonPressed(Button* button, const ui::Event& event) {
186 int flags = text_view_->flags(); 206 int flags = text_view_->flags();
187 int style = text_view_->GetStyle(); 207 int style = text_view_->GetStyle();
188 SetFlagFromCheckbox(multiline_checkbox_, &flags, gfx::Canvas::MULTI_LINE); 208 SetFlagFromCheckbox(multiline_checkbox_, &flags, gfx::Canvas::MULTI_LINE);
189 SetFlagFromCheckbox(break_checkbox_, &flags, gfx::Canvas::CHARACTER_BREAK); 209 SetFlagFromCheckbox(break_checkbox_, &flags, gfx::Canvas::CHARACTER_BREAK);
190 SetFlagFromCheckbox(italic_checkbox_, &style, gfx::Font::ITALIC); 210 SetFlagFromCheckbox(italic_checkbox_, &style, gfx::Font::ITALIC);
191 SetFlagFromCheckbox(underline_checkbox_, &style, gfx::Font::UNDERLINE); 211 SetFlagFromCheckbox(underline_checkbox_, &style, gfx::Font::UNDERLINE);
192 text_view_->set_flags(flags); 212 text_view_->set_flags(flags);
193 text_view_->SetStyle(style); 213 text_view_->SetStyle(style);
194 text_view_->SetWeight(bold_checkbox_->checked() ? gfx::Font::Weight::BOLD
195 : gfx::Font::Weight::NORMAL);
196 text_view_->SchedulePaint(); 214 text_view_->SchedulePaint();
197 } 215 }
198 216
199 void TextExample::OnPerformAction(Combobox* combobox) { 217 void TextExample::OnPerformAction(Combobox* combobox) {
200 int flags = text_view_->flags(); 218 int flags = text_view_->flags();
201 if (combobox == h_align_cb_) { 219 if (combobox == h_align_cb_) {
202 flags &= ~(gfx::Canvas::TEXT_ALIGN_LEFT | 220 flags &= ~(gfx::Canvas::TEXT_ALIGN_LEFT |
203 gfx::Canvas::TEXT_ALIGN_CENTER | 221 gfx::Canvas::TEXT_ALIGN_CENTER |
204 gfx::Canvas::TEXT_ALIGN_RIGHT); 222 gfx::Canvas::TEXT_ALIGN_RIGHT);
205 switch (combobox->selected_index()) { 223 switch (combobox->selected_index()) {
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
247 switch (combobox->selected_index()) { 265 switch (combobox->selected_index()) {
248 case 0: 266 case 0:
249 break; 267 break;
250 case 1: 268 case 1:
251 flags |= gfx::Canvas::SHOW_PREFIX; 269 flags |= gfx::Canvas::SHOW_PREFIX;
252 break; 270 break;
253 case 2: 271 case 2:
254 flags |= gfx::Canvas::HIDE_PREFIX; 272 flags |= gfx::Canvas::HIDE_PREFIX;
255 break; 273 break;
256 } 274 }
275 } else if (combobox == weight_cb_) {
276 text_view_->SetWeight(kFontWeights[combobox->selected_index()]);
257 } 277 }
258 text_view_->set_flags(flags); 278 text_view_->set_flags(flags);
259 text_view_->SchedulePaint(); 279 text_view_->SchedulePaint();
260 } 280 }
261 281
262 } // namespace examples 282 } // namespace examples
263 } // namespace views 283 } // namespace views
OLDNEW
« no previous file with comments | « ui/views/examples/text_example.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698