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/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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |