| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/touch/frame/touch_browser_frame_view.h" | 5 #include "chrome/browser/ui/touch/frame/touch_browser_frame_view.h" |
| 6 | 6 |
| 7 #include "chrome/browser/profiles/profile.h" | 7 #include "chrome/browser/profiles/profile.h" |
| 8 #include "chrome/browser/renderer_host/render_widget_host_view_views.h" | 8 #include "chrome/browser/renderer_host/render_widget_host_view_views.h" |
| 9 #include "chrome/browser/tabs/tab_strip_model.h" | |
| 10 #include "chrome/browser/ui/browser.h" | 9 #include "chrome/browser/ui/browser.h" |
| 11 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" | |
| 12 #include "chrome/browser/ui/touch/frame/keyboard_container_view.h" | 10 #include "chrome/browser/ui/touch/frame/keyboard_container_view.h" |
| 13 #include "chrome/browser/ui/views/frame/browser_view.h" | 11 #include "chrome/browser/ui/views/frame/browser_view.h" |
| 14 #include "chrome/browser/ui/views/tab_contents/tab_contents_view_touch.h" | |
| 15 #include "content/browser/renderer_host/render_view_host.h" | 12 #include "content/browser/renderer_host/render_view_host.h" |
| 16 #include "content/browser/tab_contents/navigation_controller.h" | |
| 17 #include "content/browser/tab_contents/tab_contents.h" | 13 #include "content/browser/tab_contents/tab_contents.h" |
| 18 #include "content/browser/tab_contents/tab_contents_view.h" | |
| 19 #include "content/common/notification_service.h" | 14 #include "content/common/notification_service.h" |
| 20 #include "content/common/notification_type.h" | 15 #include "content/common/notification_type.h" |
| 21 #include "content/common/view_messages.h" | 16 #include "content/common/view_messages.h" |
| 22 #include "ui/base/animation/slide_animation.h" | 17 #include "ui/base/animation/slide_animation.h" |
| 23 #include "ui/gfx/rect.h" | 18 #include "ui/gfx/rect.h" |
| 24 #include "ui/gfx/transform.h" | 19 #include "ui/gfx/transform.h" |
| 25 #include "views/controls/button/image_button.h" | 20 #include "views/controls/button/image_button.h" |
| 26 #include "views/controls/textfield/textfield.h" | |
| 27 #include "views/focus/focus_manager.h" | |
| 28 | 21 |
| 29 #if defined(OS_CHROMEOS) | 22 #if defined(OS_CHROMEOS) |
| 30 #include "chrome/browser/chromeos/cros/cros_library.h" | 23 #include "chrome/browser/chromeos/cros/cros_library.h" |
| 31 #include "chrome/browser/chromeos/input_method/virtual_keyboard_selector.h" | 24 #include "chrome/browser/chromeos/input_method/virtual_keyboard_selector.h" |
| 32 #endif | 25 #endif |
| 33 | 26 |
| 34 namespace { | 27 namespace { |
| 35 | 28 |
| 36 const int kDefaultKeyboardHeight = 300; | 29 const int kDefaultKeyboardHeight = 300; |
| 37 const int kKeyboardSlideDuration = 300; // In milliseconds | 30 const int kKeyboardSlideDuration = 300; // In milliseconds |
| 38 | 31 |
| 39 PropertyAccessor<bool>* GetFocusedStateAccessor() { | |
| 40 static PropertyAccessor<bool> state; | |
| 41 return &state; | |
| 42 } | |
| 43 | |
| 44 bool TabContentsHasFocus(const TabContents* contents) { | |
| 45 views::View* view = static_cast<TabContentsViewTouch*>(contents->view()); | |
| 46 return view->Contains(view->GetFocusManager()->GetFocusedView()); | |
| 47 } | |
| 48 | |
| 49 } // namespace | 32 } // namespace |
| 50 | 33 |
| 51 // static | 34 // static |
| 52 const char TouchBrowserFrameView::kViewClassName[] = | 35 const char TouchBrowserFrameView::kViewClassName[] = |
| 53 "browser/ui/touch/frame/TouchBrowserFrameView"; | 36 "browser/ui/touch/frame/TouchBrowserFrameView"; |
| 54 | 37 |
| 55 /////////////////////////////////////////////////////////////////////////////// | 38 /////////////////////////////////////////////////////////////////////////////// |
| 56 // TouchBrowserFrameView, public: | 39 // TouchBrowserFrameView, public: |
| 57 | 40 |
| 58 TouchBrowserFrameView::TouchBrowserFrameView(BrowserFrame* frame, | 41 TouchBrowserFrameView::TouchBrowserFrameView(BrowserFrame* frame, |
| 59 BrowserView* browser_view) | 42 BrowserView* browser_view) |
| 60 : OpaqueBrowserFrameView(frame, browser_view), | 43 : OpaqueBrowserFrameView(frame, browser_view), |
| 61 keyboard_showing_(false), | 44 keyboard_showing_(false), |
| 62 keyboard_height_(kDefaultKeyboardHeight), | 45 keyboard_height_(kDefaultKeyboardHeight), |
| 63 focus_listener_added_(false), | 46 focus_listener_added_(false), |
| 64 keyboard_(NULL) { | 47 keyboard_(NULL) { |
| 65 registrar_.Add(this, | 48 registrar_.Add(this, |
| 66 NotificationType::NAV_ENTRY_COMMITTED, | |
| 67 NotificationService::AllSources()); | |
| 68 registrar_.Add(this, | |
| 69 NotificationType::FOCUS_CHANGED_IN_PAGE, | |
| 70 NotificationService::AllSources()); | |
| 71 registrar_.Add(this, | |
| 72 NotificationType::TAB_CONTENTS_DESTROYED, | |
| 73 NotificationService::AllSources()); | |
| 74 registrar_.Add(this, | |
| 75 NotificationType::HIDE_KEYBOARD_INVOKED, | 49 NotificationType::HIDE_KEYBOARD_INVOKED, |
| 76 NotificationService::AllSources()); | 50 NotificationService::AllSources()); |
| 77 registrar_.Add(this, | 51 registrar_.Add(this, |
| 78 NotificationType::SET_KEYBOARD_HEIGHT_INVOKED, | 52 NotificationType::SET_KEYBOARD_HEIGHT_INVOKED, |
| 79 NotificationService::AllSources()); | 53 NotificationService::AllSources()); |
| 80 | 54 |
| 81 browser_view->browser()->tabstrip_model()->AddObserver(this); | |
| 82 | |
| 83 animation_.reset(new ui::SlideAnimation(this)); | 55 animation_.reset(new ui::SlideAnimation(this)); |
| 84 animation_->SetTweenType(ui::Tween::LINEAR); | 56 animation_->SetTweenType(ui::Tween::LINEAR); |
| 85 animation_->SetSlideDuration(kKeyboardSlideDuration); | 57 animation_->SetSlideDuration(kKeyboardSlideDuration); |
| 86 | 58 |
| 87 #if defined(OS_CHROMEOS) | 59 #if defined(OS_CHROMEOS) |
| 88 chromeos::InputMethodLibrary* library = | 60 chromeos::InputMethodLibrary* library = |
| 89 chromeos::CrosLibrary::Get()->GetInputMethodLibrary(); | 61 chromeos::CrosLibrary::Get()->GetInputMethodLibrary(); |
| 90 library->AddVirtualKeyboardObserver(this); | 62 library->AddVirtualKeyboardObserver(this); |
| 91 #endif | 63 #endif |
| 92 } | 64 } |
| 93 | 65 |
| 94 TouchBrowserFrameView::~TouchBrowserFrameView() { | 66 TouchBrowserFrameView::~TouchBrowserFrameView() { |
| 95 browser_view()->browser()->tabstrip_model()->RemoveObserver(this); | |
| 96 } | 67 } |
| 97 | 68 |
| 98 std::string TouchBrowserFrameView::GetClassName() const { | 69 std::string TouchBrowserFrameView::GetClassName() const { |
| 99 return kViewClassName; | 70 return kViewClassName; |
| 100 } | 71 } |
| 101 | 72 |
| 102 void TouchBrowserFrameView::Layout() { | 73 void TouchBrowserFrameView::Layout() { |
| 103 OpaqueBrowserFrameView::Layout(); | 74 OpaqueBrowserFrameView::Layout(); |
| 104 | 75 |
| 105 if (!keyboard_) | 76 if (!keyboard_) |
| 106 return; | 77 return; |
| 107 | 78 |
| 108 keyboard_->SetVisible(keyboard_showing_ || animation_->is_animating()); | 79 keyboard_->SetVisible(keyboard_showing_ || animation_->is_animating()); |
| 109 gfx::Rect bounds = GetBoundsForReservedArea(); | 80 gfx::Rect bounds = GetBoundsForReservedArea(); |
| 110 if (animation_->is_animating() && !keyboard_showing_) { | 81 if (animation_->is_animating() && !keyboard_showing_) { |
| 111 // The keyboard is in the process of hiding. So pretend it still has the | 82 // The keyboard is in the process of hiding. So pretend it still has the |
| 112 // same bounds as when the keyboard is visible. But | 83 // same bounds as when the keyboard is visible. But |
| 113 // |GetBoundsForReservedArea| should not take this into account so that the | 84 // |GetBoundsForReservedArea| should not take this into account so that the |
| 114 // render view gets the entire area to relayout itself. | 85 // render view gets the entire area to relayout itself. |
| 115 bounds.set_y(bounds.y() - keyboard_height_); | 86 bounds.set_y(bounds.y() - keyboard_height_); |
| 116 bounds.set_height(keyboard_height_); | 87 bounds.set_height(keyboard_height_); |
| 117 } | 88 } |
| 118 keyboard_->SetBoundsRect(bounds); | 89 keyboard_->SetBoundsRect(bounds); |
| 119 } | 90 } |
| 120 | 91 |
| 121 void TouchBrowserFrameView::FocusWillChange(views::View* focused_before, | |
| 122 views::View* focused_now) { | |
| 123 VirtualKeyboardType before = DecideKeyboardStateForView(focused_before); | |
| 124 VirtualKeyboardType now = DecideKeyboardStateForView(focused_now); | |
| 125 if (before != now) { | |
| 126 // TODO(varunjain): support other types of keyboard. | |
| 127 UpdateKeyboardAndLayout(now == GENERIC); | |
| 128 } | |
| 129 } | |
| 130 | |
| 131 /////////////////////////////////////////////////////////////////////////////// | 92 /////////////////////////////////////////////////////////////////////////////// |
| 132 // TouchBrowserFrameView, protected: | 93 // TouchBrowserFrameView, protected: |
| 133 | 94 |
| 134 int TouchBrowserFrameView::GetReservedHeight() const { | 95 int TouchBrowserFrameView::GetReservedHeight() const { |
| 135 return keyboard_showing_ ? keyboard_height_ : 0; | 96 return keyboard_showing_ ? keyboard_height_ : 0; |
| 136 } | 97 } |
| 137 | 98 |
| 138 void TouchBrowserFrameView::ViewHierarchyChanged(bool is_add, | 99 void TouchBrowserFrameView::ViewHierarchyChanged(bool is_add, |
| 139 View* parent, | 100 View* parent, |
| 140 View* child) { | 101 View* child) { |
| 141 OpaqueBrowserFrameView::ViewHierarchyChanged(is_add, parent, child); | 102 OpaqueBrowserFrameView::ViewHierarchyChanged(is_add, parent, child); |
| 142 if (!GetFocusManager()) | 103 views::InputMethod* input_method = GetInputMethod(); |
| 104 if (!input_method) |
| 143 return; | 105 return; |
| 144 | 106 |
| 145 if (is_add && !focus_listener_added_) { | 107 if (is_add && !focus_listener_added_) { |
| 146 // Add focus listener when this view is added to the hierarchy. | 108 // Add focus listener when this view is added to the hierarchy. |
| 147 GetFocusManager()->AddFocusChangeListener(this); | 109 input_method->AddTextInputTypeChangedListener(this); |
| 148 focus_listener_added_ = true; | 110 focus_listener_added_ = true; |
| 111 UpdateKeyboard(input_method->GetTextInputType()); |
| 149 } else if (!is_add && focus_listener_added_) { | 112 } else if (!is_add && focus_listener_added_) { |
| 150 // Remove focus listener when this view is removed from the hierarchy. | 113 // Remove focus listener when this view is removed from the hierarchy. |
| 151 GetFocusManager()->RemoveFocusChangeListener(this); | 114 input_method->RemoveTextInputTypeChangedListener(this); |
| 152 focus_listener_added_ = false; | 115 focus_listener_added_ = false; |
| 116 UpdateKeyboardAndLayout(false); |
| 153 } | 117 } |
| 154 } | 118 } |
| 155 | 119 |
| 156 /////////////////////////////////////////////////////////////////////////////// | 120 /////////////////////////////////////////////////////////////////////////////// |
| 157 // TouchBrowserFrameView, private: | 121 // TouchBrowserFrameView, private: |
| 158 | 122 |
| 159 void TouchBrowserFrameView::InitVirtualKeyboard() { | 123 void TouchBrowserFrameView::InitVirtualKeyboard() { |
| 160 if (keyboard_) | 124 if (keyboard_) |
| 161 return; | 125 return; |
| 162 | 126 |
| 163 Profile* keyboard_profile = browser_view()->browser()->profile(); | 127 Profile* keyboard_profile = browser_view()->browser()->profile(); |
| 164 DCHECK(keyboard_profile) << "Profile required for virtual keyboard."; | 128 DCHECK(keyboard_profile) << "Profile required for virtual keyboard."; |
| 165 | 129 |
| 166 keyboard_ = new KeyboardContainerView(keyboard_profile, | 130 keyboard_ = new KeyboardContainerView(keyboard_profile, |
| 167 browser_view()->browser()); | 131 browser_view()->browser()); |
| 168 keyboard_->SetVisible(false); | 132 keyboard_->SetVisible(false); |
| 169 AddChildView(keyboard_); | 133 AddChildView(keyboard_); |
| 170 } | 134 } |
| 171 | 135 |
| 136 void TouchBrowserFrameView::UpdateKeyboard(ui::TextInputType type) { |
| 137 switch (type) { |
| 138 case ui::TEXT_INPUT_TYPE_NONE: |
| 139 UpdateKeyboardAndLayout(false); |
| 140 return; |
| 141 case ui::TEXT_INPUT_TYPE_TEXT: |
| 142 case ui::TEXT_INPUT_TYPE_PASSWORD: |
| 143 default: |
| 144 // TODO(penghuang): pass the input type to virtual keyboard. |
| 145 UpdateKeyboardAndLayout(true); |
| 146 return; |
| 147 } |
| 148 } |
| 149 |
| 172 void TouchBrowserFrameView::UpdateKeyboardAndLayout(bool should_show_keyboard) { | 150 void TouchBrowserFrameView::UpdateKeyboardAndLayout(bool should_show_keyboard) { |
| 173 if (should_show_keyboard) | 151 if (should_show_keyboard) |
| 174 InitVirtualKeyboard(); | 152 InitVirtualKeyboard(); |
| 175 | 153 |
| 176 if (should_show_keyboard == keyboard_showing_) | 154 if (should_show_keyboard == keyboard_showing_) |
| 177 return; | 155 return; |
| 178 | 156 |
| 179 DCHECK(keyboard_); | 157 DCHECK(keyboard_); |
| 180 | 158 |
| 181 keyboard_showing_ = should_show_keyboard; | 159 keyboard_showing_ = should_show_keyboard; |
| (...skipping 10 matching lines...) Expand all Loading... |
| 192 animation_->Show(); | 170 animation_->Show(); |
| 193 } else { | 171 } else { |
| 194 animation_->Hide(); | 172 animation_->Hide(); |
| 195 | 173 |
| 196 browser_view()->set_clip_y(ui::Tween::ValueBetween( | 174 browser_view()->set_clip_y(ui::Tween::ValueBetween( |
| 197 animation_->GetCurrentValue(), 0, keyboard_height_)); | 175 animation_->GetCurrentValue(), 0, keyboard_height_)); |
| 198 parent()->Layout(); | 176 parent()->Layout(); |
| 199 } | 177 } |
| 200 } | 178 } |
| 201 | 179 |
| 202 TouchBrowserFrameView::VirtualKeyboardType | |
| 203 TouchBrowserFrameView::DecideKeyboardStateForView(views::View* view) { | |
| 204 if (!view) | |
| 205 return NONE; | |
| 206 | |
| 207 std::string cname = view->GetClassName(); | |
| 208 if (cname == views::Textfield::kViewClassName) { | |
| 209 return GENERIC; | |
| 210 } else if (cname == RenderWidgetHostViewViews::kViewClassName) { | |
| 211 TabContents* contents = browser_view()->browser()->GetSelectedTabContents(); | |
| 212 bool* editable = contents ? GetFocusedStateAccessor()->GetProperty( | |
| 213 contents->property_bag()) : NULL; | |
| 214 if (editable && *editable) | |
| 215 return GENERIC; | |
| 216 } | |
| 217 return NONE; | |
| 218 } | |
| 219 | |
| 220 bool TouchBrowserFrameView::HitTest(const gfx::Point& point) const { | 180 bool TouchBrowserFrameView::HitTest(const gfx::Point& point) const { |
| 221 if (OpaqueBrowserFrameView::HitTest(point)) | 181 if (OpaqueBrowserFrameView::HitTest(point)) |
| 222 return true; | 182 return true; |
| 223 | 183 |
| 224 if (close_button()->IsVisible() && | 184 if (close_button()->IsVisible() && |
| 225 close_button()->GetMirroredBounds().Contains(point)) | 185 close_button()->GetMirroredBounds().Contains(point)) |
| 226 return true; | 186 return true; |
| 227 if (restore_button()->IsVisible() && | 187 if (restore_button()->IsVisible() && |
| 228 restore_button()->GetMirroredBounds().Contains(point)) | 188 restore_button()->GetMirroredBounds().Contains(point)) |
| 229 return true; | 189 return true; |
| 230 if (maximize_button()->IsVisible() && | 190 if (maximize_button()->IsVisible() && |
| 231 maximize_button()->GetMirroredBounds().Contains(point)) | 191 maximize_button()->GetMirroredBounds().Contains(point)) |
| 232 return true; | 192 return true; |
| 233 if (minimize_button()->IsVisible() && | 193 if (minimize_button()->IsVisible() && |
| 234 minimize_button()->GetMirroredBounds().Contains(point)) | 194 minimize_button()->GetMirroredBounds().Contains(point)) |
| 235 return true; | 195 return true; |
| 236 | 196 |
| 237 return false; | 197 return false; |
| 238 } | 198 } |
| 239 | 199 |
| 240 void TouchBrowserFrameView::ActiveTabChanged(TabContentsWrapper* old_contents, | |
| 241 TabContentsWrapper* new_contents, | |
| 242 int index, | |
| 243 bool user_gesture) { | |
| 244 if (new_contents == old_contents) | |
| 245 return; | |
| 246 | |
| 247 TabContents* contents = new_contents->tab_contents(); | |
| 248 if (!TabContentsHasFocus(contents)) | |
| 249 return; | |
| 250 | |
| 251 bool* editable = GetFocusedStateAccessor()->GetProperty( | |
| 252 contents->property_bag()); | |
| 253 UpdateKeyboardAndLayout(editable ? *editable : false); | |
| 254 } | |
| 255 | |
| 256 void TouchBrowserFrameView::TabStripEmpty() { | |
| 257 if (animation_->is_animating()) { | |
| 258 // Reset the delegate so the AnimationEnded callback doesn't trigger. | |
| 259 animation_->set_delegate(NULL); | |
| 260 animation_->Stop(); | |
| 261 } | |
| 262 } | |
| 263 | |
| 264 void TouchBrowserFrameView::Observe(NotificationType type, | 200 void TouchBrowserFrameView::Observe(NotificationType type, |
| 265 const NotificationSource& source, | 201 const NotificationSource& source, |
| 266 const NotificationDetails& details) { | 202 const NotificationDetails& details) { |
| 267 Browser* browser = browser_view()->browser(); | 203 switch (type.value) { |
| 268 if (type == NotificationType::FOCUS_CHANGED_IN_PAGE) { | 204 case NotificationType::HIDE_KEYBOARD_INVOKED: |
| 269 // Only modify the keyboard state if the currently active tab sent the | 205 UpdateKeyboardAndLayout(false); |
| 270 // notification. | 206 return; |
| 271 const TabContents* current_tab = browser->GetSelectedTabContents(); | 207 case NotificationType::SET_KEYBOARD_HEIGHT_INVOKED: { |
| 272 TabContents* source_tab = Source<TabContents>(source).ptr(); | 208 // TODO(penghuang) Allow extension conrtol the virtual keyboard directly |
| 273 const bool editable = *Details<const bool>(details).ptr(); | 209 // instead of using Notification. |
| 274 | 210 int height = *reinterpret_cast<int*>(details.map_key()); |
| 275 if (current_tab == source_tab && TabContentsHasFocus(source_tab)) | 211 if (height != keyboard_height_) { |
| 276 UpdateKeyboardAndLayout(editable); | 212 DCHECK_GE(height, 0) << "Height of the keyboard is less than 0."; |
| 277 | 213 DCHECK_LE(height, View::height()) << "Height of the keyboard is greater" |
| 278 // Save the state of the focused field so that the keyboard visibility | 214 " than the height of frame view."; |
| 279 // can be determined after tab switching. | 215 keyboard_height_ = height; |
| 280 GetFocusedStateAccessor()->SetProperty( | 216 parent()->Layout(); |
| 281 source_tab->property_bag(), editable); | |
| 282 } else if (type == NotificationType::NAV_ENTRY_COMMITTED) { | |
| 283 NavigationController* controller = | |
| 284 Source<NavigationController>(source).ptr(); | |
| 285 Browser* source_browser = Browser::GetBrowserForController( | |
| 286 controller, NULL); | |
| 287 | |
| 288 // If the Browser for the keyboard has navigated, re-evaluate the visibility | |
| 289 // of the keyboard. | |
| 290 TouchBrowserFrameView::VirtualKeyboardType keyboard_type = NONE; | |
| 291 views::View* view = GetFocusManager()->GetFocusedView(); | |
| 292 if (view) { | |
| 293 if (view->GetClassName() == views::Textfield::kViewClassName) | |
| 294 keyboard_type = GENERIC; | |
| 295 if (view->GetClassName() == RenderWidgetHostViewViews::kViewClassName) { | |
| 296 // Reset the state of the focused field in the current tab. | |
| 297 GetFocusedStateAccessor()->SetProperty( | |
| 298 controller->tab_contents()->property_bag(), false); | |
| 299 } | 217 } |
| 218 return; |
| 300 } | 219 } |
| 301 if (source_browser == browser) | 220 default: |
| 302 UpdateKeyboardAndLayout(keyboard_type == GENERIC); | 221 OpaqueBrowserFrameView::Observe(type, source, details); |
| 303 } else if (type == NotificationType::TAB_CONTENTS_DESTROYED) { | 222 return; |
| 304 GetFocusedStateAccessor()->DeleteProperty( | |
| 305 Source<TabContents>(source).ptr()->property_bag()); | |
| 306 } else if (type == NotificationType::PREF_CHANGED) { | |
| 307 OpaqueBrowserFrameView::Observe(type, source, details); | |
| 308 } else if (type == NotificationType::HIDE_KEYBOARD_INVOKED) { | |
| 309 TabContents* tab_contents = | |
| 310 browser_view()->browser()->GetSelectedTabContents(); | |
| 311 if (tab_contents) { | |
| 312 GetFocusedStateAccessor()->SetProperty(tab_contents->property_bag(), | |
| 313 false); | |
| 314 } | |
| 315 UpdateKeyboardAndLayout(false); | |
| 316 } else if (type == NotificationType::SET_KEYBOARD_HEIGHT_INVOKED) { | |
| 317 // TODO(penghuang) Allow extension conrtol the virtual keyboard directly | |
| 318 // instead of using Notification. | |
| 319 int height = *reinterpret_cast<int*>(details.map_key()); | |
| 320 if (height != keyboard_height_) { | |
| 321 DCHECK_GE(height, 0) << "Height of the keyboard is less than 0."; | |
| 322 DCHECK_LE(height, View::height()) << "Height of the keyboard is greater " | |
| 323 "than the height of frame view."; | |
| 324 keyboard_height_ = height; | |
| 325 parent()->Layout(); | |
| 326 } | |
| 327 } | 223 } |
| 328 } | 224 } |
| 329 | 225 |
| 330 /////////////////////////////////////////////////////////////////////////////// | 226 /////////////////////////////////////////////////////////////////////////////// |
| 331 // ui::AnimationDelegate implementation | 227 // ui::AnimationDelegate implementation |
| 332 void TouchBrowserFrameView::AnimationProgressed(const ui::Animation* anim) { | 228 void TouchBrowserFrameView::AnimationProgressed(const ui::Animation* anim) { |
| 333 ui::Transform transform; | 229 ui::Transform transform; |
| 334 transform.SetTranslateY( | 230 transform.SetTranslateY( |
| 335 ui::Tween::ValueBetween(anim->GetCurrentValue(), keyboard_height_, 0)); | 231 ui::Tween::ValueBetween(anim->GetCurrentValue(), keyboard_height_, 0)); |
| 336 keyboard_->SetTransform(transform); | 232 keyboard_->SetTransform(transform); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 365 const chromeos::input_method::VirtualKeyboard& virtual_keyboard, | 261 const chromeos::input_method::VirtualKeyboard& virtual_keyboard, |
| 366 const std::string& virtual_keyboard_layout) { | 262 const std::string& virtual_keyboard_layout) { |
| 367 if (!keyboard_) | 263 if (!keyboard_) |
| 368 return; | 264 return; |
| 369 | 265 |
| 370 const GURL& url = virtual_keyboard.GetURLForLayout(virtual_keyboard_layout); | 266 const GURL& url = virtual_keyboard.GetURLForLayout(virtual_keyboard_layout); |
| 371 keyboard_->LoadURL(url); | 267 keyboard_->LoadURL(url); |
| 372 VLOG(1) << "VirtualKeyboardChanged: Switched to " << url.spec(); | 268 VLOG(1) << "VirtualKeyboardChanged: Switched to " << url.spec(); |
| 373 } | 269 } |
| 374 #endif | 270 #endif |
| 271 |
| 272 /////////////////////////////////////////////////////////////////////////////// |
| 273 // views::TextInputTypeChangedListener implementation |
| 274 void TouchBrowserFrameView::TextInputTypeChanged( |
| 275 views::View* view, ui::TextInputType type) { |
| 276 UpdateKeyboard(type); |
| 277 } |
| OLD | NEW |