| // Copyright 2015 The Cobalt Authors. All Rights Reserved. |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| #ifndef COBALT_DOM_KEYBOARD_EVENT_H_ |
| #define COBALT_DOM_KEYBOARD_EVENT_H_ |
| |
| #include <string> |
| |
| #include "cobalt/dom/keyboard_event_init.h" |
| #include "cobalt/dom/ui_event_with_key_state.h" |
| |
| namespace cobalt { |
| namespace dom { |
| |
| // The KeyboardEvent provides specific contextual information associated with |
| // keyboard devices. Each keyboard event references a key using a value. |
| // Keyboard events are commonly directed at the element that has the focus. |
| // https://www.w3.org/TR/2016/WD-uievents-20160804/#events-keyboardevents |
| class KeyboardEvent : public UIEventWithKeyState { |
| public: |
| // Web API: KeyboardEvent |
| // |
| enum KeyLocationCode { |
| kDomKeyLocationStandard = 0x00, |
| kDomKeyLocationLeft = 0x01, |
| kDomKeyLocationRight = 0x02, |
| kDomKeyLocationNumpad = 0x03, |
| }; |
| explicit KeyboardEvent(const std::string& type); |
| KeyboardEvent(const std::string& type, const KeyboardEventInit& init_dict); |
| KeyboardEvent(base::Token type, const scoped_refptr<Window>& view, |
| const KeyboardEventInit& init_dict); |
| |
| // Creates an event with its "initialized flag" unset. |
| explicit KeyboardEvent(UninitializedFlag uninitialized_flag); |
| |
| void InitKeyboardEvent(const std::string& type, bool bubbles, bool cancelable, |
| const scoped_refptr<Window>& view, |
| const std::string& key, uint32 location, |
| const std::string& modifierslist, bool repeat); |
| |
| // Returns a string describing the key event, as defined here: |
| // https://www.w3.org/TR/DOM-Level-3-Events-key/ |
| std::string key() const; |
| |
| // Return a string describing the physical key pressed, not affected by |
| // current keyboard layout or modifier state, as defined here: |
| // https://www.w3.org/TR/uievents-code/ |
| std::string code() const; |
| |
| KeyLocationCode location() const { return key_location_; } |
| bool repeat() const { return repeat_; } |
| bool is_composing() const { return false; } |
| |
| // Legacy Key Attributes. |
| // https://www.w3.org/TR/2016/WD-uievents-20160804/#legacy-key-attributes |
| uint32 key_code() const; |
| uint32 char_code() const; |
| |
| // Web API: UIEvent |
| // This holds a system- and implementation-dependent numerical code signifying |
| // the unmodified identifier associated with the key pressed. In most cases, |
| // the value is identical to keyCode. |
| // https://www.w3.org/TR/2016/WD-uievents-20160804/#dom-keyboardevent-which |
| uint32 which() const override; |
| |
| // keyLocation is deprecated and non-standard. |
| // https://www.w3.org/TR/2009/WD-DOM-Level-3-Events-20090908/#events-Events-KeyboardEvent-keylocation |
| KeyLocationCode key_location() const { return key_location_; } |
| |
| // keyIdentifier is deprecated and non-standard. |
| // Here, we just map it to the standardized key() method, which matches some, |
| // but not all browser implementations. |
| // https://www.w3.org/TR/2009/WD-DOM-Level-3-Events-20090908/#events-Events-KeyboardEvent-keyIdentifier |
| std::string key_identifier() const { return key(); } |
| |
| // Custom, not in any spec. |
| // Utility functions for keycode/charcode conversion. |
| static int32 ComputeCharCode(int32 key_code, bool shift_key); |
| static int KeyCodeToCharCodeWithShift(int key_code); |
| static int KeyCodeToCharCodeNoShift(int key_code); |
| static KeyLocationCode KeyCodeToKeyLocation(int key_code); |
| |
| DEFINE_WRAPPABLE_TYPE(KeyboardEvent); |
| |
| private: |
| ~KeyboardEvent() override {} |
| std::string NonPrintableKey(int32_t key_code) const; |
| |
| KeyLocationCode key_location_; |
| uint32_t key_code_; |
| uint32_t char_code_; |
| bool repeat_; |
| }; |
| |
| } // namespace dom |
| } // namespace cobalt |
| |
| #endif // COBALT_DOM_KEYBOARD_EVENT_H_ |