back to using shift-ctrl for pinch drag. set colours of affected curves.
authornick_m <mainsbridge@gmail.com>
Sun, 26 Feb 2017 15:26:08 +0000 (02:26 +1100)
committerRobin Gareus <robin@gareus.org>
Mon, 27 Feb 2017 19:16:10 +0000 (20:16 +0100)
gtk2_ardour/editor_drag.cc
gtk2_ardour/editor_drag.h
gtk2_ardour/editor_mouse.cc
gtk2_ardour/tempo_curve.cc

index 815acd3e94ed85f3a6c37d98bd8027fe323f90a8..882251e1f6874f526c9872e74ee9a808e4917621 100644 (file)
@@ -3626,6 +3626,8 @@ TempoTwistDrag::TempoTwistDrag (Editor* e, ArdourCanvas::Item* i)
        , _grab_qn (0.0)
        , _grab_tempo (0.0)
        , _tempo (0)
+       , _next_tempo (0)
+       , _drag_valid (true)
        , before_state (0)
 {
        DEBUG_TRACE (DEBUG::Drags, "New TempoTwistDrag\n");
@@ -3638,12 +3640,28 @@ TempoTwistDrag::start_grab (GdkEvent* event, Gdk::Cursor* cursor)
        Drag::start_grab (event, cursor);
        TempoMap& map (_editor->session()->tempo_map());
        _tempo = const_cast<TempoSection*> (&map.tempo_section_at_frame (raw_grab_frame()));
-       _grab_tempo = Tempo (_tempo->note_types_per_minute(), _tempo->note_type());
 
-       ostringstream sstr;
-       sstr << "start: " << fixed << setprecision(3) << _tempo->note_types_per_minute() << "\n";
-       sstr << "end: " << fixed << setprecision(3) << _tempo->end_note_types_per_minute();
-       show_verbose_cursor_text (sstr.str());
+       _next_tempo = map.next_tempo_section (_tempo);
+       if (_next_tempo) {
+               if (!map.next_tempo_section (_next_tempo)) {
+                       _drag_valid = false;
+                       finished (event, false);
+
+                       return;
+               }
+               _editor->tempo_curve_selected (_tempo, true);
+               _editor->tempo_curve_selected (_next_tempo, true);
+
+               ostringstream sstr;
+               sstr << "start: " << fixed << setprecision(3) << _tempo->note_types_per_minute() << "\n";
+               sstr << "end: " << fixed << setprecision(3) << _tempo->end_note_types_per_minute() << "\n";
+               sstr << "start: " << fixed << setprecision(3) << _next_tempo->note_types_per_minute();
+               show_verbose_cursor_text (sstr.str());
+       } else {
+               _drag_valid = false;
+       }
+
+       _grab_tempo = Tempo (_tempo->note_types_per_minute(), _tempo->note_type());
 }
 
 void
@@ -3673,6 +3691,11 @@ TempoTwistDrag::setup_pointer_frame_offset ()
 void
 TempoTwistDrag::motion (GdkEvent* event, bool first_move)
 {
+
+       if (!_next_tempo || !_drag_valid) {
+               return;
+       }
+
        TempoMap& map (_editor->session()->tempo_map());
 
        if (first_move) {
@@ -3694,19 +3717,23 @@ TempoTwistDrag::motion (GdkEvent* event, bool first_move)
        _editor->session()->tempo_map().gui_twist_tempi (_tempo, new_bpm, map.frame_at_quarter_note (_grab_qn), pf);
 
        ostringstream sstr;
-       sstr << "start: " << fixed << setprecision(3) << _tempo->note_types_per_minute();
-       sstr << "end: " << fixed << setprecision(3) << _tempo->end_note_types_per_minute();
+       sstr << "start: " << fixed << setprecision(3) << _tempo->note_types_per_minute() << "\n";
+       sstr << "end: " << fixed << setprecision(3) << _tempo->end_note_types_per_minute() << "\n";
+       sstr << "start: " << fixed << setprecision(3) << _next_tempo->note_types_per_minute();
        show_verbose_cursor_text (sstr.str());
 }
 
 void
 TempoTwistDrag::finished (GdkEvent* event, bool movement_occurred)
 {
-       if (!movement_occurred) {
+       TempoMap& map (_editor->session()->tempo_map());
+
+       if (!movement_occurred || !_drag_valid) {
                return;
        }
 
-       TempoMap& map (_editor->session()->tempo_map());
+       _editor->tempo_curve_selected (_tempo, false);
+       _editor->tempo_curve_selected (_next_tempo, false);
 
        XMLNode &after = map.get_state();
        _editor->session()->add_command(new MementoCommand<TempoMap>(map, before_state, &after));
index d190c544243c195d7327228c52ec9da1f24527be..bc39220f6548d8c8785377644775d7a142aa69f8 100644 (file)
@@ -849,6 +849,8 @@ private:
        double _grab_qn;
        ARDOUR::Tempo  _grab_tempo;
        ARDOUR::TempoSection* _tempo;
+       ARDOUR::TempoSection* _next_tempo;
+       bool _drag_valid;
        XMLNode* before_state;
 };
 
index 872912e6de6eddec8b836dbd189e21613e5b54a7..008f6094744607c0557fa448b028c1392307767d 100644 (file)
@@ -737,8 +737,8 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
                if (!Keyboard::modifier_state_equals (event->button.state, Keyboard::PrimaryModifier)
                        && !ArdourKeyboard::indicates_constraint (event->button.state)) {
                        _drags->set (new CursorDrag (this, *playhead_cursor, false), event);
-               } else if (Keyboard::modifier_state_contains (event->button.state, Keyboard::TertiaryModifier)
-                          && Keyboard::modifier_state_contains (event->button.state, Keyboard::SecondaryModifier)) {
+               } else if (ArdourKeyboard::indicates_constraint (event->button.state)
+                          && Keyboard::modifier_state_contains (event->button.state, Keyboard::PrimaryModifier)) {
                        _drags->set (new TempoTwistDrag (this, item), event);
                } else if (ArdourKeyboard::indicates_constraint (event->button.state)) {
                        _drags->set (new BBTRulerDrag (this, item), event);
index eb187139db403ba43c2c3f5cff6bc5dc3c3c8251..c43e91c9ac9e0eda8d06fde7ecbbc1e5306d7f2b 100644 (file)
@@ -175,7 +175,7 @@ void
 TempoCurve::set_color_rgba (uint32_t c)
 {
        _color = c;
-       _curve->set_fill_color (UIConfiguration::instance().color_mod (c, "selection rect"));
+       _curve->set_fill_color (UIConfiguration::instance().color_mod (_color, "selection rect"));
        _curve->set_outline_color (_color);
 
 }