new method

This commit is contained in:
alphanu1 2019-01-30 21:55:33 +00:00
parent 22e0560395
commit fa8c9d7049
2 changed files with 74 additions and 69 deletions

View File

@ -210,7 +210,7 @@ static bool win32_display_server_set_window_decorations(void *data, bool on)
}
static bool win32_display_server_set_resolution(void *data,
unsigned width, unsigned height, int int_hz, float hz, int center)
unsigned width, unsigned height, int int_hz, float hz, int center, int monitor_index)
{
DEVMODE curDevmode;
int iModeNum;

View File

@ -35,6 +35,7 @@
static unsigned orig_width = 0;
static unsigned orig_height = 0;
static char old_mode[250] = {0};
static char orig_output[250] = NULL;
static char new_mode[250] = {0};
static char xrandr[250] = {0};
static char fbset[150] = {0};
@ -64,26 +65,23 @@ static void x11_display_server_destroy(void *data)
if (crt_en)
{
snprintf(output, sizeof(output),
"xrandr -s %dx%d", orig_width, orig_height);
"xrandr --newmode \"700x480_59.941002\" 13.849698 700 742 801 867 480 490 496 533 interlace -hsync -vsync")
system(output);
snprintf(output, sizeof(output),
"xrandr --addmode %s 700x480_59.941002", orig_output);
system(output);
snprintf(output, sizeof(output),
"xrandr --output %s --mode 700x480_59.941002", orig_output);
system(output);
for (i = 0; i < 3; i++)
{
snprintf(output, sizeof(output),
"xrandr --delmode %s%d %s", "VGA", i, old_mode);
system(output);
snprintf(output, sizeof(output),
"xrandr --delmode %s-%d %s", "VGA", i, old_mode);
system(output);
snprintf(output, sizeof(output),
"xrandr --delmode %s %s",orig_mode, old_output);
system(output);
snprintf(output, sizeof(output),
"xrandr --delmode %s%d %s", "DVI", i, old_mode);
system(output);
snprintf(output, sizeof(output),
"xrandr --delmode %s-%d %s", "DVI", i, old_mode);
system(output);
}
snprintf(output, sizeof(output), "xrandr --rmmode %s", old_mode);
system(output);
@ -126,7 +124,7 @@ static bool x11_display_server_set_window_decorations(void *data, bool on)
}
static bool x11_display_server_set_resolution(void *data,
unsigned width, unsigned height, int int_hz, float hz, int center)
unsigned width, unsigned height, int int_hz, float hz, int center, int monitor_index)
{
int i = 0;
int hfp = 0;
@ -235,59 +233,66 @@ static bool x11_display_server_set_resolution(void *data,
/* need to run loops for DVI0 - DVI-2 and VGA0 - VGA-2 outputs to
* add and delete modes */
for (i = 0; i < 3; i++)
crt_rrmode.id = crtid;
crt_rrmode.width = width;
crt_rrmode.height = height;
crt_rrmode.dotClock = pixel_clock;
crt_rrmode.hSyncStart = hfp;
crt_rrmode.hSyncEnd = hsp;
crt_rrmode.hTotal = hmax;
crt_rrmode.hSkew = 0;
crt_rrmode.vSyncStart = vfp;
crt_rrmode.vSyncEnd = vsp;
crt_rrmode.vTotal = vmax;
crt_rrmode.name = new_mode;
crt_rrmode.nameLength = sizeof(new_mode);
crt_rrmode.modeFlags = 0;
res = XRRGetScreenResources (dsp, window);
if (monitor_index == 0)
{
snprintf(output, sizeof(output), "xrandr --addmode %s%d %s", "DVI", i,
new_mode);
system(output);
snprintf(output, sizeof(output), "xrandr --delmode %s%d %s", "DVI", i,
old_mode);
system(output);
}
for (i = 0; i < 3; i++)
{
snprintf(output, sizeof(output), "xrandr --addmode %s-%d %s", "DVI", i,
new_mode);
system(output);
snprintf(output, sizeof(output), "xrandr --delmode %s-%d %s", "DVI", i,
old_mode);
system(output);
}
for (i = 0; i < 3; i++)
{
snprintf(output, sizeof(output), "xrandr --addmode %s%d %s", "VGA", i, new_mode);
system(output);
snprintf(output, sizeof(output), "xrandr --delmode %s%d %s", "VGA", i, old_mode);
system(output);
}
for (i = 0; i < 3; i++)
{
snprintf(output, sizeof(output), "xrandr --addmode %s-%d %s", "VGA", i, new_mode);
system(output);
snprintf(output, sizeof(output), "xrandr --delmode %s-%d %s", "VGA", i, old_mode);
system(output);
}
snprintf(output, sizeof(output), "xrandr -s %s", new_mode);
system(output);
/* remove old mode */
snprintf(output, sizeof(output), "xrandr --rmmode %s", old_mode);
system(output);
/* needs xdotool installed. needed to recapture window. */
system("xdotool windowactivate $(xdotool search --class RetroArch)");
/* variable for old mode */
snprintf(old_mode, sizeof(old_mode), "%s", new_mode);
/* needs xdotool installed. needed to recapture window. */
system("xdotool windowactivate $(xdotool search --class RetroArch)");
/* Second run needed as some times it runs to fast to capture first time */
for (int i = 0; i < res->noutput; i++)
{
XRROutputInfo *outputs = XRRGetOutputInfo (dsp, res, res->outputs[i]);
if (outputs->connection == RR_Connected)
{
snprintf(output4, sizeof(output4),"xrandr --addmode %s %s",outputs->name ,new_mode);
system(output4);
snprintf(output4, sizeof(output4),"xrandr --output %s --mode %s", outputs->name, new_mode);
system(output4);
snprintf(output4, sizeof(output4),"xrandr --delmode %s %s", outputs->name,old_mode);
system(output4);
snprintf(output4, sizeof(output4),"xrandr --rmmode %s", old_mode);
system(output4);
}
}
}
if (monitor_index > 0)
{
XRROutputInfo *outputs = XRRGetOutputInfo (dsp, res, res->outputs[monitor_index]);
if (outputs->connection == RR_Connected)
{
snprintf(orig_output, sizeof(orig_output),"%s", outputs->name);
snprintf(output4, sizeof(output4),"xrandr --addmode %s %s",outputs->name ,new_mode);
system(output4);
snprintf(output4, sizeof(output4),"xrandr --output %s --mode %s", outputs->name, new_mode);
system(output4);
snprintf(output4, sizeof(output4),"xrandr --delmode %s %s", outputs->name, old_mode);
system(output4);
snprintf(output4, sizeof(output4),"xrandr --rmmode %s", old_mode);
system(output4);
}
return true;
}