| 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 |