OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/ui/views/omnibox/omnibox_popup_contents_view.h" | 5 #include "chrome/browser/ui/views/omnibox/omnibox_popup_contents_view.h" |
6 | 6 |
7 #include "chrome/browser/search/search.h" | 7 #include "chrome/browser/search/search.h" |
8 #include "chrome/browser/themes/theme_properties.h" | 8 #include "chrome/browser/themes/theme_properties.h" |
9 #include "chrome/browser/ui/omnibox/omnibox_popup_non_view.h" | 9 #include "chrome/browser/ui/omnibox/omnibox_popup_non_view.h" |
10 #include "chrome/browser/ui/omnibox/omnibox_view.h" | 10 #include "chrome/browser/ui/omnibox/omnibox_view.h" |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
46 virtual ~AutocompletePopupWidget() {} | 46 virtual ~AutocompletePopupWidget() {} |
47 | 47 |
48 private: | 48 private: |
49 DISALLOW_COPY_AND_ASSIGN(AutocompletePopupWidget); | 49 DISALLOW_COPY_AND_ASSIGN(AutocompletePopupWidget); |
50 }; | 50 }; |
51 | 51 |
52 //////////////////////////////////////////////////////////////////////////////// | 52 //////////////////////////////////////////////////////////////////////////////// |
53 // OmniboxPopupContentsView, public: | 53 // OmniboxPopupContentsView, public: |
54 | 54 |
55 OmniboxPopupView* OmniboxPopupContentsView::Create( | 55 OmniboxPopupView* OmniboxPopupContentsView::Create( |
56 const gfx::Font& font, | 56 const gfx::FontList& font_list, |
57 OmniboxView* omnibox_view, | 57 OmniboxView* omnibox_view, |
58 OmniboxEditModel* edit_model, | 58 OmniboxEditModel* edit_model, |
59 LocationBarView* location_bar_view) { | 59 LocationBarView* location_bar_view) { |
60 #if defined(HTML_INSTANT_EXTENDED_POPUP) | 60 #if defined(HTML_INSTANT_EXTENDED_POPUP) |
61 if (chrome::IsInstantExtendedAPIEnabled()) | 61 if (chrome::IsInstantExtendedAPIEnabled()) |
62 return new OmniboxPopupNonView(edit_model); | 62 return new OmniboxPopupNonView(edit_model); |
63 #endif | 63 #endif |
64 | 64 |
65 OmniboxPopupContentsView* view = NULL; | 65 OmniboxPopupContentsView* view = NULL; |
66 if (ui::GetDisplayLayout() == ui::LAYOUT_TOUCH) { | 66 if (ui::GetDisplayLayout() == ui::LAYOUT_TOUCH) { |
67 view = new TouchOmniboxPopupContentsView( | 67 view = new TouchOmniboxPopupContentsView( |
68 font, omnibox_view, edit_model, location_bar_view); | 68 font_list, omnibox_view, edit_model, location_bar_view); |
69 } else { | 69 } else { |
70 view = new OmniboxPopupContentsView( | 70 view = new OmniboxPopupContentsView( |
71 font, omnibox_view, edit_model, location_bar_view); | 71 font_list, omnibox_view, edit_model, location_bar_view); |
72 } | 72 } |
73 | 73 |
74 view->Init(); | 74 view->Init(); |
75 return view; | 75 return view; |
76 } | 76 } |
77 | 77 |
78 OmniboxPopupContentsView::OmniboxPopupContentsView( | 78 OmniboxPopupContentsView::OmniboxPopupContentsView( |
79 const gfx::Font& font, | 79 const gfx::FontList& font_list, |
80 OmniboxView* omnibox_view, | 80 OmniboxView* omnibox_view, |
81 OmniboxEditModel* edit_model, | 81 OmniboxEditModel* edit_model, |
82 LocationBarView* location_bar_view) | 82 LocationBarView* location_bar_view) |
83 : model_(new OmniboxPopupModel(this, edit_model)), | 83 : model_(new OmniboxPopupModel(this, edit_model)), |
84 omnibox_view_(omnibox_view), | 84 omnibox_view_(omnibox_view), |
85 location_bar_view_(location_bar_view), | 85 location_bar_view_(location_bar_view), |
86 font_(font), | 86 font_list_(font_list), |
87 ignore_mouse_drag_(false), | 87 ignore_mouse_drag_(false), |
88 size_animation_(this), | 88 size_animation_(this), |
89 left_margin_(0), | 89 left_margin_(0), |
90 right_margin_(0), | 90 right_margin_(0), |
91 outside_vertical_padding_(0) { | 91 outside_vertical_padding_(0) { |
92 // The contents is owned by the LocationBarView. | 92 // The contents is owned by the LocationBarView. |
93 set_owned_by_client(); | 93 set_owned_by_client(); |
94 | 94 |
95 ui::ThemeProvider* theme = location_bar_view_->GetThemeProvider(); | 95 ui::ThemeProvider* theme = location_bar_view_->GetThemeProvider(); |
96 bottom_shadow_ = theme->GetImageSkiaNamed(IDR_BUBBLE_B); | 96 bottom_shadow_ = theme->GetImageSkiaNamed(IDR_BUBBLE_B); |
97 } | 97 } |
98 | 98 |
99 void OmniboxPopupContentsView::Init() { | 99 void OmniboxPopupContentsView::Init() { |
100 // This can't be done in the constructor as at that point we aren't | 100 // This can't be done in the constructor as at that point we aren't |
101 // necessarily our final class yet, and we may have subclasses | 101 // necessarily our final class yet, and we may have subclasses |
102 // overriding CreateResultView. | 102 // overriding CreateResultView. |
103 for (size_t i = 0; i < AutocompleteResult::kMaxMatches; ++i) { | 103 for (size_t i = 0; i < AutocompleteResult::kMaxMatches; ++i) { |
104 OmniboxResultView* result_view = CreateResultView(this, i, font_); | 104 OmniboxResultView* result_view = CreateResultView(this, i, font_list_); |
105 result_view->SetVisible(false); | 105 result_view->SetVisible(false); |
106 AddChildViewAt(result_view, static_cast<int>(i)); | 106 AddChildViewAt(result_view, static_cast<int>(i)); |
107 } | 107 } |
108 } | 108 } |
109 | 109 |
110 OmniboxPopupContentsView::~OmniboxPopupContentsView() { | 110 OmniboxPopupContentsView::~OmniboxPopupContentsView() { |
111 // We don't need to do anything with |popup_| here. The OS either has already | 111 // We don't need to do anything with |popup_| here. The OS either has already |
112 // closed the window, in which case it's been deleted, or it will soon, in | 112 // closed the window, in which case it's been deleted, or it will soon, in |
113 // which case there's nothing we need to do. | 113 // which case there's nothing we need to do. |
114 } | 114 } |
(...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
410 | 410 |
411 return popup_height + | 411 return popup_height + |
412 views::NonClientFrameView::kClientEdgeThickness + // Top border. | 412 views::NonClientFrameView::kClientEdgeThickness + // Top border. |
413 outside_vertical_padding_ * 2 + // Padding. | 413 outside_vertical_padding_ * 2 + // Padding. |
414 bottom_shadow_->height() - kBorderInterior; // Bottom border. | 414 bottom_shadow_->height() - kBorderInterior; // Bottom border. |
415 } | 415 } |
416 | 416 |
417 OmniboxResultView* OmniboxPopupContentsView::CreateResultView( | 417 OmniboxResultView* OmniboxPopupContentsView::CreateResultView( |
418 OmniboxResultViewModel* model, | 418 OmniboxResultViewModel* model, |
419 int model_index, | 419 int model_index, |
420 const gfx::Font& font) { | 420 const gfx::FontList& font_list) { |
421 return new OmniboxResultView(model, model_index, location_bar_view_, font); | 421 return new OmniboxResultView(model, model_index, location_bar_view_, |
| 422 font_list); |
422 } | 423 } |
423 | 424 |
424 //////////////////////////////////////////////////////////////////////////////// | 425 //////////////////////////////////////////////////////////////////////////////// |
425 // OmniboxPopupContentsView, views::View overrides, protected: | 426 // OmniboxPopupContentsView, views::View overrides, protected: |
426 | 427 |
427 void OmniboxPopupContentsView::OnPaint(gfx::Canvas* canvas) { | 428 void OmniboxPopupContentsView::OnPaint(gfx::Canvas* canvas) { |
428 gfx::Rect contents_bounds = GetContentsBounds(); | 429 gfx::Rect contents_bounds = GetContentsBounds(); |
429 contents_bounds.set_height( | 430 contents_bounds.set_height( |
430 contents_bounds.height() - bottom_shadow_->height() + kBorderInterior); | 431 contents_bounds.height() - bottom_shadow_->height() + kBorderInterior); |
431 | 432 |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
512 // OpenMatch() may close the popup, which will clear the result set and, by | 513 // OpenMatch() may close the popup, which will clear the result set and, by |
513 // extension, |match| and its contents. So copy the relevant match out to | 514 // extension, |match| and its contents. So copy the relevant match out to |
514 // make sure it stays alive until the call completes. | 515 // make sure it stays alive until the call completes. |
515 AutocompleteMatch match = model_->result().match_at(index); | 516 AutocompleteMatch match = model_->result().match_at(index); |
516 omnibox_view_->OpenMatch(match, disposition, GURL(), index); | 517 omnibox_view_->OpenMatch(match, disposition, GURL(), index); |
517 } | 518 } |
518 | 519 |
519 OmniboxResultView* OmniboxPopupContentsView::result_view_at(size_t i) { | 520 OmniboxResultView* OmniboxPopupContentsView::result_view_at(size_t i) { |
520 return static_cast<OmniboxResultView*>(child_at(static_cast<int>(i))); | 521 return static_cast<OmniboxResultView*>(child_at(static_cast<int>(i))); |
521 } | 522 } |
OLD | NEW |