mirror of https://github.com/snes9xgit/snes9x.git
GTK+: Add things to shader parameters dialog:
Spin buttons next to sliders for precise control. Save as box to save a new preset.
This commit is contained in:
parent
c9f66cf910
commit
0cb166862f
|
@ -113,6 +113,8 @@ int Snes9xConfig::load_defaults ()
|
|||
window_height = -1;
|
||||
preferences_width = -1;
|
||||
preferences_height = -1;
|
||||
shader_parameters_width = -1;
|
||||
shader_parameters_height = -1;
|
||||
sram_directory.clear ();
|
||||
export_directory.clear ();
|
||||
savestate_directory.clear ();
|
||||
|
@ -305,6 +307,8 @@ int Snes9xConfig::save_config_file ()
|
|||
cf.SetInt (z"MainHeight", window_height);
|
||||
cf.SetInt (z"PreferencesWidth", preferences_width);
|
||||
cf.SetInt (z"PreferencesHeight", preferences_height);
|
||||
cf.SetInt (z"ShaderParametersWidth", shader_parameters_width);
|
||||
cf.SetInt (z"ShaderParametersHeight", shader_parameters_height);
|
||||
outbool (cf, z"UIVisible", ui_visible);
|
||||
outbool (cf, z"StatusBarVisible", statusbar_visible);
|
||||
if (default_esc_behavior != ESC_TOGGLE_MENUBAR)
|
||||
|
@ -535,6 +539,8 @@ int Snes9xConfig::load_config_file ()
|
|||
inint (z"MainHeight", window_height);
|
||||
inint (z"PreferencesWidth", preferences_width);
|
||||
inint (z"PreferencesHeight", preferences_height);
|
||||
inint (z"ShaderParametersWidth", shader_parameters_width);
|
||||
inint (z"ShaderParametersHeight", shader_parameters_height);
|
||||
inbool (z"UIVisible", ui_visible);
|
||||
inbool (z"StatusBarVisible", statusbar_visible);
|
||||
inbool (z"Fullscreen", fullscreen);
|
||||
|
|
|
@ -126,6 +126,7 @@ class Snes9xConfig
|
|||
bool rom_loaded;
|
||||
int window_width, window_height;
|
||||
int preferences_width, preferences_height;
|
||||
int shader_parameters_width, shader_parameters_height;
|
||||
bool pause_emulation_on_switch;
|
||||
int num_threads;
|
||||
bool screensaver_needs_reset;
|
||||
|
|
|
@ -58,6 +58,11 @@ static void dialog_response (GtkDialog *pdialog, gint response_id, gpointer user
|
|||
{
|
||||
std::vector<GLSLParam> *params = (std::vector<GLSLParam> *)user_data;
|
||||
|
||||
int width, height;
|
||||
gtk_window_get_size(GTK_WINDOW(pdialog), &width, &height);
|
||||
gui_config->shader_parameters_width = width;
|
||||
gui_config->shader_parameters_height = height;
|
||||
|
||||
switch (response_id)
|
||||
{
|
||||
case GTK_RESPONSE_OK:
|
||||
|
@ -89,6 +94,49 @@ static void dialog_response (GtkDialog *pdialog, gint response_id, gpointer user
|
|||
S9xDeinitUpdate(top_level->last_width, top_level->last_height);
|
||||
break;
|
||||
|
||||
case 15: // Save As
|
||||
{
|
||||
auto dialog = gtk_file_chooser_dialog_new(_("Export Shader Preset to:"),
|
||||
top_level->get_window(),
|
||||
GTK_FILE_CHOOSER_ACTION_SAVE,
|
||||
"gtk-cancel", GTK_RESPONSE_CANCEL,
|
||||
"gtk-save", GTK_RESPONSE_ACCEPT,
|
||||
NULL);
|
||||
|
||||
gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog),
|
||||
gui_config->last_shader_directory.c_str());
|
||||
const char *name;
|
||||
const char *extension;
|
||||
if (gui_config->shader_filename.find(".slang") != std::string::npos)
|
||||
{
|
||||
name = "new.slangp";
|
||||
extension = "*.slangp";
|
||||
}
|
||||
else
|
||||
{
|
||||
name = "new.glslp";
|
||||
extension = "*.glslp";
|
||||
}
|
||||
gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(dialog), name);
|
||||
gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(dialog), true);
|
||||
|
||||
auto filter = gtk_file_filter_new();
|
||||
gtk_file_filter_set_name(filter, _("Shader Preset"));
|
||||
gtk_file_filter_add_pattern(filter, extension);
|
||||
gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), filter);
|
||||
|
||||
auto result = gtk_dialog_run(GTK_DIALOG(dialog));
|
||||
|
||||
if (result == GTK_RESPONSE_ACCEPT)
|
||||
{
|
||||
auto filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
|
||||
S9xDisplayGetDriver()->save(filename);
|
||||
g_free(filename);
|
||||
}
|
||||
|
||||
gtk_widget_destroy(dialog);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -123,6 +171,8 @@ bool gtk_shader_parameters_dialog (GtkWindow *parent)
|
|||
GTK_DIALOG_DESTROY_WITH_PARENT,
|
||||
"gtk-cancel",
|
||||
GTK_RESPONSE_CANCEL,
|
||||
"gtk-save-as",
|
||||
15,
|
||||
"gtk-save",
|
||||
GTK_RESPONSE_OK,
|
||||
NULL);
|
||||
|
@ -131,11 +181,19 @@ bool gtk_shader_parameters_dialog (GtkWindow *parent)
|
|||
|
||||
GtkWidget *scrolled_window;
|
||||
gtk_widget_set_size_request(dialog, 640, 480);
|
||||
if (gui_config->shader_parameters_width > 0 && gui_config->shader_parameters_height > 0)
|
||||
{
|
||||
gtk_window_resize(GTK_WINDOW(dialog),
|
||||
gui_config->shader_parameters_width,
|
||||
gui_config->shader_parameters_height);
|
||||
}
|
||||
|
||||
scrolled_window = gtk_scrolled_window_new(NULL, NULL);
|
||||
gtk_container_add(GTK_CONTAINER(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),
|
||||
scrolled_window);
|
||||
|
||||
GtkSizeGroup *sizegroup = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
|
||||
|
||||
#if GTK_MAJOR_VERSION >= 3
|
||||
|
||||
gtk_widget_set_hexpand(scrolled_window, true);
|
||||
|
@ -147,7 +205,9 @@ bool gtk_shader_parameters_dialog (GtkWindow *parent)
|
|||
|
||||
GtkWidget *vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
|
||||
GtkWidget *grid = gtk_grid_new();
|
||||
gtk_widget_set_margin_end(grid, 5);
|
||||
gtk_grid_set_row_homogeneous(GTK_GRID(grid), true);
|
||||
gtk_grid_set_row_spacing(GTK_GRID(grid), 2);
|
||||
gtk_grid_set_column_spacing(GTK_GRID(grid), 12);
|
||||
gtk_container_add(GTK_CONTAINER(vbox), grid);
|
||||
gtk_container_add(GTK_CONTAINER(scrolled_window), vbox);
|
||||
|
@ -170,12 +230,19 @@ bool gtk_shader_parameters_dialog (GtkWindow *parent)
|
|||
}
|
||||
else
|
||||
{
|
||||
GtkWidget *scale = gtk_scale_new_with_range (GTK_ORIENTATION_HORIZONTAL, p->min, p->max, p->step);
|
||||
GtkWidget *spin = gtk_spin_button_new_with_range(p->min, p->max, p->step);
|
||||
gtk_grid_attach(GTK_GRID(grid), spin, 1, i, 1, 1);
|
||||
gtk_size_group_add_widget(sizegroup, spin);
|
||||
int digits = gtk_spin_button_get_digits(GTK_SPIN_BUTTON(spin));
|
||||
if (digits == 2)
|
||||
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 3);
|
||||
|
||||
GtkAdjustment *adjustment = gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(spin));
|
||||
|
||||
GtkWidget *scale = gtk_scale_new(GTK_ORIENTATION_HORIZONTAL, adjustment);
|
||||
gtk_widget_set_hexpand(scale, true);
|
||||
gtk_grid_attach (GTK_GRID (grid), scale, 1, i, 1, 1);
|
||||
gtk_scale_set_value_pos (GTK_SCALE (scale), GTK_POS_LEFT);
|
||||
gtk_scale_set_draw_value (GTK_SCALE (scale), true);
|
||||
gtk_scale_set_digits (GTK_SCALE (scale), 3);
|
||||
gtk_grid_attach(GTK_GRID(grid), scale, 2, i, 1, 1);
|
||||
gtk_scale_set_draw_value(GTK_SCALE(scale), false);
|
||||
gtk_range_set_value(GTK_RANGE(scale), p->val);
|
||||
g_signal_connect_data(G_OBJECT(scale),
|
||||
"value-changed",
|
||||
|
@ -187,7 +254,7 @@ bool gtk_shader_parameters_dialog (GtkWindow *parent)
|
|||
}
|
||||
#else
|
||||
GtkWidget *vbox = gtk_vbox_new(false, 5);
|
||||
GtkWidget *table = gtk_table_new (params->size (), 2, false);
|
||||
GtkWidget *table = gtk_table_new(params->size(), 3, false);
|
||||
gtk_table_set_row_spacings(GTK_TABLE(table), 5);
|
||||
gtk_table_set_col_spacings(GTK_TABLE(table), 12);
|
||||
gtk_container_add(GTK_CONTAINER(vbox), table);
|
||||
|
@ -213,11 +280,18 @@ bool gtk_shader_parameters_dialog (GtkWindow *parent)
|
|||
}
|
||||
else
|
||||
{
|
||||
GtkWidget *scale = gtk_hscale_new_with_range (p->min, p->max, p->step);
|
||||
gtk_table_attach (GTK_TABLE (table), scale, 1, 2, i, i + 1, (GtkAttachOptions) (GTK_EXPAND | GTK_FILL), GTK_FILL, 0, 0);
|
||||
gtk_scale_set_value_pos (GTK_SCALE (scale), GTK_POS_LEFT);
|
||||
gtk_scale_set_draw_value (GTK_SCALE (scale), true);
|
||||
gtk_scale_set_digits (GTK_SCALE (scale), 3);
|
||||
GtkWidget *spin = gtk_spin_button_new_with_range(p->min, p->max, p->step);
|
||||
gtk_table_attach(GTK_TABLE(table), spin, 1, 2, i, i + 1, GTK_FILL, GTK_FILL, 0, 0);
|
||||
gtk_size_group_add_widget(sizegroup, spin);
|
||||
int digits = gtk_spin_button_get_digits(GTK_SPIN_BUTTON(spin));
|
||||
if (digits == 2)
|
||||
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spin), 3);
|
||||
|
||||
GtkAdjustment *adjustment = gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(spin));
|
||||
|
||||
GtkWidget *scale = gtk_hscale_new(adjustment);
|
||||
gtk_table_attach(GTK_TABLE(table), scale, 2, 3, i, i + 1, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), GTK_FILL, 0, 0);
|
||||
gtk_scale_set_draw_value(GTK_SCALE(scale), false);
|
||||
gtk_range_set_value(GTK_RANGE(scale), p->val);
|
||||
g_signal_connect_data(G_OBJECT(scale),
|
||||
"value-changed",
|
||||
|
|
Loading…
Reference in New Issue