diff options
author | Robin Gareus <robin@gareus.org> | 2015-04-25 02:44:47 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2015-04-25 02:44:47 +0200 |
commit | c809e528c026bcc02471f973c71ba04d8e8a1dce (patch) | |
tree | 6d702a069e390532f93d5c76f768cb86cf699fe0 /gtk2_ardour | |
parent | c43c3d3e089b414530d6afdb5a2a448d5b75cb22 (diff) |
make knob respond to X & Y axis drags
Diffstat (limited to 'gtk2_ardour')
-rw-r--r-- | gtk2_ardour/ardour_knob.cc | 13 | ||||
-rw-r--r-- | gtk2_ardour/ardour_knob.h | 1 |
2 files changed, 9 insertions, 5 deletions
diff --git a/gtk2_ardour/ardour_knob.cc b/gtk2_ardour/ardour_knob.cc index 7e97be81f9..31a81a7af3 100644 --- a/gtk2_ardour/ardour_knob.cc +++ b/gtk2_ardour/ardour_knob.cc @@ -57,6 +57,7 @@ ArdourKnob::Element ArdourKnob::default_elements = ArdourKnob::Element (ArdourKn ArdourKnob::ArdourKnob (Element e, bool arc_to_zero) : _elements (e) , _hovering (false) + , _grabbed_x (0) , _grabbed_y (0) , _val (0) , _zero (0) @@ -320,18 +321,19 @@ ArdourKnob::on_motion_notify_event (GdkEventMotion *ev) } //calculate the travel of the mouse - int y_delta = 0; + int delta = 0; if (ev->state & Gdk::BUTTON1_MASK) { - y_delta = _grabbed_y - ev->y; + delta = (_grabbed_y - ev->y) - (_grabbed_x - ev->x); + _grabbed_x = ev->x; _grabbed_y = ev->y; - if (y_delta == 0) return TRUE; + if (delta == 0) return TRUE; } //step the value of the controllable boost::shared_ptr<PBD::Controllable> c = binding_proxy.get_controllable(); if (c) { float val = c->get_interface(); - val += y_delta * scale; + val += delta * scale; c->set_interface(val); } @@ -341,6 +343,7 @@ ArdourKnob::on_motion_notify_event (GdkEventMotion *ev) bool ArdourKnob::on_button_press_event (GdkEventButton *ev) { + _grabbed_x = ev->x; _grabbed_y = ev->y; _tooltip.start_drag(); @@ -356,7 +359,7 @@ ArdourKnob::on_button_press_event (GdkEventButton *ev) bool ArdourKnob::on_button_release_event (GdkEventButton *ev) { - if ( (_grabbed_y == ev->y) && Keyboard::modifier_state_equals (ev->state, Keyboard::TertiaryModifier)) { //no move, shift-click sets to default + if ( (_grabbed_y == ev->y && _grabbed_x == ev->x) && Keyboard::modifier_state_equals (ev->state, Keyboard::TertiaryModifier)) { //no move, shift-click sets to default boost::shared_ptr<PBD::Controllable> c = binding_proxy.get_controllable(); if (!c) return false; c->set_value (c->normal()); diff --git a/gtk2_ardour/ardour_knob.h b/gtk2_ardour/ardour_knob.h index c9ca72b1a4..49091db0bb 100644 --- a/gtk2_ardour/ardour_knob.h +++ b/gtk2_ardour/ardour_knob.h @@ -101,6 +101,7 @@ public: BindingProxy binding_proxy; bool _hovering; + float _grabbed_x; float _grabbed_y; float _val; // current value [0..1] |