pointer_device_linux.cc 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. // Copyright (c) 2013 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 "ui/base/pointer/pointer_device.h"
  5. #include "base/check_op.h"
  6. #include "ui/events/devices/device_data_manager.h"
  7. namespace ui {
  8. namespace {
  9. bool IsTouchDevicePresent() {
  10. return !DeviceDataManager::GetInstance()->GetTouchscreenDevices().empty();
  11. }
  12. bool IsMouseOrTouchpadPresent() {
  13. DeviceDataManager* device_data_manager = DeviceDataManager::GetInstance();
  14. for (const ui::InputDevice& device :
  15. device_data_manager->GetTouchpadDevices()) {
  16. if (device.enabled)
  17. return true;
  18. }
  19. // We didn't find a touchpad then let's look if there is a mouse connected.
  20. for (const ui::InputDevice& device : device_data_manager->GetMouseDevices()) {
  21. if (device.enabled)
  22. return true;
  23. }
  24. return false;
  25. }
  26. } // namespace
  27. int GetAvailablePointerTypes() {
  28. int available_pointer_types = 0;
  29. if (IsMouseOrTouchpadPresent())
  30. available_pointer_types |= POINTER_TYPE_FINE;
  31. if (IsTouchDevicePresent())
  32. available_pointer_types |= POINTER_TYPE_COARSE;
  33. if (available_pointer_types == 0)
  34. available_pointer_types = POINTER_TYPE_NONE;
  35. DCHECK(available_pointer_types);
  36. return available_pointer_types;
  37. }
  38. int GetAvailableHoverTypes() {
  39. if (IsMouseOrTouchpadPresent())
  40. return HOVER_TYPE_HOVER;
  41. return HOVER_TYPE_NONE;
  42. }
  43. TouchScreensAvailability GetTouchScreensAvailability() {
  44. if (!IsTouchDevicePresent())
  45. return TouchScreensAvailability::NONE;
  46. return DeviceDataManager::GetInstance()->AreTouchscreensEnabled()
  47. ? TouchScreensAvailability::ENABLED
  48. : TouchScreensAvailability::DISABLED;
  49. }
  50. int MaxTouchPoints() {
  51. int max_touch = 0;
  52. const std::vector<ui::TouchscreenDevice>& touchscreen_devices =
  53. ui::DeviceDataManager::GetInstance()->GetTouchscreenDevices();
  54. for (const ui::TouchscreenDevice& device : touchscreen_devices) {
  55. if (device.touch_points > max_touch)
  56. max_touch = device.touch_points;
  57. }
  58. return max_touch;
  59. }
  60. PointerType GetPrimaryPointerType(int available_pointer_types) {
  61. if (available_pointer_types & POINTER_TYPE_FINE)
  62. return POINTER_TYPE_FINE;
  63. if (available_pointer_types & POINTER_TYPE_COARSE)
  64. return POINTER_TYPE_COARSE;
  65. DCHECK_EQ(available_pointer_types, POINTER_TYPE_NONE);
  66. return POINTER_TYPE_NONE;
  67. }
  68. HoverType GetPrimaryHoverType(int available_hover_types) {
  69. if (available_hover_types & HOVER_TYPE_HOVER)
  70. return HOVER_TYPE_HOVER;
  71. DCHECK_EQ(available_hover_types, HOVER_TYPE_NONE);
  72. return HOVER_TYPE_NONE;
  73. }
  74. } // namespace ui