From a825ed2ba65f8c6019f26809d3cf4b9e3094a326 Mon Sep 17 00:00:00 2001 From: Gwenhael Le Moine Date: Sat, 7 Sep 2024 21:13:47 +0200 Subject: [PATCH] [sdl2] add --scale= option to scale up/down the size of SDL2's window --- dist/x48ng.man.1 | 2 ++ src/config.c | 12 ++++++++++++ src/config.h | 1 + src/ui_sdl2.c | 5 ++++- 4 files changed, 19 insertions(+), 1 deletion(-) diff --git a/dist/x48ng.man.1 b/dist/x48ng.man.1 index 8839fde..aad16e6 100644 --- a/dist/x48ng.man.1 +++ b/dist/x48ng.man.1 @@ -100,6 +100,8 @@ where options include (depending on compiled front-ends): \-\-no\-chrome only display the LCD (default: false) .br \-\-fullscreen make the UI fullscreen (default: false) +.br + \-\-scale= scale the SDL2 UI by .br \-\-netbook make the UI horizontal (default: false) .br diff --git a/src/config.c b/src/config.c index 3e2da7e..0cad05f 100644 --- a/src/config.c +++ b/src/config.c @@ -43,6 +43,7 @@ config_t config = { /* sdl */ .hide_chrome = false, .show_ui_fullscreen = false, + .scale = 1.0, /* x11 */ .netbook = false, @@ -245,6 +246,7 @@ int config_init( int argc, char* argv[] ) int clopt_throttle = -1; int clopt_hide_chrome = -1; int clopt_show_ui_fullscreen = -1; + double clopt_scale = -1.0; int clopt_netbook = -1; int clopt_mono = -1; int clopt_gray = -1; @@ -282,6 +284,7 @@ int config_init( int argc, char* argv[] ) {"sdl", no_argument, &clopt_frontend_type, FRONTEND_SDL }, {"no-chrome", no_argument, &clopt_hide_chrome, true }, {"fullscreen", no_argument, &clopt_show_ui_fullscreen, true }, + {"scale", required_argument, NULL, 7110 }, {"x11", no_argument, &clopt_frontend_type, FRONTEND_X11 }, {"netbook", no_argument, &clopt_netbook, true }, @@ -404,6 +407,9 @@ int config_init( int argc, char* argv[] ) case 1015: clopt_serialLine = optarg; break; + case 7110: + clopt_scale = atof( optarg ); + break; case 8110: clopt_x11_visual = optarg; break; @@ -562,6 +568,9 @@ int config_init( int argc, char* argv[] ) lua_getglobal( config_lua_values, "fullscreen" ); config.show_ui_fullscreen = lua_toboolean( config_lua_values, -1 ); + lua_getglobal( config_lua_values, "scale" ); + config.scale = lua_tonumber( config_lua_values, -1.0 ); + lua_getglobal( config_lua_values, "netbook" ); config.netbook = lua_toboolean( config_lua_values, -1 ); @@ -644,6 +653,8 @@ int config_init( int argc, char* argv[] ) config.hide_chrome = clopt_hide_chrome; if ( clopt_show_ui_fullscreen != -1 ) config.show_ui_fullscreen = clopt_show_ui_fullscreen; + if ( clopt_scale != -1.0 ) + config.scale = clopt_scale; if ( clopt_netbook != -1 ) config.netbook = clopt_netbook; if ( clopt_mono != -1 ) @@ -715,6 +726,7 @@ int config_init( int argc, char* argv[] ) fprintf( stdout, "\" -- possible values: \"x11\", \"sdl2\", \"sdl\" (deprecated), \"tui\", \"tui-small\", \"tui-tiny\"\n" ); fprintf( stdout, "hide_chrome = %s\n", config.hide_chrome ? "true" : "false" ); fprintf( stdout, "fullscreen = %s\n", config.show_ui_fullscreen ? "true" : "false" ); + fprintf( stdout, "scale = %f -- applies only to sdl2\n", config.scale ); fprintf( stdout, "mono = %s\n", config.mono ? "true" : "false" ); fprintf( stdout, "gray = %s\n", config.gray ? "true" : "false" ); fprintf( stdout, "leave_shift_keys = %s\n", config.leave_shift_keys ? "true" : "false" ); diff --git a/src/config.h b/src/config.h index c35439e..3aec1b3 100644 --- a/src/config.h +++ b/src/config.h @@ -35,6 +35,7 @@ typedef struct { /* sdl */ bool hide_chrome; bool show_ui_fullscreen; + double scale; /* x11 */ bool netbook; diff --git a/src/ui_sdl2.c b/src/ui_sdl2.c index bdfeaa1..350e24a 100644 --- a/src/ui_sdl2.c +++ b/src/ui_sdl2.c @@ -1101,7 +1101,8 @@ void init_sdl2_ui( int argc, char** argv ) else window_flags |= SDL_WINDOW_RESIZABLE; - window = SDL_CreateWindow( config.progname, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, width, height, window_flags ); + window = SDL_CreateWindow( config.progname, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, width * config.scale, + height * config.scale, window_flags ); if ( window == NULL ) { printf( "Couldn't create window: %s\n", SDL_GetError() ); exit( 1 ); @@ -1111,6 +1112,8 @@ void init_sdl2_ui( int argc, char** argv ) if ( renderer == NULL ) exit( 2 ); + SDL_RenderSetLogicalSize( renderer, width, height ); + main_texture = SDL_CreateTexture( renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, width, height ); SDL_SetRenderTarget( renderer, main_texture );