summaryrefslogtreecommitdiff
path: root/gtk2_ardour/ardour_knob.cc
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2015-04-25 02:44:47 +0200
committerRobin Gareus <robin@gareus.org>2015-04-25 02:44:47 +0200
commitc809e528c026bcc02471f973c71ba04d8e8a1dce (patch)
tree6d702a069e390532f93d5c76f768cb86cf699fe0 /gtk2_ardour/ardour_knob.cc
parentc43c3d3e089b414530d6afdb5a2a448d5b75cb22 (diff)
make knob respond to X & Y axis drags
Diffstat (limited to 'gtk2_ardour/ardour_knob.cc')
-rw-r--r--gtk2_ardour/ardour_knob.cc13
1 files changed, 8 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());