Move jack latency selection to menu

This commit is contained in:
Nedko Arnaudov 2010-02-19 01:28:51 +02:00
parent efb242bf1e
commit 42429315c5
2 changed files with 212 additions and 63 deletions

View File

@ -262,6 +262,89 @@
<property name="use_stock">True</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="menu_item_jack_latency">
<property name="visible">True</property>
<property name="label" translatable="yes">JACK _Latency</property>
<property name="use_underline">True</property>
<child type="submenu">
<object class="GtkMenu" id="menu_jack_latencies">
<property name="visible">True</property>
<child>
<object class="GtkRadioMenuItem" id="menu_item_jack_latency_32">
<property name="visible">True</property>
<property name="label" translatable="yes">32</property>
<property name="draw_as_radio">True</property>
</object>
</child>
<child>
<object class="GtkRadioMenuItem" id="menu_item_jack_latency_64">
<property name="visible">True</property>
<property name="label" translatable="yes">64</property>
<property name="draw_as_radio">True</property>
<property name="group">menu_item_jack_latency_32</property>
</object>
</child>
<child>
<object class="GtkRadioMenuItem" id="menu_item_jack_latency_128">
<property name="visible">True</property>
<property name="label" translatable="yes">128</property>
<property name="draw_as_radio">True</property>
<property name="group">menu_item_jack_latency_32</property>
</object>
</child>
<child>
<object class="GtkRadioMenuItem" id="menu_item_jack_latency_256">
<property name="visible">True</property>
<property name="label" translatable="yes">256</property>
<property name="draw_as_radio">True</property>
<property name="group">menu_item_jack_latency_32</property>
</object>
</child>
<child>
<object class="GtkRadioMenuItem" id="menu_item_jack_latency_512">
<property name="visible">True</property>
<property name="label" translatable="yes">512</property>
<property name="draw_as_radio">True</property>
<property name="group">menu_item_jack_latency_32</property>
</object>
</child>
<child>
<object class="GtkRadioMenuItem" id="menu_item_jack_latency_1024">
<property name="visible">True</property>
<property name="label" translatable="yes">1024</property>
<property name="draw_as_radio">True</property>
<property name="group">menu_item_jack_latency_32</property>
</object>
</child>
<child>
<object class="GtkRadioMenuItem" id="menu_item_jack_latency_2048">
<property name="visible">True</property>
<property name="label" translatable="yes">2048</property>
<property name="draw_as_radio">True</property>
<property name="group">menu_item_jack_latency_32</property>
</object>
</child>
<child>
<object class="GtkRadioMenuItem" id="menu_item_jack_latency_4096">
<property name="visible">True</property>
<property name="label" translatable="yes">4096</property>
<property name="draw_as_radio">True</property>
<property name="group">menu_item_jack_latency_32</property>
</object>
</child>
<child>
<object class="GtkRadioMenuItem" id="menu_item_jack_latency_8192">
<property name="visible">True</property>
<property name="label" translatable="yes">8192</property>
<property name="draw_as_radio">True</property>
<property name="group">menu_item_jack_latency_32</property>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
@ -305,57 +388,31 @@
<property name="visible">True</property>
<property name="visible_vertical">False</property>
<child>
<object class="GtkAlignment" id="alignment2">
<object class="GtkHBox" id="hbox4">
<property name="visible">True</property>
<property name="yscale">0</property>
<child>
<object class="GtkHBox" id="hbox4">
<object class="GtkLabel" id="sample_rate_label">
<property name="visible">True</property>
<child>
<object class="GtkLabel" id="label10">
<property name="visible">True</property>
<property name="label" translatable="yes"> Latency: </property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkComboBoxEntry" id="buffer_size_combo">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="border_width">1</property>
</object>
<packing>
<property name="padding">1</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="sample_rate_label">
<property name="label" translatable="yes">48</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="padding">1</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label9">
<property name="xpad">1</property>
<property name="label" translatable="yes">kHz</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">3</property>
</packing>
</child>
<property name="label" translatable="yes">48</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="padding">1</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label9">
<property name="visible">True</property>
<property name="xpad">1</property>
<property name="label" translatable="yes">kHz</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>

View File

@ -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);