diff options
| author | 2lag <96544487+2lag@users.noreply.github.com> | 2026-08-08 17:33:36 +0200 |
|---|---|---|
| committer | 2lag <96544487+2lag@users.noreply.github.com> | 2026-08-08 17:33:36 +0200 |
| commit | 2973df584978d9aae6f164ce0204179c8a28b3ae (patch) | |
| tree | c1b793c8e0d17aeb66c5197bc28acca84b2c98ab /src/render | |
| parent | e540910745aad31378452eec25aacfb3f346191a (diff) | |
console, textbox changes, some other shit
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; } } |
