GTK: added volume mixer controls from individual mixers (square1/2, triangle, noise, etc)

This commit is contained in:
punkrockguy318 2010-02-24 04:38:29 +00:00
parent 1dd8e8b47b
commit f4bb1df7fd
1 changed files with 73 additions and 6 deletions

View File

@ -274,10 +274,37 @@ void openVideoConfig()
return; return;
} }
const char* mixerStrings[6] = {"Volume", "Triangle", "Square1", "Square2", "Noise", "PCM"};
int mixerChanged(GtkWidget* w, gpointer p)
{
int v = gtk_range_get_value(GTK_RANGE(w));
GtkWidget* parent = gtk_widget_get_parent(w);
char* lbl = (char*)gtk_frame_get_label(GTK_FRAME(parent));
if(strcmp(lbl, "Volume") == 0)
g_config->setOption("SDL.SoundVolume", v);
if(strcmp(lbl, "Triangle") == 0)
g_config->setOption("SDL.TriangleVolume", v);
if(strcmp(lbl, "Square1") == 0)
g_config->setOption("SDL.Square1Volume", v);
if(strcmp(lbl, "Square2") == 0)
g_config->setOption("SDL.Square2Volume", v);
if(strcmp(lbl, "Noise") == 0)
g_config->setOption("SDL.NoiseVolume", v);
if(strcmp(lbl, "PCM") == 0)
g_config->setOption("SDL.PCMVolume", v);
g_config->save();
KillSound();
InitSound();
return 0;
}
void openSoundConfig() void openSoundConfig()
{ {
GtkWidget* win; GtkWidget* win;
GtkWidget* main_hbox;
GtkWidget* vbox; GtkWidget* vbox;
GtkWidget* soundChk; GtkWidget* soundChk;
GtkWidget* hbox1; GtkWidget* hbox1;
@ -289,11 +316,17 @@ void openSoundConfig()
GtkWidget* hbox3; GtkWidget* hbox3;
GtkWidget* bufferLbl; GtkWidget* bufferLbl;
GtkWidget* bufferHscale; GtkWidget* bufferHscale;
GtkWidget* mixerFrame;
GtkWidget* mixerHbox;
GtkWidget* mixers[6];
GtkWidget* mixerFrames[6];
win = gtk_window_new(GTK_WINDOW_TOPLEVEL); win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(win), "Sound Preferences"); gtk_window_set_title(GTK_WINDOW(win), "Sound Preferences");
main_hbox = gtk_hbox_new(FALSE, 15);
vbox = gtk_vbox_new(False, 5); vbox = gtk_vbox_new(False, 5);
gtk_widget_set_size_request(win, 300, 200); //gtk_widget_set_size_request(win, 300, 200);
// sound enable check // sound enable check
@ -363,9 +396,7 @@ void openSoundConfig()
hbox3 = gtk_hbox_new(FALSE, 2); hbox3 = gtk_hbox_new(FALSE, 2);
bufferHscale = gtk_hscale_new_with_range(15, 200, 2); bufferHscale = gtk_hscale_new_with_range(15, 200, 2);
bufferLbl = gtk_label_new("Buffer size (ms): "); bufferLbl = gtk_label_new("Buffer size (in ms)");
gtk_box_pack_start(GTK_BOX(hbox3), bufferLbl, FALSE, FALSE, 5);
gtk_box_pack_start(GTK_BOX(hbox3), bufferHscale, TRUE, TRUE, 5);
// sync widget with cfg // sync widget with cfg
g_config->getOption("SDL.SoundBufSize", &cfgBuf); g_config->getOption("SDL.SoundBufSize", &cfgBuf);
@ -373,12 +404,48 @@ void openSoundConfig()
g_signal_connect(bufferHscale, "button-release-event", G_CALLBACK(setBufSize), NULL); g_signal_connect(bufferHscale, "button-release-event", G_CALLBACK(setBufSize), NULL);
// mixer
mixerFrame = gtk_frame_new("Mixer:");
mixerHbox = gtk_hbox_new(TRUE, 5);
for(int i=0; i<6; i++)
{
mixers[i] = gtk_vscale_new_with_range(0, 256, 1);
gtk_range_set_inverted(GTK_RANGE(mixers[i]), TRUE);
mixerFrames[i] = gtk_frame_new(mixerStrings[i]);
gtk_container_add(GTK_CONTAINER(mixerFrames[i]), mixers[i]);
gtk_box_pack_start(GTK_BOX(mixerHbox), mixerFrames[i], FALSE, TRUE, 5);
g_signal_connect(mixers[i], "button-release-event", G_CALLBACK(mixerChanged), (gpointer)i);
}
// sync with cfg
int v;
g_config->getOption("SDL.SoundVolume", &v);
gtk_range_set_value(GTK_RANGE(mixers[0]), v);
g_config->getOption("SDL.TriangleVolume", &v);
gtk_range_set_value(GTK_RANGE(mixers[1]), v);
g_config->getOption("SDL.Square1Volume", &v);
gtk_range_set_value(GTK_RANGE(mixers[2]), v);
g_config->getOption("SDL.Square2Volume", &v);
gtk_range_set_value(GTK_RANGE(mixers[3]), v);
g_config->getOption("SDL.NoiseVolume", &v);
gtk_range_set_value(GTK_RANGE(mixers[4]), v);
g_config->getOption("SDL.PCMVolume", &v);
gtk_range_set_value(GTK_RANGE(mixers[5]), v);
// packing some boxes // packing some boxes
gtk_box_pack_start(GTK_BOX(main_hbox), vbox, FALSE, TRUE, 5);
gtk_box_pack_start(GTK_BOX(vbox), soundChk, FALSE, FALSE, 5); gtk_box_pack_start(GTK_BOX(vbox), soundChk, FALSE, FALSE, 5);
gtk_box_pack_start(GTK_BOX(vbox), hbox1, FALSE, FALSE, 5); gtk_box_pack_start(GTK_BOX(vbox), hbox1, FALSE, FALSE, 5);
gtk_box_pack_start(GTK_BOX(vbox), hbox2, FALSE, FALSE, 5); gtk_box_pack_start(GTK_BOX(vbox), hbox2, FALSE, FALSE, 5);
gtk_box_pack_start(GTK_BOX(vbox), hbox3, FALSE, FALSE, 5); gtk_box_pack_start(GTK_BOX(vbox), bufferLbl, FALSE, FALSE, 5);
gtk_container_add(GTK_CONTAINER(win), vbox); gtk_box_pack_start(GTK_BOX(vbox), bufferHscale, FALSE, TRUE, 5);
gtk_box_pack_start(GTK_BOX(main_hbox), mixerFrame, TRUE, TRUE, 5);
gtk_container_add(GTK_CONTAINER(mixerFrame), mixerHbox);
gtk_container_add(GTK_CONTAINER(win), main_hbox);
gtk_widget_show_all(win); gtk_widget_show_all(win);