| Index: ui/gfx/text_elider.cc
|
| diff --git a/ui/gfx/text_elider.cc b/ui/gfx/text_elider.cc
|
| index bc4eb3bb858386904ccca086736b1df426d6cd70..b9ae0624d60124cb67187661108c195fc1609345 100644
|
| --- a/ui/gfx/text_elider.cc
|
| +++ b/ui/gfx/text_elider.cc
|
| @@ -130,7 +130,7 @@ string16 ElideComponentizedPath(const string16& url_path_prefix,
|
| const string16& url_filename,
|
| const string16& url_query,
|
| const gfx::FontList& font_list,
|
| - int available_pixel_width) {
|
| + float available_pixel_width) {
|
| const size_t url_path_number_of_elements = url_path_elements.size();
|
|
|
| CHECK(url_path_number_of_elements);
|
| @@ -149,7 +149,7 @@ string16 ElideComponentizedPath(const string16& url_path_prefix,
|
|
|
| string16 ElideEmail(const string16& email,
|
| const gfx::FontList& font_list,
|
| - int available_pixel_width) {
|
| + float available_pixel_width) {
|
| if (gfx::GetStringWidth(email, font_list) <= available_pixel_width)
|
| return email;
|
|
|
| @@ -171,8 +171,8 @@ string16 ElideEmail(const string16& email,
|
|
|
| // Check whether eliding the domain is necessary: if eliding the username
|
| // is sufficient, the domain will not be elided.
|
| - const int full_username_width = gfx::GetStringWidth(username, font_list);
|
| - const int available_domain_width =
|
| + const float full_username_width = gfx::GetStringWidth(username, font_list);
|
| + const float available_domain_width =
|
| available_pixel_width -
|
| std::min(full_username_width,
|
| gfx::GetStringWidth(username.substr(0, 1) + kEllipsisUTF16,
|
| @@ -184,10 +184,10 @@ string16 ElideEmail(const string16& email,
|
| // If |desired_domain_width| is greater than |available_domain_width|: the
|
| // minimal username elision allowed by the specifications will not fit; thus
|
| // |desired_domain_width| must be <= |available_domain_width| at all cost.
|
| - const int desired_domain_width =
|
| + const float desired_domain_width =
|
| std::min(available_domain_width,
|
| std::max(available_pixel_width - full_username_width,
|
| - available_pixel_width / 2));
|
| + available_pixel_width / 2.0f));
|
| domain = ElideText(domain, font_list, desired_domain_width,
|
| ELIDE_IN_MIDDLE);
|
| // Failing to elide the domain such that at least one character remains
|
| @@ -208,7 +208,7 @@ string16 ElideEmail(const string16& email,
|
|
|
| string16 ElideEmail(const string16& email,
|
| const gfx::Font& font,
|
| - int available_pixel_width) {
|
| + float available_pixel_width) {
|
| return ElideEmail(email, gfx::FontList(font), available_pixel_width);
|
| }
|
|
|
| @@ -218,7 +218,7 @@ string16 ElideEmail(const string16& email,
|
| // suspect it could be made simpler.
|
| string16 ElideUrl(const GURL& url,
|
| const gfx::FontList& font_list,
|
| - int available_pixel_width,
|
| + float available_pixel_width,
|
| const std::string& languages) {
|
| // Get a formatted string and corresponding parsing of the url.
|
| url_parse::Parsed parsed;
|
| @@ -235,7 +235,8 @@ string16 ElideUrl(const GURL& url,
|
|
|
| // Now start eliding url_string to fit within available pixel width.
|
| // Fist pass - check to see whether entire url_string fits.
|
| - const int pixel_width_url_string = gfx::GetStringWidth(url_string, font_list);
|
| + const float pixel_width_url_string =
|
| + gfx::GetStringWidth(url_string, font_list);
|
| if (available_pixel_width >= pixel_width_url_string)
|
| return url_string;
|
|
|
| @@ -298,17 +299,18 @@ string16 ElideUrl(const GURL& url,
|
| }
|
|
|
| // Second Pass - remove scheme - the rest fits.
|
| - const int pixel_width_url_host = gfx::GetStringWidth(url_host, font_list);
|
| - const int pixel_width_url_path = gfx::GetStringWidth(url_path_query_etc,
|
| - font_list);
|
| + const float pixel_width_url_host = gfx::GetStringWidth(url_host, font_list);
|
| + const float pixel_width_url_path = gfx::GetStringWidth(url_path_query_etc,
|
| + font_list);
|
| if (available_pixel_width >=
|
| pixel_width_url_host + pixel_width_url_path)
|
| return url_host + url_path_query_etc;
|
|
|
| // Third Pass: Subdomain, domain and entire path fits.
|
| - const int pixel_width_url_domain = gfx::GetStringWidth(url_domain, font_list);
|
| - const int pixel_width_url_subdomain = gfx::GetStringWidth(url_subdomain,
|
| - font_list);
|
| + const float pixel_width_url_domain =
|
| + gfx::GetStringWidth(url_domain, font_list);
|
| + const float pixel_width_url_subdomain =
|
| + gfx::GetStringWidth(url_subdomain, font_list);
|
| if (available_pixel_width >=
|
| pixel_width_url_subdomain + pixel_width_url_domain +
|
| pixel_width_url_path)
|
| @@ -316,7 +318,7 @@ string16 ElideUrl(const GURL& url,
|
|
|
| // Query element.
|
| string16 url_query;
|
| - const int kPixelWidthDotsTrailer = gfx::GetStringWidth(
|
| + const float kPixelWidthDotsTrailer = gfx::GetStringWidth(
|
| string16(kEllipsisUTF16), font_list);
|
| if (parsed.query.is_nonempty()) {
|
| url_query = UTF8ToUTF16("?") + url_string.substr(parsed.query.begin);
|
| @@ -357,8 +359,8 @@ string16 ElideUrl(const GURL& url,
|
|
|
| // Start eliding the path and replacing elements by ".../".
|
| const string16 kEllipsisAndSlash = string16(kEllipsisUTF16) + kForwardSlash;
|
| - const int pixel_width_ellipsis_slash = gfx::GetStringWidth(kEllipsisAndSlash,
|
| - font_list);
|
| + const float pixel_width_ellipsis_slash = gfx::GetStringWidth(
|
| + kEllipsisAndSlash, font_list);
|
|
|
| // Check with both subdomain and domain.
|
| string16 elided_path =
|
| @@ -390,8 +392,8 @@ string16 ElideUrl(const GURL& url,
|
|
|
| // Return elided domain/.../filename anyway.
|
| string16 final_elided_url_string(url_elided_domain);
|
| - const int url_elided_domain_width = gfx::GetStringWidth(url_elided_domain,
|
| - font_list);
|
| + const float url_elided_domain_width = gfx::GetStringWidth(url_elided_domain,
|
| + font_list);
|
|
|
| // A hack to prevent trailing ".../...".
|
| if ((available_pixel_width - url_elided_domain_width) >
|
| @@ -409,14 +411,14 @@ string16 ElideUrl(const GURL& url,
|
|
|
| string16 ElideUrl(const GURL& url,
|
| const gfx::Font& font,
|
| - int available_pixel_width,
|
| + float available_pixel_width,
|
| const std::string& languages) {
|
| return ElideUrl(url, gfx::FontList(font), available_pixel_width, languages);
|
| }
|
|
|
| string16 ElideFilename(const base::FilePath& filename,
|
| const gfx::FontList& font_list,
|
| - int available_pixel_width) {
|
| + float available_pixel_width) {
|
| #if defined(OS_WIN)
|
| string16 filename_utf16 = filename.value();
|
| string16 extension = filename.Extension();
|
| @@ -430,7 +432,7 @@ string16 ElideFilename(const base::FilePath& filename,
|
| filename.BaseName().RemoveExtension().value()));
|
| #endif
|
|
|
| - const int full_width = gfx::GetStringWidth(filename_utf16, font_list);
|
| + const float full_width = gfx::GetStringWidth(filename_utf16, font_list);
|
| if (full_width <= available_pixel_width)
|
| return base::i18n::GetDisplayStringInLTRDirectionality(filename_utf16);
|
|
|
| @@ -440,8 +442,8 @@ string16 ElideFilename(const base::FilePath& filename,
|
| return base::i18n::GetDisplayStringInLTRDirectionality(elided_name);
|
| }
|
|
|
| - const int ext_width = gfx::GetStringWidth(extension, font_list);
|
| - const int root_width = gfx::GetStringWidth(rootname, font_list);
|
| + const float ext_width = gfx::GetStringWidth(extension, font_list);
|
| + const float root_width = gfx::GetStringWidth(rootname, font_list);
|
|
|
| // We may have trimmed the path.
|
| if (root_width + ext_width <= available_pixel_width) {
|
| @@ -456,7 +458,7 @@ string16 ElideFilename(const base::FilePath& filename,
|
| return base::i18n::GetDisplayStringInLTRDirectionality(elided_name);
|
| }
|
|
|
| - int available_root_width = available_pixel_width - ext_width;
|
| + float available_root_width = available_pixel_width - ext_width;
|
| string16 elided_name =
|
| ElideText(rootname, font_list, available_root_width, ELIDE_AT_END);
|
| elided_name += extension;
|
| @@ -465,18 +467,18 @@ string16 ElideFilename(const base::FilePath& filename,
|
|
|
| string16 ElideFilename(const base::FilePath& filename,
|
| const gfx::Font& font,
|
| - int available_pixel_width) {
|
| + float available_pixel_width) {
|
| return ElideFilename(filename, gfx::FontList(font), available_pixel_width);
|
| }
|
|
|
| string16 ElideText(const string16& text,
|
| const gfx::FontList& font_list,
|
| - int available_pixel_width,
|
| + float available_pixel_width,
|
| ElideBehavior elide_behavior) {
|
| if (text.empty())
|
| return text;
|
|
|
| - const int current_text_pixel_width = gfx::GetStringWidth(text, font_list);
|
| + const float current_text_pixel_width = gfx::GetStringWidth(text, font_list);
|
| const bool elide_in_middle = (elide_behavior == ELIDE_IN_MIDDLE);
|
| const bool insert_ellipsis = (elide_behavior != TRUNCATE_AT_END);
|
|
|
| @@ -511,7 +513,7 @@ string16 ElideText(const string16& text,
|
| // We check the length of the whole desired string at once to ensure we
|
| // handle kerning/ligatures/etc. correctly.
|
| const string16 cut = slicer.CutString(guess, insert_ellipsis);
|
| - const int guess_length = gfx::GetStringWidth(cut, font_list);
|
| + const float guess_length = gfx::GetStringWidth(cut, font_list);
|
| // 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) {
|
| @@ -529,7 +531,7 @@ string16 ElideText(const string16& text,
|
|
|
| string16 ElideText(const string16& text,
|
| const gfx::Font& font,
|
| - int available_pixel_width,
|
| + float available_pixel_width,
|
| ElideBehavior elide_behavior) {
|
| return ElideText(text, gfx::FontList(font), available_pixel_width,
|
| elide_behavior);
|
| @@ -810,8 +812,8 @@ void RectangleString::NewLine(bool output) {
|
| class RectangleText {
|
| public:
|
| RectangleText(const gfx::FontList& font_list,
|
| - int available_pixel_width,
|
| - int available_pixel_height,
|
| + float available_pixel_width,
|
| + float available_pixel_height,
|
| WordWrapBehavior wrap_behavior,
|
| std::vector<string16>* lines)
|
| : font_list_(font_list),
|
| @@ -859,7 +861,7 @@ class RectangleText {
|
| // Append the specified |text| to the current output line, incrementing the
|
| // running width by the specified amount. This is an optimization over
|
| // |AddToCurrentLine()| when |text_width| is already known.
|
| - void AddToCurrentLineWithWidth(const string16& text, int text_width);
|
| + void AddToCurrentLineWithWidth(const string16& text, float text_width);
|
|
|
| // Append the specified |text| to the current output line.
|
| void AddToCurrentLine(const string16& text);
|
| @@ -871,22 +873,22 @@ class RectangleText {
|
| const gfx::FontList& font_list_;
|
|
|
| // The height of each line of text.
|
| - const int line_height_;
|
| + const float line_height_;
|
|
|
| // The number of pixels of available width in the rectangle.
|
| - const int available_pixel_width_;
|
| + const float available_pixel_width_;
|
|
|
| // The number of pixels of available height in the rectangle.
|
| - const int available_pixel_height_;
|
| + const float available_pixel_height_;
|
|
|
| // The wrap behavior for words that are too long to fit on a single line.
|
| const WordWrapBehavior wrap_behavior_;
|
|
|
| // The current running width.
|
| - int current_width_;
|
| + float current_width_;
|
|
|
| // The current running height.
|
| - int current_height_;
|
| + float current_height_;
|
|
|
| // The current line of text.
|
| string16 current_line_;
|
| @@ -941,7 +943,7 @@ int RectangleText::Finalize() {
|
| }
|
|
|
| void RectangleText::AddLine(const string16& line) {
|
| - const int line_width = gfx::GetStringWidth(line, font_list_);
|
| + const float line_width = gfx::GetStringWidth(line, font_list_);
|
| if (line_width <= available_pixel_width_) {
|
| AddToCurrentLineWithWidth(line, line_width);
|
| } else {
|
| @@ -1028,7 +1030,7 @@ int RectangleText::AddWord(const string16& word) {
|
| int lines_added = 0;
|
| string16 trimmed;
|
| TrimWhitespace(word, TRIM_TRAILING, &trimmed);
|
| - const int trimmed_width = gfx::GetStringWidth(trimmed, font_list_);
|
| + const float trimmed_width = gfx::GetStringWidth(trimmed, font_list_);
|
| if (trimmed_width <= available_pixel_width_) {
|
| // Word can be made to fit, no need to fragment it.
|
| if ((current_width_ + trimmed_width > available_pixel_width_) && NewLine())
|
| @@ -1047,7 +1049,7 @@ void RectangleText::AddToCurrentLine(const string16& text) {
|
| }
|
|
|
| void RectangleText::AddToCurrentLineWithWidth(const string16& text,
|
| - int text_width) {
|
| + float text_width) {
|
| if (current_height_ >= available_pixel_height_) {
|
| insufficient_height_ = true;
|
| return;
|
| @@ -1082,8 +1084,8 @@ bool ElideRectangleString(const string16& input, size_t max_rows,
|
|
|
| int ElideRectangleText(const string16& input,
|
| const gfx::FontList& font_list,
|
| - int available_pixel_width,
|
| - int available_pixel_height,
|
| + float available_pixel_width,
|
| + float available_pixel_height,
|
| WordWrapBehavior wrap_behavior,
|
| std::vector<string16>* lines) {
|
| RectangleText rect(font_list,
|
| @@ -1098,8 +1100,8 @@ int ElideRectangleText(const string16& input,
|
|
|
| int ElideRectangleText(const string16& input,
|
| const gfx::Font& font,
|
| - int available_pixel_width,
|
| - int available_pixel_height,
|
| + float available_pixel_width,
|
| + float available_pixel_height,
|
| WordWrapBehavior wrap_behavior,
|
| std::vector<string16>* lines) {
|
| return ElideRectangleText(input, gfx::FontList(font),
|
|
|