Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(196)

Unified Diff: ui/gfx/render_text.cc

Issue 23228004: Prepare to use gfx::RenderText in views::Label. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix OnBoundsChanged handling. Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ui/gfx/render_text.cc
diff --git a/ui/gfx/render_text.cc b/ui/gfx/render_text.cc
index 8497aa5bef99a204079b8b47364ee0f284f98910..22a8f31ad091820d87d3549a1e1d8a9435da35a3 100644
--- a/ui/gfx/render_text.cc
+++ b/ui/gfx/render_text.cc
@@ -469,6 +469,10 @@ void RenderText::SetHorizontalAlignment(HorizontalAlignment alignment) {
void RenderText::SetFontList(const FontList& font_list) {
font_list_ = font_list;
+ const int font_style = font_list.GetFontStyle();
+ SetStyle(BOLD, (font_style & gfx::Font::BOLD) != 0);
+ SetStyle(ITALIC, (font_style & gfx::Font::ITALIC) != 0);
+ SetStyle(UNDERLINE, (font_style & gfx::Font::UNDERLINE) != 0);
baseline_ = kInvalidBaseline;
cached_bounds_and_offset_valid_ = false;
ResetLayout();
@@ -502,6 +506,12 @@ void RenderText::SetObscuredRevealIndex(int index) {
UpdateLayoutText();
}
+void RenderText::SetReplaceNewlineCharsWithSymbols(bool replace) {
+ replace_newline_chars_with_symbols_ = replace;
+ cached_bounds_and_offset_valid_ = false;
+ UpdateLayoutText();
+}
+
void RenderText::SetMultiline(bool multiline) {
if (multiline != multiline_) {
multiline_ = multiline;
@@ -938,6 +948,7 @@ RenderText::RenderText()
obscured_reveal_index_(-1),
truncate_length_(0),
elide_behavior_(NO_ELIDE),
+ replace_newline_chars_with_symbols_(true),
multiline_(false),
background_is_transparent_(false),
clip_to_display_rect_(true),
@@ -1083,13 +1094,21 @@ std::vector<Rect> RenderText::TextBoundsToViewBounds(const Range& x) {
return rects;
}
+HorizontalAlignment RenderText::GetCurrentHorizontalAlignment() {
+ if (horizontal_alignment_ != ALIGN_TO_HEAD)
+ return horizontal_alignment_;
+ return GetTextDirection() == base::i18n::RIGHT_TO_LEFT ? ALIGN_RIGHT
+ : ALIGN_LEFT;
+}
+
Vector2d RenderText::GetAlignmentOffset(size_t line_number) {
// TODO(ckocagil): Enable |lines_| usage in other platforms.
#if defined(OS_WIN)
DCHECK_LT(line_number, lines_.size());
#endif
Vector2d offset;
- if (horizontal_alignment_ != ALIGN_LEFT) {
+ HorizontalAlignment horizontal_alignment = GetCurrentHorizontalAlignment();
+ if (horizontal_alignment != ALIGN_LEFT) {
#if defined(OS_WIN)
const int width = lines_[line_number].size.width() +
(cursor_enabled_ ? 1 : 0);
@@ -1097,8 +1116,9 @@ Vector2d RenderText::GetAlignmentOffset(size_t line_number) {
const int width = GetContentWidth();
#endif
offset.set_x(display_rect().width() - width);
- if (horizontal_alignment_ == ALIGN_CENTER)
- offset.set_x(offset.x() / 2);
+ // Put any extra margin pixel on the left to match legacy behavior.
+ if (horizontal_alignment == ALIGN_CENTER)
+ offset.set_x((offset.x() + 1) / 2);
}
// Vertically center the text.
@@ -1122,15 +1142,16 @@ void RenderText::ApplyFadeEffects(internal::SkiaTextRenderer* renderer) {
if (gradient_width == 0)
return;
+ HorizontalAlignment horizontal_alignment = GetCurrentHorizontalAlignment();
Rect solid_part = display_rect();
Rect left_part;
Rect right_part;
- if (horizontal_alignment_ != ALIGN_LEFT) {
+ if (horizontal_alignment != ALIGN_LEFT) {
left_part = solid_part;
left_part.Inset(0, 0, solid_part.width() - gradient_width, 0);
solid_part.Inset(gradient_width, 0, 0, 0);
}
- if (horizontal_alignment_ != ALIGN_RIGHT) {
+ if (horizontal_alignment != ALIGN_RIGHT) {
right_part = solid_part;
right_part.Inset(solid_part.width() - gradient_width, 0, 0, 0);
solid_part.Inset(0, 0, gradient_width, 0);
@@ -1230,7 +1251,7 @@ void RenderText::UpdateLayoutText() {
// Replace the newline character with a newline symbol in single line mode.
static const base::char16 kNewline[] = { '\n', 0 };
static const base::char16 kNewlineSymbol[] = { 0x2424, 0 };
- if (!multiline_)
+ if (!multiline_ && replace_newline_chars_with_symbols_)
base::ReplaceChars(layout_text_, kNewline, kNewlineSymbol, &layout_text_);
ResetLayout();
@@ -1411,7 +1432,8 @@ void RenderText::UpdateCachedBoundsAndOffset() {
} else if (display_offset_.x() != 0) {
// Reduce the pan offset to show additional overflow text when the display
// width increases.
- const int negate_rtl = horizontal_alignment_ == ALIGN_RIGHT ? -1 : 1;
+ HorizontalAlignment horizontal_alignment = GetCurrentHorizontalAlignment();
+ const int negate_rtl = horizontal_alignment == ALIGN_RIGHT ? -1 : 1;
const int offset = negate_rtl * display_offset_.x();
if (display_width > (content_width + offset)) {
delta_x = negate_rtl * (display_width - (content_width + offset));

Powered by Google App Engine
This is Rietveld 408576698