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