summaryrefslogtreecommitdiff
path: root/src/render/gl.cpp
diff options
context:
space:
mode:
authoraura <nw@moneybot.cc>2026-08-11 19:10:16 +0200
committeraura <nw@moneybot.cc>2026-08-11 19:10:16 +0200
commit17c07b5f884453130d8be3a6d91d730d80d4f8ae (patch)
tree6ec11e5e5f7f0be9ed899196c2897aa76a907de2 /src/render/gl.cpp
parent1aa17de9188790f049c0edc4281597cb4e535627 (diff)
parent0a9d7ce6a0764a87766ebb23cc1ece4c26c8c678 (diff)
Merge remote-tracking branch 'origin/day'
Diffstat (limited to 'src/render/gl.cpp')
-rw-r--r--src/render/gl.cpp41
1 files changed, 37 insertions, 4 deletions
diff --git a/src/render/gl.cpp b/src/render/gl.cpp
index 7425ff4..c4eee26 100644
--- a/src/render/gl.cpp
+++ b/src/render/gl.cpp
@@ -1,3 +1,5 @@
+#include "SDL_keyboard.h"
+#include "SDL_keycode.h"
#include "SDL_video.h"
#include <unistd.h>
#define STB_IMAGE_IMPLEMENTATION
@@ -5,6 +7,7 @@
#include "gl.h"
#include "gl_2d_font.h"
+#include "../gui/base.h"
#include "../util.h"
I32 SAMPLER_INDICES[255];
@@ -224,6 +227,7 @@ GL_DATA* gl_create( I32* _canvas ) {
gl_handle_window_size_change( gl, start_w, start_h );
SDL_SetEventFilter( gl_event_filter, gl );
+ SDL_StartTextInput();
gl_inst = gl;
return gl;
}
@@ -240,6 +244,7 @@ void gl_gen_buffers( GL_DATA* gl ) {
void gl_destroy( GL_DATA *gl ) {
SDL_SetEventFilter( 0, 0 );
+ SDL_StopTextInput();
while( gl->programs.size ) { gl_program_destroy( gl, gl->programs.pop() ); }
while( gl->fonts.size ) { gl_font_destroy( gl, gl->fonts.pop() ); }
@@ -486,22 +491,50 @@ STAT gl_beginframe( GL_DATA* gl ) {
}
STAT gl_poll_events( GL_DATA* gl ) {
+ U8 suppress_console = 0;
SDL_Event e;
+
while( SDL_PollEvent( &e ) ) {
+ if( suppress_console && e.type == SDL_TEXTINPUT ) {
+ suppress_console = 0;
+ continue;
+ }
+
input_on_event( &e );
switch( e.type ) {
case SDL_QUIT:
return STAT_BREAK;
+
case SDL_WINDOWEVENT: {
if( e.window.event == SDL_WINDOWEVENT_SIZE_CHANGED
|| e.window.event == SDL_WINDOWEVENT_RESIZED ) {
- gl_handle_window_size_change( gl, e.window.data1, e.window.data2 );
+ gl_handle_window_size_change(
+ gl,
+ e.window.data1,
+ e.window.data2
+ );
}
} break;
- case SDL_KEYDOWN:
- return e.key.keysym.sym == SDLK_ESCAPE ? STAT_BREAK : STAT_OK;
- default: break;
+
+ case SDL_KEYDOWN: {
+ if( e.key.keysym.sym == SDLK_BACKQUOTE
+ && !e.key.repeat
+ ) {
+ gui_consolewindow_toggle();
+ U16 modifiers = e.key.keysym.mod;
+ suppress_console = !(
+ modifiers & (
+ KMOD_CTRL |
+ KMOD_ALT |
+ KMOD_GUI
+ )
+ );
+ }
+ } break;
+
+ default:
+ break;
}
}