Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(61)

Side by Side Diff: remoting/tools/javascript_key_tester/pnacl/remoting_key_tester.cc

Issue 884703006: Handling PNaCl KeyboardInputEvent(s) in the key tester app. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698