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

Unified Diff: ui/views/controls/styled_label.cc

Issue 1140083002: Make StyledLabel wrap long words (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 7 months 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 side-by-side diff with in-line comments
Download patch
Index: ui/views/controls/styled_label.cc
diff --git a/ui/views/controls/styled_label.cc b/ui/views/controls/styled_label.cc
index 6c9ff2c522a8c53aa16b9d31bcee099bd908db7c..8d6f6a7225949557962974c7287f8b0833220eec 100644
--- a/ui/views/controls/styled_label.cc
+++ b/ui/views/controls/styled_label.cc
@@ -281,11 +281,11 @@ gfx::Size StyledLabel::CalculateAndDoLayout(int width, bool dry_run) {
text_font_list,
chunk_bounds.width(),
chunk_bounds.height(),
- gfx::IGNORE_LONG_WORDS,
+ gfx::TRUNCATE_LONG_WORDS,
msw 2015/05/13 23:05:39 Why doesn't this use WRAP_LONG_WORDS?
tbarzic 2015/05/14 00:02:28 WRAP_LONG_WORDS didn't work in first patch because
&substrings);
- DCHECK(!substrings.empty());
- base::string16 chunk = substrings[0];
+ base::string16 chunk =
+ substrings.empty() ? base::string16() : substrings[0];
if (chunk.empty()) {
msw 2015/05/13 23:05:39 nit: declare/assign |chunk| below this block and c
tbarzic 2015/05/14 00:02:28 Done.
// Nothing fits on this line. Start a new line.
// If x is 0, first line may have leading whitespace that doesn't fit in a
@@ -306,6 +306,7 @@ gfx::Size StyledLabel::CalculateAndDoLayout(int width, bool dry_run) {
}
scoped_ptr<Label> label;
+ bool whole_chunk_used = true;
if (position >= range.start()) {
const RangeStyleInfo& style_info = current_range->style_info;
@@ -318,7 +319,10 @@ gfx::Size StyledLabel::CalculateAndDoLayout(int width, bool dry_run) {
continue;
}
- chunk = chunk.substr(0, std::min(chunk.size(), range.end() - position));
+ if (chunk.size() > range.end() - position) {
+ whole_chunk_used = false;
+ chunk = chunk.substr(0, range.end() - position);
+ }
label = CreateLabelRange(chunk, font_list_, style_info, this);
@@ -329,8 +333,10 @@ gfx::Size StyledLabel::CalculateAndDoLayout(int width, bool dry_run) {
++current_range;
} else {
// This chunk is normal text.
- if (position + chunk.size() > range.start())
+ if (position + chunk.size() > range.start()) {
+ whole_chunk_used = false;
chunk = chunk.substr(0, range.start() - position);
+ }
label = CreateLabelRange(chunk, font_list_, default_style_info_, this);
}
@@ -354,6 +360,11 @@ gfx::Size StyledLabel::CalculateAndDoLayout(int width, bool dry_run) {
x += view_size.width() - focus_border_insets.width();
used_width = std::max(used_width, x);
+ if (substrings.size() > 1 && whole_chunk_used) {
msw 2015/05/13 23:05:39 I don't think you need |whole_chunk_used|, can you
tbarzic 2015/05/14 00:02:28 Done.
+ x = 0;
+ ++line;
+ }
+
remaining_string = remaining_string.substr(chunk.size());
}
« no previous file with comments | « no previous file | ui/views/controls/styled_label_unittest.cc » ('j') | ui/views/controls/styled_label_unittest.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698