implement scroll wheel support for ardour-dropdown
[ardour.git] / gtk2_ardour / plugin_eq_gui.cc
index f4e5922cb5a745df3c8e109386a5bd0b6d0fc98d..13c475e27c1b4896a7a11b5f58ae18cf8bb12f2e 100644 (file)
 
 */
 
-#include "plugin_eq_gui.h"
-#include "fft.h"
+#include <math.h>
+#include <iostream>
+
+#ifdef COMPILER_MSVC
+#include <float.h>
+/* isinf() & isnan() are C99 standards, which older MSVC doesn't provide */
+#define ISINF(val) !((bool)_finite((double)val))
+#define ISNAN(val) (bool)_isnan((double)val)
+#else
+#define ISINF(val) std::isinf((val))
+#define ISNAN(val) std::isnan((val))
+#endif
+
+#include <gtkmm/box.h>
+#include <gtkmm/button.h>
+#include <gtkmm/checkbutton.h>
 
-#include "ardour_ui.h"
-#include "gui_thread.h"
 #include "ardour/audio_buffer.h"
 #include "ardour/data_type.h"
 #include "ardour/chan_mapping.h"
 #include "ardour/session.h"
 
-#include <gtkmm/box.h>
-#include <gtkmm/button.h>
-#include <gtkmm/checkbutton.h>
+#include "plugin_eq_gui.h"
+#include "fft.h"
+#include "ardour_ui.h"
+#include "gui_thread.h"
 
-#include <iostream>
-#include <cmath>
+#include "i18n.h"
 
 using namespace ARDOUR;
-using std::cerr;
 
 PluginEqGui::PluginEqGui(boost::shared_ptr<ARDOUR::PluginInsert> pluginInsert)
        : _min_dB(-12.0)
@@ -114,8 +125,6 @@ PluginEqGui::PluginEqGui(boost::shared_ptr<ARDOUR::PluginInsert> pluginInsert)
 
 PluginEqGui::~PluginEqGui()
 {
-       cerr << "PEG::delete\n";
-
        stop_listening ();
 
        if (_analysis_scale_surface) {
@@ -142,7 +151,7 @@ PluginEqGui::start_listening ()
        _plugin->activate();
        set_buffer_size(4096, 16384);
        // Connect the realtime signal collection callback
-       _plugin_insert->AnalysisDataGathered.connect (analysis_connection, invalidator (*this), ui_bind (&PluginEqGui::signal_collect_callback, this, _1, _2), gui_context());
+       _plugin_insert->AnalysisDataGathered.connect (analysis_connection, invalidator (*this), boost::bind (&PluginEqGui::signal_collect_callback, this, _1, _2), gui_context());
 }
 
 void
@@ -187,7 +196,7 @@ PluginEqGui::on_show()
                if (!_window_unmap_connection.connected()) {
                        _window_unmap_connection = toplevel->signal_unmap().connect( sigc::mem_fun(this, &PluginEqGui::stop_updating));
                }
-               
+
                if (!_window_map_connection.connected()) {
                        _window_map_connection = toplevel->signal_map().connect( sigc::mem_fun(this, &PluginEqGui::start_updating));
                }
@@ -312,13 +321,15 @@ PluginEqGui::signal_collect_callback(ARDOUR::BufferSet *in, ARDOUR::BufferSet *o
        _signal_analysis_running = false;
 
        // This signals calls expose_analysis_area()
-       cerr << "PEG::queue_draw\n";
        _analysis_area->queue_draw();
 }
 
 void
 PluginEqGui::run_impulse_analysis()
 {
+       /* Allocate some thread-local buffers so that Plugin::connect_and_run can use them */
+       ARDOUR_UI::instance()->get_process_buffers ();
+       
        uint32_t inputs  = _plugin->get_info()->n_inputs.n_audio();
        uint32_t outputs = _plugin->get_info()->n_outputs.n_audio();
 
@@ -408,6 +419,8 @@ PluginEqGui::run_impulse_analysis()
 
        // This signals calls expose_analysis_area()
        _analysis_area->queue_draw();
+
+       ARDOUR_UI::instance()->drop_process_buffers ();
 }
 
 bool
@@ -762,13 +775,13 @@ PluginEqGui::plot_signal_amplitude_difference(Gtk::Widget *w, cairo_t *cr)
                }
                */
 
-               if (std::isinf(power)) {
+               if (ISINF(power)) {
                        if (power < 0) {
                                power = _min_dB - 1.0;
                        } else {
                                power = _max_dB - 1.0;
                        }
-               } else if (std::isnan(power)) {
+               } else if (ISNAN(power)) {
                        power = _min_dB - 1.0;
                }