| Index: ui/gfx/render_text.cc
|
| diff --git a/ui/gfx/render_text.cc b/ui/gfx/render_text.cc
|
| index 0fbf10f6d4c19e494c36477a3b6615b4d19989e3..abb9682c3153aeca5dec48812826c4bb7dbcb37a 100644
|
| --- a/ui/gfx/render_text.cc
|
| +++ b/ui/gfx/render_text.cc
|
| @@ -484,6 +484,14 @@ void RenderText::SetHorizontalAlignment(HorizontalAlignment alignment) {
|
| }
|
| }
|
|
|
| +void RenderText::SetVerticalAlignment(VerticalAlignment alignment) {
|
| + if (vertical_alignment_ != alignment) {
|
| + vertical_alignment_ = alignment;
|
| + display_offset_ = Vector2d();
|
| + cached_bounds_and_offset_valid_ = false;
|
| + }
|
| +}
|
| +
|
| void RenderText::SetFontList(const FontList& font_list) {
|
| font_list_ = font_list;
|
| const int font_style = font_list.GetFontStyle();
|
| @@ -955,6 +963,7 @@ Vector2d RenderText::GetLineOffset(size_t line_number) {
|
|
|
| RenderText::RenderText()
|
| : horizontal_alignment_(base::i18n::IsRTL() ? ALIGN_RIGHT : ALIGN_LEFT),
|
| + vertical_alignment_(VALIGN_MIDDLE),
|
| directionality_mode_(DIRECTIONALITY_FROM_TEXT),
|
| text_direction_(base::i18n::UNKNOWN_DIRECTION),
|
| cursor_enabled_(true),
|
| @@ -1155,15 +1164,28 @@ Vector2d RenderText::GetAlignmentOffset(size_t line_number) {
|
| offset.set_x((offset.x() + 1) / 2);
|
| }
|
|
|
| - // Vertically center the text.
|
| + // Vertically align the text.
|
| if (multiline_) {
|
| const int text_height = lines_.back().preceding_heights +
|
| - lines_.back().size.height();
|
| - offset.set_y((display_rect_.height() - text_height) / 2);
|
| + std::ceil(lines_.back().size.height());
|
| + if (vertical_alignment_ == VALIGN_TOP) {
|
| + offset.set_y(0);
|
| + } else if (vertical_alignment_ == VALIGN_BOTTOM) {
|
| + offset.set_y(display_rect_.height() - text_height);
|
| + } else {
|
| + DCHECK_EQ(VALIGN_MIDDLE, vertical_alignment_);
|
| + offset.set_y((display_rect_.height() - text_height) / 2);
|
| + }
|
| } else {
|
| - offset.set_y(GetBaseline() - GetDisplayTextBaseline());
|
| + if (vertical_alignment_ == VALIGN_TOP) {
|
| + offset.set_y(0);
|
| + } else if (vertical_alignment_ == VALIGN_BOTTOM) {
|
| + offset.set_y(display_rect_.height() - font_list_.GetHeight());
|
| + } else {
|
| + DCHECK_EQ(VALIGN_MIDDLE, vertical_alignment_);
|
| + offset.set_y(GetBaseline() - GetDisplayTextBaseline());
|
| + }
|
| }
|
| -
|
| return offset;
|
| }
|
|
|
|
|