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

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

Issue 2541313002: RenderTextHarfBuzz: Add support for multi line text selection. (Closed)
Patch Set: Nits. Created 4 years 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
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/label_example.h" 5 #include "ui/views/examples/label_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/geometry/vector2d.h" 10 #include "ui/gfx/geometry/vector2d.h"
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
108 label->SetText(ASCIIToUTF16("A multi-line label will wrap onto subsequent " 108 label->SetText(ASCIIToUTF16("A multi-line label will wrap onto subsequent "
109 "lines if the text's width exceeds the label's available width, which is " 109 "lines if the text's width exceeds the label's available width, which is "
110 "helpful for extemely long text used to demonstrate line wrapping.")); 110 "helpful for extemely long text used to demonstrate line wrapping."));
111 label->SetMultiLine(true); 111 label->SetMultiLine(true);
112 container->AddChildView(label); 112 container->AddChildView(label);
113 113
114 label = new Label(ASCIIToUTF16("Label with thick border")); 114 label = new Label(ASCIIToUTF16("Label with thick border"));
115 label->SetBorder(CreateSolidBorder(20, SK_ColorRED)); 115 label->SetBorder(CreateSolidBorder(20, SK_ColorRED));
116 container->AddChildView(label); 116 container->AddChildView(label);
117 117
118 label = new Label(ASCIIToUTF16("A label supporting text selection.")); 118 label = new Label(
119 ASCIIToUTF16("A multiline label...\n\n...which supports text selection"));
119 label->SetSelectable(true); 120 label->SetSelectable(true);
121 label->SetMultiLine(true);
120 container->AddChildView(label); 122 container->AddChildView(label);
121 123
122 AddCustomLabel(container); 124 AddCustomLabel(container);
123 } 125 }
124 126
125 void LabelExample::ButtonPressed(Button* button, const ui::Event& event) { 127 void LabelExample::ButtonPressed(Button* button, const ui::Event& event) {
126 if (button == multiline_) { 128 if (button == multiline_) {
127 custom_label_->SetMultiLine(multiline_->checked()); 129 custom_label_->SetMultiLine(multiline_->checked());
128 } else if (button == shadows_) { 130 } else if (button == shadows_) {
129 gfx::ShadowValues shadows; 131 gfx::ShadowValues shadows;
130 if (shadows_->checked()) { 132 if (shadows_->checked()) {
131 shadows.push_back(gfx::ShadowValue(gfx::Vector2d(), 1, SK_ColorRED)); 133 shadows.push_back(gfx::ShadowValue(gfx::Vector2d(), 1, SK_ColorRED));
132 shadows.push_back(gfx::ShadowValue(gfx::Vector2d(2, 2), 0, SK_ColorGRAY)); 134 shadows.push_back(gfx::ShadowValue(gfx::Vector2d(2, 2), 0, SK_ColorGRAY));
133 } 135 }
134 custom_label_->SetShadows(shadows); 136 custom_label_->SetShadows(shadows);
137 } else if (button == selectable_) {
138 custom_label_->SetSelectable(selectable_->checked());
135 } 139 }
136 custom_label_->parent()->parent()->Layout(); 140 custom_label_->parent()->parent()->Layout();
137 custom_label_->SchedulePaint(); 141 custom_label_->SchedulePaint();
138 } 142 }
139 143
140 void LabelExample::OnPerformAction(Combobox* combobox) { 144 void LabelExample::OnPerformAction(Combobox* combobox) {
141 if (combobox == alignment_) { 145 if (combobox == alignment_) {
142 custom_label_->SetHorizontalAlignment( 146 custom_label_->SetHorizontalAlignment(
143 static_cast<gfx::HorizontalAlignment>(combobox->selected_index())); 147 static_cast<gfx::HorizontalAlignment>(combobox->selected_index()));
144 } else if (combobox == elide_behavior_) { 148 } else if (combobox == elide_behavior_) {
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
179 alignment_ = AddCombobox(layout, "Alignment: ", kAlignments, 183 alignment_ = AddCombobox(layout, "Alignment: ", kAlignments,
180 arraysize(kAlignments)); 184 arraysize(kAlignments));
181 elide_behavior_ = AddCombobox(layout, "Elide Behavior: ", kElideBehaviors, 185 elide_behavior_ = AddCombobox(layout, "Elide Behavior: ", kElideBehaviors,
182 arraysize(kElideBehaviors)); 186 arraysize(kElideBehaviors));
183 187
184 column_set = layout->AddColumnSet(1); 188 column_set = layout->AddColumnSet(1);
185 column_set->AddColumn(GridLayout::LEADING, GridLayout::LEADING, 189 column_set->AddColumn(GridLayout::LEADING, GridLayout::LEADING,
186 0, GridLayout::USE_PREF, 0, 0); 190 0, GridLayout::USE_PREF, 0, 0);
187 column_set->AddColumn(GridLayout::LEADING, GridLayout::LEADING, 191 column_set->AddColumn(GridLayout::LEADING, GridLayout::LEADING,
188 0, GridLayout::USE_PREF, 0, 0); 192 0, GridLayout::USE_PREF, 0, 0);
193 column_set->AddColumn(GridLayout::LEADING, GridLayout::LEADING, 0,
194 GridLayout::USE_PREF, 0, 0);
189 layout->StartRow(0, 1); 195 layout->StartRow(0, 1);
190 multiline_ = new Checkbox(base::ASCIIToUTF16("Multiline")); 196 multiline_ = new Checkbox(base::ASCIIToUTF16("Multiline"));
191 multiline_->set_listener(this); 197 multiline_->set_listener(this);
192 layout->AddView(multiline_); 198 layout->AddView(multiline_);
193 shadows_ = new Checkbox(base::ASCIIToUTF16("Shadows")); 199 shadows_ = new Checkbox(base::ASCIIToUTF16("Shadows"));
194 shadows_->set_listener(this); 200 shadows_->set_listener(this);
195 layout->AddView(shadows_); 201 layout->AddView(shadows_);
202 selectable_ = new Checkbox(base::ASCIIToUTF16("Selectable"));
203 selectable_->set_listener(this);
204 layout->AddView(selectable_);
196 layout->AddPaddingRow(0, 8); 205 layout->AddPaddingRow(0, 8);
197 206
198 column_set = layout->AddColumnSet(2); 207 column_set = layout->AddColumnSet(2);
199 column_set->AddColumn(GridLayout::FILL, GridLayout::FILL, 208 column_set->AddColumn(GridLayout::FILL, GridLayout::FILL,
200 1, GridLayout::USE_PREF, 0, 0); 209 1, GridLayout::USE_PREF, 0, 0);
201 layout->StartRow(0, 2); 210 layout->StartRow(0, 2);
202 custom_label_ = new PreferredSizeLabel(); 211 custom_label_ = new PreferredSizeLabel();
203 custom_label_->SetHorizontalAlignment(gfx::ALIGN_LEFT); 212 custom_label_->SetHorizontalAlignment(gfx::ALIGN_LEFT);
204 custom_label_->SetElideBehavior(gfx::NO_ELIDE); 213 custom_label_->SetElideBehavior(gfx::NO_ELIDE);
205 custom_label_->SetText(textfield_->text()); 214 custom_label_->SetText(textfield_->text());
206 layout->AddView(custom_label_); 215 layout->AddView(custom_label_);
207 216
217 // Disable the text selection checkbox if |custom_label_| does not support
218 // text selection.
219 selectable_->SetEnabled(custom_label_->IsSelectionSupported());
220
208 container->AddChildView(control_container); 221 container->AddChildView(control_container);
209 } 222 }
210 223
211 Combobox* LabelExample::AddCombobox(GridLayout* layout, 224 Combobox* LabelExample::AddCombobox(GridLayout* layout,
212 const char* name, 225 const char* name,
213 const char** strings, 226 const char** strings,
214 int count) { 227 int count) {
215 layout->StartRow(0, 0); 228 layout->StartRow(0, 0);
216 layout->AddView(new Label(base::ASCIIToUTF16(name))); 229 layout->AddView(new Label(base::ASCIIToUTF16(name)));
217 ExampleComboboxModel* model = new ExampleComboboxModel(strings, count); 230 ExampleComboboxModel* model = new ExampleComboboxModel(strings, count);
218 example_combobox_models_.push_back(base::WrapUnique(model)); 231 example_combobox_models_.push_back(base::WrapUnique(model));
219 Combobox* combobox = new Combobox(model); 232 Combobox* combobox = new Combobox(model);
220 combobox->SetSelectedIndex(0); 233 combobox->SetSelectedIndex(0);
221 combobox->set_listener(this); 234 combobox->set_listener(this);
222 layout->AddView(combobox); 235 layout->AddView(combobox);
223 return combobox; 236 return combobox;
224 } 237 }
225 238
226 } // namespace examples 239 } // namespace examples
227 } // namespace views 240 } // namespace views
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698