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

Side by Side Diff: ui/views/controls/label.cc

Issue 2541313002: RenderTextHarfBuzz: Add support for multi line text selection. (Closed)
Patch Set: --- 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/controls/label.h" 5 #include "ui/views/controls/label.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <cmath> 10 #include <cmath>
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
168 void Label::SetMultiLine(bool multi_line) { 168 void Label::SetMultiLine(bool multi_line) {
169 DCHECK(!multi_line || (elide_behavior_ == gfx::ELIDE_TAIL || 169 DCHECK(!multi_line || (elide_behavior_ == gfx::ELIDE_TAIL ||
170 elide_behavior_ == gfx::NO_ELIDE)); 170 elide_behavior_ == gfx::NO_ELIDE));
171 if (this->multi_line() == multi_line) 171 if (this->multi_line() == multi_line)
172 return; 172 return;
173 is_first_paint_text_ = true; 173 is_first_paint_text_ = true;
174 multi_line_ = multi_line; 174 multi_line_ = multi_line;
175 if (render_text_->MultilineSupported()) 175 if (render_text_->MultilineSupported())
176 render_text_->SetMultiline(multi_line); 176 render_text_->SetMultiline(multi_line);
177 render_text_->SetReplaceNewlineCharsWithSymbols(!multi_line); 177 render_text_->SetReplaceNewlineCharsWithSymbols(!multi_line);
178 if (multi_line)
179 SetSelectable(false);
180 ResetLayout(); 178 ResetLayout();
181 } 179 }
182 180
183 void Label::SetObscured(bool obscured) { 181 void Label::SetObscured(bool obscured) {
184 if (this->obscured() == obscured) 182 if (this->obscured() == obscured)
185 return; 183 return;
186 is_first_paint_text_ = true; 184 is_first_paint_text_ = true;
187 render_text_->SetObscured(obscured); 185 render_text_->SetObscured(obscured);
188 if (obscured) 186 if (obscured)
189 SetSelectable(false); 187 SetSelectable(false);
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
243 return result; 241 return result;
244 result.append(lines_[0]->GetDisplayText()); 242 result.append(lines_[0]->GetDisplayText());
245 for (size_t i = 1; i < lines_.size(); ++i) { 243 for (size_t i = 1; i < lines_.size(); ++i) {
246 result.append(1, '\n'); 244 result.append(1, '\n');
247 result.append(lines_[i]->GetDisplayText()); 245 result.append(lines_[i]->GetDisplayText());
248 } 246 }
249 return result; 247 return result;
250 } 248 }
251 249
252 bool Label::IsSelectionSupported() const { 250 bool Label::IsSelectionSupported() const {
253 return !multi_line() && !obscured() && render_text_->IsSelectionSupported(); 251 return !obscured() && render_text_->IsSelectionSupported();
254 } 252 }
255 253
256 bool Label::SetSelectable(bool value) { 254 bool Label::SetSelectable(bool value) {
257 if (value == selectable()) 255 if (value == selectable())
258 return true; 256 return true;
259 257
260 if (!value) { 258 if (!value) {
261 ClearSelection(); 259 ClearSelection();
262 stored_selection_range_ = gfx::Range::InvalidRange(); 260 stored_selection_range_ = gfx::Range::InvalidRange();
263 selection_controller_.reset(); 261 selection_controller_.reset();
(...skipping 752 matching lines...) Expand 10 before | Expand all | Expand 10 after
1016 .WriteText(GetSelectedText()); 1014 .WriteText(GetSelectedText());
1017 } 1015 }
1018 1016
1019 void Label::BuildContextMenuContents() { 1017 void Label::BuildContextMenuContents() {
1020 context_menu_contents_.AddItemWithStringId(IDS_APP_COPY, IDS_APP_COPY); 1018 context_menu_contents_.AddItemWithStringId(IDS_APP_COPY, IDS_APP_COPY);
1021 context_menu_contents_.AddItemWithStringId(IDS_APP_SELECT_ALL, 1019 context_menu_contents_.AddItemWithStringId(IDS_APP_SELECT_ALL,
1022 IDS_APP_SELECT_ALL); 1020 IDS_APP_SELECT_ALL);
1023 } 1021 }
1024 1022
1025 } // namespace views 1023 } // namespace views
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698