From 2722a01ab0654e6af32ffa925dd5e13adbb4e812 Mon Sep 17 00:00:00 2001 From: Nedko Arnaudov Date: Sat, 22 Aug 2009 18:41:10 +0300 Subject: [PATCH] Buffer size widget tweaks --- gui/gui.glade | 12 +++-- gui/main.c | 129 +++++++++++++++++++++++++++++--------------------- 2 files changed, 83 insertions(+), 58 deletions(-) diff --git a/gui/gui.glade b/gui/gui.glade index 188e675b..2692a310 100644 --- a/gui/gui.glade +++ b/gui/gui.glade @@ -301,6 +301,7 @@ True + False Jack latency 1 32 frames @@ -312,7 +313,9 @@ 2048 frames 4096 frames - + + True + False @@ -364,8 +367,9 @@ - + True + False Clear the dropout indicator gtk-clear @@ -381,13 +385,13 @@ True 0 - + True Drouput (XRun) Indicator The bar represents the percentage of available time used for audio processing (i.e. the DSP load). If the bar reaches 100%, a dropout will occur. 0.10000000149 - 0 Dropouts + ? Dropouts diff --git a/gui/main.c b/gui/main.c index 14e1d526..00b88652 100644 --- a/gui/main.c +++ b/gui/main.c @@ -26,6 +26,9 @@ */ #include "common.h" + +#include + #include "glade.h" #include "canvas.h" #include "graph_canvas.h" @@ -37,6 +40,14 @@ #include "graph_view.h" #include "../catdup.h" +GtkWidget * g_main_win; +GtkWidget * g_clear_load_button; +GtkWidget * g_xrun_progress_bar; +GtkWidget * g_buffer_size_combo; + +graph_view_handle g_jack_view = NULL; +graph_view_handle g_studio_view = NULL; + #if 0 static void gtkmm_get_ink_pixel_size (Glib::RefPtr layout, @@ -64,21 +75,54 @@ gtkmm_set_width_for_given_text (Gtk::Widget &w, const gchar *text, w.set_size_request(width + hpadding, old_height);//height + vpadding); } -void -update_toolbar() +#endif + +static void set_buffer_size_combo_width(void) { - bool started; + //gtkmm_set_width_for_given_text(*_buffer_size_combo, "4096 frames", 40); +} - started = _jack->is_started(); +static void buffer_size_clear() +{ + gtk_entry_set_text(GTK_ENTRY(get_glade_widget("comboboxentry")), ""); +} - _buffer_size_combo->set_sensitive(started); +static void buffer_size_set(uint32_t size) +{ + gtk_combo_box_set_active(GTK_COMBO_BOX(g_buffer_size_combo), (int)log2f(size) - 5); +} - if (started) +#if 0 + +void +buffer_size_changed() +{ + const int selected = _buffer_size_combo->get_active_row_number(); + + if (selected == -1) { - _buffer_size_combo->set_active((int)log2f(_jack->buffer_size()) - 5); + update_toolbar(); + } + else + { + uint32_t buffer_size = 1 << (selected + 5); + + // this check is temporal workaround for jack bug + // we skip setting buffer size if it same as acutal one + // proper place for such check is in jack + if (_jack->buffer_size() != buffer_size) + { + if (!_jack->set_buffer_size(buffer_size)) + { + update_toolbar(); // reset combo box to actual value + } + } } } +#endif + +#if 0 void update_load() { @@ -111,54 +155,8 @@ clear_load() _jack->reset_xruns(); _max_dsp_load = 0.0; } - -void -jack_status_changed( - bool started) -{ - update_toolbar(); - - _menu_jack_start->set_sensitive(!started); - _menu_jack_stop->set_sensitive(started); - _clear_load_but->set_sensitive(started); - if (!started) - { - _main_xrun_progress->set_fraction(0.0); - } -} - -void -buffer_size_changed() -{ - const int selected = _buffer_size_combo->get_active_row_number(); - - if (selected == -1) - { - update_toolbar(); - } - else - { - uint32_t buffer_size = 1 << (selected+5); - - // this check is temporal workaround for jack bug - // we skip setting buffer size if it same as acutal one - // proper place for such check is in jack - if (_jack->buffer_size() != buffer_size) - { - if (!_jack->set_buffer_size(buffer_size)) - { - update_toolbar(); // reset combo box to actual value - } - } - } -} - #endif -GtkWidget * g_main_win; -graph_view_handle g_jack_view = NULL; -graph_view_handle g_studio_view = NULL; - void control_proxy_on_studio_appeared(void) { if (!create_view("Studio", SERVICE_NAME, STUDIO_OBJECT_PATH, false, &g_studio_view)) @@ -179,12 +177,32 @@ void control_proxy_on_studio_disappeared(void) void jack_started(void) { + uint32_t size; + lash_info("JACK started"); + + gtk_widget_set_sensitive(g_buffer_size_combo, true); + + if (jack_proxy_get_buffer_size(&size)) + { + buffer_size_set(size); + } + else + { + lash_error("jack_proxy_get_buffer_size() failed."); + } + + gtk_widget_set_sensitive(g_clear_load_button, true); } void jack_stopped(void) { lash_info("JACK stopped"); + + gtk_widget_set_sensitive(g_buffer_size_combo, 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); } void jack_appeared(void) @@ -234,6 +252,9 @@ int main(int argc, char** argv) } g_main_win = get_glade_widget("main_win"); + g_clear_load_button = get_glade_widget("clear_load_button"); + g_xrun_progress_bar = get_glade_widget("xrun_progress_bar"); + g_buffer_size_combo = get_glade_widget("buffer_size_combo"); world_tree_init(); view_init(); @@ -250,7 +271,7 @@ int main(int argc, char** argv) return 1; } - //gtkmm_set_width_for_given_text(*_buffer_size_combo, "4096 frames", 40); + 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_glade_widget("menu_file_quit")), "activate", G_CALLBACK(gtk_main_quit), NULL);