touch_action.h 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. // Copyright 2017 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. #ifndef CC_INPUT_TOUCH_ACTION_H_
  5. #define CC_INPUT_TOUCH_ACTION_H_
  6. #include <cstdlib>
  7. #include "base/notreached.h"
  8. namespace cc {
  9. // The current touch action specifies what accelerated browser operations
  10. // (panning and zooming) are currently permitted via touch input.
  11. // See http://www.w3.org/TR/pointerevents/#the-touch-action-css-property.
  12. // This is intended to be the single canonical definition of the enum, it's used
  13. // elsewhere in both Blink and content since touch action logic spans those
  14. // subsystems.
  15. const size_t kTouchActionBits = 6;
  16. enum class TouchAction {
  17. // No scrolling or zooming allowed.
  18. kNone = 0x0,
  19. kPanLeft = 0x1,
  20. kPanRight = 0x2,
  21. kPanX = kPanLeft | kPanRight,
  22. kPanUp = 0x4,
  23. kPanDown = 0x8,
  24. kPanY = kPanUp | kPanDown,
  25. kPan = kPanX | kPanY,
  26. kPinchZoom = 0x10,
  27. kManipulation = kPan | kPinchZoom,
  28. kDoubleTapZoom = 0x20,
  29. // Used by swipe to move cursor feature. This is only used internally
  30. // for swipe to move cursor feature and it is not a web-visible value. When
  31. // an element have this bit or doesn't have kPanX, we will disable swipe to
  32. // move cursor feature for that element. When the element is contenteditable
  33. // and it doesn't have a horizontal scrollable ancestor (including
  34. // itself), we don't set this bit.
  35. kInternalPanXScrolls = 0x40,
  36. // This is used internally by stylus handwriting feature. Stylus writing would
  37. // not be started when this bit is set. When the element is non-password edit
  38. // field and has kPan, we don't set this bit.
  39. kInternalNotWritable = 0x80,
  40. kAuto = kManipulation | kDoubleTapZoom | kInternalPanXScrolls |
  41. kInternalNotWritable,
  42. kMax = (1 << 8) - 1
  43. };
  44. inline TouchAction operator|(TouchAction a, TouchAction b) {
  45. return static_cast<TouchAction>(static_cast<int>(a) | static_cast<int>(b));
  46. }
  47. inline TouchAction& operator|=(TouchAction& a, TouchAction b) {
  48. return a = a | b;
  49. }
  50. inline TouchAction operator&(TouchAction a, TouchAction b) {
  51. return static_cast<TouchAction>(static_cast<int>(a) & static_cast<int>(b));
  52. }
  53. inline TouchAction& operator&=(TouchAction& a, TouchAction b) {
  54. return a = a & b;
  55. }
  56. inline TouchAction operator~(TouchAction touch_action) {
  57. return static_cast<TouchAction>(~static_cast<int>(touch_action));
  58. }
  59. inline const char* TouchActionToString(TouchAction touch_action) {
  60. // we skip printing internal panx scrolls since it's not a web exposed touch
  61. // action field.
  62. touch_action &= ~TouchAction::kInternalPanXScrolls;
  63. // we skip printing kInternalNotWritable since it's not a web exposed
  64. // touch action field.
  65. touch_action &= ~TouchAction::kInternalNotWritable;
  66. switch (static_cast<int>(touch_action)) {
  67. case 0:
  68. return "NONE";
  69. case 1:
  70. return "PAN_LEFT";
  71. case 2:
  72. return "PAN_RIGHT";
  73. case 3:
  74. return "PAN_X";
  75. case 4:
  76. return "PAN_UP";
  77. case 5:
  78. return "PAN_LEFT_PAN_UP";
  79. case 6:
  80. return "PAN_RIGHT_PAN_UP";
  81. case 7:
  82. return "PAN_X_PAN_UP";
  83. case 8:
  84. return "PAN_DOWN";
  85. case 9:
  86. return "PAN_LEFT_PAN_DOWN";
  87. case 10:
  88. return "PAN_RIGHT_PAN_DOWN";
  89. case 11:
  90. return "PAN_X_PAN_DOWN";
  91. case 12:
  92. return "PAN_Y";
  93. case 13:
  94. return "PAN_LEFT_PAN_Y";
  95. case 14:
  96. return "PAN_RIGHT_PAN_Y";
  97. case 15:
  98. return "PAN_X_PAN_Y";
  99. case 16:
  100. return "PINCH_ZOOM";
  101. case 17:
  102. return "PAN_LEFT_PINCH_ZOOM";
  103. case 18:
  104. return "PAN_RIGHT_PINCH_ZOOM";
  105. case 19:
  106. return "PAN_X_PINCH_ZOOM";
  107. case 20:
  108. return "PAN_UP_PINCH_ZOOM";
  109. case 21:
  110. return "PAN_LEFT_PAN_UP_PINCH_ZOOM";
  111. case 22:
  112. return "PAN_RIGHT_PAN_UP_PINCH_ZOOM";
  113. case 23:
  114. return "PAN_X_PAN_UP_PINCH_ZOOM";
  115. case 24:
  116. return "PAN_DOWN_PINCH_ZOOM";
  117. case 25:
  118. return "PAN_LEFT_PAN_DOWN_PINCH_ZOOM";
  119. case 26:
  120. return "PAN_RIGHT_PAN_DOWN_PINCH_ZOOM";
  121. case 27:
  122. return "PAN_X_PAN_DOWN_PINCH_ZOOM";
  123. case 28:
  124. return "PAN_Y_PINCH_ZOOM";
  125. case 29:
  126. return "PAN_LEFT_PAN_Y_PINCH_ZOOM";
  127. case 30:
  128. return "PAN_RIGHT_PAN_Y_PINCH_ZOOM";
  129. case 31:
  130. return "MANIPULATION";
  131. case 32:
  132. return "DOUBLE_TAP_ZOOM";
  133. case 33:
  134. return "PAN_LEFT_DOUBLE_TAP_ZOOM";
  135. case 34:
  136. return "PAN_RIGHT_DOUBLE_TAP_ZOOM";
  137. case 35:
  138. return "PAN_X_DOUBLE_TAP_ZOOM";
  139. case 36:
  140. return "PAN_UP_DOUBLE_TAP_ZOOM";
  141. case 37:
  142. return "PAN_LEFT_PAN_UP_DOUBLE_TAP_ZOOM";
  143. case 38:
  144. return "PAN_RIGHT_PAN_UP_DOUBLE_TAP_ZOOM";
  145. case 39:
  146. return "PAN_X_PAN_UP_DOUBLE_TAP_ZOOM";
  147. case 40:
  148. return "PAN_DOWN_DOUBLE_TAP_ZOOM";
  149. case 41:
  150. return "PAN_LEFT_PAN_DOWN_DOUBLE_TAP_ZOOM";
  151. case 42:
  152. return "PAN_RIGHT_PAN_DOWN_DOUBLE_TAP_ZOOM";
  153. case 43:
  154. return "PAN_X_PAN_DOWN_DOUBLE_TAP_ZOOM";
  155. case 44:
  156. return "PAN_Y_DOUBLE_TAP_ZOOM";
  157. case 45:
  158. return "PAN_LEFT_PAN_Y_DOUBLE_TAP_ZOOM";
  159. case 46:
  160. return "PAN_RIGHT_PAN_Y_DOUBLE_TAP_ZOOM";
  161. case 47:
  162. return "PAN_X_PAN_Y_DOUBLE_TAP_ZOOM";
  163. case 48:
  164. return "PINCH_ZOOM_DOUBLE_TAP_ZOOM";
  165. case 49:
  166. return "PAN_LEFT_PINCH_ZOOM_DOUBLE_TAP_ZOOM";
  167. case 50:
  168. return "PAN_RIGHT_PINCH_ZOOM_DOUBLE_TAP_ZOOM";
  169. case 51:
  170. return "PAN_X_PINCH_ZOOM_DOUBLE_TAP_ZOOM";
  171. case 52:
  172. return "PAN_UP_PINCH_ZOOM_DOUBLE_TAP_ZOOM";
  173. case 53:
  174. return "PAN_LEFT_PAN_UP_PINCH_ZOOM_DOUBLE_TAP_ZOOM";
  175. case 54:
  176. return "PAN_RIGHT_PAN_UP_PINCH_ZOOM_DOUBLE_TAP_ZOOM";
  177. case 55:
  178. return "PAN_X_PAN_UP_PINCH_ZOOM_DOUBLE_TAP_ZOOM";
  179. case 56:
  180. return "PAN_DOWN_PINCH_ZOOM_DOUBLE_TAP_ZOOM";
  181. case 57:
  182. return "PAN_LEFT_PAN_DOWN_PINCH_ZOOM_DOUBLE_TAP_ZOOM";
  183. case 58:
  184. return "PAN_RIGHT_PAN_DOWN_PINCH_ZOOM_DOUBLE_TAP_ZOOM";
  185. case 59:
  186. return "PAN_X_PAN_DOWN_PINCH_ZOOM_DOUBLE_TAP_ZOOM";
  187. case 60:
  188. return "PAN_Y_PINCH_ZOOM_DOUBLE_TAP_ZOOM";
  189. case 61:
  190. return "PAN_LEFT_PAN_Y_PINCH_ZOOM_DOUBLE_TAP_ZOOM";
  191. case 62:
  192. return "PAN_RIGHT_PAN_Y_PINCH_ZOOM_DOUBLE_TAP_ZOOM";
  193. case 63:
  194. return "AUTO";
  195. }
  196. NOTREACHED();
  197. return "";
  198. }
  199. } // namespace cc
  200. #endif // CC_INPUT_TOUCH_ACTION_H_