diff options
author | asvitkine@chromium.org <asvitkine@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-02-13 19:35:01 +0000 |
---|---|---|
committer | asvitkine@chromium.org <asvitkine@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-02-13 19:35:01 +0000 |
commit | 875aafa0109d02027dc43fee1053240e87924086 (patch) | |
tree | 1f582943b18f27b17b56c5609e1781d6a26e8e81 /ui | |
parent | 71312558e8d1d69068642f46aab5bd105e44e85d (diff) | |
download | chromium_src-875aafa0109d02027dc43fee1053240e87924086.zip chromium_src-875aafa0109d02027dc43fee1053240e87924086.tar.gz chromium_src-875aafa0109d02027dc43fee1053240e87924086.tar.bz2 |
Changes to canvas_skia_skia.cc to match canvas_skia_linux.cc behavior.
BUG=105550
TEST=Build aura with use_canvas_skia_skia=1 and check that UI looks the same.
Review URL: http://codereview.chromium.org/9290048
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@121721 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui')
-rw-r--r-- | ui/gfx/canvas_skia_skia.cc | 44 |
1 files changed, 42 insertions, 2 deletions
diff --git a/ui/gfx/canvas_skia_skia.cc b/ui/gfx/canvas_skia_skia.cc index 8c183d1..64135ea 100644 --- a/ui/gfx/canvas_skia_skia.cc +++ b/ui/gfx/canvas_skia_skia.cc @@ -154,6 +154,23 @@ void ApplyUnderlineStyle(const ui::Range& range, gfx::RenderText* render_text) { } } +// Returns updated |flags| to match platform-specific expected behavior. +int AdjustPlatformSpecificFlags(const string16& text, int flags) { +#if defined(OS_LINUX) + // TODO(asvitkine): On Linux, NO_ELLIPSIS really means MULTI_LINE. + // http://crbug.com/107357 + if (flags & NO_ELLIPSIS) + flags |= MULTI_LINE; + + // TODO(asvitkine): ash/tooltips/tooltip_controller.cc adds \n's to the string + // without passing MULTI_LINE. + if (text.find('\n') != string16::npos) + flags |= MULTI_LINE; +#endif + + return flags; +} + } // anonymous namespace namespace gfx { @@ -166,6 +183,7 @@ void CanvasSkia::SizeStringInt(const string16& text, DCHECK_GE(*width, 0); DCHECK_GE(*height, 0); + flags = AdjustPlatformSpecifcFlags(text, flags); if ((flags & MULTI_LINE) && *width != 0) { ui::WordWrapBehavior wrap_behavior = ui::TRUNCATE_LONG_WORDS; if (flags & CHARACTER_BREAK) @@ -216,6 +234,8 @@ void CanvasSkia::DrawStringInt(const string16& text, if (!IntersectsClipRectInt(x, y, w, h)) return; + flags = AdjustPlatformSpecifcFlags(text, flags); + // TODO(asvitkine): On Windows, MULTI_LINE implies top alignment. // http://crbug.com/107357 if (flags & MULTI_LINE) { @@ -228,8 +248,11 @@ void CanvasSkia::DrawStringInt(const string16& text, ClipRect(rect); string16 adjusted_text = text; - if (IsTextRTL(flags, text)) + +#if defined(OS_WIN) + if (IsTextRTL(flags, adjusted_text)) base::i18n::AdjustStringForLocaleDirection(&adjusted_text); +#endif scoped_ptr<RenderText> render_text(RenderText::CreateRenderText()); @@ -254,7 +277,21 @@ void CanvasSkia::DrawStringInt(const string16& text, } } else { ui::Range range = StripAcceleratorChars(flags, &adjusted_text); - if (!(flags & NO_ELLIPSIS)) + bool elide_text = (flags & NO_ELLIPSIS) ? false : true; + +#if defined(OS_LINUX) + // On Linux, eliding really means fading the end of the string. But only + // for LTR text. RTL text is still elided (on the left) with "...". + if (elide_text) { + render_text->SetText(adjusted_text); + if (render_text->GetTextDirection() == base::i18n::LEFT_TO_RIGHT) { + render_text->set_fade_tail(true); + elide_text = false; + } + } +#endif + + if (elide_text) ElideTextAndAdjustRange(font, w, &adjusted_text, &range); rect.Offset(0, VAlignText(font, 1, flags, h)); @@ -311,6 +348,8 @@ void CanvasSkia::DrawStringWithHalo(const string16& text, DrawBitmapInt(text_bitmap, x - 1, y - 1); } +// TODO(asvitkine): Remove the ifdef once all platforms use canvas_skia_skia.cc. +#if defined(OS_WIN) void CanvasSkia::DrawFadeTruncatingString( const string16& text, CanvasSkia::TruncateFadeMode truncate_mode, @@ -375,5 +414,6 @@ void CanvasSkia::DrawFadeTruncatingString( render_text->Draw(this); canvas_->restore(); } +#endif } // namespace gfx |