Quellcode durchsuchen

Fix input for SDL_VIDEODRIVER=wayland

Luna Stadler vor 4 Jahren
Ursprung
Commit
e747c49700
1 geänderte Dateien mit 25 neuen und 23 gelöschten Zeilen
  1. 25 23
      zig/sdl/hello_sdl.zig

+ 25 - 23
zig/sdl/hello_sdl.zig

@ -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);