diff options
| author | aura <nw@moneybot.cc> | 2026-08-11 19:10:16 +0200 |
|---|---|---|
| committer | aura <nw@moneybot.cc> | 2026-08-11 19:10:16 +0200 |
| commit | 17c07b5f884453130d8be3a6d91d730d80d4f8ae (patch) | |
| tree | 6ec11e5e5f7f0be9ed899196c2897aa76a907de2 /src/render | |
| parent | 1aa17de9188790f049c0edc4281597cb4e535627 (diff) | |
| parent | 0a9d7ce6a0764a87766ebb23cc1ece4c26c8c678 (diff) | |
Merge remote-tracking branch 'origin/day'
Diffstat (limited to 'src/render')
| -rw-r--r-- | src/render/gl.cpp | 41 |
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; } } |
