style cleanup

This commit is contained in:
Brad Parker 2018-10-02 16:56:28 -04:00
parent 7271cba7f0
commit 826c77d523
4 changed files with 401 additions and 405 deletions

View file

@ -59,12 +59,12 @@ typedef struct
} dispserv_win32_t;
/*
NOTE: When an application displays a window, its taskbar button is created
by the system. When the button is in place, the taskbar sends a
TaskbarButtonCreated message to the window. Its value is computed by
calling RegisterWindowMessage(L("TaskbarButtonCreated")). That message must
be received by your application before it calls any ITaskbarList3 method.
*/
NOTE: When an application displays a window, its taskbar button is created
by the system. When the button is in place, the taskbar sends a
TaskbarButtonCreated message to the window. Its value is computed by
calling RegisterWindowMessage(L("TaskbarButtonCreated")). That message must
be received by your application before it calls any ITaskbarList3 method.
*/
static unsigned win32_orig_width = 0;
static unsigned win32_orig_height = 0;
@ -105,10 +105,10 @@ static void* win32_display_server_init(void)
static void win32_display_server_destroy(void *data)
{
dispserv_win32_t *dispserv = (dispserv_win32_t*)data;
if (win32_orig_width > 0 && win32_orig_height > 0 )
if (win32_orig_width > 0 && win32_orig_height > 0)
video_display_server_switch_resolution(win32_orig_width, win32_orig_height,
win32_orig_refresh , (float)win32_orig_refresh, crt_center );
win32_orig_refresh, (float)win32_orig_refresh, crt_center );
#ifdef HAS_TASKBAR_EXT
if (g_taskbarList && win32_taskbar_is_created())
@ -124,7 +124,7 @@ static void win32_display_server_destroy(void *data)
static bool win32_display_server_set_window_opacity(void *data, unsigned opacity)
{
HWND hwnd = win32_get_window();
HWND hwnd = win32_get_window();
dispserv_win32_t *serv = (dispserv_win32_t*)data;
if (serv)
@ -132,11 +132,11 @@ static bool win32_display_server_set_window_opacity(void *data, unsigned opacity
#if defined(_WIN32_WINNT) && _WIN32_WINNT >= 0x0500
/* Set window transparency on Windows 2000 and above */
if(opacity < 100)
if (opacity < 100)
{
SetWindowLongPtr(hwnd,
GWL_EXSTYLE,
GetWindowLongPtr(hwnd, GWL_EXSTYLE) | WS_EX_LAYERED);
GWL_EXSTYLE,
GetWindowLongPtr(hwnd, GWL_EXSTYLE) | WS_EX_LAYERED);
return SetLayeredWindowAttributes(hwnd, 0, (255 * opacity) / 100, LWA_ALPHA);
}
@ -151,7 +151,7 @@ static bool win32_display_server_set_window_opacity(void *data, unsigned opacity
static bool win32_display_server_set_window_progress(void *data, int progress, bool finished)
{
HWND hwnd = win32_get_window();
HWND hwnd = win32_get_window();
dispserv_win32_t *serv = (dispserv_win32_t*)data;
if (serv)
@ -164,23 +164,23 @@ static bool win32_display_server_set_window_progress(void *data, int progress, b
if (progress == -1)
{
if (ITaskbarList3_SetProgressState(
g_taskbarList, hwnd, TBPF_INDETERMINATE) != S_OK)
g_taskbarList, hwnd, TBPF_INDETERMINATE) != S_OK)
return false;
}
else if (finished)
{
if (ITaskbarList3_SetProgressState(
g_taskbarList, hwnd, TBPF_NOPROGRESS) != S_OK)
g_taskbarList, hwnd, TBPF_NOPROGRESS) != S_OK)
return false;
}
else if (progress >= 0)
{
if (ITaskbarList3_SetProgressState(
g_taskbarList, hwnd, TBPF_NORMAL) != S_OK)
g_taskbarList, hwnd, TBPF_NORMAL) != S_OK)
return false;
if (ITaskbarList3_SetProgressValue(
g_taskbarList, hwnd, progress, 100) != S_OK)
g_taskbarList, hwnd, progress, 100) != S_OK)
return false;
}
#endif
@ -195,7 +195,7 @@ static bool win32_display_server_set_window_decorations(void *data, bool on)
if (serv)
serv->decorations = on;
/* menu_setting performs a reinit instead to properly
/* menu_setting performs a reinit instead to properly
* apply decoration changes */
return true;
@ -216,74 +216,73 @@ static bool win32_display_server_set_resolution(void *data,
if (!serv)
return false;
EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &curDevmode);
if (win32_orig_width == 0)
win32_orig_width = GetSystemMetrics(SM_CXSCREEN);
win32_orig_refresh = curDevmode.dmDisplayFrequency;
win32_orig_width = GetSystemMetrics(SM_CXSCREEN);
win32_orig_refresh = curDevmode.dmDisplayFrequency;
if (win32_orig_height == 0)
win32_orig_height = GetSystemMetrics(SM_CYSCREEN);
win32_orig_height = GetSystemMetrics(SM_CYSCREEN);
/* Used to stop super resolution bug */
if (width == curDevmode.dmPelsWidth)
width = 0;
if (width == 0)
width = 0;
if (width == 0)
width = curDevmode.dmPelsWidth;
if (height == 0)
if (height == 0)
height = curDevmode.dmPelsHeight;
if (depth == 0)
if (depth == 0)
depth = curDevmode.dmBitsPerPel;
if (freq == 0)
if (freq == 0)
freq = curDevmode.dmDisplayFrequency;
for (iModeNum = 0; ; iModeNum++)
for (iModeNum = 0;; iModeNum++)
{
if (!EnumDisplaySettings(NULL, iModeNum, &devmode))
if (!EnumDisplaySettings(NULL, iModeNum, &devmode))
break;
if (devmode.dmPelsWidth != width)
if (devmode.dmPelsWidth != width)
continue;
if (devmode.dmPelsHeight != height)
if (devmode.dmPelsHeight != height)
continue;
if (devmode.dmBitsPerPel != depth)
if (devmode.dmBitsPerPel != depth)
continue;
if (devmode.dmDisplayFrequency != freq)
if (devmode.dmDisplayFrequency != freq)
continue;
devmode.dmFields |=
DM_PELSWIDTH | DM_PELSHEIGHT | DM_BITSPERPEL | DM_DISPLAYFREQUENCY;
res =
win32_change_display_settings(NULL, &devmode, CDS_TEST);
devmode.dmFields |=
DM_PELSWIDTH | DM_PELSHEIGHT | DM_BITSPERPEL | DM_DISPLAYFREQUENCY;
res =
win32_change_display_settings(NULL, &devmode, CDS_TEST);
switch (res)
switch (res)
{
case DISP_CHANGE_SUCCESSFUL:
res = win32_change_display_settings(NULL, &devmode, flags);
switch (res)
{
case DISP_CHANGE_SUCCESSFUL:
res = win32_change_display_settings(NULL, &devmode, flags);
switch (res)
{
case DISP_CHANGE_SUCCESSFUL:
return true;
case DISP_CHANGE_NOTUPDATED:
return true;
default:
break;
}
break;
case DISP_CHANGE_RESTART:
break;
return true;
case DISP_CHANGE_NOTUPDATED:
return true;
default:
break;
}
break;
case DISP_CHANGE_RESTART:
break;
default:
break;
}
}
return true;
}
const video_display_server_t dispserv_win32 = {
win32_display_server_init,
win32_display_server_destroy,
@ -294,4 +293,3 @@ const video_display_server_t dispserv_win32 = {
NULL, /* get_output_options */
"win32"
};

View file

@ -50,28 +50,29 @@ static void* x11_display_server_init(void)
static void x11_display_server_destroy(void *data)
{
dispserv_x11_t *dispserv = (dispserv_x11_t*)data;
dispserv_x11_t *dispserv = (dispserv_x11_t*)data;
int i = 0;
if (crt_en == true)
{
sprintf(output,"xrandr -s %dx%d", orig_width, orig_height);
system(output);
for (i =0; i < 3; i++)
{
sprintf(output,"xrandr --delmode %s%d %s", "VGA",i ,old_mode);
system(output);
sprintf(output,"xrandr --delmode %s-%d %s", "VGA",i ,old_mode);
system(output);
sprintf(output,"xrandr --delmode %s%d %s", "DVI",i ,old_mode);
system(output);
sprintf(output,"xrandr --delmode %s-%d %s", "DVI",i ,old_mode);
system(output);
}
sprintf(output,"xrandr --rmmode %s", old_mode);
system(output);
if (crt_en)
{
sprintf(output, "xrandr -s %dx%d", orig_width, orig_height);
system(output);
for (i = 0; i < 3; i++)
{
sprintf(output, "xrandr --delmode %s%d %s", "VGA", i, old_mode);
system(output);
sprintf(output, "xrandr --delmode %s-%d %s", "VGA", i, old_mode);
system(output);
sprintf(output, "xrandr --delmode %s%d %s", "DVI", i, old_mode);
system(output);
sprintf(output, "xrandr --delmode %s-%d %s", "DVI", i, old_mode);
system(output);
}
sprintf(output, "xrandr --rmmode %s", old_mode);
system(output);
}
if (dispserv)
@ -90,7 +91,7 @@ static bool x11_display_server_set_window_opacity(void *data, unsigned opacity)
if (opacity == (unsigned)-1)
XDeleteProperty(g_x11_dpy, g_x11_win, net_wm_opacity);
else
else
XChangeProperty(g_x11_dpy, g_x11_win, net_wm_opacity, cardinal, 32, PropModeReplace, (const unsigned char*)&opacity, 1);
return true;
@ -126,62 +127,62 @@ static bool x11_display_server_set_resolution(void *data,
float pixel_clock = 0;
crt_en = true;
/* set core refresh from hz */
video_monitor_set_refresh_rate(hz);
/* following code is the mode line genorator */
hsp = width*1.140;
hfp = width*1.055;
/* set core refresh from hz */
video_monitor_set_refresh_rate(hz);
/* following code is the mode line genorator */
hsp = width * 1.140;
hfp = width * 1.055;
pwidth = width;
if (height < 400 && width > 400 )
pwidth = width/2;
if (height < 400 && width > 400)
pwidth = width / 2;
roundw = roundf((float)pwidth/(float)height * 100)/100;
roundw = roundf((float)pwidth / (float)height * 100) / 100;
if (height > width ) {
roundw = roundf((float)height/(float)width * 100)/100;
if (height > width)
{
roundw = roundf((float)height / (float)width * 100) / 100;
}
if (roundw > 1.35)
roundw = 1.25;
if (roundw < 1.20)
if (roundw < 1.20)
roundw = 1.34;
hbp = width*roundw-8;
hbp = width * roundw - 8;
hmax = hbp;
if (height < 241)
{
{
vmax = 261;
}
if (height < 241 && hz > 56 && hz < 58)
{
{
vmax = 280;
}
if (height < 241 && hz < 55)
{
if (height < 241 && hz < 55)
{
vmax = 313;
}
if (height > 250 && height < 260 && hz > 54)
{
{
vmax = 296;
}
if (height > 250 && height < 260 && hz > 52 && hz < 54)
{
{
vmax = 285;
}
if (height > 250 && height < 260 && hz < 52)
{
{
vmax = 313;
}
if (height > 260 && height < 300)
{
{
vmax = 318;
}
@ -202,33 +203,32 @@ static bool x11_display_server_set_resolution(void *data,
{
vmax = 624;
}
if (height > 300)
if (height > 300)
{
pdefault = pdefault*2;
pdefault = pdefault * 2;
}
vfp = height+((vmax-height)/2)-pdefault;
vfp = height + ((vmax - height) / 2) - pdefault;
if (height < 300)
{
vsp = vfp+3; /* needs to me 3 for progressive */
}
vsp = vfp + 3; /* needs to me 3 for progressive */
}
if (height > 300)
{
vsp = vfp+6; /* needs to me 6 for interlaced */
vsp = vfp + 6; /* needs to me 6 for interlaced */
}
vbp = vmax;
if (height < 300)
{
pixel_clock = (hmax*vmax*hz)/1000000;
pixel_clock = (hmax * vmax * hz) / 1000000;
}
if (height > 300)
{
pixel_clock = ((hmax*vmax*hz)/1000000)/2;
pixel_clock = ((hmax * vmax * hz) / 1000000) / 2;
}
/* above code is the modeline genorator */
@ -237,60 +237,63 @@ static bool x11_display_server_set_resolution(void *data,
{
snprintf(xrandr, sizeof(xrandr), "xrandr --newmode \"%dx%d_%0.2f\" %lf %d %d %d %d %d %d %d %d -hsync -vsync", width, height, hz, pixel_clock, width, hfp, hsp, hbp, height, vfp, vsp, vbp);
system(xrandr);
}
/* create interlaced newmode from modline variables */
if (height > 300)
{
{
snprintf(xrandr, sizeof(xrandr), "xrandr --newmode \"%dx%d_%0.2f\" %lf %d %d %d %d %d %d %d %d interlace -hsync -vsync", width, height, hz, pixel_clock, width, hfp, hsp, hbp, height, vfp, vsp, vbp);
system(xrandr);
}
/* variable for new mode */
snprintf(new_mode, sizeof(new_mode), "%dx%d_%0.2f", width, height, hz);
/* need to run loops for DVI0 - DVI-2 and VGA0 - VGA-2 outputs to add and delete modes */
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", "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);
/* variable for new mode */
snprintf(new_mode, sizeof(new_mode), "%dx%d_%0.2f", width, height, hz);
/* need to run loops for DVI0 - DVI-2 and VGA0 - VGA-2 outputs to add and delete modes */
for (i = 0; i < 3; i++)
{
snprintf(output, sizeof(output), "xrandr --addmode %s%d %s", "DVI", i, new_mode);
system(output);
/* remove old mode */
snprintf(output, sizeof(output), "xrandr --rmmode %s", old_mode);
system(output);
system("xdotool windowactivate $(xdotool search --class RetroArch)"); /* needs xdotool installed. needed to recaputure window. */
/* variable for old mode */
snprintf(old_mode, sizeof(old_mode), "%s", new_mode);
system("xdotool windowactivate $(xdotool search --class RetroArch)"); /* needs xdotool installed. needed to recaputure window. */
/* Second run needed as some times it runs to fast to capture first time */
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);
}
return true;
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);
system("xdotool windowactivate $(xdotool search --class RetroArch)"); /* needs xdotool installed. needed to recapture window. */
/* variable for old mode */
snprintf(old_mode, sizeof(old_mode), "%s", new_mode);
system("xdotool windowactivate $(xdotool search --class RetroArch)"); /* needs xdotool installed. needed to recapture window. */
/* Second run needed as some times it runs to fast to capture first time */
return true;
}
const char *x11_display_server_get_output_options(void)
@ -309,4 +312,3 @@ const video_display_server_t dispserv_x11 = {
x11_display_server_get_output_options,
"x11"
};

View file

@ -1,210 +1,206 @@
/* CRT SwitchRes Core
* Copyright (C) 2018 Alphanu / Ben Templeman.
*
* RetroArch - A frontend for libretro.
* Copyright (C) 2010-2014 - Hans-Kristian Arntzen
* Copyright (C) 2011-2017 - Daniel De Matteis
*
* RetroArch is free software: you can redistribute it and/or modify it under the terms
* of the GNU General Public License as published by the Free Software Found-
* ation, either version 3 of the License, or (at your option) any later version.
*
* RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
* PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with RetroArch.
* If not, see <http://www.gnu.org/licenses/>.
*/
#include <stddef.h>
#include <string.h>
#include <stdlib.h>
#include "video_driver.h"
#include "video_crt_switch.h"
#include "video_display_server.h"
static unsigned ra_core_width = 0;
static unsigned ra_core_height = 0;
static unsigned ra_tmp_width = 0;
static unsigned ra_tmp_height = 0;
static unsigned ra_set_core_hz = 0;
static unsigned orig_width = 0;
static unsigned orig_height = 0;
static int crt_center_adjust = 0;
static bool first_run = true;
static float ra_tmp_core_hz = 0.0f;
static float fly_aspect = 0.0f;
static float ra_core_hz = 0.0f;
static void crt_check_first_run(void)
{
if (!first_run)
return;
first_run = false;
}
static void switch_crt_hz(void)
{
if (ra_core_hz == ra_tmp_core_hz)
return;
/* set hz float to an int for windows switching */
if (ra_core_hz < 100)
{
if (ra_core_hz < 53)
ra_set_core_hz = 50;
if (ra_core_hz >= 53 && ra_core_hz < 57)
ra_set_core_hz = 55;
if (ra_core_hz >= 57)
ra_set_core_hz = 60;
}
if (ra_core_hz > 100)
{
if (ra_core_hz < 106)
ra_set_core_hz = 120;
if (ra_core_hz >= 106 && ra_core_hz < 114)
ra_set_core_hz = 110;
if (ra_core_hz >= 114)
ra_set_core_hz = 120;
}
video_monitor_set_refresh_rate(ra_set_core_hz);
ra_tmp_core_hz = ra_core_hz;
}
void crt_aspect_ratio_switch(unsigned width, unsigned height)
{
/* send aspect float to videeo_driver */
fly_aspect = (float)width / height;
video_driver_set_aspect_ratio_value((float)fly_aspect);
}
static void switch_res_crt(unsigned width, unsigned height)
{
if (height > 100)
{
video_display_server_switch_resolution(width, height,
ra_set_core_hz, ra_core_hz, crt_center_adjust);
video_driver_apply_state_changes();
}
}
/* Create correct aspect to fit video if resolution does not exist */
static void crt_screen_setup_aspect(unsigned width, unsigned height)
{
switch_crt_hz();
/* get original resolution of core */
if (height == 4)
{
/* detect menu only */
if (width < 1920)
width = 320;
height = 240;
crt_aspect_ratio_switch(width, height);
}
if (height < 200 && height != 144)
{
crt_aspect_ratio_switch(width, height);
height = 200;
}
if (height > 200)
crt_aspect_ratio_switch(width, height);
if (height == 144 && ra_set_core_hz == 50)
{
height = 288;
crt_aspect_ratio_switch(width, height);
}
if (height > 200 && height < 224)
{
crt_aspect_ratio_switch(width, height);
height = 224;
}
if (height > 224 && height < 240)
{
crt_aspect_ratio_switch(width, height);
height = 240;
}
if (height > 240 && height < 255)
{
crt_aspect_ratio_switch(width, height);
height = 254;
}
if (height == 528 && ra_set_core_hz == 60)
{
crt_aspect_ratio_switch(width, height);
height = 480;
}
if (height >= 240 && height < 255 && ra_set_core_hz == 55)
{
crt_aspect_ratio_switch(width, height);
height = 254;
}
switch_res_crt(width, height);
}
void crt_switch_res_core(unsigned width, unsigned height, float hz, unsigned crt_mode, int crt_switch_center_adjust)
{
/* ra_core_hz float passed from within
* void video_driver_monitor_adjust_system_rates(void) */
ra_core_width = width;
ra_core_height = height;
ra_core_hz = hz;
crt_center_adjust = crt_switch_center_adjust;
if (crt_mode == 2)
{
if (hz > 53)
ra_core_hz = hz*2;
if (hz <= 53)
ra_core_hz = 120.0f;
}
crt_check_first_run();
/* Detect resolution change and switch */
if (
(ra_tmp_height != ra_core_height) ||
(ra_core_width != ra_tmp_width)
)
crt_screen_setup_aspect(width, height);
ra_tmp_height = ra_core_height;
ra_tmp_width = ra_core_width;
/* Check if aspect is correct, if notchange */
if (video_driver_get_aspect_ratio() != fly_aspect)
{
video_driver_set_aspect_ratio_value((float)fly_aspect);
video_driver_apply_state_changes();
}
}
void crt_video_restore(void)
{
if (first_run)
return;
first_run = true;
}
/* CRT SwitchRes Core
* Copyright (C) 2018 Alphanu / Ben Templeman.
*
* RetroArch - A frontend for libretro.
* Copyright (C) 2010-2014 - Hans-Kristian Arntzen
* Copyright (C) 2011-2017 - Daniel De Matteis
*
* RetroArch is free software: you can redistribute it and/or modify it under the terms
* of the GNU General Public License as published by the Free Software Found-
* ation, either version 3 of the License, or (at your option) any later version.
*
* RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
* PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with RetroArch.
* If not, see <http://www.gnu.org/licenses/>.
*/
#include <stddef.h>
#include <string.h>
#include <stdlib.h>
#include "video_driver.h"
#include "video_crt_switch.h"
#include "video_display_server.h"
static unsigned ra_core_width = 0;
static unsigned ra_core_height = 0;
static unsigned ra_tmp_width = 0;
static unsigned ra_tmp_height = 0;
static unsigned ra_set_core_hz = 0;
static unsigned orig_width = 0;
static unsigned orig_height = 0;
static int crt_center_adjust = 0;
static bool first_run = true;
static float ra_tmp_core_hz = 0.0f;
static float fly_aspect = 0.0f;
static float ra_core_hz = 0.0f;
static void crt_check_first_run(void)
{
if (!first_run)
return;
first_run = false;
}
static void switch_crt_hz(void)
{
if (ra_core_hz == ra_tmp_core_hz)
return;
/* set hz float to an int for windows switching */
if (ra_core_hz < 100)
{
if (ra_core_hz < 53)
ra_set_core_hz = 50;
if (ra_core_hz >= 53 && ra_core_hz < 57)
ra_set_core_hz = 55;
if (ra_core_hz >= 57)
ra_set_core_hz = 60;
}
if (ra_core_hz > 100)
{
if (ra_core_hz < 106)
ra_set_core_hz = 120;
if (ra_core_hz >= 106 && ra_core_hz < 114)
ra_set_core_hz = 110;
if (ra_core_hz >= 114)
ra_set_core_hz = 120;
}
video_monitor_set_refresh_rate(ra_set_core_hz);
ra_tmp_core_hz = ra_core_hz;
}
void crt_aspect_ratio_switch(unsigned width, unsigned height)
{
/* send aspect float to videeo_driver */
fly_aspect = (float)width / height;
video_driver_set_aspect_ratio_value((float)fly_aspect);
}
static void switch_res_crt(unsigned width, unsigned height)
{
if (height > 100)
{
video_display_server_switch_resolution(width, height,
ra_set_core_hz, ra_core_hz, crt_center_adjust);
video_driver_apply_state_changes();
}
}
/* Create correct aspect to fit video if resolution does not exist */
static void crt_screen_setup_aspect(unsigned width, unsigned height)
{
switch_crt_hz();
/* get original resolution of core */
if (height == 4)
{
/* detect menu only */
if (width < 1920)
width = 320;
height = 240;
crt_aspect_ratio_switch(width, height);
}
if (height < 200 && height != 144)
{
crt_aspect_ratio_switch(width, height);
height = 200;
}
if (height > 200)
crt_aspect_ratio_switch(width, height);
if (height == 144 && ra_set_core_hz == 50)
{
height = 288;
crt_aspect_ratio_switch(width, height);
}
if (height > 200 && height < 224)
{
crt_aspect_ratio_switch(width, height);
height = 224;
}
if (height > 224 && height < 240)
{
crt_aspect_ratio_switch(width, height);
height = 240;
}
if (height > 240 && height < 255)
{
crt_aspect_ratio_switch(width, height);
height = 254;
}
if (height == 528 && ra_set_core_hz == 60)
{
crt_aspect_ratio_switch(width, height);
height = 480;
}
if (height >= 240 && height < 255 && ra_set_core_hz == 55)
{
crt_aspect_ratio_switch(width, height);
height = 254;
}
switch_res_crt(width, height);
}
void crt_switch_res_core(unsigned width, unsigned height, float hz, unsigned crt_mode, int crt_switch_center_adjust)
{
/* ra_core_hz float passed from within
* void video_driver_monitor_adjust_system_rates(void) */
ra_core_width = width;
ra_core_height = height;
ra_core_hz = hz;
crt_center_adjust = crt_switch_center_adjust;
if (crt_mode == 2)
{
if (hz > 53)
ra_core_hz = hz * 2;
if (hz <= 53)
ra_core_hz = 120.0f;
}
crt_check_first_run();
/* Detect resolution change and switch */
if (
(ra_tmp_height != ra_core_height) ||
(ra_core_width != ra_tmp_width)
)
crt_screen_setup_aspect(width, height);
ra_tmp_height = ra_core_height;
ra_tmp_width = ra_core_width;
/* Check if aspect is correct, if notchange */
if (video_driver_get_aspect_ratio() != fly_aspect)
{
video_driver_set_aspect_ratio_value((float)fly_aspect);
video_driver_apply_state_changes();
}
}
void crt_video_restore(void)
{
if (first_run)
return;
first_run = true;
}

View file

@ -1,38 +1,38 @@
/* CRT SwitchRes Core
* Copyright (C) 2018 Alphanu / Ben Templeman.
*
* RetroArch - A frontend for libretro.
* Copyright (C) 2010-2014 - Hans-Kristian Arntzen
* Copyright (C) 2011-2017 - Daniel De Matteis
*
* RetroArch is free software: you can redistribute it and/or modify it under the terms
* of the GNU General Public License as published by the Free Software Found-
* ation, either version 3 of the License, or (at your option) any later version.
*
* RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
* PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with RetroArch.
* If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __VIDEO_CRT_SWITCH_H__
#define __VIDEO_CRT_SWITCH_H__
#include <stdint.h>
#include <boolean.h>
#include <retro_common_api.h>
RETRO_BEGIN_DECLS
void crt_switch_res_core(unsigned width, unsigned height, float hz, unsigned crt_mode, int crt_switch_center_adjust);
void crt_aspect_ratio_switch(unsigned width, unsigned height);
void crt_video_restore(void);
RETRO_END_DECLS
#endif
/* CRT SwitchRes Core
* Copyright (C) 2018 Alphanu / Ben Templeman.
*
* RetroArch - A frontend for libretro.
* Copyright (C) 2010-2014 - Hans-Kristian Arntzen
* Copyright (C) 2011-2017 - Daniel De Matteis
*
* RetroArch is free software: you can redistribute it and/or modify it under the terms
* of the GNU General Public License as published by the Free Software Found-
* ation, either version 3 of the License, or (at your option) any later version.
*
* RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
* PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with RetroArch.
* If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __VIDEO_CRT_SWITCH_H__
#define __VIDEO_CRT_SWITCH_H__
#include <stdint.h>
#include <boolean.h>
#include <retro_common_api.h>
RETRO_BEGIN_DECLS
void crt_switch_res_core(unsigned width, unsigned height, float hz, unsigned crt_mode, int crt_switch_center_adjust);
void crt_aspect_ratio_switch(unsigned width, unsigned height);
void crt_video_restore(void);
RETRO_END_DECLS
#endif