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 }; | |
64 | 53 |
65 // Toggles bit |flag| on |flags| based on state of |checkbox|. | 54 // Toggles bit |flag| on |flags| based on state of |checkbox|. |
66 void SetFlagFromCheckbox(Checkbox* checkbox, int* flags, int flag) { | 55 void SetFlagFromCheckbox(Checkbox* checkbox, int* flags, int flag) { |
67 if (checkbox->checked()) | 56 if (checkbox->checked()) |
68 *flags |= flag; | 57 *flags |= flag; |
69 else | 58 else |
70 *flags &= ~flag; | 59 *flags &= ~flag; |
71 } | 60 } |
72 | 61 |
73 } // namespace | 62 } // namespace |
(...skipping 17 matching lines...) Expand all Loading... |
91 canvas->DrawStringRectWithFlags(text_, font_list_, color, bounds, flags_); | 80 canvas->DrawStringRectWithFlags(text_, font_list_, color, bounds, flags_); |
92 } | 81 } |
93 } | 82 } |
94 | 83 |
95 int flags() const { return flags_; } | 84 int flags() const { return flags_; } |
96 void set_flags(int flags) { flags_ = flags; } | 85 void set_flags(int flags) { flags_ = flags; } |
97 void set_text(const base::string16& text) { text_ = text; } | 86 void set_text(const base::string16& text) { text_ = text; } |
98 void set_elide(gfx::ElideBehavior elide) { elide_ = elide; } | 87 void set_elide(gfx::ElideBehavior elide) { elide_ = elide; } |
99 | 88 |
100 int GetStyle() const { return font_list_.GetFontStyle(); } | 89 int GetStyle() const { return font_list_.GetFontStyle(); } |
101 void SetStyle(int style) { | 90 void SetStyle(int style) { font_list_ = font_list_.DeriveWithStyle(style); } |
102 base_font_ = base_font_.DeriveWithStyle(style); | |
103 font_list_ = font_list_.DeriveWithStyle(style); | |
104 } | |
105 | 91 |
106 gfx::Font::Weight GetWeight() const { return font_list_.GetFontWeight(); } | 92 gfx::Font::Weight GetWeight() const { return font_list_.GetFontWeight(); } |
107 void SetWeight(gfx::Font::Weight weight) { | 93 void SetWeight(gfx::Font::Weight weight) { |
108 font_list_ = base_font_.DeriveWithWeight(weight); | 94 font_list_ = font_list_.DeriveWithWeight(weight); |
109 } | 95 } |
110 | 96 |
111 private: | 97 private: |
112 // The font used for drawing the text. | 98 // The font used for drawing the text. |
113 gfx::FontList font_list_; | 99 gfx::FontList font_list_; |
114 | 100 |
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 | |
119 // The text to draw. | 101 // The text to draw. |
120 base::string16 text_; | 102 base::string16 text_; |
121 | 103 |
122 // Text flags for passing to |DrawStringRect()|. | 104 // Text flags for passing to |DrawStringRect()|. |
123 int flags_; | 105 int flags_; |
124 | 106 |
125 // The eliding, fading, or truncating behavior. | 107 // The eliding, fading, or truncating behavior. |
126 gfx::ElideBehavior elide_; | 108 gfx::ElideBehavior elide_; |
127 | 109 |
128 DISALLOW_COPY_AND_ASSIGN(TextExampleView); | 110 DISALLOW_COPY_AND_ASSIGN(TextExampleView); |
129 }; | 111 }; |
130 | 112 |
131 TextExample::TextExample() : ExampleBase("Text Styles") {} | 113 TextExample::TextExample() : ExampleBase("Text Styles") {} |
132 | 114 |
133 TextExample::~TextExample() { | 115 TextExample::~TextExample() { |
134 // Remove the views first as some reference combobox models. | 116 // Remove the views first as some reference combobox models. |
135 container()->RemoveAllChildViews(true); | 117 container()->RemoveAllChildViews(true); |
136 } | 118 } |
137 | 119 |
138 Checkbox* TextExample::AddCheckbox(GridLayout* layout, const char* name) { | 120 Checkbox* TextExample::AddCheckbox(GridLayout* layout, const char* name) { |
139 Checkbox* checkbox = new Checkbox(base::ASCIIToUTF16(name)); | 121 Checkbox* checkbox = new Checkbox(base::ASCIIToUTF16(name)); |
140 checkbox->set_listener(this); | 122 checkbox->set_listener(this); |
141 layout->AddView(checkbox); | 123 layout->AddView(checkbox); |
142 return checkbox; | 124 return checkbox; |
143 } | 125 } |
144 | 126 |
145 Combobox* TextExample::AddCombobox(GridLayout* layout, | 127 Combobox* TextExample::AddCombobox(GridLayout* layout, |
146 const char* name, | 128 const char* name, |
147 const char* const* strings, | 129 const char** strings, |
148 int count) { | 130 int count) { |
149 layout->StartRow(0, 0); | 131 layout->StartRow(0, 0); |
150 layout->AddView(new Label(base::ASCIIToUTF16(name))); | 132 layout->AddView(new Label(base::ASCIIToUTF16(name))); |
151 example_combobox_model_.push_back( | 133 example_combobox_model_.push_back( |
152 base::MakeUnique<ExampleComboboxModel>(strings, count)); | 134 base::MakeUnique<ExampleComboboxModel>(strings, count)); |
153 Combobox* combobox = new Combobox(example_combobox_model_.back().get()); | 135 Combobox* combobox = new Combobox(example_combobox_model_.back().get()); |
154 combobox->SetSelectedIndex(0); | 136 combobox->SetSelectedIndex(0); |
155 combobox->set_listener(this); | 137 combobox->set_listener(this); |
156 layout->AddView(combobox, kNumColumns - 1, 1); | 138 layout->AddView(combobox, kNumColumns - 1, 1); |
157 return combobox; | 139 return combobox; |
(...skipping 16 matching lines...) Expand all Loading... |
174 column_set->AddPaddingColumn(0, 8); | 156 column_set->AddPaddingColumn(0, 8); |
175 | 157 |
176 h_align_cb_ = AddCombobox(layout, "H-Align", kHorizontalAligments, | 158 h_align_cb_ = AddCombobox(layout, "H-Align", kHorizontalAligments, |
177 arraysize(kHorizontalAligments)); | 159 arraysize(kHorizontalAligments)); |
178 eliding_cb_ = AddCombobox(layout, "Eliding", kElideBehaviors, | 160 eliding_cb_ = AddCombobox(layout, "Eliding", kElideBehaviors, |
179 arraysize(kElideBehaviors)); | 161 arraysize(kElideBehaviors)); |
180 prefix_cb_ = AddCombobox(layout, "Prefix", kPrefixOptions, | 162 prefix_cb_ = AddCombobox(layout, "Prefix", kPrefixOptions, |
181 arraysize(kPrefixOptions)); | 163 arraysize(kPrefixOptions)); |
182 text_cb_ = AddCombobox(layout, "Example Text", kTextExamples, | 164 text_cb_ = AddCombobox(layout, "Example Text", kTextExamples, |
183 arraysize(kTextExamples)); | 165 arraysize(kTextExamples)); |
184 weight_cb_ = AddCombobox(layout, "Font Weight", kWeightLabels, | |
185 arraysize(kWeightLabels)); | |
186 weight_cb_->SelectValue(base::ASCIIToUTF16("Normal")); | |
187 | 166 |
188 layout->StartRow(0, 0); | 167 layout->StartRow(0, 0); |
189 multiline_checkbox_ = AddCheckbox(layout, "Multiline"); | 168 multiline_checkbox_ = AddCheckbox(layout, "Multiline"); |
190 break_checkbox_ = AddCheckbox(layout, "Character Break"); | 169 break_checkbox_ = AddCheckbox(layout, "Character Break"); |
| 170 bold_checkbox_ = AddCheckbox(layout, "Bold"); |
191 italic_checkbox_ = AddCheckbox(layout, "Italic"); | 171 italic_checkbox_ = AddCheckbox(layout, "Italic"); |
192 underline_checkbox_ = AddCheckbox(layout, "Underline"); | 172 underline_checkbox_ = AddCheckbox(layout, "Underline"); |
193 | 173 |
194 layout->AddPaddingRow(0, 20); | 174 layout->AddPaddingRow(0, 20); |
195 column_set = layout->AddColumnSet(1); | 175 column_set = layout->AddColumnSet(1); |
196 column_set->AddPaddingColumn(0, 16); | 176 column_set->AddPaddingColumn(0, 16); |
197 column_set->AddColumn(GridLayout::FILL, GridLayout::FILL, | 177 column_set->AddColumn(GridLayout::FILL, GridLayout::FILL, |
198 1, GridLayout::USE_PREF, 0, 0); | 178 1, GridLayout::USE_PREF, 0, 0); |
199 column_set->AddPaddingColumn(0, 16); | 179 column_set->AddPaddingColumn(0, 16); |
200 layout->StartRow(1, 1); | 180 layout->StartRow(1, 1); |
201 layout->AddView(text_view_); | 181 layout->AddView(text_view_); |
202 layout->AddPaddingRow(0, 8); | 182 layout->AddPaddingRow(0, 8); |
203 } | 183 } |
204 | 184 |
205 void TextExample::ButtonPressed(Button* button, const ui::Event& event) { | 185 void TextExample::ButtonPressed(Button* button, const ui::Event& event) { |
206 int flags = text_view_->flags(); | 186 int flags = text_view_->flags(); |
207 int style = text_view_->GetStyle(); | 187 int style = text_view_->GetStyle(); |
208 SetFlagFromCheckbox(multiline_checkbox_, &flags, gfx::Canvas::MULTI_LINE); | 188 SetFlagFromCheckbox(multiline_checkbox_, &flags, gfx::Canvas::MULTI_LINE); |
209 SetFlagFromCheckbox(break_checkbox_, &flags, gfx::Canvas::CHARACTER_BREAK); | 189 SetFlagFromCheckbox(break_checkbox_, &flags, gfx::Canvas::CHARACTER_BREAK); |
210 SetFlagFromCheckbox(italic_checkbox_, &style, gfx::Font::ITALIC); | 190 SetFlagFromCheckbox(italic_checkbox_, &style, gfx::Font::ITALIC); |
211 SetFlagFromCheckbox(underline_checkbox_, &style, gfx::Font::UNDERLINE); | 191 SetFlagFromCheckbox(underline_checkbox_, &style, gfx::Font::UNDERLINE); |
212 text_view_->set_flags(flags); | 192 text_view_->set_flags(flags); |
213 text_view_->SetStyle(style); | 193 text_view_->SetStyle(style); |
| 194 text_view_->SetWeight(bold_checkbox_->checked() ? gfx::Font::Weight::BOLD |
| 195 : gfx::Font::Weight::NORMAL); |
214 text_view_->SchedulePaint(); | 196 text_view_->SchedulePaint(); |
215 } | 197 } |
216 | 198 |
217 void TextExample::OnPerformAction(Combobox* combobox) { | 199 void TextExample::OnPerformAction(Combobox* combobox) { |
218 int flags = text_view_->flags(); | 200 int flags = text_view_->flags(); |
219 if (combobox == h_align_cb_) { | 201 if (combobox == h_align_cb_) { |
220 flags &= ~(gfx::Canvas::TEXT_ALIGN_LEFT | | 202 flags &= ~(gfx::Canvas::TEXT_ALIGN_LEFT | |
221 gfx::Canvas::TEXT_ALIGN_CENTER | | 203 gfx::Canvas::TEXT_ALIGN_CENTER | |
222 gfx::Canvas::TEXT_ALIGN_RIGHT); | 204 gfx::Canvas::TEXT_ALIGN_RIGHT); |
223 switch (combobox->selected_index()) { | 205 switch (combobox->selected_index()) { |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
265 switch (combobox->selected_index()) { | 247 switch (combobox->selected_index()) { |
266 case 0: | 248 case 0: |
267 break; | 249 break; |
268 case 1: | 250 case 1: |
269 flags |= gfx::Canvas::SHOW_PREFIX; | 251 flags |= gfx::Canvas::SHOW_PREFIX; |
270 break; | 252 break; |
271 case 2: | 253 case 2: |
272 flags |= gfx::Canvas::HIDE_PREFIX; | 254 flags |= gfx::Canvas::HIDE_PREFIX; |
273 break; | 255 break; |
274 } | 256 } |
275 } else if (combobox == weight_cb_) { | |
276 text_view_->SetWeight(kFontWeights[combobox->selected_index()]); | |
277 } | 257 } |
278 text_view_->set_flags(flags); | 258 text_view_->set_flags(flags); |
279 text_view_->SchedulePaint(); | 259 text_view_->SchedulePaint(); |
280 } | 260 } |
281 | 261 |
282 } // namespace examples | 262 } // namespace examples |
283 } // namespace views | 263 } // namespace views |
OLD | NEW |