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

Side by Side Diff: apps/moterm/key_util.cc

Issue 1130093003: Moterm part 4: Add input event -> input character conversion function. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 5 years, 7 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
« no previous file with comments | « apps/moterm/key_util.h ('k') | apps/moterm/key_util_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 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 "apps/moterm/key_util.h"
6
7 #include "base/logging.h"
8 #include "mojo/services/input_events/public/interfaces/input_events.mojom.h"
9 #include "mojo/services/input_events/public/interfaces/input_key_codes.mojom.h"
10
11 // TODO(vtl): Handle more stuff and verify that we're consistent about the
12 // sequences we generate.
13 std::string GetInputSequenceForKeyPressedEvent(const mojo::Event& key_event) {
14 DCHECK_EQ(key_event.action, mojo::EVENT_TYPE_KEY_PRESSED);
15 CHECK(key_event.key_data);
16 const mojo::KeyData& key_data = *key_event.key_data;
17
18 DVLOG(2) << "Key pressed:"
19 << "\n is_char = " << key_data.is_char
20 << "\n character = " << key_data.character
21 << "\n windows_key_code = " << key_data.windows_key_code
22 << "\n text = " << key_data.text
23 << "\n unmodified_text = " << key_data.unmodified_text;
24
25 // We'll only deal with character events (which we'll get even if |character|
26 // isn't set).
27 if (!key_data.is_char)
28 return std::string();
29
30 // Use |character| if that's set.
31 // TODO(vtl): Maybe we should use |text| instead, but it seems to be the same
32 // as |character|. (The comments claim that |text| will have something for
33 // backspace while |character| won't, but this does not appear to be true
34 // currently.)
35 if (key_data.character) {
36 if (key_data.character >= 128) {
37 // TODO(vtl): Need to UTF-8 encode.
38 NOTIMPLEMENTED();
39 return std::string();
40 }
41 return std::string(1, static_cast<char>(key_data.character));
42 }
43
44 // TODO(vtl): For some of these, we may need to handle modifiers (from
45 // |event.flags|).
46 switch (key_data.windows_key_code) {
47 // Produces input sequence:
48 case mojo::KEYBOARD_CODE_BACK:
49 // Have backspace send DEL instead of BS.
50 return std::string("\x7f");
51 case mojo::KEYBOARD_CODE_ESCAPE:
52 return std::string("\x1b");
53 case mojo::KEYBOARD_CODE_PRIOR:
54 return std::string("\x1b[5~");
55 case mojo::KEYBOARD_CODE_NEXT:
56 return std::string("\x1b[6~");
57 case mojo::KEYBOARD_CODE_END:
58 return std::string("\x1b[F");
59 case mojo::KEYBOARD_CODE_HOME:
60 return std::string("\x1b[H");
61 case mojo::KEYBOARD_CODE_LEFT:
62 return std::string("\x1b[D");
63 case mojo::KEYBOARD_CODE_UP:
64 return std::string("\x1b[A");
65 case mojo::KEYBOARD_CODE_RIGHT:
66 return std::string("\x1b[C");
67 case mojo::KEYBOARD_CODE_DOWN:
68 return std::string("\x1b[B");
69 case mojo::KEYBOARD_CODE_INSERT:
70 return std::string("\x1b[2~");
71 case mojo::KEYBOARD_CODE_DELETE:
72 return std::string("\x1b[3~");
73
74 // Should have |character| set:
75 case mojo::KEYBOARD_CODE_TAB:
76 case mojo::KEYBOARD_CODE_RETURN:
77 case mojo::KEYBOARD_CODE_SPACE:
78 case mojo::KEYBOARD_CODE_NUM_0:
79 case mojo::KEYBOARD_CODE_NUM_1:
80 case mojo::KEYBOARD_CODE_NUM_2:
81 case mojo::KEYBOARD_CODE_NUM_3:
82 case mojo::KEYBOARD_CODE_NUM_4:
83 case mojo::KEYBOARD_CODE_NUM_5:
84 case mojo::KEYBOARD_CODE_NUM_6:
85 case mojo::KEYBOARD_CODE_NUM_7:
86 case mojo::KEYBOARD_CODE_NUM_8:
87 case mojo::KEYBOARD_CODE_NUM_9:
88 case mojo::KEYBOARD_CODE_A:
89 case mojo::KEYBOARD_CODE_B:
90 case mojo::KEYBOARD_CODE_C:
91 case mojo::KEYBOARD_CODE_D:
92 case mojo::KEYBOARD_CODE_E:
93 case mojo::KEYBOARD_CODE_F:
94 case mojo::KEYBOARD_CODE_G:
95 case mojo::KEYBOARD_CODE_H:
96 case mojo::KEYBOARD_CODE_I:
97 case mojo::KEYBOARD_CODE_J:
98 case mojo::KEYBOARD_CODE_K:
99 case mojo::KEYBOARD_CODE_L:
100 case mojo::KEYBOARD_CODE_M:
101 case mojo::KEYBOARD_CODE_N:
102 case mojo::KEYBOARD_CODE_O:
103 case mojo::KEYBOARD_CODE_P:
104 case mojo::KEYBOARD_CODE_Q:
105 case mojo::KEYBOARD_CODE_R:
106 case mojo::KEYBOARD_CODE_S:
107 case mojo::KEYBOARD_CODE_T:
108 case mojo::KEYBOARD_CODE_U:
109 case mojo::KEYBOARD_CODE_V:
110 case mojo::KEYBOARD_CODE_W:
111 case mojo::KEYBOARD_CODE_X:
112 case mojo::KEYBOARD_CODE_Y:
113 case mojo::KEYBOARD_CODE_Z:
114 // TODO(vtl): Actually, we won't get characters for Ctrl+<number> (and
115 // probably other odd combinations).
116 DLOG(WARNING) << "Expected character for key code "
117 << key_data.windows_key_code;
118 break;
119
120 // Purposely produce no input sequence:
121 case mojo::KEYBOARD_CODE_SHIFT:
122 case mojo::KEYBOARD_CODE_CONTROL:
123 case mojo::KEYBOARD_CODE_LSHIFT:
124 case mojo::KEYBOARD_CODE_RSHIFT:
125 case mojo::KEYBOARD_CODE_LCONTROL:
126 case mojo::KEYBOARD_CODE_RCONTROL:
127 break;
128
129 // TODO(vtl): Figure these out.
130 case mojo::KEYBOARD_CODE_CLEAR:
131 case mojo::KEYBOARD_CODE_MENU:
132 case mojo::KEYBOARD_CODE_PAUSE:
133 case mojo::KEYBOARD_CODE_CAPITAL:
134 case mojo::KEYBOARD_CODE_KANA: // A.k.a. |KEYBOARD_CODE_HANGUL|.
135 case mojo::KEYBOARD_CODE_JUNJA:
136 case mojo::KEYBOARD_CODE_FINAL:
137 case mojo::KEYBOARD_CODE_HANJA: // A.k.a. |KEYBOARD_CODE_KANJI|.
138 case mojo::KEYBOARD_CODE_CONVERT:
139 case mojo::KEYBOARD_CODE_NONCONVERT:
140 case mojo::KEYBOARD_CODE_ACCEPT:
141 case mojo::KEYBOARD_CODE_MODECHANGE:
142 case mojo::KEYBOARD_CODE_SELECT:
143 case mojo::KEYBOARD_CODE_PRINT:
144 case mojo::KEYBOARD_CODE_EXECUTE:
145 case mojo::KEYBOARD_CODE_SNAPSHOT:
146 case mojo::KEYBOARD_CODE_HELP:
147 case mojo::KEYBOARD_CODE_LWIN: // A.k.a. |KEYBOARD_CODE_COMMAND|.
148 case mojo::KEYBOARD_CODE_RWIN:
149 case mojo::KEYBOARD_CODE_APPS:
150 case mojo::KEYBOARD_CODE_SLEEP:
151 case mojo::KEYBOARD_CODE_NUMPAD0:
152 case mojo::KEYBOARD_CODE_NUMPAD1:
153 case mojo::KEYBOARD_CODE_NUMPAD2:
154 case mojo::KEYBOARD_CODE_NUMPAD3:
155 case mojo::KEYBOARD_CODE_NUMPAD4:
156 case mojo::KEYBOARD_CODE_NUMPAD5:
157 case mojo::KEYBOARD_CODE_NUMPAD6:
158 case mojo::KEYBOARD_CODE_NUMPAD7:
159 case mojo::KEYBOARD_CODE_NUMPAD8:
160 case mojo::KEYBOARD_CODE_NUMPAD9:
161 case mojo::KEYBOARD_CODE_MULTIPLY:
162 case mojo::KEYBOARD_CODE_ADD:
163 case mojo::KEYBOARD_CODE_SEPARATOR:
164 case mojo::KEYBOARD_CODE_SUBTRACT:
165 case mojo::KEYBOARD_CODE_DECIMAL:
166 case mojo::KEYBOARD_CODE_DIVIDE:
167 case mojo::KEYBOARD_CODE_F1:
168 case mojo::KEYBOARD_CODE_F2:
169 case mojo::KEYBOARD_CODE_F3:
170 case mojo::KEYBOARD_CODE_F4:
171 case mojo::KEYBOARD_CODE_F5:
172 case mojo::KEYBOARD_CODE_F6:
173 case mojo::KEYBOARD_CODE_F7:
174 case mojo::KEYBOARD_CODE_F8:
175 case mojo::KEYBOARD_CODE_F9:
176 case mojo::KEYBOARD_CODE_F10:
177 case mojo::KEYBOARD_CODE_F11:
178 case mojo::KEYBOARD_CODE_F12:
179 case mojo::KEYBOARD_CODE_F13:
180 case mojo::KEYBOARD_CODE_F14:
181 case mojo::KEYBOARD_CODE_F15:
182 case mojo::KEYBOARD_CODE_F16:
183 case mojo::KEYBOARD_CODE_F17:
184 case mojo::KEYBOARD_CODE_F18:
185 case mojo::KEYBOARD_CODE_F19:
186 case mojo::KEYBOARD_CODE_F20:
187 case mojo::KEYBOARD_CODE_F21:
188 case mojo::KEYBOARD_CODE_F22:
189 case mojo::KEYBOARD_CODE_F23:
190 case mojo::KEYBOARD_CODE_F24:
191 case mojo::KEYBOARD_CODE_NUMLOCK:
192 case mojo::KEYBOARD_CODE_SCROLL:
193 case mojo::KEYBOARD_CODE_LMENU:
194 case mojo::KEYBOARD_CODE_RMENU:
195 case mojo::KEYBOARD_CODE_BROWSER_BACK:
196 case mojo::KEYBOARD_CODE_BROWSER_FORWARD:
197 case mojo::KEYBOARD_CODE_BROWSER_REFRESH:
198 case mojo::KEYBOARD_CODE_BROWSER_STOP:
199 case mojo::KEYBOARD_CODE_BROWSER_SEARCH:
200 case mojo::KEYBOARD_CODE_BROWSER_FAVORITES:
201 case mojo::KEYBOARD_CODE_BROWSER_HOME:
202 case mojo::KEYBOARD_CODE_VOLUME_MUTE:
203 case mojo::KEYBOARD_CODE_VOLUME_DOWN:
204 case mojo::KEYBOARD_CODE_VOLUME_UP:
205 case mojo::KEYBOARD_CODE_MEDIA_NEXT_TRACK:
206 case mojo::KEYBOARD_CODE_MEDIA_PREV_TRACK:
207 case mojo::KEYBOARD_CODE_MEDIA_STOP:
208 case mojo::KEYBOARD_CODE_MEDIA_PLAY_PAUSE:
209 case mojo::KEYBOARD_CODE_MEDIA_LAUNCH_MAIL:
210 case mojo::KEYBOARD_CODE_MEDIA_LAUNCH_MEDIA_SELECT:
211 case mojo::KEYBOARD_CODE_MEDIA_LAUNCH_APP1:
212 case mojo::KEYBOARD_CODE_MEDIA_LAUNCH_APP2:
213 case mojo::KEYBOARD_CODE_OEM_1:
214 case mojo::KEYBOARD_CODE_OEM_PLUS:
215 case mojo::KEYBOARD_CODE_OEM_COMMA:
216 case mojo::KEYBOARD_CODE_OEM_MINUS:
217 case mojo::KEYBOARD_CODE_OEM_PERIOD:
218 case mojo::KEYBOARD_CODE_OEM_2:
219 case mojo::KEYBOARD_CODE_OEM_3:
220 case mojo::KEYBOARD_CODE_OEM_4:
221 case mojo::KEYBOARD_CODE_OEM_5:
222 case mojo::KEYBOARD_CODE_OEM_6:
223 case mojo::KEYBOARD_CODE_OEM_7:
224 case mojo::KEYBOARD_CODE_OEM_8:
225 case mojo::KEYBOARD_CODE_OEM_102:
226 case mojo::KEYBOARD_CODE_PROCESSKEY:
227 case mojo::KEYBOARD_CODE_PACKET:
228 case mojo::KEYBOARD_CODE_DBE_SBCSCHAR:
229 case mojo::KEYBOARD_CODE_DBE_DBCSCHAR:
230 case mojo::KEYBOARD_CODE_ATTN:
231 case mojo::KEYBOARD_CODE_CRSEL:
232 case mojo::KEYBOARD_CODE_EXSEL:
233 case mojo::KEYBOARD_CODE_EREOF:
234 case mojo::KEYBOARD_CODE_PLAY:
235 case mojo::KEYBOARD_CODE_ZOOM:
236 case mojo::KEYBOARD_CODE_NONAME:
237 case mojo::KEYBOARD_CODE_PA1:
238 case mojo::KEYBOARD_CODE_OEM_CLEAR:
239 case mojo::KEYBOARD_CODE_UNKNOWN:
240 case mojo::KEYBOARD_CODE_ALTGR:
241 NOTIMPLEMENTED() << "Key code " << key_data.windows_key_code;
242 break;
243
244 default:
245 LOG(WARNING) << "Unknown key code " << key_data.windows_key_code;
246 break;
247 }
248 return std::string();
249 }
OLDNEW
« no previous file with comments | « apps/moterm/key_util.h ('k') | apps/moterm/key_util_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698