diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2011-02-22 21:55:25 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2011-02-22 21:55:25 +0000 |
commit | 2daa616e02aeaf40d898b0c61e4993c3952235e5 (patch) | |
tree | 0790c4f8898b8fd047f8bf951973203b518373ce | |
parent | 7b8a76de25e55a585b0f4375c155aa0c2ad98da2 (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.cc | 2 | ||||
-rw-r--r-- | gtk2_ardour/panner2d.cc | 18 | ||||
-rw-r--r-- | gtk2_ardour/panner2d.h | 1 | ||||
-rw-r--r-- | libs/panners/vbap/vbap.cc | 13 |
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))); } - |