Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright (c) 2015 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 | |
| 5 #include <sstream> | |
| 6 | |
| 7 #include "ppapi/cpp/input_event.h" | |
| 8 #include "ppapi/cpp/instance.h" | |
| 9 #include "ppapi/cpp/module.h" | |
| 10 #include "ppapi/cpp/var.h" | |
| 11 | |
| 12 namespace remoting { | |
| 13 | |
| 14 class KeyTesterInstance : public pp::Instance { | |
| 15 public: | |
| 16 explicit KeyTesterInstance(PP_Instance instance) : pp::Instance(instance) { | |
| 17 RequestInputEvents(PP_INPUTEVENT_CLASS_KEYBOARD | | |
| 18 PP_INPUTEVENT_CLASS_MOUSE); | |
| 19 } | |
| 20 | |
| 21 virtual ~KeyTesterInstance() {} | |
| 22 | |
| 23 virtual bool HandleInputEvent(const pp::InputEvent& event) { | |
| 24 switch (event.GetType()) { | |
| 25 case PP_INPUTEVENT_TYPE_KEYDOWN: | |
| 26 case PP_INPUTEVENT_TYPE_KEYUP: | |
| 27 case PP_INPUTEVENT_TYPE_CHAR: { | |
| 28 HandleKeyboardEvent(pp::KeyboardInputEvent(event)); | |
| 29 break; | |
| 30 } | |
| 31 default: | |
| 32 break; | |
| 33 } | |
| 34 return true; | |
| 35 } | |
| 36 | |
| 37 private: | |
| 38 void HandleKeyboardEvent(const pp::KeyboardInputEvent& event) { | |
| 39 std::ostringstream out; | |
| 40 | |
| 41 out << EventTypeToString(event.GetType()) << " : "; | |
| 42 out << ModifiersToString(event.GetModifiers()) << " : "; | |
| 43 out << "0x" << std::hex << event.GetKeyCode() << " : "; | |
| 44 out << VarToString(event.GetCharacterText()) << " : "; | |
| 45 out << VarToString(event.GetCode()); | |
| 46 | |
| 47 PostMessage(out.str()); | |
|
Jamie
2015/01/28 22:31:27
I think this should be passed as a dictionary (or
Łukasz Anforowicz
2015/01/29 00:26:37
I wrote code that works and passes the following o
| |
| 48 } | |
| 49 | |
| 50 std::string VarToString(const pp::Var& var) { | |
| 51 if (var.is_undefined()) { | |
| 52 return "[undefined]"; | |
| 53 } | |
| 54 if (var.is_null()) { | |
| 55 return "[null]"; | |
| 56 } | |
| 57 if (!var.is_string()) { | |
| 58 return "[non-string]"; | |
| 59 } | |
| 60 return var.AsString(); | |
| 61 } | |
| 62 | |
| 63 std::string EventTypeToString(PP_InputEvent_Type t) { | |
| 64 switch (t) { | |
| 65 case PP_INPUTEVENT_TYPE_UNDEFINED: | |
| 66 return "UNDEFINED"; | |
| 67 case PP_INPUTEVENT_TYPE_MOUSEDOWN: | |
| 68 return "MOUSEDOWN"; | |
| 69 case PP_INPUTEVENT_TYPE_MOUSEUP: | |
| 70 return "MOUSEUP"; | |
| 71 case PP_INPUTEVENT_TYPE_MOUSEMOVE: | |
| 72 return "MOUSEMOVE"; | |
| 73 case PP_INPUTEVENT_TYPE_MOUSEENTER: | |
| 74 return "MOUSEENTER"; | |
| 75 case PP_INPUTEVENT_TYPE_MOUSELEAVE: | |
| 76 return "MOUSELEAVE"; | |
| 77 case PP_INPUTEVENT_TYPE_WHEEL: | |
| 78 return "WHEEL"; | |
| 79 case PP_INPUTEVENT_TYPE_RAWKEYDOWN: | |
| 80 return "RAWKEYDOWN"; | |
| 81 case PP_INPUTEVENT_TYPE_KEYDOWN: | |
| 82 return "KEYDOWN"; | |
| 83 case PP_INPUTEVENT_TYPE_KEYUP: | |
| 84 return "KEYUP"; | |
| 85 case PP_INPUTEVENT_TYPE_CHAR: | |
| 86 return "CHAR"; | |
| 87 case PP_INPUTEVENT_TYPE_CONTEXTMENU: | |
| 88 return "CONTEXTMENU"; | |
| 89 case PP_INPUTEVENT_TYPE_IME_COMPOSITION_START: | |
| 90 return "IME_COMPOSITION_START"; | |
| 91 case PP_INPUTEVENT_TYPE_IME_COMPOSITION_UPDATE: | |
| 92 return "IME_COMPOSITION_UPDATE"; | |
| 93 case PP_INPUTEVENT_TYPE_IME_COMPOSITION_END: | |
| 94 return "IME_COMPOSITION_END"; | |
| 95 case PP_INPUTEVENT_TYPE_IME_TEXT: | |
| 96 return "IME_TEXT"; | |
| 97 case PP_INPUTEVENT_TYPE_TOUCHSTART: | |
| 98 return "TOUCHSTART"; | |
| 99 case PP_INPUTEVENT_TYPE_TOUCHMOVE: | |
| 100 return "TOUCHMOVE"; | |
| 101 case PP_INPUTEVENT_TYPE_TOUCHEND: | |
| 102 return "TOUCHEND"; | |
| 103 case PP_INPUTEVENT_TYPE_TOUCHCANCEL: | |
| 104 return "TOUCHCANCEL"; | |
| 105 default: | |
| 106 return "[UNRECOGNIZED]"; | |
| 107 } | |
| 108 } | |
| 109 | |
| 110 void Append(std::ostringstream& out, | |
| 111 const std::string& str, | |
| 112 const std::string& separator) { | |
| 113 if (!out.str().empty()) { | |
| 114 out << separator; | |
| 115 } | |
| 116 out << str; | |
| 117 } | |
| 118 | |
| 119 std::string ModifiersToString(uint32_t modifiers) { | |
| 120 std::ostringstream out; | |
| 121 if (modifiers & PP_INPUTEVENT_MODIFIER_SHIFTKEY) { | |
| 122 Append(out, "SHIFTKEY", "+"); | |
| 123 } | |
| 124 if (modifiers & PP_INPUTEVENT_MODIFIER_CONTROLKEY) { | |
| 125 Append(out, "CONTROLKEY", "+"); | |
| 126 } | |
| 127 if (modifiers & PP_INPUTEVENT_MODIFIER_ALTKEY) { | |
| 128 Append(out, "ALTKEY", "+"); | |
| 129 } | |
| 130 if (modifiers & PP_INPUTEVENT_MODIFIER_METAKEY) { | |
| 131 Append(out, "METAKEY", "+"); | |
| 132 } | |
| 133 if (modifiers & PP_INPUTEVENT_MODIFIER_ISKEYPAD) { | |
| 134 Append(out, "ISKEYPAD", "+"); | |
| 135 } | |
| 136 if (modifiers & PP_INPUTEVENT_MODIFIER_ISAUTOREPEAT) { | |
| 137 Append(out, "ISAUTOREPEAT", "+"); | |
| 138 } | |
| 139 if (modifiers & PP_INPUTEVENT_MODIFIER_LEFTBUTTONDOWN) { | |
| 140 Append(out, "LEFTBUTTONDOWN", "+"); | |
| 141 } | |
| 142 if (modifiers & PP_INPUTEVENT_MODIFIER_MIDDLEBUTTONDOWN) { | |
| 143 Append(out, "MIDDLEBUTTONDOWN", "+"); | |
| 144 } | |
| 145 if (modifiers & PP_INPUTEVENT_MODIFIER_RIGHTBUTTONDOWN) { | |
| 146 Append(out, "RIGHTBUTTONDOWN", "+"); | |
| 147 } | |
| 148 if (modifiers & PP_INPUTEVENT_MODIFIER_CAPSLOCKKEY) { | |
| 149 Append(out, "CAPSLOCKKEY", "+"); | |
| 150 } | |
| 151 if (modifiers & PP_INPUTEVENT_MODIFIER_NUMLOCKKEY) { | |
| 152 Append(out, "NUMLOCKKEY", "+"); | |
| 153 } | |
| 154 if (modifiers & PP_INPUTEVENT_MODIFIER_ISLEFT) { | |
| 155 Append(out, "ISLEFT", "+"); | |
| 156 } | |
| 157 if (modifiers & PP_INPUTEVENT_MODIFIER_ISRIGHT) { | |
| 158 Append(out, "ISRIGHT", "+"); | |
| 159 } | |
| 160 if (out.str().empty()) { | |
| 161 return "[NO MODIFIERS]"; | |
| 162 } | |
| 163 return out.str(); | |
| 164 } | |
| 165 }; | |
| 166 | |
| 167 class KeyTesterModule : public pp::Module { | |
| 168 public: | |
| 169 KeyTesterModule() : pp::Module() {} | |
| 170 virtual ~KeyTesterModule() {} | |
| 171 | |
| 172 virtual pp::Instance* CreateInstance(PP_Instance instance) { | |
| 173 return new KeyTesterInstance(instance); | |
| 174 } | |
| 175 }; | |
| 176 | |
| 177 } // namespace remoting | |
| 178 | |
| 179 namespace pp { | |
| 180 | |
| 181 Module* CreateModule() { | |
| 182 return new remoting::KeyTesterModule(); | |
| 183 } | |
| 184 | |
| 185 } // namespace pp | |
| OLD | NEW |