|
|
@ -67,10 +67,13 @@ pub fn main() !void {
|
|
67
|
67
|
|
|
68
|
68
|
const keyboardState = c.SDL_GetKeyboardState(null);
|
|
69
|
69
|
|
|
|
70
|
c.SDL_StartTextInput();
|
|
|
71
|
|
|
70
|
72
|
var quit = false;
|
|
71
|
73
|
while (!quit) {
|
|
72
|
74
|
var event: c.SDL_Event = undefined;
|
|
73
|
75
|
while (c.SDL_PollEvent(&event) != 0) {
|
|
|
76
|
const ctrlPressed = (keyboardState[c.SDL_SCANCODE_LCTRL] != 0);
|
|
74
|
77
|
switch (event.@"type") {
|
|
75
|
78
|
c.SDL_QUIT => {
|
|
76
|
79
|
quit = true;
|
|
|
@ -84,28 +87,7 @@ pub fn main() !void {
|
|
84
|
87
|
}
|
|
85
|
88
|
},
|
|
86
|
89
|
c.SDL_KEYDOWN => {
|
|
87
|
|
switch (event.key.keysym.sym) {
|
|
88
|
|
c.SDLK_ESCAPE => {
|
|
89
|
|
quit = true;
|
|
90
|
|
},
|
|
91
|
|
c.SDLK_BACKSPACE => {
|
|
92
|
|
pos = if (pos == 0) max_chars - 1 else (pos - 1) % (max_chars - 1);
|
|
93
|
|
msg[pos] = '_';
|
|
94
|
|
},
|
|
95
|
|
c.SDLK_RETURN => {
|
|
96
|
|
result = runCommand(&msg, gpa);
|
|
97
|
|
var i: usize = 0;
|
|
98
|
|
while (i < max_chars) : (i += 1) {
|
|
99
|
|
msg[i] = ' ';
|
|
100
|
|
}
|
|
101
|
|
msg[max_chars] = 0;
|
|
102
|
|
pos = 0;
|
|
103
|
|
},
|
|
104
|
|
else => {},
|
|
105
|
|
}
|
|
106
|
|
|
|
107
|
|
// ctrl + key combinations
|
|
108
|
|
if (keyboardState[c.SDL_SCANCODE_LCTRL] != 0) {
|
|
|
90
|
if (ctrlPressed) {
|
|
109
|
91
|
switch (event.key.keysym.sym) {
|
|
110
|
92
|
c.SDLK_a => {
|
|
111
|
93
|
pos = 0;
|
|
|
@ -121,10 +103,30 @@ pub fn main() !void {
|
|
121
|
103
|
},
|
|
122
|
104
|
else => {},
|
|
123
|
105
|
}
|
|
|
106
|
} else {
|
|
|
107
|
switch (event.key.keysym.sym) {
|
|
|
108
|
c.SDLK_ESCAPE => {
|
|
|
109
|
quit = true;
|
|
|
110
|
},
|
|
|
111
|
c.SDLK_BACKSPACE => {
|
|
|
112
|
pos = if (pos == 0) max_chars - 1 else (pos - 1) % (max_chars - 1);
|
|
|
113
|
msg[pos] = '_';
|
|
|
114
|
},
|
|
|
115
|
c.SDLK_RETURN => {
|
|
|
116
|
result = runCommand(&msg, gpa);
|
|
|
117
|
var i: usize = 0;
|
|
|
118
|
while (i < max_chars) : (i += 1) {
|
|
|
119
|
msg[i] = ' ';
|
|
|
120
|
}
|
|
|
121
|
msg[max_chars] = 0;
|
|
|
122
|
pos = 0;
|
|
|
123
|
},
|
|
|
124
|
else => {},
|
|
|
125
|
}
|
|
124
|
126
|
}
|
|
125
|
127
|
},
|
|
126
|
128
|
c.SDL_TEXTINPUT => {
|
|
127
|
|
if (event.text.text.len > 0) {
|
|
|
129
|
if (!ctrlPressed and event.text.text.len > 0) {
|
|
128
|
130
|
c.SDL_Log("input: '%s' at %d", event.text.text, pos);
|
|
129
|
131
|
msg[pos] = event.text.text[0];
|
|
130
|
132
|
pos = (pos + 1) % (max_chars - 1);
|