| 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/autofill/autofill_popup_controller_impl.h" | 5 #include "chrome/browser/ui/autofill/autofill_popup_controller_impl.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 93 | 93 |
| 94 AutofillPopupControllerImpl::AutofillPopupControllerImpl( | 94 AutofillPopupControllerImpl::AutofillPopupControllerImpl( |
| 95 AutofillPopupDelegate* delegate, | 95 AutofillPopupDelegate* delegate, |
| 96 gfx::NativeView container_view, | 96 gfx::NativeView container_view, |
| 97 const gfx::RectF& element_bounds) | 97 const gfx::RectF& element_bounds) |
| 98 : view_(NULL), | 98 : view_(NULL), |
| 99 delegate_(delegate), | 99 delegate_(delegate), |
| 100 container_view_(container_view), | 100 container_view_(container_view), |
| 101 element_bounds_(element_bounds), | 101 element_bounds_(element_bounds), |
| 102 selected_line_(kNoSelection), | 102 selected_line_(kNoSelection), |
| 103 is_hiding_(false), | |
| 104 weak_ptr_factory_(this) { | 103 weak_ptr_factory_(this) { |
| 105 #if !defined(OS_ANDROID) | 104 #if !defined(OS_ANDROID) |
| 106 subtext_font_ = name_font_.DeriveFont(kLabelFontSizeDelta); | 105 subtext_font_ = name_font_.DeriveFont(kLabelFontSizeDelta); |
| 107 warning_font_ = name_font_.DeriveFont(0, gfx::Font::ITALIC); | 106 warning_font_ = name_font_.DeriveFont(0, gfx::Font::ITALIC); |
| 108 #endif | 107 #endif |
| 109 } | 108 } |
| 110 | 109 |
| 111 AutofillPopupControllerImpl::~AutofillPopupControllerImpl() {} | 110 AutofillPopupControllerImpl::~AutofillPopupControllerImpl() {} |
| 112 | 111 |
| 113 void AutofillPopupControllerImpl::Show( | 112 void AutofillPopupControllerImpl::Show( |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 160 view_ = AutofillPopupView::Create(this); | 159 view_ = AutofillPopupView::Create(this); |
| 161 ShowView(); | 160 ShowView(); |
| 162 } else { | 161 } else { |
| 163 UpdateBoundsAndRedrawPopup(); | 162 UpdateBoundsAndRedrawPopup(); |
| 164 } | 163 } |
| 165 | 164 |
| 166 delegate_->OnPopupShown(this); | 165 delegate_->OnPopupShown(this); |
| 167 } | 166 } |
| 168 | 167 |
| 169 void AutofillPopupControllerImpl::Hide() { | 168 void AutofillPopupControllerImpl::Hide() { |
| 170 if (is_hiding_) | |
| 171 return; | |
| 172 is_hiding_ = true; | |
| 173 | |
| 174 SetSelectedLine(kNoSelection); | 169 SetSelectedLine(kNoSelection); |
| 175 | 170 |
| 176 delegate_->OnPopupHidden(this); | 171 delegate_->OnPopupHidden(this); |
| 177 | 172 |
| 178 if (view_) | 173 if (view_) |
| 179 view_->Hide(); | 174 view_->Hide(); |
| 180 else | 175 |
| 181 delete this; | 176 delete this; |
| 182 } | 177 } |
| 183 | 178 |
| 184 bool AutofillPopupControllerImpl::HandleKeyPressEvent( | 179 bool AutofillPopupControllerImpl::HandleKeyPressEvent( |
| 185 const content::NativeWebKeyboardEvent& event) { | 180 const content::NativeWebKeyboardEvent& event) { |
| 186 switch (event.windowsKeyCode) { | 181 switch (event.windowsKeyCode) { |
| 187 case ui::VKEY_UP: | 182 case ui::VKEY_UP: |
| 188 SelectPreviousLine(); | 183 SelectPreviousLine(); |
| 189 return true; | 184 return true; |
| 190 case ui::VKEY_DOWN: | 185 case ui::VKEY_DOWN: |
| 191 SelectNextLine(); | 186 SelectNextLine(); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 202 case ui::VKEY_DELETE: | 197 case ui::VKEY_DELETE: |
| 203 return (event.modifiers & content::NativeWebKeyboardEvent::ShiftKey) && | 198 return (event.modifiers & content::NativeWebKeyboardEvent::ShiftKey) && |
| 204 RemoveSelectedLine(); | 199 RemoveSelectedLine(); |
| 205 case ui::VKEY_RETURN: | 200 case ui::VKEY_RETURN: |
| 206 return AcceptSelectedLine(); | 201 return AcceptSelectedLine(); |
| 207 default: | 202 default: |
| 208 return false; | 203 return false; |
| 209 } | 204 } |
| 210 } | 205 } |
| 211 | 206 |
| 212 void AutofillPopupControllerImpl::ViewDestroyed() { | |
| 213 delete this; | |
| 214 } | |
| 215 | |
| 216 void AutofillPopupControllerImpl::UpdateBoundsAndRedrawPopup() { | 207 void AutofillPopupControllerImpl::UpdateBoundsAndRedrawPopup() { |
| 217 #if !defined(OS_ANDROID) | 208 #if !defined(OS_ANDROID) |
| 218 // TODO(csharp): Since UpdatePopupBounds can change the position of the popup, | 209 // TODO(csharp): Since UpdatePopupBounds can change the position of the popup, |
| 219 // the popup could end up jumping from above the element to below it. | 210 // the popup could end up jumping from above the element to below it. |
| 220 // It is unclear if it is better to keep the popup where it was, or if it | 211 // It is unclear if it is better to keep the popup where it was, or if it |
| 221 // should try and move to its desired position. | 212 // should try and move to its desired position. |
| 222 UpdatePopupBounds(); | 213 UpdatePopupBounds(); |
| 223 #endif | 214 #endif |
| 224 | 215 |
| 225 view_->UpdateBoundsAndRedrawPopup(); | 216 view_->UpdateBoundsAndRedrawPopup(); |
| (...skipping 385 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 611 if (bottom_available >= popup_required_height || | 602 if (bottom_available >= popup_required_height || |
| 612 bottom_available >= top_available) { | 603 bottom_available >= top_available) { |
| 613 // The popup can appear below the field. | 604 // The popup can appear below the field. |
| 614 return std::make_pair(bottom_growth_start, popup_required_height); | 605 return std::make_pair(bottom_growth_start, popup_required_height); |
| 615 } else { | 606 } else { |
| 616 // The popup must appear above the field. | 607 // The popup must appear above the field. |
| 617 return std::make_pair(top_growth_end - popup_required_height, | 608 return std::make_pair(top_growth_end - popup_required_height, |
| 618 popup_required_height); | 609 popup_required_height); |
| 619 } | 610 } |
| 620 } | 611 } |
| OLD | NEW |