Move jack latency selection to menu
This commit is contained in:
parent
efb242bf1e
commit
42429315c5
151
gui/gladish.ui
151
gui/gladish.ui
|
@ -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>
|
||||
|
|
124
gui/main.c
124
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);
|
||||
|
|
Loading…
Reference in New Issue