From 9139dda70547545f9f36ffe526a5fdcc930b1e2a Mon Sep 17 00:00:00 2001 From: David Robillard Date: Fri, 20 May 2011 18:42:59 +0000 Subject: Use a (smaller, simpler) statusbar instead of a toolbar. Display more useful latency information (e.g. latency in ms as well as frames). git-svn-id: http://svn.drobilla.net/lad/trunk/patchage@3300 a436a847-0d15-0410-975c-d299462d15a1 --- src/JackDriver.cpp | 20 ++-- src/JackDriver.hpp | 2 +- src/Patchage.cpp | 122 +++++++--------------- src/Patchage.hpp | 16 +-- src/patchage.ui | 300 +++++++++++++++++++++++------------------------------ 5 files changed, 184 insertions(+), 276 deletions(-) (limited to 'src') diff --git a/src/JackDriver.cpp b/src/JackDriver.cpp index b641d40..9c981ec 100644 --- a/src/JackDriver.cpp +++ b/src/JackDriver.cpp @@ -440,7 +440,7 @@ JackDriver::jack_client_registration_cb(const char* name, int registered, void* JackDriver* me = reinterpret_cast(jack_driver); assert(me->_client); - jack_reset_max_delayed_usecs(me->_client); + //jack_reset_max_delayed_usecs(me->_client); if (registered) { me->_events.push(PatchageEvent(PatchageEvent::CLIENT_CREATION, name)); @@ -456,7 +456,7 @@ JackDriver::jack_port_registration_cb(jack_port_id_t port_id, int registered, vo JackDriver* me = reinterpret_cast(jack_driver); assert(me->_client); - jack_reset_max_delayed_usecs(me->_client); + //jack_reset_max_delayed_usecs(me->_client); if (registered) { me->_events.push(PatchageEvent(PatchageEvent::PORT_CREATION, port_id)); @@ -472,7 +472,7 @@ JackDriver::jack_port_connect_cb(jack_port_id_t src, jack_port_id_t dst, int con JackDriver* me = reinterpret_cast(jack_driver); assert(me->_client); - jack_reset_max_delayed_usecs(me->_client); + //jack_reset_max_delayed_usecs(me->_client); if (connect) { me->_events.push(PatchageEvent(PatchageEvent::CONNECTION, src, dst)); @@ -488,7 +488,7 @@ JackDriver::jack_graph_order_cb(void* jack_driver) JackDriver* me = reinterpret_cast(jack_driver); assert(me->_client); - jack_reset_max_delayed_usecs(me->_client); + //jack_reset_max_delayed_usecs(me->_client); return 0; } @@ -588,17 +588,9 @@ JackDriver::get_max_dsp_load() const float max_delay = jack_get_max_delayed_usecs(_client); const float rate = sample_rate(); const float size = buffer_size(); - const float period = size / rate * 1000000; // usec - - float max_load; - if (max_delay > period) { - max_load = 1.0; - jack_reset_max_delayed_usecs(_client); - } else { - max_load = max_delay / period; - } + const float period = size / rate * 1000000.0f; // usec - return max_load; + return (max_delay > period) ? 1.0 : (max_delay / period); } void diff --git a/src/JackDriver.hpp b/src/JackDriver.hpp index 82c44be..d1cf395 100644 --- a/src/JackDriver.hpp +++ b/src/JackDriver.hpp @@ -73,7 +73,7 @@ public: jack_client_t* client() { return _client; } - float sample_rate() { return jack_get_sample_rate(_client); } + jack_nframes_t sample_rate() { return jack_get_sample_rate(_client); } jack_nframes_t buffer_size(); bool set_buffer_size(jack_nframes_t size); diff --git a/src/Patchage.cpp b/src/Patchage.cpp index ac1a6e2..be8ff23 100644 --- a/src/Patchage.cpp +++ b/src/Patchage.cpp @@ -65,36 +65,6 @@ struct ProjectList_column_record : public Gtk::TreeModel::ColumnRecord { Gtk::TreeModelColumn label; }; -/* Gtk helpers (resize combo boxes) */ - -static void -gtkmm_get_ink_pixel_size (Glib::RefPtr layout, - int& width, - int& height) -{ - Pango::Rectangle ink_rect = layout->get_ink_extents (); - - width = (ink_rect.get_width() + PANGO_SCALE / 2) / PANGO_SCALE; - height = (ink_rect.get_height() + PANGO_SCALE / 2) / PANGO_SCALE; -} - -static void -gtkmm_set_width_for_given_text (Gtk::Widget &w, const gchar *text, - gint hpadding/*, gint vpadding*/) - -{ - int old_width, old_height; - w.get_size_request(old_width, old_height); - - int width, height; - w.ensure_style (); - - gtkmm_get_ink_pixel_size (w.create_pango_layout (text), width, height); - w.set_size_request(width + hpadding, old_height);//height + vpadding); -} - -/* end Gtk helpers */ - #define INIT_WIDGET(x) x(_xml, ((const char*)#x) + 1) Patchage::Patchage(int argc, char** argv) @@ -117,8 +87,6 @@ Patchage::Patchage(int argc, char** argv) , _refresh(false) , _enable_refresh(true) , INIT_WIDGET(_about_win) - , INIT_WIDGET(_buffer_size_combo) - , INIT_WIDGET(_clear_load_but) , INIT_WIDGET(_main_scrolledwin) , INIT_WIDGET(_main_win) , INIT_WIDGET(_main_xrun_progress) @@ -134,19 +102,20 @@ Patchage::Patchage(int argc, char** argv) , INIT_WIDGET(_menu_view_messages) , INIT_WIDGET(_menu_view_projects) , INIT_WIDGET(_menu_view_refresh) - , INIT_WIDGET(_menu_view_toolbar) + , INIT_WIDGET(_menu_view_statusbar) , INIT_WIDGET(_menu_zoom_in) , INIT_WIDGET(_menu_zoom_out) + , INIT_WIDGET(_menu_zoom_full) , INIT_WIDGET(_menu_zoom_normal) , INIT_WIDGET(_messages_clear_but) , INIT_WIDGET(_messages_close_but) , INIT_WIDGET(_messages_win) , INIT_WIDGET(_project_list_viewport) + , INIT_WIDGET(_latency_frames_label) + , INIT_WIDGET(_latency_ms_label) , INIT_WIDGET(_sample_rate_label) , INIT_WIDGET(_status_text) - , INIT_WIDGET(_toolbar) - , INIT_WIDGET(_zoom_full_but) - , INIT_WIDGET(_zoom_normal_but) + , INIT_WIDGET(_statusbar) { _settings_filename = getenv("HOME"); _settings_filename += "/.patchagerc"; @@ -181,8 +150,6 @@ Patchage::Patchage(int argc, char** argv) _about_win->property_logo_icon_name() = "patchage"; gtk_window_set_default_icon_name("patchage"); - gtkmm_set_width_for_given_text(*_buffer_size_combo, "4096 frames", 40); - _main_scrolledwin->add(*_canvas); _main_scrolledwin->property_hadjustment().get_value()->set_step_increment(10); @@ -191,15 +158,6 @@ Patchage::Patchage(int argc, char** argv) _main_scrolledwin->signal_scroll_event().connect( sigc::mem_fun(this, &Patchage::on_scroll)); - _buffer_size_combo->signal_changed().connect( - sigc::mem_fun(this, &Patchage::buffer_size_changed)); - _clear_load_but->signal_clicked().connect( - sigc::mem_fun(this, &Patchage::clear_load)); - _zoom_normal_but->signal_clicked().connect(sigc::bind( - sigc::mem_fun(this, &Patchage::zoom), 1.0)); - _zoom_full_but->signal_clicked().connect( - sigc::mem_fun(_canvas.get(), &PatchageCanvas::zoom_full)); - #ifdef HAVE_LASH _menu_open_session->signal_activate().connect( sigc::mem_fun(this, &Patchage::show_load_project_dialog)); @@ -228,8 +186,8 @@ Patchage::Patchage(int argc, char** argv) sigc::mem_fun(this, &Patchage::refresh)); _menu_view_arrange->signal_activate().connect( sigc::mem_fun(this, &Patchage::on_arrange)); - _menu_view_toolbar->signal_activate().connect( - sigc::mem_fun(this, &Patchage::on_view_toolbar)); + _menu_view_statusbar->signal_activate().connect( + sigc::mem_fun(this, &Patchage::on_view_statusbar)); _menu_view_messages->signal_toggled().connect( sigc::mem_fun(this, &Patchage::on_show_messages)); _menu_view_projects->signal_toggled().connect( @@ -240,6 +198,8 @@ Patchage::Patchage(int argc, char** argv) sigc::mem_fun(this, &Patchage::on_zoom_in)); _menu_zoom_out->signal_activate().connect( sigc::mem_fun(this, &Patchage::on_zoom_out)); + _menu_zoom_full->signal_activate().connect( + sigc::mem_fun(this, &Patchage::on_zoom_full)); _menu_zoom_normal->signal_activate().connect( sigc::mem_fun(this, &Patchage::on_zoom_normal)); @@ -339,7 +299,7 @@ Patchage::attach() refresh(); - update_toolbar(); + update_statusbar(); } bool @@ -396,12 +356,27 @@ Patchage::idle_callback() } void -Patchage::update_toolbar() +Patchage::update_statusbar() { #if defined(PATCHAGE_LIBJACK) || defined(HAVE_JACK_DBUS) if (_enable_refresh && _jack_driver->is_attached()) { _enable_refresh = false; - _buffer_size_combo->set_active((int)log2f(_jack_driver->buffer_size()) - 5); + + const jack_nframes_t buffer_size = _jack_driver->buffer_size(); + const jack_nframes_t sample_rate = _jack_driver->sample_rate(); + + std::stringstream ss; + ss << buffer_size; + _latency_frames_label->set_text(ss.str()); + + ss.str(""); + ss << (sample_rate / 1000); + _sample_rate_label->set_text(ss.str()); + + ss.str(""); + ss << buffer_size * 1000 / sample_rate; + _latency_ms_label->set_text(ss.str()); + _enable_refresh = true; } #endif @@ -480,16 +455,6 @@ Patchage::store_window_location() _state_manager->set_window_size(window_size); } -void -Patchage::clear_load() -{ -#if defined(PATCHAGE_LIBJACK) || defined(HAVE_JACK_DBUS) - _main_xrun_progress->set_fraction(0.0); - _jack_driver->reset_xruns(); - _jack_driver->reset_max_dsp_load(); -#endif -} - void Patchage::error_msg(const std::string& msg) { @@ -541,7 +506,7 @@ Patchage::connect_widgets() { #if defined(PATCHAGE_LIBJACK) || defined(HAVE_JACK_DBUS) _jack_driver->signal_attached.connect( - sigc::mem_fun(this, &Patchage::update_toolbar)); + sigc::mem_fun(this, &Patchage::update_statusbar)); _jack_driver->signal_attached.connect(sigc::bind( sigc::mem_fun(*_menu_jack_connect, &Gtk::MenuItem::set_sensitive), false)); _jack_driver->signal_attached.connect( @@ -635,6 +600,12 @@ Patchage::on_zoom_out() _canvas->set_font_size(_canvas->get_font_size() - 1.0); } +void +Patchage::on_zoom_full() +{ + _canvas->zoom_full(); +} + void Patchage::on_zoom_normal() { @@ -701,12 +672,12 @@ Patchage::on_store_positions() } void -Patchage::on_view_toolbar() +Patchage::on_view_statusbar() { - if (_menu_view_toolbar->get_active()) - _toolbar->show(); + if (_menu_view_statusbar->get_active()) + _statusbar->show(); else - _toolbar->hide(); + _statusbar->hide(); } bool @@ -715,23 +686,6 @@ Patchage::on_scroll(GdkEventScroll* ev) return false; } -void -Patchage::buffer_size_changed() -{ -#if defined(PATCHAGE_LIBJACK) || defined(HAVE_JACK_DBUS) - const int selected = _buffer_size_combo->get_active_row_number(); - - if (selected == -1) { - update_toolbar(); - } else { - jack_nframes_t buffer_size = 1 << (selected+5); - - if ( ! _jack_driver->set_buffer_size(buffer_size)) - update_toolbar(); // reset combo box to actual value - } -#endif -} - void Patchage::enqueue_resize(boost::shared_ptr module) { diff --git a/src/Patchage.hpp b/src/Patchage.hpp index 0c61d0d..459e361 100644 --- a/src/Patchage.hpp +++ b/src/Patchage.hpp @@ -95,9 +95,10 @@ protected: void on_show_messages(); void on_show_projects(); void on_store_positions(); - void on_view_toolbar(); + void on_view_statusbar(); void on_zoom_in(); void on_zoom_out(); + void on_zoom_full(); void on_zoom_normal(); bool on_scroll(GdkEventScroll* ev); @@ -105,7 +106,7 @@ protected: void zoom(double z); bool idle_callback(); bool update_load(); - void update_toolbar(); + void update_statusbar(); void buffer_size_changed(); @@ -145,8 +146,6 @@ protected: bool _enable_refresh; Widget _about_win; - Widget _buffer_size_combo; - Widget _clear_load_but; Widget _main_scrolledwin; Widget _main_win; Widget _main_xrun_progress; @@ -162,19 +161,20 @@ protected: Widget _menu_view_messages; Widget _menu_view_projects; Widget _menu_view_refresh; - Widget _menu_view_toolbar; + Widget _menu_view_statusbar; Widget _menu_zoom_in; Widget _menu_zoom_out; + Widget _menu_zoom_full; Widget _menu_zoom_normal; Widget _messages_clear_but; Widget _messages_close_but; Widget _messages_win; Widget _project_list_viewport; + Widget _latency_frames_label; + Widget _latency_ms_label; Widget _sample_rate_label; Widget _status_text; - Widget _toolbar; - Widget _zoom_full_but; - Widget _zoom_normal_but; + Widget _statusbar; }; #endif // PATCHAGE_PATCHAGE_HPP diff --git a/src/patchage.ui b/src/patchage.ui index c18e3cc..615225c 100644 --- a/src/patchage.ui +++ b/src/patchage.ui @@ -8,6 +8,7 @@ True + vertical True @@ -117,16 +118,6 @@ True - - - True - _Toolbar - True - True - - - - True @@ -144,6 +135,16 @@ + + + True + _Statusbar + True + True + + + + True @@ -167,6 +168,14 @@ + + + gtk-zoom-fit + True + True + True + + gtk-zoom-100 @@ -232,169 +241,13 @@ 0 - - - True - icons - False - 1 - True - - - True - False - - - True - 0 - - - True - - - True - Latency: - - - False - False - 0 - - - - - True - 1 - - - 1 - 1 - - - - - 48 - - - False - False - 1 - 2 - - - - - 1 - kHz - - - False - False - 3 - - - - - - - - - False - - - - - True - 8 - - - False - - - - - True - gtk-clear - - - False - True - - - - - True - - - True - 0 - - - True - 0.10000000149 - 0 Dropouts - - - - - - - False - - - - - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - False - - - False - - - - - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - - - False - - - - - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - gtk-zoom-100 - - - False - True - - - - - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - gtk-zoom-fit - - - False - True - - - - - False - 1 - - True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 204 + True True @@ -416,8 +269,6 @@ True True - True - True True True True @@ -435,6 +286,117 @@ + 1 + + + + + True + 2 + + + True + 12 + + + True + + + True + Latency: + + + False + False + 0 + + + + + True + 1024 + + + 1 + + + + + True + frames @ + + + 2 + + + + + True + 48 + + + False + False + 1 + 3 + + + + + True + kHz ( + + + False + False + 4 + + + + + True + 21 + + + 5 + + + + + True + ms) + + + 6 + + + + + False + 0 + + + + + True + True + 0.10000000149 + 0 Dropouts + + + 1 + + + + + 2 + 0 + + + + + False + 1 2 -- cgit v1.2.1