summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2011-02-22 21:55:25 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2011-02-22 21:55:25 +0000
commit2daa616e02aeaf40d898b0c61e4993c3952235e5 (patch)
tree0790c4f8898b8fd047f8bf951973203b518373ce
parent7b8a76de25e55a585b0f4375c155aa0c2ad98da2 (diff)
add scroll event handling to the vbap panner GUI; clamp vbap pos+width values (but not via clamp_*())
git-svn-id: svn://localhost/ardour2/branches/3.0@8932 d708f5d6-7413-0410-9779-e7cbd77b26cf
-rw-r--r--gtk2_ardour/audio_time_axis.cc2
-rw-r--r--gtk2_ardour/panner2d.cc18
-rw-r--r--gtk2_ardour/panner2d.h1
-rw-r--r--libs/panners/vbap/vbap.cc13
4 files changed, 29 insertions, 5 deletions
diff --git a/gtk2_ardour/audio_time_axis.cc b/gtk2_ardour/audio_time_axis.cc
index c516985671..f43d3739cc 100644
--- a/gtk2_ardour/audio_time_axis.cc
+++ b/gtk2_ardour/audio_time_axis.cc
@@ -225,8 +225,6 @@ AudioTimeAxisView::ensure_pan_views (bool show)
set<Evoral::Parameter> params = _route->panner()->what_can_be_automated();
set<Evoral::Parameter>::iterator p;
- cerr << _route->name() << " the panner has " << params.size() << " params that can be automated\n";
-
for (p = params.begin(); p != params.end(); ++p) {
boost::shared_ptr<ARDOUR::AutomationControl> pan_control = _route->pannable()->automation_control(*p);
diff --git a/gtk2_ardour/panner2d.cc b/gtk2_ardour/panner2d.cc
index a953105c1a..7d29e5caea 100644
--- a/gtk2_ardour/panner2d.cc
+++ b/gtk2_ardour/panner2d.cc
@@ -285,6 +285,7 @@ Panner2d::on_motion_notify_event (GdkEventMotion *ev)
return handle_motion (x, y, state);
}
+
bool
Panner2d::on_expose_event (GdkEventExpose *event)
{
@@ -536,6 +537,23 @@ Panner2d::handle_motion (gint evx, gint evy, GdkModifierType state)
return true;
}
+bool
+Panner2d::on_scroll_event (GdkEventScroll* ev)
+{
+ switch (ev->direction) {
+ case GDK_SCROLL_UP:
+ case GDK_SCROLL_RIGHT:
+ panner->set_position (panner->pannable()->pan_azimuth_control->get_value() - 1.0/360.0);
+ break;
+
+ case GDK_SCROLL_DOWN:
+ case GDK_SCROLL_LEFT:
+ panner->set_position (panner->pannable()->pan_azimuth_control->get_value() + 1.0/360.0);
+ break;
+ }
+ return true;
+}
+
void
Panner2d::cart_to_gtk (CartesianVector& c) const
{
diff --git a/gtk2_ardour/panner2d.h b/gtk2_ardour/panner2d.h
index 5b2c936b6a..1672edef90 100644
--- a/gtk2_ardour/panner2d.h
+++ b/gtk2_ardour/panner2d.h
@@ -77,6 +77,7 @@ class Panner2d : public Gtk::DrawingArea
bool on_button_press_event (GdkEventButton *);
bool on_button_release_event (GdkEventButton *);
bool on_motion_notify_event (GdkEventMotion *);
+ bool on_scroll_event (GdkEventScroll *);
void on_size_allocate (Gtk::Allocation& alloc);
private:
diff --git a/libs/panners/vbap/vbap.cc b/libs/panners/vbap/vbap.cc
index 67e225b8aa..99a83d4106 100644
--- a/libs/panners/vbap/vbap.cc
+++ b/libs/panners/vbap/vbap.cc
@@ -436,12 +436,19 @@ VBAPanner::get_speakers () const
void
VBAPanner::set_position (double p)
{
+ if (p < 0.0) {
+ p = 1.0 + p;
+ }
+
+ if (p > 1.0) {
+ p = fmod (p, 1.0);
+ }
+
_pannable->pan_azimuth_control->set_value (p);
}
void
-VBAPanner::set_width (double p)
+VBAPanner::set_width (double w)
{
- _pannable->pan_width_control->set_value (p);
+ _pannable->pan_width_control->set_value (min (1.0, max (-1.0, w)));
}
-