OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright (C) 2009 Google Inc. All rights reserved. | 2 * Copyright (C) 2009 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
187 | 187 |
188 ScrollLockOn = 1 << 18, | 188 ScrollLockOn = 1 << 18, |
189 | 189 |
190 // The set of non-stateful modifiers that specifically change the | 190 // The set of non-stateful modifiers that specifically change the |
191 // interpretation of the key being pressed. For example; IsLeft, | 191 // interpretation of the key being pressed. For example; IsLeft, |
192 // IsRight, IsComposing don't change the meaning of the key | 192 // IsRight, IsComposing don't change the meaning of the key |
193 // being pressed. NumLockOn, ScrollLockOn, CapsLockOn are stateful | 193 // being pressed. NumLockOn, ScrollLockOn, CapsLockOn are stateful |
194 // and don't indicate explicit depressed state. | 194 // and don't indicate explicit depressed state. |
195 KeyModifiers = | 195 KeyModifiers = |
196 SymbolKey | FnKey | AltGrKey | MetaKey | AltKey | ControlKey | ShiftKey, | 196 SymbolKey | FnKey | AltGrKey | MetaKey | AltKey | ControlKey | ShiftKey, |
197 NoModifiers = 0, | |
majidvp
2016/12/19 20:09:52
nit: Can we just have None = 0 and put it at the t
dtapuska
2016/12/20 19:49:21
Done.
majidvp
2016/12/21 15:49:44
I prefer these bitset values to be defined as cons
| |
197 }; | 198 }; |
198 | 199 |
199 // Indicates whether the browser needs to block on the ACK result for | 200 // Indicates whether the browser needs to block on the ACK result for |
200 // this event, and if not why note (for metrics/diagnostics purposes). | 201 // this event, and if not why note (for metrics/diagnostics purposes). |
201 // These values are direct mappings of the values in PlatformEvent | 202 // These values are direct mappings of the values in PlatformEvent |
202 // so the values can be cast between the enumerations. static_asserts | 203 // so the values can be cast between the enumerations. static_asserts |
203 // checking this are in web/WebInputEventConversion.cpp. | 204 // checking this are in web/WebInputEventConversion.cpp. |
204 enum DispatchType { | 205 enum DispatchType { |
205 // Event can be canceled. | 206 // Event can be canceled. |
206 Blocking, | 207 Blocking, |
(...skipping 10 matching lines...) Expand all Loading... | |
217 // expected to stick. If this axis is set to Free, then scrolling is not | 218 // expected to stick. If this axis is set to Free, then scrolling is not |
218 // stuck to any axis. | 219 // stuck to any axis. |
219 enum RailsMode { | 220 enum RailsMode { |
220 RailsModeFree = 0, | 221 RailsModeFree = 0, |
221 RailsModeHorizontal = 1, | 222 RailsModeHorizontal = 1, |
222 RailsModeVertical = 2, | 223 RailsModeVertical = 2, |
223 }; | 224 }; |
224 | 225 |
225 static const int InputModifiers = ShiftKey | ControlKey | AltKey | MetaKey; | 226 static const int InputModifiers = ShiftKey | ControlKey | AltKey | MetaKey; |
226 | 227 |
228 static constexpr double TimeStampForTesting = 123.0; | |
229 | |
majidvp
2016/12/19 20:09:52
Great idea to have a constant for testing.
dtapuska
2016/12/20 19:49:21
Done.
| |
227 double timeStampSeconds; // Seconds since platform start with microsecond | 230 double timeStampSeconds; // Seconds since platform start with microsecond |
228 // resolution. | 231 // resolution. |
229 unsigned size; // The size of this structure, for serialization. | 232 unsigned size; // The size of this structure, for serialization. |
230 Type type; | 233 Type type; |
231 int modifiers; | 234 int modifiers; |
232 | 235 |
233 // Returns true if the WebInputEvent |type| is a mouse event. | 236 // Returns true if the WebInputEvent |type| is a mouse event. |
234 static bool isMouseEventType(int type) { | 237 static bool isMouseEventType(int type) { |
235 return MouseTypeFirst <= type && type <= MouseTypeLast; | 238 return MouseTypeFirst <= type && type <= MouseTypeLast; |
236 } | 239 } |
(...skipping 20 matching lines...) Expand all Loading... | |
257 return isGestureEventType(other.type); | 260 return isGestureEventType(other.type); |
258 if (isTouchEventType(type)) | 261 if (isTouchEventType(type)) |
259 return isTouchEventType(other.type); | 262 return isTouchEventType(other.type); |
260 if (isKeyboardEventType(type)) | 263 if (isKeyboardEventType(type)) |
261 return isKeyboardEventType(other.type); | 264 return isKeyboardEventType(other.type); |
262 return type == other.type; | 265 return type == other.type; |
263 } | 266 } |
264 | 267 |
265 BLINK_COMMON_EXPORT static const char* GetName(WebInputEvent::Type); | 268 BLINK_COMMON_EXPORT static const char* GetName(WebInputEvent::Type); |
266 | 269 |
270 void setType(Type typeParam) { type = typeParam; } | |
271 | |
272 void setModifiers(int modifiersParam) { modifiers = modifiersParam; } | |
273 | |
274 void setTimeStampSeconds(double seconds) { timeStampSeconds = seconds; } | |
275 | |
267 protected: | 276 protected: |
277 WebInputEvent(unsigned sizeParam, | |
278 Type typeParam, | |
279 int modifiersParam, | |
280 double timeStampSecondsParam) { | |
281 memset(this, 0, sizeParam); | |
282 timeStampSeconds = timeStampSecondsParam; | |
283 size = sizeParam; | |
284 type = typeParam; | |
285 modifiers = modifiersParam; | |
286 } | |
287 | |
268 explicit WebInputEvent(unsigned sizeParam) { | 288 explicit WebInputEvent(unsigned sizeParam) { |
269 memset(this, 0, sizeParam); | 289 memset(this, 0, sizeParam); |
270 timeStampSeconds = 0.0; | 290 timeStampSeconds = 0.0; |
271 size = sizeParam; | 291 size = sizeParam; |
272 type = Undefined; | 292 type = Undefined; |
273 modifiers = 0; | |
majidvp
2016/12/19 20:09:53
why do you no longer not need to initialize modifi
dtapuska
2016/12/20 19:49:21
yes it is an int and zeroed in the memset. I left
| |
274 } | 293 } |
275 }; | 294 }; |
276 | 295 |
277 // WebKeyboardEvent ----------------------------------------------------------- | 296 // WebKeyboardEvent ----------------------------------------------------------- |
278 | 297 |
279 class WebKeyboardEvent : public WebInputEvent { | 298 class WebKeyboardEvent : public WebInputEvent { |
280 public: | 299 public: |
281 // Caps on string lengths so we can make them static arrays and keep | 300 // Caps on string lengths so we can make them static arrays and keep |
282 // them PODs. | 301 // them PODs. |
283 static const size_t textLengthCap = 4; | 302 static const size_t textLengthCap = 4; |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
319 | 338 |
320 // |text| is the text generated by this keystroke. |unmodifiedText| is | 339 // |text| is the text generated by this keystroke. |unmodifiedText| is |
321 // |text|, but unmodified by an concurrently-held modifiers (except | 340 // |text|, but unmodified by an concurrently-held modifiers (except |
322 // shift). This is useful for working out shortcut keys. Linux and | 341 // shift). This is useful for working out shortcut keys. Linux and |
323 // Windows guarantee one character per event. The Mac does not, but in | 342 // Windows guarantee one character per event. The Mac does not, but in |
324 // reality that's all it ever gives. We're generous, and cap it a bit | 343 // reality that's all it ever gives. We're generous, and cap it a bit |
325 // longer. | 344 // longer. |
326 WebUChar text[textLengthCap]; | 345 WebUChar text[textLengthCap]; |
327 WebUChar unmodifiedText[textLengthCap]; | 346 WebUChar unmodifiedText[textLengthCap]; |
328 | 347 |
329 WebKeyboardEvent() | 348 WebKeyboardEvent(Type type, int modifiers, double timeStampSeconds) |
330 : WebInputEvent(sizeof(WebKeyboardEvent)), | 349 : WebInputEvent(sizeof(WebKeyboardEvent), |
331 windowsKeyCode(0), | 350 type, |
332 nativeKeyCode(0), | 351 modifiers, |
333 isSystemKey(false), | 352 timeStampSeconds) {} |
334 isBrowserShortcut(false) { | 353 |
335 } | 354 WebKeyboardEvent() : WebInputEvent(sizeof(WebKeyboardEvent)) {} |
336 | 355 |
337 // Please refer to bug http://b/issue?id=961192, which talks about Webkit | 356 // Please refer to bug http://b/issue?id=961192, which talks about Webkit |
338 // keyboard event handling changes. It also mentions the list of keys | 357 // keyboard event handling changes. It also mentions the list of keys |
339 // which don't have associated character events. | 358 // which don't have associated character events. |
340 bool isCharacterKey() const { | 359 bool isCharacterKey() const { |
341 // TODO(dtapuska): Determine if we can remove this method and just | 360 // TODO(dtapuska): Determine if we can remove this method and just |
342 // not actually generate events for these instead of filtering them out. | 361 // not actually generate events for these instead of filtering them out. |
343 switch (windowsKeyCode) { | 362 switch (windowsKeyCode) { |
344 case 0x08: // VK_BACK | 363 case 0x08: // VK_BACK |
345 case 0x1b: // VK_ESCAPE | 364 case 0x1b: // VK_ESCAPE |
(...skipping 18 matching lines...) Expand all Loading... | |
364 int windowY; | 383 int windowY; |
365 | 384 |
366 // Screen coordinate | 385 // Screen coordinate |
367 int globalX; | 386 int globalX; |
368 int globalY; | 387 int globalY; |
369 | 388 |
370 int movementX; | 389 int movementX; |
371 int movementY; | 390 int movementY; |
372 int clickCount; | 391 int clickCount; |
373 | 392 |
393 WebMouseEvent(Type type, int modifiers, double timeStampSeconds) | |
394 : WebInputEvent(sizeof(WebMouseEvent), type, modifiers, timeStampSeconds), | |
395 WebPointerProperties() {} | |
396 | |
374 WebMouseEvent() | 397 WebMouseEvent() |
375 : WebInputEvent(sizeof(WebMouseEvent)), | 398 : WebInputEvent(sizeof(WebMouseEvent)), WebPointerProperties() {} |
376 WebPointerProperties(), | |
377 x(0), | |
378 y(0), | |
379 windowX(0), | |
380 windowY(0), | |
381 globalX(0), | |
382 globalY(0), | |
383 movementX(0), | |
384 movementY(0), | |
385 clickCount(0) {} | |
386 | 399 |
387 protected: | 400 protected: |
388 explicit WebMouseEvent(unsigned sizeParam) | 401 explicit WebMouseEvent(unsigned sizeParam) |
389 : WebInputEvent(sizeParam), | 402 : WebInputEvent(sizeParam), WebPointerProperties() {} |
390 WebPointerProperties(), | 403 |
391 x(0), | 404 WebMouseEvent(unsigned sizeParam, |
392 y(0), | 405 Type type, |
393 windowX(0), | 406 int modifiers, |
394 windowY(0), | 407 double timeStampSeconds) |
395 globalX(0), | 408 : WebInputEvent(sizeParam, type, modifiers, timeStampSeconds), |
396 globalY(0), | 409 WebPointerProperties() {} |
397 movementX(0), | |
398 movementY(0), | |
399 clickCount(0) {} | |
400 }; | 410 }; |
401 | 411 |
402 // WebMouseWheelEvent --------------------------------------------------------- | 412 // WebMouseWheelEvent --------------------------------------------------------- |
403 | 413 |
404 class WebMouseWheelEvent : public WebMouseEvent { | 414 class WebMouseWheelEvent : public WebMouseEvent { |
405 public: | 415 public: |
406 enum Phase { | 416 enum Phase { |
407 PhaseNone = 0, | 417 PhaseNone = 0, |
408 PhaseBegan = 1 << 0, | 418 PhaseBegan = 1 << 0, |
409 PhaseStationary = 1 << 1, | 419 PhaseStationary = 1 << 1, |
(...skipping 23 matching lines...) Expand all Loading... | |
433 | 443 |
434 bool scrollByPage; | 444 bool scrollByPage; |
435 bool hasPreciseScrollingDeltas; | 445 bool hasPreciseScrollingDeltas; |
436 | 446 |
437 RailsMode railsMode; | 447 RailsMode railsMode; |
438 | 448 |
439 // Whether the event is blocking, non-blocking, all event | 449 // Whether the event is blocking, non-blocking, all event |
440 // listeners were passive or was forced to be non-blocking. | 450 // listeners were passive or was forced to be non-blocking. |
441 DispatchType dispatchType; | 451 DispatchType dispatchType; |
442 | 452 |
453 WebMouseWheelEvent(Type type, int modifiers, double timeStampSeconds) | |
454 : WebMouseEvent(sizeof(WebMouseWheelEvent), | |
455 type, | |
456 modifiers, | |
457 timeStampSeconds), | |
458 deltaX(0.0f), | |
459 deltaY(0.0f), | |
460 wheelTicksX(0.0f), | |
461 wheelTicksY(0.0f), | |
462 accelerationRatioX(1.0f), | |
463 accelerationRatioY(1.0f), | |
464 resendingPluginId(-1), | |
465 phase(PhaseNone), | |
466 momentumPhase(PhaseNone), | |
467 railsMode(RailsModeFree), | |
468 dispatchType(Blocking) {} | |
469 | |
443 WebMouseWheelEvent() | 470 WebMouseWheelEvent() |
444 : WebMouseEvent(sizeof(WebMouseWheelEvent)), | 471 : WebMouseEvent(sizeof(WebMouseWheelEvent)), |
445 deltaX(0.0f), | 472 deltaX(0.0f), |
446 deltaY(0.0f), | 473 deltaY(0.0f), |
447 wheelTicksX(0.0f), | 474 wheelTicksX(0.0f), |
448 wheelTicksY(0.0f), | 475 wheelTicksY(0.0f), |
449 accelerationRatioX(1.0f), | 476 accelerationRatioX(1.0f), |
450 accelerationRatioY(1.0f), | 477 accelerationRatioY(1.0f), |
451 resendingPluginId(-1), | 478 resendingPluginId(-1), |
452 phase(PhaseNone), | 479 phase(PhaseNone), |
453 momentumPhase(PhaseNone), | 480 momentumPhase(PhaseNone), |
454 scrollByPage(false), | |
455 hasPreciseScrollingDeltas(false), | |
456 railsMode(RailsModeFree), | 481 railsMode(RailsModeFree), |
457 dispatchType(Blocking) {} | 482 dispatchType(Blocking) {} |
458 }; | 483 }; |
459 | 484 |
460 | 485 |
461 // WebTouchEvent -------------------------------------------------------------- | 486 // WebTouchEvent -------------------------------------------------------------- |
462 | 487 |
463 // TODO(e_hakkinen): Replace with WebPointerEvent. crbug.com/508283 | 488 // TODO(e_hakkinen): Replace with WebPointerEvent. crbug.com/508283 |
464 class WebTouchEvent : public WebInputEvent { | 489 class WebTouchEvent : public WebInputEvent { |
465 public: | 490 public: |
(...skipping 16 matching lines...) Expand all Loading... | |
482 | 507 |
483 // Whether this touch event is a touchstart or a first touchmove event per | 508 // Whether this touch event is a touchstart or a first touchmove event per |
484 // scroll. | 509 // scroll. |
485 bool touchStartOrFirstTouchMove; | 510 bool touchStartOrFirstTouchMove; |
486 | 511 |
487 // A unique identifier for the touch event. Valid ids start at one and | 512 // A unique identifier for the touch event. Valid ids start at one and |
488 // increase monotonically. Zero means an unknown id. | 513 // increase monotonically. Zero means an unknown id. |
489 uint32_t uniqueTouchEventId; | 514 uint32_t uniqueTouchEventId; |
490 | 515 |
491 WebTouchEvent() | 516 WebTouchEvent() |
492 : WebInputEvent(sizeof(WebTouchEvent)), | 517 : WebInputEvent(sizeof(WebTouchEvent)), dispatchType(Blocking) {} |
493 touchesLength(0), | 518 |
494 dispatchType(Blocking), | 519 WebTouchEvent(Type type, int modifiers, double timeStampSeconds) |
495 movedBeyondSlopRegion(false), | 520 : WebInputEvent(sizeof(WebTouchEvent), type, modifiers, timeStampSeconds), |
496 touchStartOrFirstTouchMove(false), | 521 dispatchType(Blocking) {} |
497 uniqueTouchEventId(0) {} | |
498 }; | 522 }; |
499 | 523 |
500 #pragma pack(pop) | 524 #pragma pack(pop) |
501 | 525 |
502 } // namespace blink | 526 } // namespace blink |
503 | 527 |
504 #endif | 528 #endif |
OLD | NEW |