| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef UI_EVENTS_EVENT_H_ | 5 #ifndef UI_EVENTS_EVENT_H_ |
| 6 #define UI_EVENTS_EVENT_H_ | 6 #define UI_EVENTS_EVENT_H_ |
| 7 | 7 |
| 8 #include "base/basictypes.h" | 8 #include "base/basictypes.h" |
| 9 #include "base/compiler_specific.h" | 9 #include "base/compiler_specific.h" |
| 10 #include "base/event_types.h" | 10 #include "base/event_types.h" |
| (...skipping 525 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 536 // Radius of the Y (minor) axis of the touch ellipse. 0.0 if unknown. | 536 // Radius of the Y (minor) axis of the touch ellipse. 0.0 if unknown. |
| 537 float radius_y_; | 537 float radius_y_; |
| 538 | 538 |
| 539 // Angle of the major axis away from the X axis. Default 0.0. | 539 // Angle of the major axis away from the X axis. Default 0.0. |
| 540 float rotation_angle_; | 540 float rotation_angle_; |
| 541 | 541 |
| 542 // Force (pressure) of the touch. Normalized to be [0, 1]. Default to be 0.0. | 542 // Force (pressure) of the touch. Normalized to be [0, 1]. Default to be 0.0. |
| 543 float force_; | 543 float force_; |
| 544 }; | 544 }; |
| 545 | 545 |
| 546 // A KeyEvent is really two distinct classes, melded together due to the |
| 547 // DOM legacy of Windows key events: a keystroke event (is_char_ == false), |
| 548 // or a character event (is_char_ == true). |
| 549 // |
| 550 // For a keystroke event, |
| 551 // -- is_char_ is false. |
| 552 // -- type() can be any one of ET_KEY_PRESSED, ET_KEY_RELEASED, |
| 553 // ET_TRANSLATED_KEY_PRESS, or ET_TRANSLATED_KEY_RELEASE. |
| 554 // -- character_ functions as a bypass or cache for GetCharacter(). |
| 555 // -- key_code_ is a VKEY_ value associated with the key. For printable |
| 556 // characters, this may or may not be a mapped value, imitating MS Windows: |
| 557 // if the mapped key generates a character that has an associated VKEY_ |
| 558 // code, then key_code_ is that code; if not, then key_code_ is the unmapped |
| 559 // VKEY_ code. For example, US, Greek, Cyrillic, Japanese, etc. all use |
| 560 // VKEY_Q for the key beside Tab, while French uses VKEY_A. |
| 561 // -- code_ is in one-to-one correspondence with a physical keyboard |
| 562 // location, and does not vary depending on key layout. |
| 563 // |
| 564 // For a character event, |
| 565 // -- is_char_ is true. |
| 566 // -- type() is ET_KEY_PRESSED. |
| 567 // -- character_ is a UTF-16 character value. |
| 568 // -- key_code_ is conflated with character_ by some code, because both |
| 569 // arrive in the wParam field of a Windows event. |
| 570 // -- code_ is "". |
| 571 // |
| 546 class EVENTS_EXPORT KeyEvent : public Event { | 572 class EVENTS_EXPORT KeyEvent : public Event { |
| 547 public: | 573 public: |
| 548 KeyEvent(const base::NativeEvent& native_event, bool is_char); | 574 // Create a KeyEvent from a NativeEvent. For Windows this native event can |
| 575 // be either a keystroke message (WM_KEYUP/WM_KEYDOWN) or a character message |
| 576 // (WM_CHAR). Other systems have only keystroke events. |
| 577 explicit KeyEvent(const base::NativeEvent& native_event); |
| 549 | 578 |
| 550 // Used for synthetic events. | 579 // Create a keystroke event. |
| 551 KeyEvent(EventType type, KeyboardCode key_code, int flags, bool is_char); | 580 KeyEvent(EventType type, KeyboardCode key_code, int flags); |
| 581 |
| 582 // Create a character event. |
| 583 KeyEvent(base::char16 character, KeyboardCode key_code, int flags); |
| 552 | 584 |
| 553 // Used for synthetic events with code of DOM KeyboardEvent (e.g. 'KeyA') | 585 // Used for synthetic events with code of DOM KeyboardEvent (e.g. 'KeyA') |
| 554 // See also: ui/events/keycodes/dom4/keycode_converter_data.h | 586 // See also: ui/events/keycodes/dom4/keycode_converter_data.h |
| 555 KeyEvent(EventType type, KeyboardCode key_code, const std::string& code, | 587 KeyEvent(EventType type, |
| 556 int flags, bool is_char); | 588 KeyboardCode key_code, |
| 589 const std::string& code, |
| 590 int flags); |
| 557 | 591 |
| 558 // This allows an I18N virtual keyboard to fabricate a keyboard event that | 592 // This allows an I18N virtual keyboard to fabricate a keyboard event that |
| 559 // does not have a corresponding KeyboardCode (example: U+00E1 Latin small | 593 // does not have a corresponding KeyboardCode (example: U+00E1 Latin small |
| 560 // letter A with acute, U+0410 Cyrillic capital letter A). | 594 // letter A with acute, U+0410 Cyrillic capital letter A). |
| 561 void set_character(uint16 character) { character_ = character; } | 595 void set_character(base::char16 character) { character_ = character; } |
| 562 | 596 |
| 563 // Gets the character generated by this key event. It only supports Unicode | 597 // Gets the character generated by this key event. It only supports Unicode |
| 564 // BMP characters. | 598 // BMP characters. |
| 565 uint16 GetCharacter() const; | 599 base::char16 GetCharacter() const; |
| 566 | 600 |
| 567 // Gets the platform key code. For XKB, this is the xksym value. | 601 // Gets the platform key code. For XKB, this is the xksym value. |
| 568 uint32 platform_keycode() const { return platform_keycode_; } | 602 uint32 platform_keycode() const { return platform_keycode_; } |
| 569 KeyboardCode key_code() const { return key_code_; } | 603 KeyboardCode key_code() const { return key_code_; } |
| 604 |
| 605 // True if this is a character event, false if this is a keystroke event. |
| 570 bool is_char() const { return is_char_; } | 606 bool is_char() const { return is_char_; } |
| 571 | 607 |
| 572 // This is only intended to be used externally by classes that are modifying | 608 // This is only intended to be used externally by classes that are modifying |
| 573 // events in EventFilter::PreHandleKeyEvent(). set_character() should also be | 609 // events in EventFilter::PreHandleKeyEvent(). set_character() should also be |
| 574 // called. | 610 // called. |
| 575 void set_key_code(KeyboardCode key_code) { key_code_ = key_code; } | 611 void set_key_code(KeyboardCode key_code) { key_code_ = key_code; } |
| 576 | 612 |
| 577 // Returns true for [Alt]+<num-pad digit> Unicode alt key codes used by Win. | 613 // Returns true for [Alt]+<num-pad digit> Unicode alt key codes used by Win. |
| 578 // TODO(msw): Additional work may be needed for analogues on other platforms. | 614 // TODO(msw): Additional work may be needed for analogues on other platforms. |
| 579 bool IsUnicodeKeyCode() const; | 615 bool IsUnicodeKeyCode() const; |
| 580 | 616 |
| 581 std::string code() const { return code_; } | 617 std::string code() const { return code_; } |
| 582 | 618 |
| 583 // Normalizes flags_ to make it Windows/Mac compatible. Since the way | 619 // Normalizes flags_ so that it describes the state after the event. |
| 584 // of setting modifier mask on X is very different than Windows/Mac as shown | 620 // (Native X11 event flags describe the state before the event.) |
| 585 // in http://crbug.com/127142#c8, the normalization is necessary. | |
| 586 void NormalizeFlags(); | 621 void NormalizeFlags(); |
| 587 | 622 |
| 588 // Returns true if the key event has already been processed by an input method | 623 // Returns true if the key event has already been processed by an input method |
| 589 // and there is no need to pass the key event to the input method again. | 624 // and there is no need to pass the key event to the input method again. |
| 590 bool IsTranslated() const; | 625 bool IsTranslated() const; |
| 591 // Marks this key event as translated or not translated. | 626 // Marks this key event as translated or not translated. |
| 592 void SetTranslated(bool translated); | 627 void SetTranslated(bool translated); |
| 593 | 628 |
| 594 protected: | 629 protected: |
| 630 friend class KeyEventTestApi; |
| 631 |
| 595 // This allows a subclass TranslatedKeyEvent to be a non character event. | 632 // This allows a subclass TranslatedKeyEvent to be a non character event. |
| 596 void set_is_char(bool is_char) { is_char_ = is_char; } | 633 void set_is_char(bool is_char) { is_char_ = is_char; } |
| 597 | 634 |
| 598 private: | 635 private: |
| 599 KeyboardCode key_code_; | 636 KeyboardCode key_code_; |
| 600 | 637 |
| 601 // String of 'code' defined in DOM KeyboardEvent (e.g. 'KeyA', 'Space') | 638 // String of 'code' defined in DOM KeyboardEvent (e.g. 'KeyA', 'Space') |
| 602 // http://www.w3.org/TR/uievents/#keyboard-key-codes. | 639 // http://www.w3.org/TR/uievents/#keyboard-key-codes. |
| 603 // | 640 // |
| 604 // This value represents the physical position in the keyboard and can be | 641 // This value represents the physical position in the keyboard and can be |
| 605 // converted from / to keyboard scan code like XKB. | 642 // converted from / to keyboard scan code like XKB. |
| 606 std::string code_; | 643 std::string code_; |
| 607 | 644 |
| 608 // True if this is a translated character event (vs. a raw key down). Both | 645 // True if this is a character event, false if this is a keystroke event. |
| 609 // share the same type: ET_KEY_PRESSED. | |
| 610 bool is_char_; | 646 bool is_char_; |
| 611 | 647 |
| 612 // The platform related keycode value. For XKB, it's keysym value. | 648 // The platform related keycode value. For XKB, it's keysym value. |
| 613 // For now, this is used for CharacterComposer in ChromeOS. | 649 // For now, this is used for CharacterComposer in ChromeOS. |
| 614 uint32 platform_keycode_; | 650 uint32 platform_keycode_; |
| 615 | 651 |
| 616 // String of 'key' defined in DOM KeyboardEvent (e.g. 'a', 'â') | 652 // String of 'key' defined in DOM KeyboardEvent (e.g. 'a', 'â') |
| 617 // http://www.w3.org/TR/uievents/#keyboard-key-codes. | 653 // http://www.w3.org/TR/uievents/#keyboard-key-codes. |
| 618 // | 654 // |
| 619 // This value represents the text that the key event will insert to input | 655 // This value represents the text that the key event will insert to input |
| 620 // field. For key with modifier key, it may have specifial text. | 656 // field. For key with modifier key, it may have specifial text. |
| 621 // e.g. CTRL+A has '\x01'. | 657 // e.g. CTRL+A has '\x01'. |
| 622 uint16 character_; | 658 base::char16 character_; |
| 623 | 659 |
| 624 static bool IsRepeated(const KeyEvent& event); | 660 static bool IsRepeated(const KeyEvent& event); |
| 625 | 661 |
| 626 static KeyEvent* last_key_event_; | 662 static KeyEvent* last_key_event_; |
| 627 }; | 663 }; |
| 628 | 664 |
| 629 class EVENTS_EXPORT ScrollEvent : public MouseEvent { | 665 class EVENTS_EXPORT ScrollEvent : public MouseEvent { |
| 630 public: | 666 public: |
| 631 explicit ScrollEvent(const base::NativeEvent& native_event); | 667 explicit ScrollEvent(const base::NativeEvent& native_event); |
| 632 template <class T> | 668 template <class T> |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 695 | 731 |
| 696 const GestureEventDetails& details() const { return details_; } | 732 const GestureEventDetails& details() const { return details_; } |
| 697 | 733 |
| 698 private: | 734 private: |
| 699 GestureEventDetails details_; | 735 GestureEventDetails details_; |
| 700 }; | 736 }; |
| 701 | 737 |
| 702 } // namespace ui | 738 } // namespace ui |
| 703 | 739 |
| 704 #endif // UI_EVENTS_EVENT_H_ | 740 #endif // UI_EVENTS_EVENT_H_ |
| OLD | NEW |