Merge SDL UI changes from windows

This commit is contained in:
Seg 2021-06-19 14:53:41 -07:00
parent d715aa8328
commit 8959de5899
2 changed files with 97 additions and 36 deletions

View File

@ -790,15 +790,13 @@ static void hide_show_graphics_widgets(void)
}
// "Window" video type selected
static void mn_window(...)
{
static void mn_window(...){
display_type = DISPLAY_WINDOW;
hide_show_graphics_widgets();
}
// "Fullscreen" video type selected
static void mn_fullscreen(...)
{
static void mn_fullscreen(...){
display_type = DISPLAY_SCREEN;
hide_show_graphics_widgets();
}
@ -818,15 +816,37 @@ static void set_graphics_sensitive(void){
}
// "Disable Sound Output" button toggled
static void tb_nosound(GtkWidget *widget)
{
static void tb_nosound(GtkWidget *widget){
PrefsReplaceBool("nosound", GTK_TOGGLE_BUTTON(widget)->active);
set_graphics_sensitive();
}
// SDL Graphics
#ifdef USE_SDL_VIDEO
// SDL Renderer Render driver
enum {
RENDER_SOFTWARE = 0,
RENDER_OPENGL = 1
};
GtkWidget *w_render_driver;
GtkWidget *l_render_driver;
static int render_driver;
static int sdl_vsync;
// Render Driver selected
static void mn_sdl_software(...) {render_driver = RENDER_SOFTWARE;}
static void mn_sdl_opengl(...) {render_driver = RENDER_OPENGL;}
// SDL Renderer Vertical Sync
static void tb_sdl_vsync(GtkWidget *widget){
PrefsReplaceBool("sdl_vsync", GTK_TOGGLE_BUTTON(widget)->active);
}
#endif
// Read graphics preferences
static void parse_graphics_prefs(void)
{
static void parse_graphics_prefs(void){
display_type = DISPLAY_WINDOW;
dis_width = 512;
dis_height = 384;
@ -838,11 +858,38 @@ static void parse_graphics_prefs(void)
if (sscanf(str, "dga/%d/%d", &dis_width, &dis_height) == 2)
display_type = DISPLAY_SCREEN;
}
#ifdef USE_SDL_VIDEO
render_driver = RENDER_SOFTWARE;
const char *drv = PrefsFindString("sdlrender");
if (drv && drv[0]) {
if (strcmp(drv, "software") == 0)
render_driver = RENDER_SOFTWARE;
else if (strcmp(drv, "opengl") == 0)
render_driver = RENDER_OPENGL;
}
#endif
}
static void read_SDL_graphics_settings(void){
const char *rpref;
switch (render_driver) {
case RENDER_SOFTWARE:
rpref = "software";
break;
case RENDER_OPENGL:
rpref = "opengl";
break;
default:
PrefsRemoveItem("sdlrender");
return;
}
PrefsReplaceString("sdlrender", rpref);
}
// Read settings from widgets and set preferences
static void read_graphics_settings(void)
{
static void read_graphics_settings(void){
const char *str;
str = gtk_entry_get_text(GTK_ENTRY(w_display_x));
@ -864,11 +911,13 @@ static void read_graphics_settings(void)
return;
}
PrefsReplaceString("screen", pref);
#ifdef USE_SDL_VIDEO
read_SDL_graphics_settings();
#endif
}
// Create "Graphics/Sound" pane
static void create_graphics_pane(GtkWidget *top)
{
static void create_graphics_pane(GtkWidget *top){
GtkWidget *box, *table, *label, *opt, *menu, *combo;
char str[32];
@ -969,6 +1018,35 @@ static void create_graphics_pane(GtkWidget *top)
gtk_table_attach(GTK_TABLE(table), combo, 1, 2, 3, 4, (GtkAttachOptions)GTK_FILL, (GtkAttachOptions)0, 4, 4);
w_display_y = GTK_COMBO(combo)->entry;
#ifdef USE_SDL_VIDEO
make_separator(box);
table = make_table(box, 2, 5);
l_render_driver = gtk_label_new(GetString(STR_GRAPHICS_SDL_RENDER_DRIVER_CTRL));
gtk_widget_show(l_render_driver);
gtk_table_attach(GTK_TABLE(table), l_render_driver, 0, 1, 0, 1, (GtkAttachOptions)0, (GtkAttachOptions)0, 4, 4);
w_render_driver = gtk_option_menu_new();
gtk_widget_show(w_render_driver);
menu = gtk_menu_new();
add_menu_item(menu, STR_SOFTWARE_LAB, GTK_SIGNAL_FUNC(mn_sdl_software));
add_menu_item(menu, STR_OPENGL_LAB, GTK_SIGNAL_FUNC(mn_sdl_opengl));
switch (render_driver) {
case RENDER_SOFTWARE:
gtk_menu_set_active(GTK_MENU(menu), 0);
break;
case RENDER_OPENGL:
gtk_menu_set_active(GTK_MENU(menu), 1);
break;
}
gtk_option_menu_set_menu(GTK_OPTION_MENU(w_render_driver), menu);
gtk_table_attach(GTK_TABLE(table), w_render_driver, 1, 2, 0, 1, (GtkAttachOptions)GTK_FILL, (GtkAttachOptions)0, 4, 4);
opt = make_checkbox(box, STR_GRAPHICS_SDL_VSYNC_CTRL, "sdl_vsync", GTK_SIGNAL_FUNC(tb_sdl_vsync));
#endif
make_separator(box);
make_checkbox(box, STR_NOSOUND_CTRL, "nosound", GTK_SIGNAL_FUNC(tb_nosound));

View File

@ -28,7 +28,6 @@ using std::string;
#include "prefs.h"
// Platform-specific preferences items
prefs_desc platform_prefs_items[] = {
{"fbdevicefile", TYPE_STRING, false, "path of frame buffer device specification file"},
@ -37,17 +36,16 @@ prefs_desc platform_prefs_items[] = {
{"idlewait", TYPE_BOOLEAN, false, "sleep when idle"},
#ifdef USE_SDL_VIDEO
{"sdlrender", TYPE_STRING, false, "SDL_Renderer driver (\"auto\", \"software\" (may be faster), etc.)"},
{"sdl_vsync", TYPE_BOOLEAN, false, "Make SDL_Renderer vertical sync frames to host (eg. with software renderer)"},
#endif
{NULL, TYPE_END, false, NULL} // End of list
};
// Prefs file name and path
const char PREFS_FILE_NAME[] = ".basilisk_ii_prefs";
string UserPrefsPath;
static string prefs_path;
/*
* Load preferences from settings file
*/
@ -90,13 +88,11 @@ void LoadPrefs(const char *vmdir)
}
}
/*
* Save preferences to settings file
*/
void SavePrefs(void)
{
void SavePrefs(void){
FILE *f;
if ((f = fopen(prefs_path.c_str(), "w")) != NULL) {
SavePrefsToStream(f);
@ -104,32 +100,19 @@ void SavePrefs(void)
}
}
/*
* Add defaults of platform-specific prefs items
* You may also override the defaults set in PrefsInit()
*/
void AddPlatformPrefsDefaults(void)
{
void AddPlatformPrefsDefaults(void){
PrefsAddBool("keycodes", false);
PrefsReplaceString("extfs", "/");
PrefsReplaceInt32("mousewheelmode", 1);
PrefsReplaceInt32("mousewheellines", 3);
#ifdef __linux__
if (access("/dev/sound/dsp", F_OK) == 0) {
PrefsReplaceString("dsp", "/dev/sound/dsp");
} else {
PrefsReplaceString("dsp", "/dev/dsp");
}
if (access("/dev/sound/mixer", F_OK) == 0) {
PrefsReplaceString("mixer", "/dev/sound/mixer");
} else {
PrefsReplaceString("mixer", "/dev/mixer");
}
#else
PrefsReplaceString("dsp", "/dev/dsp");
PrefsReplaceString("mixer", "/dev/mixer");
#endif
PrefsAddBool("idlewait", true);
#ifdef USE_SDL_VIDEO
PrefsReplaceString("sdlrender", "software");
PrefsReplaceBool("sdl_vsync", true);
#endif
}