summaryrefslogtreecommitdiffstats
path: root/ui
diff options
context:
space:
mode:
authorasvitkine@chromium.org <asvitkine@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-02-13 19:35:01 +0000
committerasvitkine@chromium.org <asvitkine@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-02-13 19:35:01 +0000
commit875aafa0109d02027dc43fee1053240e87924086 (patch)
tree1f582943b18f27b17b56c5609e1781d6a26e8e81 /ui
parent71312558e8d1d69068642f46aab5bd105e44e85d (diff)
downloadchromium_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.cc44
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