| Index: ui/base/text/text_elider.cc
|
| ===================================================================
|
| --- ui/base/text/text_elider.cc (revision 114022)
|
| +++ ui/base/text/text_elider.cc (working copy)
|
| @@ -94,7 +94,7 @@
|
| url_path_elements, url_filename, i);
|
| if (available_pixel_width >= font.GetStringWidth(elided_path))
|
| return ElideText(elided_path + url_query,
|
| - font, available_pixel_width, false);
|
| + font, available_pixel_width, ui::ELIDE_AT_END);
|
| }
|
|
|
| return string16();
|
| @@ -125,7 +125,7 @@
|
|
|
| // If non-standard or not file type, return plain eliding.
|
| if (!(url.SchemeIsFile() || url.IsStandard()))
|
| - return ElideText(url_string, font, available_pixel_width, false);
|
| + return ElideText(url_string, font, available_pixel_width, ui::ELIDE_AT_END);
|
|
|
| // Now start eliding url_string to fit within available pixel width.
|
| // Fist pass - check to see whether entire url_string fits.
|
| @@ -142,7 +142,7 @@
|
| // Return general elided text if url minus the query fits.
|
| string16 url_minus_query = url_string.substr(0, path_start_index + path_len);
|
| if (available_pixel_width >= font.GetStringWidth(url_minus_query))
|
| - return ElideText(url_string, font, available_pixel_width, false);
|
| + return ElideText(url_string, font, available_pixel_width, ui::ELIDE_AT_END);
|
|
|
| // Get Host.
|
| string16 url_host = UTF8ToUTF16(url.host());
|
| @@ -213,7 +213,7 @@
|
| pixel_width_url_domain + pixel_width_url_path -
|
| font.GetStringWidth(url_query))) {
|
| return ElideText(url_subdomain + url_domain + url_path_query_etc,
|
| - font, available_pixel_width, false);
|
| + font, available_pixel_width, ui::ELIDE_AT_END);
|
| }
|
| }
|
|
|
| @@ -241,7 +241,7 @@
|
| // No path to elide, or too long of a path (could overflow in loop below)
|
| // Just elide this as a text string.
|
| return ElideText(url_subdomain + url_domain + url_path_query_etc, font,
|
| - available_pixel_width, false);
|
| + available_pixel_width, ui::ELIDE_AT_END);
|
| }
|
|
|
| // Start eliding the path and replacing elements by ".../".
|
| @@ -288,7 +288,8 @@
|
| final_elided_url_string += url_path;
|
| }
|
|
|
| - return ElideText(final_elided_url_string, font, available_pixel_width, false);
|
| + return ElideText(final_elided_url_string, font, available_pixel_width,
|
| + ui::ELIDE_AT_END);
|
| }
|
|
|
| string16 ElideFilename(const FilePath& filename,
|
| @@ -313,7 +314,7 @@
|
|
|
| if (rootname.empty() || extension.empty()) {
|
| string16 elided_name = ElideText(filename_utf16, font,
|
| - available_pixel_width, false);
|
| + available_pixel_width, ui::ELIDE_AT_END);
|
| return base::i18n::GetDisplayStringInLTRDirectionality(elided_name);
|
| }
|
|
|
| @@ -328,13 +329,14 @@
|
|
|
| if (ext_width >= available_pixel_width) {
|
| string16 elided_name = ElideText(rootname + extension, font,
|
| - available_pixel_width, true);
|
| + available_pixel_width,
|
| + ui::ELIDE_IN_MIDDLE);
|
| return base::i18n::GetDisplayStringInLTRDirectionality(elided_name);
|
| }
|
|
|
| int available_root_width = available_pixel_width - ext_width;
|
| string16 elided_name =
|
| - ElideText(rootname, font, available_root_width, false);
|
| + ElideText(rootname, font, available_root_width, ui::ELIDE_AT_END);
|
| elided_name += extension;
|
| return base::i18n::GetDisplayStringInLTRDirectionality(elided_name);
|
| }
|
| @@ -344,11 +346,13 @@
|
| string16 ElideText(const string16& text,
|
| const gfx::Font& font,
|
| int available_pixel_width,
|
| - bool elide_in_middle) {
|
| + ElideBehavior elide_behavior) {
|
| if (text.empty())
|
| return text;
|
|
|
| int current_text_pixel_width = font.GetStringWidth(text);
|
| + bool elide_in_middle = (elide_behavior == ui::ELIDE_IN_MIDDLE);
|
| + bool insert_ellipsis = (elide_behavior != ui::TRUNCATE_AT_END);
|
|
|
| // Pango will return 0 width for absurdly long strings. Cut the string in
|
| // half and try again.
|
| @@ -360,7 +364,7 @@
|
| // ridiculous), but we should check other widths for bogus values as well.
|
| if (current_text_pixel_width <= 0 && !text.empty()) {
|
| return ElideText(CutString(text, text.length() / 2, elide_in_middle, false),
|
| - font, available_pixel_width, false);
|
| + font, available_pixel_width, elide_behavior);
|
| }
|
|
|
| if (current_text_pixel_width <= available_pixel_width)
|
| @@ -372,24 +376,25 @@
|
| // Use binary search to compute the elided text.
|
| size_t lo = 0;
|
| size_t hi = text.length() - 1;
|
| - for (size_t guess = (lo + hi) / 2; guess != lo; guess = (lo + hi) / 2) {
|
| + size_t guess;
|
| + for (guess = (lo + hi) / 2; lo <= hi; guess = (lo + hi) / 2) {
|
| // We check the length of the whole desired string at once to ensure we
|
| // handle kerning/ligatures/etc. correctly.
|
| - int guess_length = font.GetStringWidth(
|
| - CutString(text, guess, elide_in_middle, true));
|
| + string16 cut = CutString(text, guess, elide_in_middle, insert_ellipsis);
|
| + int guess_length = font.GetStringWidth(cut);
|
| // Check again that we didn't hit a Pango width overflow. If so, cut the
|
| // current string in half and start over.
|
| if (guess_length <= 0) {
|
| return ElideText(CutString(text, guess / 2, elide_in_middle, false),
|
| - font, available_pixel_width, elide_in_middle);
|
| + font, available_pixel_width, elide_behavior);
|
| }
|
| if (guess_length > available_pixel_width)
|
| - hi = guess;
|
| + hi = guess - 1;
|
| else
|
| - lo = guess;
|
| + lo = guess + 1;
|
| }
|
|
|
| - return CutString(text, lo, elide_in_middle, true);
|
| + return CutString(text, guess, elide_in_middle, insert_ellipsis);
|
| }
|
|
|
| SortedDisplayURL::SortedDisplayURL(const GURL& url,
|
| @@ -576,6 +581,8 @@
|
|
|
| // String onto which the output is accumulated.
|
| string16* output_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(RectangleString);
|
| };
|
|
|
| void RectangleString::AddString(const string16& input) {
|
|
|