Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "ash/common/system/chromeos/palette/tools/laser_pointer_mode.h" | |
| 6 | |
| 7 #include "ash/common/palette_delegate.h" | |
| 8 #include "ash/common/system/chromeos/palette/palette_ids.h" | |
| 9 #include "ash/common/wm_shell.h" | |
| 10 #include "ui/wm/core/coordinate_conversion.h" | |
| 11 #include "ui/wm/core/cursor_manager.h" | |
| 12 | |
| 13 namespace ash { | |
| 14 | |
| 15 const int LaserPointerMode::kPointLifeDurationMs = 300; | |
| 16 const int LaserPointerMode::kAddStationaryPointsDelayMs = 10; | |
| 17 | |
| 18 LaserPointerMode::LaserPointerMode(Delegate* delegate) | |
| 19 : CommonPaletteTool(delegate), | |
| 20 timer_repeat_count_(0), | |
|
jdufault
2016/08/11 23:41:54
Initialize in header.
| |
| 21 laser_points_( | |
| 22 base::TimeDelta::FromMilliseconds(int{kPointLifeDurationMs})) { | |
|
jdufault
2016/08/11 23:41:54
Remove the int{} cast.
| |
| 23 laser_pointer_view_ = new LaserPointerView(); | |
|
jdufault
2016/08/11 23:41:54
Use std::unique_ptr
| |
| 24 InitializeTimer(); | |
| 25 WmShell::Get()->AddPointerWatcher(this, true); | |
| 26 } | |
| 27 | |
| 28 LaserPointerMode::~LaserPointerMode() { | |
| 29 WmShell::Get()->RemovePointerWatcher(this); | |
| 30 } | |
| 31 | |
| 32 PaletteGroup LaserPointerMode::GetGroup() const { | |
| 33 return PaletteGroup::MODE; | |
| 34 } | |
| 35 | |
| 36 PaletteToolId LaserPointerMode::GetToolId() const { | |
| 37 return PaletteToolId::LASER_POINTER; | |
| 38 } | |
| 39 | |
| 40 void LaserPointerMode::OnEnable() { | |
| 41 CommonPaletteTool::OnEnable(); | |
| 42 if (WmShell::Get()->palette_delegate()) | |
| 43 WmShell::Get()->palette_delegate()->OnLaserModeEnabled(); | |
| 44 laser_points_.AddPoint(current_mouse_location_); | |
| 45 laser_pointer_view_->SetNewPoints(laser_points_); | |
| 46 } | |
| 47 | |
| 48 void LaserPointerMode::OnDisable() { | |
| 49 CommonPaletteTool::OnDisable(); | |
| 50 if (WmShell::Get()->palette_delegate()) | |
| 51 WmShell::Get()->palette_delegate()->OnLaserModeDisabled(); | |
| 52 StopTimer(); | |
| 53 // Clear the points and then notify the view that there is nothing to be | |
| 54 // rendered. | |
| 55 laser_points_.Clear(); | |
| 56 laser_pointer_view_->Stop(); | |
| 57 } | |
| 58 | |
| 59 gfx::VectorIconId LaserPointerMode::GetActiveTrayIcon() { | |
| 60 return gfx::VectorIconId::PALETTE_TRAY_ICON_LASER_POINTER; | |
| 61 } | |
| 62 | |
| 63 gfx::VectorIconId LaserPointerMode::GetPaletteIconId() { | |
| 64 return gfx::VectorIconId::PALETTE_MODE_LASER_POINTER; | |
| 65 } | |
| 66 | |
| 67 void LaserPointerMode::InitializeTimer() { | |
| 68 timer_.reset(new base::Timer( | |
|
jdufault
2016/08/11 23:41:54
Is this the output from git cl format?
| |
| 69 FROM_HERE, base::TimeDelta::FromMilliseconds(kAddStationaryPointsDelayMs), | |
| 70 base::Bind(&LaserPointerMode::AddStationaryPoint, base::Unretained(this)), | |
| 71 false)); | |
| 72 } | |
| 73 | |
| 74 void LaserPointerMode::StartTimer() { | |
| 75 timer_->Reset(); | |
| 76 } | |
| 77 | |
| 78 void LaserPointerMode::StopTimer() { | |
| 79 points_lock_.Acquire(); | |
| 80 timer_repeat_count_ = 0; | |
| 81 points_lock_.Release(); | |
| 82 timer_->Stop(); | |
| 83 } | |
| 84 | |
| 85 void LaserPointerMode::AddStationaryPoint() { | |
| 86 points_lock_.Acquire(); | |
| 87 laser_points_.AddPoint(current_mouse_location_); | |
| 88 laser_pointer_view_->SetNewPoints(laser_points_); | |
| 89 int count = timer_repeat_count_; | |
| 90 points_lock_.Release(); | |
| 91 // We can stop repeating the timer once the mouse has been stationary for | |
| 92 // longer than the life of a point. | |
| 93 if (count * kAddStationaryPointsDelayMs < kPointLifeDurationMs) { | |
| 94 timer_repeat_count_++; | |
| 95 timer_->Reset(); | |
| 96 } else { | |
| 97 StopTimer(); | |
| 98 } | |
| 99 } | |
| 100 | |
| 101 void LaserPointerMode::OnPointerEventObserved( | |
| 102 const ui::PointerEvent& event, | |
| 103 const gfx::Point& location_in_screen, | |
| 104 views::Widget* target) { | |
| 105 if (event.type() == ui::ET_POINTER_MOVED) { | |
|
jdufault
2016/08/11 23:41:54
We want to only run this logic for pen pointer eve
| |
| 106 current_mouse_location_ = location_in_screen; | |
| 107 if (enabled()) { | |
|
jdufault
2016/08/11 23:41:54
Do we want to always capture the mouse location? C
| |
| 108 points_lock_.Acquire(); | |
| 109 // Add the new point and notify the queue. | |
| 110 laser_points_.AddPoint(current_mouse_location_); | |
| 111 laser_pointer_view_->SetNewPoints(laser_points_); | |
| 112 timer_repeat_count_ = 0; | |
| 113 points_lock_.Release(); | |
| 114 StartTimer(); | |
| 115 } | |
| 116 } | |
| 117 } | |
| 118 } // namespace ash | |
| OLD | NEW |