magnifier_key_scroller.cc 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. // Copyright 2014 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. #include "ash/accelerators/magnifier_key_scroller.h"
  5. #include <utility>
  6. #include "ash/accelerators/key_hold_detector.h"
  7. #include "ash/accessibility/magnifier/fullscreen_magnifier_controller.h"
  8. #include "ash/constants/ash_switches.h"
  9. #include "ash/keyboard/keyboard_util.h"
  10. #include "ash/shell.h"
  11. #include "base/command_line.h"
  12. #include "ui/events/event.h"
  13. namespace ash {
  14. namespace {
  15. bool magnifier_key_scroller_enabled = false;
  16. }
  17. // static
  18. bool MagnifierKeyScroller::IsEnabled() {
  19. bool has_switch = base::CommandLine::ForCurrentProcess()->HasSwitch(
  20. switches::kAshEnableMagnifierKeyScroller);
  21. return (magnifier_key_scroller_enabled || has_switch) &&
  22. Shell::Get()->fullscreen_magnifier_controller()->IsEnabled();
  23. }
  24. // static
  25. void MagnifierKeyScroller::SetEnabled(bool enabled) {
  26. magnifier_key_scroller_enabled = enabled;
  27. }
  28. // static
  29. std::unique_ptr<ui::EventHandler> MagnifierKeyScroller::CreateHandler() {
  30. // Uses `new` due to private constructor.
  31. std::unique_ptr<KeyHoldDetector::Delegate> delegate(
  32. new MagnifierKeyScroller());
  33. return std::make_unique<KeyHoldDetector>(std::move(delegate));
  34. }
  35. bool MagnifierKeyScroller::ShouldProcessEvent(const ui::KeyEvent* event) const {
  36. return IsEnabled() && keyboard_util::IsArrowKeyCode(event->key_code());
  37. }
  38. bool MagnifierKeyScroller::IsStartEvent(const ui::KeyEvent* event) const {
  39. return event->type() == ui::ET_KEY_PRESSED &&
  40. event->flags() & ui::EF_SHIFT_DOWN;
  41. }
  42. bool MagnifierKeyScroller::ShouldStopEventPropagation() const {
  43. return true;
  44. }
  45. void MagnifierKeyScroller::OnKeyHold(const ui::KeyEvent* event) {
  46. FullscreenMagnifierController* controller =
  47. Shell::Get()->fullscreen_magnifier_controller();
  48. switch (event->key_code()) {
  49. case ui::VKEY_UP:
  50. controller->SetScrollDirection(FullscreenMagnifierController::SCROLL_UP);
  51. break;
  52. case ui::VKEY_DOWN:
  53. controller->SetScrollDirection(
  54. FullscreenMagnifierController::SCROLL_DOWN);
  55. break;
  56. case ui::VKEY_LEFT:
  57. controller->SetScrollDirection(
  58. FullscreenMagnifierController::SCROLL_LEFT);
  59. break;
  60. case ui::VKEY_RIGHT:
  61. controller->SetScrollDirection(
  62. FullscreenMagnifierController::SCROLL_RIGHT);
  63. break;
  64. default:
  65. NOTREACHED() << "Unknown keyboard_code:" << event->key_code();
  66. }
  67. }
  68. void MagnifierKeyScroller::OnKeyUnhold(const ui::KeyEvent* event) {
  69. FullscreenMagnifierController* controller =
  70. Shell::Get()->fullscreen_magnifier_controller();
  71. controller->SetScrollDirection(FullscreenMagnifierController::SCROLL_NONE);
  72. }
  73. MagnifierKeyScroller::MagnifierKeyScroller() = default;
  74. MagnifierKeyScroller::~MagnifierKeyScroller() = default;
  75. } // namespace ash