Chromium Code Reviews| Index: chrome/browser/ui/views/omnibox/omnibox_result_view.cc |
| diff --git a/chrome/browser/ui/views/omnibox/omnibox_result_view.cc b/chrome/browser/ui/views/omnibox/omnibox_result_view.cc |
| index 8dc6d54a0d73bbed8a32e40473bac8be5a4c17ee..33d07f1d35c208ffe91eeb6688109fce375222d0 100644 |
| --- a/chrome/browser/ui/views/omnibox/omnibox_result_view.cc |
| +++ b/chrome/browser/ui/views/omnibox/omnibox_result_view.cc |
| @@ -48,6 +48,9 @@ using ui::NativeTheme; |
| namespace { |
| +// Don't trust the number of lines from AiS. Cap it. |
| +constexpr int kMAX_DISPLAY_LINES = 3; |
|
Peter Kasting
2016/06/01 16:15:29
Nit: Declare this in the lone scope where it's use
Kevin Bailey
2016/06/01 17:33:59
Done.
|
| + |
| // A mapping from OmniboxResultView's ResultViewState/ColorKind types to |
| // NativeTheme colors. |
| struct TranslationTable { |
| @@ -278,7 +281,20 @@ gfx::Size OmniboxResultView::GetPreferredSize() const { |
| if (!match_.answer) |
| return gfx::Size(0, GetContentLineHeight()); |
| // An answer implies a match and a description in a large font. |
| - return gfx::Size(0, GetContentLineHeight() + GetAnswerLineHeight()); |
| + const auto& text_fields = match_.answer->second_line().text_fields(); |
| + if (!text_fields.empty() && text_fields[0].has_num_lines()) { |
|
Peter Kasting
2016/06/01 16:15:29
Nit: You use [0] here and .front() below. Pick on
Kevin Bailey
2016/06/01 17:34:00
Done.
|
| + if (!description_rendertext_) |
|
Peter Kasting
2016/06/01 16:15:29
Nit: {}
Kevin Bailey
2016/06/01 17:34:00
Done.
|
| + description_rendertext_ = |
| + CreateAnswerLine(match_.answer->second_line(), font_list_); |
| + description_rendertext_->SetDisplayRect( |
| + gfx::Rect(text_bounds().width(), 0)); |
|
Peter Kasting
2016/06/01 16:15:29
Nit: Prefer text_bounds_
Kevin Bailey
2016/06/01 17:34:00
This one surprises me, particularly since 'text_bo
|
| + description_rendertext_->GetStringSize(); |
| + return gfx::Size( |
| + 0, GetContentLineHeight() + |
| + GetAnswerLineHeight() * description_rendertext_->GetNumLines()); |
| + } else { |
| + return gfx::Size(0, GetContentLineHeight() + GetAnswerLineHeight()); |
|
Peter Kasting
2016/06/01 16:15:29
Nit: Reverse the conditional above and do this as
Kevin Bailey
2016/06/01 17:34:00
Done.
|
| + } |
| } |
| void OmniboxResultView::GetAccessibleState(ui::AXViewState* state) { |
| @@ -430,12 +446,17 @@ int OmniboxResultView::DrawRenderText( |
| prefix_render_text->Draw(canvas); |
| } |
| - // Set the display rect to trigger eliding. |
| - const int height = (render_text_type == DESCRIPTION && match.answer) ? |
| - GetAnswerLineHeight() : GetContentLineHeight(); |
| + // Set the display rect to trigger elision. |
| + int final_width = right_x - x; |
|
Peter Kasting
2016/06/01 16:15:29
Nit: const?
Kevin Bailey
2016/06/01 17:34:00
Done.
|
| + int height = GetContentLineHeight(); |
| + if (render_text_type == DESCRIPTION && match.answer) { |
| + render_text->SetDisplayRect(gfx::Rect(gfx::Size(final_width, 0))); |
| + render_text->GetStringSize(); |
| + height = GetAnswerLineHeight() * render_text->GetNumLines(); |
| + } |
| render_text->SetDisplayRect( |
| gfx::Rect(mirroring_context_->mirrored_left_coord(x, right_x), y, |
| - right_x - x, height)); |
| + final_width, height)); |
| render_text->Draw(canvas); |
| return right_x; |
| } |
| @@ -681,10 +702,8 @@ void OmniboxResultView::OnPaint(gfx::Canvas* canvas) { |
| if (match_.answer) { |
| contents_rendertext_ = |
| CreateAnswerLine(match_.answer->first_line(), font_list_); |
| - description_rendertext_ = CreateAnswerLine( |
| - match_.answer->second_line(), |
| - ui::ResourceBundle::GetSharedInstance().GetFontList( |
| - ui::ResourceBundle::LargeFont)); |
| + description_rendertext_ = |
| + CreateAnswerLine(match_.answer->second_line(), font_list_); |
| } else if (!match_.description.empty()) { |
| description_rendertext_ = CreateClassifiedRenderText( |
| match_.description, match_.description_class, true); |
| @@ -737,13 +756,22 @@ int OmniboxResultView::GetContentLineHeight() const { |
| std::unique_ptr<gfx::RenderText> OmniboxResultView::CreateAnswerLine( |
| const SuggestionAnswer::ImageLine& line, |
| - gfx::FontList font_list) { |
| + gfx::FontList font_list) const { |
| std::unique_ptr<gfx::RenderText> destination = |
| CreateRenderText(base::string16()); |
| destination->SetFontList(font_list); |
| for (const SuggestionAnswer::TextField& text_field : line.text_fields()) |
|
Kevin Bailey
2016/06/01 14:56:36
Am I the only bothered by the same variable being
Peter Kasting
2016/06/01 16:15:29
Well, it's really 3 variables due to scoping.
If
Kevin Bailey
2016/06/01 17:33:59
I took care of one, but the others didn't seem lik
Justin Donnelly
2016/06/01 17:38:17
To me a variable named after its type is just sayi
|
| AppendAnswerText(destination.get(), text_field.text(), text_field.type()); |
| + if (!line.text_fields().empty()) { |
| + const SuggestionAnswer::TextField& text_field = line.text_fields().front(); |
| + if (text_field.has_num_lines() && text_field.num_lines() > 1 && |
| + destination->MultilineSupported()) { |
| + destination->SetMultiline(true); |
| + destination->SetMaxLines( |
| + std::min(kMAX_DISPLAY_LINES, text_field.num_lines())); |
| + } |
| + } |
| const base::char16 space(' '); |
| const auto* text_field = line.additional_text(); |
| if (text_field) { |
| @@ -760,7 +788,7 @@ std::unique_ptr<gfx::RenderText> OmniboxResultView::CreateAnswerLine( |
| void OmniboxResultView::AppendAnswerText(gfx::RenderText* destination, |
| const base::string16& text, |
| - int text_type) { |
| + int text_type) const { |
| // TODO(dschuyler): make this better. Right now this only supports unnested |
| // bold tags. In the future we'll need to flag unexpected tags while adding |
| // support for b, i, u, sub, and sup. We'll also need to support HTML |
| @@ -789,7 +817,7 @@ void OmniboxResultView::AppendAnswerText(gfx::RenderText* destination, |
| void OmniboxResultView::AppendAnswerTextHelper(gfx::RenderText* destination, |
| const base::string16& text, |
| int text_type, |
| - bool is_bold) { |
| + bool is_bold) const { |
| if (text.empty()) |
| return; |
| int offset = destination->text().length(); |