From 42429315c5e0fc08b65a7fd8c942ec869de639ae Mon Sep 17 00:00:00 2001 From: Nedko Arnaudov Date: Fri, 19 Feb 2010 01:28:51 +0200 Subject: [PATCH] Move jack latency selection to menu --- gui/gladish.ui | 151 ++++++++++++++++++++++++++++++++++--------------- gui/main.c | 124 ++++++++++++++++++++++++++++++++++------ 2 files changed, 212 insertions(+), 63 deletions(-) diff --git a/gui/gladish.ui b/gui/gladish.ui index 53bb77f1..0998daa0 100644 --- a/gui/gladish.ui +++ b/gui/gladish.ui @@ -262,6 +262,89 @@ True + + + True + JACK _Latency + True + + + True + + + True + 32 + True + + + + + True + 64 + True + menu_item_jack_latency_32 + + + + + True + 128 + True + menu_item_jack_latency_32 + + + + + True + 256 + True + menu_item_jack_latency_32 + + + + + True + 512 + True + menu_item_jack_latency_32 + + + + + True + 1024 + True + menu_item_jack_latency_32 + + + + + True + 2048 + True + menu_item_jack_latency_32 + + + + + True + 4096 + True + menu_item_jack_latency_32 + + + + + True + 8192 + True + menu_item_jack_latency_32 + + + + + + @@ -305,57 +388,31 @@ True False - + True - 0 - + True - - - True - Latency: - - - False - False - 0 - - - - - True - False - 1 - - - 1 - 1 - - - - - 48 - - - False - False - 1 - 2 - - - - - 1 - kHz - - - False - False - 3 - - + 48 + + False + False + 1 + 0 + + + + + True + 1 + kHz + + + False + False + 1 + diff --git a/gui/main.c b/gui/main.c index 1614d60b..075a4b98 100644 --- a/gui/main.c +++ b/gui/main.c @@ -54,7 +54,6 @@ GtkWidget * g_main_win; GtkWidget * g_clear_load_button; GtkWidget * g_xrun_progress_bar; -GtkWidget * g_buffer_size_combo; GtkWidget * g_menu_item_new_studio; GtkWidget * g_menu_item_start_studio; @@ -68,6 +67,15 @@ GtkWidget * g_menu_item_destroy_room; GtkWidget * g_menu_item_load_project; GtkWidget * g_menu_item_daemon_exit; GtkWidget * g_menu_item_jack_configure; +GtkCheckMenuItem * g_menu_item_jack_latency_32; +GtkCheckMenuItem * g_menu_item_jack_latency_64; +GtkCheckMenuItem * g_menu_item_jack_latency_128; +GtkCheckMenuItem * g_menu_item_jack_latency_256; +GtkCheckMenuItem * g_menu_item_jack_latency_512; +GtkCheckMenuItem * g_menu_item_jack_latency_1024; +GtkCheckMenuItem * g_menu_item_jack_latency_2048; +GtkCheckMenuItem * g_menu_item_jack_latency_4096; +GtkCheckMenuItem * g_menu_item_jack_latency_8192; GtkWidget * g_studio_status_label; GtkWidget * g_menu_item_view_toolbar; GtkWidget * g_toolbar; @@ -142,29 +150,95 @@ gtkmm_set_width_for_given_text (Gtk::Widget &w, const gchar *text, #endif -static void set_buffer_size_combo_width(void) +void set_latency_items_sensivity(bool sensitive) { - //gtkmm_set_width_for_given_text(*_buffer_size_combo, "4096 frames", 40); + gtk_widget_set_sensitive(GTK_WIDGET(g_menu_item_jack_latency_32), sensitive); + gtk_widget_set_sensitive(GTK_WIDGET(g_menu_item_jack_latency_64), sensitive); + gtk_widget_set_sensitive(GTK_WIDGET(g_menu_item_jack_latency_128), sensitive); + gtk_widget_set_sensitive(GTK_WIDGET(g_menu_item_jack_latency_256), sensitive); + gtk_widget_set_sensitive(GTK_WIDGET(g_menu_item_jack_latency_512), sensitive); + gtk_widget_set_sensitive(GTK_WIDGET(g_menu_item_jack_latency_1024), sensitive); + gtk_widget_set_sensitive(GTK_WIDGET(g_menu_item_jack_latency_2048), sensitive); + gtk_widget_set_sensitive(GTK_WIDGET(g_menu_item_jack_latency_4096), sensitive); + gtk_widget_set_sensitive(GTK_WIDGET(g_menu_item_jack_latency_8192), sensitive); } -static void buffer_size_clear() +static void buffer_size_clear(void) { - //gtk_entry_set_text(GTK_ENTRY(get_gtk_builder_widget("comboboxentry")), ""); + set_latency_items_sensivity(false); } +static bool latency_changing = false; + static void buffer_size_set(uint32_t size) { - gtk_combo_box_set_active(GTK_COMBO_BOX(g_buffer_size_combo), (int)log2f(size) - 5); + GtkCheckMenuItem * item_ptr; + + switch (size) + { + case 32: + item_ptr = g_menu_item_jack_latency_32; + break; + case 64: + item_ptr = g_menu_item_jack_latency_64; + break; + case 128: + item_ptr = g_menu_item_jack_latency_128; + break; + case 256: + item_ptr = g_menu_item_jack_latency_256; + break; + case 512: + item_ptr = g_menu_item_jack_latency_512; + break; + case 1024: + item_ptr = g_menu_item_jack_latency_1024; + break; + case 2048: + item_ptr = g_menu_item_jack_latency_2048; + break; + case 4096: + item_ptr = g_menu_item_jack_latency_4096; + break; + case 8192: + item_ptr = g_menu_item_jack_latency_8192; + break; + default: + //log_error("unknown jack buffer size %"PRIu32, size); + buffer_size_clear(); + return; + } + + if (!item_ptr->active) + { + log_info("JACK latency changed: %"PRIu32" samples", size); + latency_changing = true; + gtk_check_menu_item_set_active(item_ptr, TRUE); + latency_changing = false; + } } -static void buffer_size_change_request(void) +static void buffer_size_change_request(GtkCheckMenuItem * item_ptr, gpointer user_data) { - const int selected = gtk_combo_box_get_active(GTK_COMBO_BOX(g_buffer_size_combo)); + uint32_t size; - if (selected < 0 || !jack_proxy_set_buffer_size(1 << (selected + 5))) + if (latency_changing) + { /* skip activations because of gtk_check_menu_item_set_active() called from buffer_size_set() */ + return; + } + + if (!item_ptr->active) + { /* skip radio button deactivations, we are interested only in activations */ + return; + } + + size = (uint32_t)(guintptr)user_data; + + log_info("JACK latency change request: %"PRIu32" samples", size); + + if (!jack_proxy_set_buffer_size(size)) { log_error("cannot set JACK buffer size"); - buffer_size_clear(); } } @@ -807,7 +881,7 @@ void jack_started(void) g_jack_state = JACK_STATE_STARTED; studio_state_changed(NULL); - gtk_widget_set_sensitive(g_buffer_size_combo, true); + set_latency_items_sensivity(true); gtk_widget_set_sensitive(g_clear_load_button, true); g_jack_poll_source_tag = g_timeout_add(100, poll_jack, NULL); @@ -825,7 +899,7 @@ void jack_stopped(void) g_jack_state = JACK_STATE_STOPPED; studio_state_changed(NULL); - gtk_widget_set_sensitive(g_buffer_size_combo, false); + set_latency_items_sensivity(false); buffer_size_clear(); gtk_widget_set_sensitive(g_clear_load_button, false); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(g_xrun_progress_bar), 0.0); @@ -1038,7 +1112,6 @@ int main(int argc, char** argv) g_main_win = get_gtk_builder_widget("main_win"); g_clear_load_button = get_gtk_builder_widget("clear_load_button"); g_xrun_progress_bar = get_gtk_builder_widget("xrun_progress_bar"); - g_buffer_size_combo = get_gtk_builder_widget("buffer_size_combo"); g_menu_item_new_studio = get_gtk_builder_widget("menu_item_new_studio"); g_menu_item_start_app = get_gtk_builder_widget("menu_item_start_app"); g_menu_item_start_studio = get_gtk_builder_widget("menu_item_start_studio"); @@ -1064,6 +1137,18 @@ int main(int argc, char** argv) init_studio_list(&g_load_studio_list, "menu_item_load_studio", "load_studio_menu", on_load_studio); init_studio_list(&g_delete_studio_list, "menu_item_delete_studio", "delete_studio_menu", on_delete_studio); + g_menu_item_jack_latency_32 = GTK_CHECK_MENU_ITEM(get_gtk_builder_widget("menu_item_jack_latency_32")); + g_menu_item_jack_latency_64 = GTK_CHECK_MENU_ITEM(get_gtk_builder_widget("menu_item_jack_latency_64")); + g_menu_item_jack_latency_128 = GTK_CHECK_MENU_ITEM(get_gtk_builder_widget("menu_item_jack_latency_128")); + g_menu_item_jack_latency_256 = GTK_CHECK_MENU_ITEM(get_gtk_builder_widget("menu_item_jack_latency_256")); + g_menu_item_jack_latency_512 = GTK_CHECK_MENU_ITEM(get_gtk_builder_widget("menu_item_jack_latency_512")); + g_menu_item_jack_latency_1024 = GTK_CHECK_MENU_ITEM(get_gtk_builder_widget("menu_item_jack_latency_1024")); + g_menu_item_jack_latency_2048 = GTK_CHECK_MENU_ITEM(get_gtk_builder_widget("menu_item_jack_latency_2048")); + g_menu_item_jack_latency_4096 = GTK_CHECK_MENU_ITEM(get_gtk_builder_widget("menu_item_jack_latency_4096")); + g_menu_item_jack_latency_8192 = GTK_CHECK_MENU_ITEM(get_gtk_builder_widget("menu_item_jack_latency_8192")); + + buffer_size_clear(); + world_tree_init(); view_init(); @@ -1088,11 +1173,8 @@ int main(int argc, char** argv) studio_proxy_set_renamed_callback(on_studio_renamed); - set_buffer_size_combo_width(); - g_signal_connect(G_OBJECT(g_main_win), "destroy", G_CALLBACK(gtk_main_quit), NULL); g_signal_connect(G_OBJECT(get_gtk_builder_widget("menu_item_quit")), "activate", G_CALLBACK(gtk_main_quit), NULL); - g_signal_connect(G_OBJECT(g_buffer_size_combo), "changed", G_CALLBACK(buffer_size_change_request), NULL); g_signal_connect(G_OBJECT(g_clear_load_button), "clicked", G_CALLBACK(clear_load), NULL); g_signal_connect(G_OBJECT(get_gtk_builder_widget("menu_item_view_arrange")), "activate", G_CALLBACK(arrange), NULL); g_signal_connect(G_OBJECT(g_menu_item_view_toolbar), "activate", G_CALLBACK(toggle_toolbar), NULL); @@ -1108,6 +1190,16 @@ int main(int argc, char** argv) g_signal_connect(G_OBJECT(get_gtk_builder_widget("menu_item_help_about")), "activate", G_CALLBACK(show_about), NULL); g_signal_connect(G_OBJECT(g_menu_item_start_app), "activate", G_CALLBACK(start_app), NULL); + g_signal_connect(G_OBJECT(g_menu_item_jack_latency_32), "toggled", G_CALLBACK(buffer_size_change_request), (gpointer)32); + g_signal_connect(G_OBJECT(g_menu_item_jack_latency_64), "toggled", G_CALLBACK(buffer_size_change_request), (gpointer)64); + g_signal_connect(G_OBJECT(g_menu_item_jack_latency_128), "toggled", G_CALLBACK(buffer_size_change_request), (gpointer)128); + g_signal_connect(G_OBJECT(g_menu_item_jack_latency_256), "toggled", G_CALLBACK(buffer_size_change_request), (gpointer)256); + g_signal_connect(G_OBJECT(g_menu_item_jack_latency_512), "toggled", G_CALLBACK(buffer_size_change_request), (gpointer)512); + g_signal_connect(G_OBJECT(g_menu_item_jack_latency_1024), "toggled", G_CALLBACK(buffer_size_change_request), (gpointer)1024); + g_signal_connect(G_OBJECT(g_menu_item_jack_latency_2048), "toggled", G_CALLBACK(buffer_size_change_request), (gpointer)2048); + g_signal_connect(G_OBJECT(g_menu_item_jack_latency_4096), "toggled", G_CALLBACK(buffer_size_change_request), (gpointer)4096); + g_signal_connect(G_OBJECT(g_menu_item_jack_latency_8192), "toggled", G_CALLBACK(buffer_size_change_request), (gpointer)8192); + gtk_widget_show(g_main_win); //_about_win->set_transient_for(*_main_win);