summaryrefslogtreecommitdiffstats
path: root/app
diff options
context:
space:
mode:
authorestade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-01-04 20:46:14 +0000
committerestade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-01-04 20:46:14 +0000
commit13658c4b2835a3155efa6eb2c3c6ff8fef2b7fa5 (patch)
treeada8d64cbd2fd12c7248cca648e47ebd63e6462a /app
parentcd4857b64f3e3b10ebfa3f44c38af0dc7376d5bb (diff)
downloadchromium_src-13658c4b2835a3155efa6eb2c3c6ff8fef2b7fa5.zip
chromium_src-13658c4b2835a3155efa6eb2c3c6ff8fef2b7fa5.tar.gz
chromium_src-13658c4b2835a3155efa6eb2c3c6ff8fef2b7fa5.tar.bz2
Change Font.GetStringWidth() to take string16 instead of wstring.
do a bunch of string fixes along the way. BUG=none TEST=trybots Review URL: http://codereview.chromium.org/5985007 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@70440 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'app')
-rw-r--r--app/text_elider.cc69
-rw-r--r--app/text_elider_unittest.cc13
2 files changed, 40 insertions, 42 deletions
diff --git a/app/text_elider.cc b/app/text_elider.cc
index 855e3c3..c4052aa 100644
--- a/app/text_elider.cc
+++ b/app/text_elider.cc
@@ -19,9 +19,10 @@
#include "net/base/net_util.h"
#include "net/base/registry_controlled_domain.h"
+
namespace {
-const wchar_t kEllipsis[] = L"\x2026";
+const char* kEllipsis = "\xE2\x80\xA6";
// Cuts |text| to be |length| characters long. If |cut_in_middle| is true, the
// middle of the string is removed to leave equal-length pieces from the
@@ -29,12 +30,13 @@ const wchar_t kEllipsis[] = L"\x2026";
// and only the beginning remains. If |insert_ellipsis| is true, then an
// ellipsis character will by inserted at the cut point.
string16 CutString(const string16& text,
- size_t length,
- bool cut_in_middle,
- bool insert_ellipsis) {
+ size_t length,
+ bool cut_in_middle,
+ bool insert_ellipsis) {
// TODO(tony): This is wrong, it might split the string in the middle of a
// surrogate pair.
- const string16 kInsert = WideToUTF16(insert_ellipsis ? kEllipsis : L"");
+ const string16 kInsert = insert_ellipsis ? UTF8ToUTF16(kEllipsis) :
+ ASCIIToUTF16("");
if (!cut_in_middle)
return text.substr(0, length) + kInsert;
// We put the extra character, if any, before the cut.
@@ -74,7 +76,7 @@ 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.
- int pixel_width_url_string = font.GetStringWidth(UTF16ToWideHack(url_string));
+ int pixel_width_url_string = font.GetStringWidth(url_string);
if (available_pixel_width >= pixel_width_url_string)
return url_string;
@@ -86,8 +88,7 @@ string16 ElideUrl(const GURL& url,
// 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(UTF16ToWideHack(url_minus_query)))
+ if (available_pixel_width >= font.GetStringWidth(url_minus_query))
return ElideText(url_string, font, available_pixel_width, false);
// Get Host.
@@ -135,17 +136,15 @@ string16 ElideUrl(const GURL& url,
}
// Second Pass - remove scheme - the rest fits.
- int pixel_width_url_host = font.GetStringWidth(UTF16ToWideHack(url_host));
- int pixel_width_url_path = font.GetStringWidth(UTF16ToWideHack(
- url_path_query_etc));
+ int pixel_width_url_host = font.GetStringWidth(url_host);
+ int pixel_width_url_path = font.GetStringWidth(url_path_query_etc);
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.
- int pixel_width_url_domain = font.GetStringWidth(UTF16ToWideHack(url_domain));
- int pixel_width_url_subdomain = font.GetStringWidth(UTF16ToWideHack(
- url_subdomain));
+ int pixel_width_url_domain = font.GetStringWidth(url_domain);
+ int pixel_width_url_subdomain = font.GetStringWidth(url_subdomain);
if (available_pixel_width >=
pixel_width_url_subdomain + pixel_width_url_domain +
pixel_width_url_path)
@@ -153,12 +152,13 @@ string16 ElideUrl(const GURL& url,
// Query element.
string16 url_query;
- const int kPixelWidthDotsTrailer = font.GetStringWidth(kEllipsis);
+ const int kPixelWidthDotsTrailer =
+ font.GetStringWidth(UTF8ToUTF16(kEllipsis));
if (parsed.query.is_nonempty()) {
url_query = UTF8ToUTF16("?") + url_string.substr(parsed.query.begin);
if (available_pixel_width >= (pixel_width_url_subdomain +
pixel_width_url_domain + pixel_width_url_path -
- font.GetStringWidth(UTF16ToWideHack(url_query)))) {
+ font.GetStringWidth(url_query))) {
return ElideText(url_subdomain + url_domain + url_path_query_etc,
font, available_pixel_width, false);
}
@@ -193,17 +193,14 @@ string16 ElideUrl(const GURL& url,
}
// Start eliding the path and replacing elements by "../".
- static const string16 kEllipsisAndSlash = WideToUTF16(kEllipsis) +
- kForwardSlash;
- int pixel_width_url_filename = font.GetStringWidth(UTF16ToWideHack(
- url_filename));
- int pixel_width_dot_dot_slash = font.GetStringWidth(UTF16ToWideHack(
- kEllipsisAndSlash));
- int pixel_width_slash = font.GetStringWidth(L"/");
+ const string16 kEllipsisAndSlash = UTF8ToUTF16(kEllipsis) + kForwardSlash;
+ int pixel_width_url_filename = font.GetStringWidth(url_filename);
+ int pixel_width_dot_dot_slash = font.GetStringWidth(kEllipsisAndSlash);
+ int pixel_width_slash = font.GetStringWidth(ASCIIToUTF16("/"));
int pixel_width_url_path_elements[kMaxNumberOfUrlPathElementsAllowed];
for (size_t i = 0; i < url_path_number_of_elements; ++i) {
pixel_width_url_path_elements[i] =
- font.GetStringWidth(UTF16ToWideHack(url_path_elements.at(i)));
+ font.GetStringWidth(url_path_elements.at(i));
}
// Check with both subdomain and domain.
@@ -282,14 +279,16 @@ string16 ElideUrl(const GURL& url,
// Return elided domain/../filename anyway.
string16 final_elided_url_string(url_elided_domain);
- int url_elided_domain_width = font.GetStringWidth(UTF16ToWideHack(
- url_elided_domain));
+ int url_elided_domain_width = font.GetStringWidth(url_elided_domain);
+
+ // A hack to prevent trailing "../...".
if ((available_pixel_width - url_elided_domain_width) >
pixel_width_dot_dot_slash + kPixelWidthDotsTrailer +
- font.GetStringWidth(L"UV")) // A hack to prevent trailing "../...".
+ font.GetStringWidth(ASCIIToUTF16("UV"))) {
final_elided_url_string += elided_path;
- else
+ } else {
final_elided_url_string += url_path;
+ }
return ElideText(final_elided_url_string, font, available_pixel_width, false);
}
@@ -310,7 +309,7 @@ string16 ElideFilename(const FilePath& filename,
filename.BaseName().RemoveExtension().value()));
#endif
- int full_width = font.GetStringWidth(UTF16ToWideHack(filename_utf16));
+ int full_width = font.GetStringWidth(filename_utf16);
if (full_width <= available_pixel_width)
return base::i18n::GetDisplayStringInLTRDirectionality(filename_utf16);
@@ -320,8 +319,8 @@ string16 ElideFilename(const FilePath& filename,
return base::i18n::GetDisplayStringInLTRDirectionality(elided_name);
}
- int ext_width = font.GetStringWidth(UTF16ToWideHack(extension));
- int root_width = font.GetStringWidth(UTF16ToWideHack(rootname));
+ int ext_width = font.GetStringWidth(extension);
+ int root_width = font.GetStringWidth(rootname);
// We may have trimmed the path.
if (root_width + ext_width <= available_pixel_width) {
@@ -345,7 +344,7 @@ string16 ElideText(const string16& text,
if (text.empty())
return text;
- int current_text_pixel_width = font.GetStringWidth(UTF16ToWideHack(text));
+ int current_text_pixel_width = font.GetStringWidth(text);
// Pango will return 0 width for absurdly long strings. Cut the string in
// half and try again.
@@ -363,7 +362,7 @@ string16 ElideText(const string16& text,
if (current_text_pixel_width <= available_pixel_width)
return text;
- if (font.GetStringWidth(kEllipsis) > available_pixel_width)
+ if (font.GetStringWidth(UTF8ToUTF16(kEllipsis)) > available_pixel_width)
return string16();
// Use binary search to compute the elided text.
@@ -372,8 +371,8 @@ string16 ElideText(const string16& text,
for (size_t guess = (lo + hi) / 2; guess != lo; 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(UTF16ToWideHack(
- CutString(text, guess, elide_in_middle, true)));
+ int guess_length = font.GetStringWidth(
+ CutString(text, guess, elide_in_middle, true));
// 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) {
diff --git a/app/text_elider_unittest.cc b/app/text_elider_unittest.cc
index ab1a73f..7d0cbda 100644
--- a/app/text_elider_unittest.cc
+++ b/app/text_elider_unittest.cc
@@ -44,7 +44,8 @@ void RunTest(Testcase* testcases, size_t num_testcases) {
// Should we test with non-empty language list?
// That's kinda redundant with net_util_unittests.
EXPECT_EQ(WideToUTF16(testcases[i].output),
- ElideUrl(url, font, font.GetStringWidth(testcases[i].output),
+ ElideUrl(url, font,
+ font.GetStringWidth(WideToUTF16(testcases[i].output)),
std::wstring()));
}
}
@@ -183,7 +184,7 @@ TEST(TextEliderTest, TestFilenameEliding) {
expected = base::i18n::GetDisplayStringInLTRDirectionality(expected);
EXPECT_EQ(expected, ElideFilename(filepath,
font,
- font.GetStringWidth(testcases[i].output)));
+ font.GetStringWidth(WideToUTF16(testcases[i].output))));
}
}
@@ -212,14 +213,13 @@ TEST(TextEliderTest, ElideTextLongStrings) {
};
const gfx::Font font;
- int ellipsis_width = font.GetStringWidth(UTF16ToWideHack(kEllipsisStr));
+ int ellipsis_width = font.GetStringWidth(kEllipsisStr);
for (size_t i = 0; i < arraysize(testcases_end); ++i) {
// Compare sizes rather than actual contents because if the test fails,
// output is rather long.
EXPECT_EQ(testcases_end[i].output.size(),
ElideText(testcases_end[i].input, font,
- font.GetStringWidth(UTF16ToWideHack(
- testcases_end[i].output)),
+ font.GetStringWidth(testcases_end[i].output),
false).size());
EXPECT_EQ(kEllipsisStr,
ElideText(testcases_end[i].input, font, ellipsis_width, false));
@@ -243,8 +243,7 @@ TEST(TextEliderTest, ElideTextLongStrings) {
// output is rather long.
EXPECT_EQ(testcases_middle[i].output.size(),
ElideText(testcases_middle[i].input, font,
- font.GetStringWidth(UTF16ToWideHack(
- testcases_middle[i].output)),
+ font.GetStringWidth(testcases_middle[i].output),
false).size());
EXPECT_EQ(kEllipsisStr,
ElideText(testcases_middle[i].input, font, ellipsis_width,