Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "ash/autoclick/autoclick_controller.h" | 5 #include "ash/autoclick/autoclick_controller.h" |
| 6 | 6 |
| 7 #include "ash/shell.h" | 7 #include "ash/shell.h" |
| 8 #include "ash/wm/coordinate_conversion.h" | 8 #include "ash/wm/coordinate_conversion.h" |
| 9 #include "base/timer/timer.h" | 9 #include "base/timer/timer.h" |
| 10 #include "ui/aura/env.h" | 10 #include "ui/aura/env.h" |
| 11 #include "ui/aura/window_tree_host.h" | 11 #include "ui/aura/window_tree_host.h" |
| 12 #include "ui/events/event.h" | 12 #include "ui/events/event.h" |
| 13 #include "ui/events/event_constants.h" | 13 #include "ui/events/event_constants.h" |
| 14 #include "ui/events/event_handler.h" | 14 #include "ui/events/event_handler.h" |
| 15 #include "ui/events/event_processor.h" | 15 #include "ui/events/event_processor.h" |
| 16 #include "ui/gfx/point.h" | 16 #include "ui/gfx/point.h" |
| 17 #include "ui/gfx/vector2d.h" | 17 #include "ui/gfx/vector2d.h" |
| 18 #include "ui/wm/core/coordinate_conversion.h" | |
| 18 | 19 |
| 19 namespace ash { | 20 namespace ash { |
| 20 | 21 |
| 21 namespace { | 22 namespace { |
| 22 | 23 |
| 23 // The threshold of mouse movement measured in DIP that will | 24 // The threshold of mouse movement measured in DIP that will |
| 24 // initiate a new autoclick. | 25 // initiate a new autoclick. |
| 25 const int kMovementThreshold = 20; | 26 const int kMovementThreshold = 20; |
| 26 | 27 |
| 27 bool IsModifierKey(ui::KeyboardCode key_code) { | 28 bool IsModifierKey(ui::KeyboardCode key_code) { |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 121 base::Unretained(this)), | 122 base::Unretained(this)), |
| 122 false)); | 123 false)); |
| 123 } | 124 } |
| 124 | 125 |
| 125 void AutoclickControllerImpl::OnMouseEvent(ui::MouseEvent* event) { | 126 void AutoclickControllerImpl::OnMouseEvent(ui::MouseEvent* event) { |
| 126 if (event->type() == ui::ET_MOUSE_MOVED && | 127 if (event->type() == ui::ET_MOUSE_MOVED && |
| 127 !(event->flags() & ui::EF_IS_SYNTHESIZED)) { | 128 !(event->flags() & ui::EF_IS_SYNTHESIZED)) { |
| 128 mouse_event_flags_ = event->flags(); | 129 mouse_event_flags_ = event->flags(); |
| 129 | 130 |
| 130 gfx::Point mouse_location = event->root_location(); | 131 gfx::Point mouse_location = event->root_location(); |
| 131 ash::wm::ConvertPointToScreen( | 132 ::wm::ConvertPointToScreen(ash::wm::GetRootWindowAt(mouse_location), |
|
oshima
2014/08/02 00:34:13
remove ash:: (as this is in ash namespace)
mfomitchev
2014/08/02 14:50:17
Done.
| |
| 132 wm::GetRootWindowAt(mouse_location), | 133 &mouse_location); |
| 133 &mouse_location); | |
| 134 | 134 |
| 135 // The distance between the mouse location and the anchor location | 135 // The distance between the mouse location and the anchor location |
| 136 // must exceed a certain threshold to initiate a new autoclick countdown. | 136 // must exceed a certain threshold to initiate a new autoclick countdown. |
| 137 // This ensures that mouse jitter caused by poor motor control does not | 137 // This ensures that mouse jitter caused by poor motor control does not |
| 138 // 1. initiate an unwanted autoclick from rest | 138 // 1. initiate an unwanted autoclick from rest |
| 139 // 2. prevent the autoclick from ever occuring when the mouse | 139 // 2. prevent the autoclick from ever occuring when the mouse |
| 140 // arrives at the target. | 140 // arrives at the target. |
| 141 gfx::Vector2d delta = mouse_location - anchor_location_; | 141 gfx::Vector2d delta = mouse_location - anchor_location_; |
| 142 if (delta.LengthSquared() >= kMovementThreshold * kMovementThreshold) { | 142 if (delta.LengthSquared() >= kMovementThreshold * kMovementThreshold) { |
| 143 anchor_location_ = event->root_location(); | 143 anchor_location_ = event->root_location(); |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 178 } | 178 } |
| 179 | 179 |
| 180 void AutoclickControllerImpl::DoAutoclick() { | 180 void AutoclickControllerImpl::DoAutoclick() { |
| 181 gfx::Point screen_location = | 181 gfx::Point screen_location = |
| 182 aura::Env::GetInstance()->last_mouse_location(); | 182 aura::Env::GetInstance()->last_mouse_location(); |
| 183 aura::Window* root_window = wm::GetRootWindowAt(screen_location); | 183 aura::Window* root_window = wm::GetRootWindowAt(screen_location); |
| 184 DCHECK(root_window) << "Root window not found while attempting autoclick."; | 184 DCHECK(root_window) << "Root window not found while attempting autoclick."; |
| 185 | 185 |
| 186 gfx::Point click_location(screen_location); | 186 gfx::Point click_location(screen_location); |
| 187 anchor_location_ = click_location; | 187 anchor_location_ = click_location; |
| 188 wm::ConvertPointFromScreen(root_window, &click_location); | 188 ::wm::ConvertPointFromScreen(root_window, &click_location); |
| 189 | 189 |
| 190 aura::WindowTreeHost* host = root_window->GetHost(); | 190 aura::WindowTreeHost* host = root_window->GetHost(); |
| 191 host->ConvertPointToHost(&click_location); | 191 host->ConvertPointToHost(&click_location); |
| 192 | 192 |
| 193 ui::MouseEvent press_event(ui::ET_MOUSE_PRESSED, | 193 ui::MouseEvent press_event(ui::ET_MOUSE_PRESSED, |
| 194 click_location, | 194 click_location, |
| 195 click_location, | 195 click_location, |
| 196 mouse_event_flags_ | ui::EF_LEFT_MOUSE_BUTTON, | 196 mouse_event_flags_ | ui::EF_LEFT_MOUSE_BUTTON, |
| 197 ui::EF_LEFT_MOUSE_BUTTON); | 197 ui::EF_LEFT_MOUSE_BUTTON); |
| 198 ui::MouseEvent release_event(ui::ET_MOUSE_RELEASED, | 198 ui::MouseEvent release_event(ui::ET_MOUSE_RELEASED, |
| 199 click_location, | 199 click_location, |
| 200 click_location, | 200 click_location, |
| 201 mouse_event_flags_ | ui::EF_LEFT_MOUSE_BUTTON, | 201 mouse_event_flags_ | ui::EF_LEFT_MOUSE_BUTTON, |
| 202 ui::EF_LEFT_MOUSE_BUTTON); | 202 ui::EF_LEFT_MOUSE_BUTTON); |
| 203 | 203 |
| 204 ui::EventDispatchDetails details = | 204 ui::EventDispatchDetails details = |
| 205 host->event_processor()->OnEventFromSource(&press_event); | 205 host->event_processor()->OnEventFromSource(&press_event); |
| 206 if (!details.dispatcher_destroyed) | 206 if (!details.dispatcher_destroyed) |
| 207 details = host->event_processor()->OnEventFromSource(&release_event); | 207 details = host->event_processor()->OnEventFromSource(&release_event); |
| 208 if (details.dispatcher_destroyed) | 208 if (details.dispatcher_destroyed) |
| 209 return; | 209 return; |
| 210 } | 210 } |
| 211 | 211 |
| 212 // static. | 212 // static. |
| 213 AutoclickController* AutoclickController::CreateInstance() { | 213 AutoclickController* AutoclickController::CreateInstance() { |
| 214 return new AutoclickControllerImpl(); | 214 return new AutoclickControllerImpl(); |
| 215 } | 215 } |
| 216 | 216 |
| 217 } // namespace ash | 217 } // namespace ash |
| OLD | NEW |