Index: ui/gfx/canvas_skia.cc |
diff --git a/ui/gfx/canvas_skia.cc b/ui/gfx/canvas_skia.cc |
index 4a6ef61adb98b2db12e67eff04cc4f68e54a63f7..63156f586692d6f27b378e59b6a74677138be649 100644 |
--- a/ui/gfx/canvas_skia.cc |
+++ b/ui/gfx/canvas_skia.cc |
@@ -19,39 +19,6 @@ |
namespace { |
-// If necessary, wraps |text| with RTL/LTR directionality characters based on |
-// |flags| and |text| content. |
-// Returns true if the text will be rendered right-to-left. |
-// TODO(msw): Nix this, now that RenderTextWin supports directionality directly. |
-bool AdjustStringDirection(int flags, string16* text) { |
- // TODO(msw): FORCE_LTR_DIRECTIONALITY does not work for RTL text now. |
- |
- // If the string is empty or LTR was forced, simply return false since the |
- // default RenderText directionality is already LTR. |
- if (text->empty() || (flags & gfx::Canvas::FORCE_LTR_DIRECTIONALITY)) |
- return false; |
- |
- // If RTL is forced, apply it to the string. |
- if (flags & gfx::Canvas::FORCE_RTL_DIRECTIONALITY) { |
- base::i18n::WrapStringWithRTLFormatting(text); |
- return true; |
- } |
- |
- // If a direction wasn't forced but the UI language is RTL and there were |
- // strong RTL characters, ensure RTL is applied. |
- if (base::i18n::IsRTL() && base::i18n::StringContainsStrongRTLChars(*text)) { |
- base::i18n::WrapStringWithRTLFormatting(text); |
- return true; |
- } |
- |
- // In the default case, the string should be rendered as LTR. RenderText's |
- // default directionality is LTR, so the text doesn't need to be wrapped. |
- // Note that individual runs within the string may still be rendered RTL |
- // (which will be the case for RTL text under non-RTL locales, since under RTL |
- // locales it will be handled by the if statement above). |
- return false; |
-} |
- |
// Checks each pixel immediately adjacent to the given pixel in the bitmap. If |
// any of them are not the halo color, returns true. This defines the halo of |
// pixels that will appear around the text. Note that we have to check each |
@@ -206,11 +173,7 @@ void Canvas::SizeStringInt(const string16& text, |
DCHECK_GE(*height, 0); |
flags = AdjustPlatformSpecificFlags(text, flags); |
- |
string16 adjusted_text = text; |
-#if defined(OS_WIN) |
- AdjustStringDirection(flags, &adjusted_text); |
-#endif |
if ((flags & MULTI_LINE) && *width != 0) { |
ui::WordWrapBehavior wrap_behavior = ui::TRUNCATE_LONG_WORDS; |
@@ -285,10 +248,6 @@ void Canvas::DrawStringWithShadows(const string16& text, |
gfx::Rect rect(text_bounds); |
string16 adjusted_text = text; |
-#if defined(OS_WIN) |
- AdjustStringDirection(flags, &adjusted_text); |
-#endif |
- |
scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); |
render_text->SetTextShadows(shadows); |
@@ -428,17 +387,23 @@ void Canvas::DrawFadeTruncatingString( |
scoped_ptr<RenderText> render_text(RenderText::CreateInstance()); |
string16 clipped_text = text; |
- const bool is_rtl = AdjustStringDirection(flags, &clipped_text); |
+ |
+ // TODO(msw): Text alignment and fading should probably just derive from the |
+ // text directionality, and ignore the UI locale. But the legacy behavior uses |
+ // the UI locale, except for LTR text in RTL locales. See crbug.com/134746 |
+ const bool text_rtl = base::i18n::RIGHT_TO_LEFT == |
+ base::i18n::GetFirstStrongCharacterDirection(text); |
+ const bool use_rtl = base::i18n::IsRTL() && text_rtl; |
switch (truncate_mode) { |
case TruncateFadeTail: |
render_text->set_fade_tail(true); |
- if (is_rtl) |
+ if (use_rtl) |
flags |= TEXT_ALIGN_RIGHT; |
break; |
case TruncateFadeHead: |
render_text->set_fade_head(true); |
- if (!is_rtl) |
+ if (!use_rtl) |
flags |= TEXT_ALIGN_RIGHT; |
break; |
case TruncateFadeHeadAndTail: |