diff --git a/gfx/display_servers/dispserv_x11.c b/gfx/display_servers/dispserv_x11.c index d001438f33..4fda9dd03c 100644 --- a/gfx/display_servers/dispserv_x11.c +++ b/gfx/display_servers/dispserv_x11.c @@ -19,6 +19,7 @@ #include "../common/x11_common.h" #include "../../configuration.h" #include "../video_driver.h" /* needed to set refresh rate in set resolution */ +#include "../video_crt_switch.h" /* needed to set aspect for low res in linux */ #include #include @@ -44,10 +45,10 @@ static void* x11_display_server_init(void) static void x11_display_server_destroy(void *data) { - - system("xrandr -s 704x480"); dispserv_x11_t *dispserv = (dispserv_x11_t*)data; + system("xrandr -s 704x480"); + if (dispserv) free(dispserv); } @@ -98,14 +99,19 @@ static bool x11_set_resolution(void *data, char fbset[150]; char output[150]; - hsp = width*1.14; + hsp = width*1.12; /* set core refresh from hz */ video_monitor_set_refresh_rate(hz); /* following code is the mode line genorator */ - hfp = width+24; - hbp = width*1.26; + if (width < 300) + { + width = width*2; + crt_aspect_ratio_switch(width, height); + } + hfp = width+16; + hbp = width*1.22; hmax = hbp; if (height < 241) diff --git a/gfx/video_crt_switch.c b/gfx/video_crt_switch.c index 07ce0c76a6..f4dd720f60 100644 --- a/gfx/video_crt_switch.c +++ b/gfx/video_crt_switch.c @@ -66,7 +66,7 @@ static void switch_crt_hz(void) } -static void crt_aspect_ratio_switch(unsigned width, unsigned height) +void crt_aspect_ratio_switch(unsigned width, unsigned height) { /* send aspect float to videeo_driver */ fly_aspect = (float)width / height; diff --git a/gfx/video_crt_switch.h b/gfx/video_crt_switch.h index 4e86ec4352..e1ca885780 100644 --- a/gfx/video_crt_switch.h +++ b/gfx/video_crt_switch.h @@ -29,6 +29,8 @@ RETRO_BEGIN_DECLS void crt_switch_res_core(unsigned width, unsigned height, float hz); +void crt_aspect_ratio_switch(unsigned width, unsigned height); + void crt_video_restore(void); RETRO_END_DECLS