summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2015-12-04 20:23:47 -0500
committerDavid Robillard <d@drobilla.net>2015-12-04 20:23:47 -0500
commit46977288a7d1d5783dfe4b8f84abea50c35caf48 (patch)
tree1d95e8accef2dd822cbba92ac333375804032f04
parent257f60614b8d6225041ac3a8f0dc54a6839a4ca7 (diff)
downloadpatchage-46977288a7d1d5783dfe4b8f84abea50c35caf48.tar.gz
patchage-46977288a7d1d5783dfe4b8f84abea50c35caf48.tar.bz2
patchage-46977288a7d1d5783dfe4b8f84abea50c35caf48.zip
Bring back Jack buffer size selector
-rw-r--r--NEWS3
-rw-r--r--src/JackDriver.cpp1
-rw-r--r--src/Patchage.cpp40
-rw-r--r--src/Patchage.hpp11
-rw-r--r--src/patchage.ui19
5 files changed, 66 insertions, 8 deletions
diff --git a/NEWS b/NEWS
index 9e4ff7b..b794b87 100644
--- a/NEWS
+++ b/NEWS
@@ -4,13 +4,14 @@ patchage (1.0.1) unstable;
* Add support for exporting canvas as PDF.
* Save window size and position when closed via window manager.
* Order ports deterministically.
+ * Bring back Jack buffer size selector.
* Style messages pane to match canvas.
* Restore messages pane visibility and height.
* Configure based on compiler target OS for cross-compilation.
* Fix compilation with Jack DBus.
* Upgrade to waf 1.8.14
- -- David Robillard <d@drobilla.net> Fri, 02 Oct 2015 20:57:23 -0400
+ -- David Robillard <d@drobilla.net> Fri, 04 Dec 2015 20:20:57 -0500
patchage (1.0.0) stable;
diff --git a/src/JackDriver.cpp b/src/JackDriver.cpp
index a949c7f..a72bd8f 100644
--- a/src/JackDriver.cpp
+++ b/src/JackDriver.cpp
@@ -570,6 +570,7 @@ JackDriver::set_buffer_size(jack_nframes_t size)
_app->error_msg("[JACK] Unable to set buffer size");
return false;
} else {
+ _buffer_size = size;
return true;
}
}
diff --git a/src/Patchage.cpp b/src/Patchage.cpp
index f8f58e3..91755e1 100644
--- a/src/Patchage.cpp
+++ b/src/Patchage.cpp
@@ -28,8 +28,9 @@
#include <gtkmm/button.h>
#include <gtkmm/filechooserdialog.h>
-#include <gtkmm/messagedialog.h>
+#include <gtkmm/liststore.h>
#include <gtkmm/menuitem.h>
+#include <gtkmm/messagedialog.h>
#include <gtkmm/stock.h>
#include <gtkmm/treemodel.h>
@@ -151,6 +152,7 @@ Patchage::Patchage(int argc, char** argv)
, INIT_WIDGET(_toolbar)
, INIT_WIDGET(_clear_load_but)
, INIT_WIDGET(_xrun_progress)
+ , INIT_WIDGET(_buf_size_combo)
, INIT_WIDGET(_latency_label)
, INIT_WIDGET(_legend_alignment)
, INIT_WIDGET(_main_paned)
@@ -198,6 +200,16 @@ Patchage::Patchage(int argc, char** argv)
_about_win->property_logo_icon_name() = "patchage";
gtk_window_set_default_icon_name("patchage");
+ // Create list model for buffer size selector
+ Glib::RefPtr<Gtk::ListStore> buf_size_store = Gtk::ListStore::create(_buf_size_columns);
+ for (size_t i = 32; i <= 4096; i *= 2) {
+ Gtk::TreeModel::Row row = *(buf_size_store->append());
+ row[_buf_size_columns.label] = std::to_string(i);
+ }
+
+ _buf_size_combo->set_model(buf_size_store);
+ _buf_size_combo->pack_start(_buf_size_columns.label);
+
_main_scrolledwin->add(_canvas->widget());
_main_scrolledwin->property_hadjustment().get_value()->set_step_increment(10);
@@ -205,10 +217,10 @@ Patchage::Patchage(int argc, char** argv)
_main_scrolledwin->signal_scroll_event().connect(
sigc::mem_fun(this, &Patchage::on_scroll));
-
_clear_load_but->signal_clicked().connect(
sigc::mem_fun(this, &Patchage::clear_load));
-
+ _buf_size_combo->signal_changed().connect(
+ sigc::mem_fun(this, &Patchage::buffer_size_changed));
_status_text->signal_size_allocate().connect(
sigc::mem_fun(this, &Patchage::on_messages_resized));
@@ -468,10 +480,11 @@ Patchage::update_toolbar()
if (sample_rate != 0) {
const int latency_ms = lrintf(buffer_size * 1000 / (float)sample_rate);
std::stringstream ss;
- ss << buffer_size << " frames @ "
- << (sample_rate / 1000) << "kHz (" << latency_ms << "ms)";
+ ss << " frames @ " << (sample_rate / 1000)
+ << "kHz (" << latency_ms << "ms)";
_latency_label->set_label(ss.str());
_latency_label->set_visible(true);
+ _buf_size_combo->set_active((int)log2f(_jack_driver->buffer_size()) - 5);
return;
}
}
@@ -1022,3 +1035,20 @@ Patchage::on_scroll(GdkEventScroll* ev)
{
return false;
}
+
+void
+Patchage::buffer_size_changed()
+{
+#if defined(HAVE_JACK) || defined(HAVE_JACK_DBUS)
+ const int selected = _buf_size_combo->get_active_row_number();
+
+ if (selected == -1) {
+ update_toolbar();
+ } else {
+ const jack_nframes_t buffer_size = 1 << (selected + 5);
+ _jack_driver->set_buffer_size(buffer_size);
+ update_toolbar();
+ }
+#endif
+}
+
diff --git a/src/Patchage.hpp b/src/Patchage.hpp
index 9183b7e..2ce0984 100644
--- a/src/Patchage.hpp
+++ b/src/Patchage.hpp
@@ -27,6 +27,7 @@
#include <gtkmm/builder.h>
#include <gtkmm/button.h>
#include <gtkmm/checkmenuitem.h>
+#include <gtkmm/combobox.h>
#include <gtkmm/dialog.h>
#include <gtkmm/imagemenuitem.h>
#include <gtkmm/label.h>
@@ -93,6 +94,13 @@ public:
bool show_human_names() const { return _menu_view_human_names->get_active(); }
protected:
+ class BufferSizeColumns : public Gtk::TreeModel::ColumnRecord {
+ public:
+ BufferSizeColumns() { add(label); }
+
+ Gtk::TreeModelColumn<Glib::ustring> label;
+ };
+
void connect_widgets();
void on_arrange();
@@ -143,6 +151,8 @@ protected:
Gtk::Main* _gtk_main;
+ BufferSizeColumns _buf_size_columns;
+
Widget<Gtk::AboutDialog> _about_win;
Widget<Gtk::ScrolledWindow> _main_scrolledwin;
Widget<Gtk::Window> _main_win;
@@ -174,6 +184,7 @@ protected:
Widget<Gtk::Toolbar> _toolbar;
Widget<Gtk::ToolButton> _clear_load_but;
Widget<Gtk::ProgressBar> _xrun_progress;
+ Widget<Gtk::ComboBox> _buf_size_combo;
Widget<Gtk::Label> _latency_label;
Widget<Gtk::Alignment> _legend_alignment;
Widget<Gtk::Paned> _main_paned;
diff --git a/src/patchage.ui b/src/patchage.ui
index 4411193..42312bb 100644
--- a/src/patchage.ui
+++ b/src/patchage.ui
@@ -1160,15 +1160,30 @@ The bar represents the percentage of available time used for audio processing (i
</packing>
</child>
<child>
+ <object class="GtkComboBox" id="buf_size_combo">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="border_width">1</property>
+ <property name="has_tooltip">True</property>
+ <property name="tooltip_markup">Jack buffer length in frames</property>
+ <property name="tooltip_text" translatable="yes">Jack buffer length in frames</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
<object class="GtkLabel" id="latency_label">
<property name="can_focus">False</property>
- <property name="label" translatable="yes">? frames @ ? kHz (? ms)</property>
+ <property name="label" translatable="yes">frames @ ? kHz (? ms)</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="padding">1</property>
- <property name="position">1</property>
+ <property name="position">2</property>
</packing>
</child>
</object>