Don't add history by clicking a control point, fix control point selection.

- also make set_selected_control_point_from_click () return
	  something useful.
This commit is contained in:
nick_m 2015-06-18 03:48:39 +10:00
parent 80090f0f71
commit 639750f815
4 changed files with 21 additions and 7 deletions

View file

@ -4035,6 +4035,7 @@ ControlPointDrag::ControlPointDrag (Editor* e, ArdourCanvas::Item* i)
: Drag (e, i), : Drag (e, i),
_cumulative_x_drag (0), _cumulative_x_drag (0),
_cumulative_y_drag (0) _cumulative_y_drag (0)
, _first_move (true)
{ {
if (_zero_gain_fraction < 0.0) { if (_zero_gain_fraction < 0.0) {
_zero_gain_fraction = gain_to_slider_position_with_max (dB_to_coefficient (0.0), Config->get_max_gain()); _zero_gain_fraction = gain_to_slider_position_with_max (dB_to_coefficient (0.0), Config->get_max_gain());
@ -4061,9 +4062,6 @@ ControlPointDrag::start_grab (GdkEvent* event, Gdk::Cursor* /*cursor*/)
setup_snap_delta (pos); setup_snap_delta (pos);
float const fraction = 1 - (_point->get_y() / _point->line().height()); float const fraction = 1 - (_point->get_y() / _point->line().height());
_editor->begin_reversible_command (_("automation event move"));
_point->line().start_drag_single (_point, _fixed_grab_x, fraction);
show_verbose_cursor_text (_point->line().get_verbose_cursor_string (fraction)); show_verbose_cursor_text (_point->line().get_verbose_cursor_string (fraction));
_pushing = Keyboard::modifier_state_equals (event->button.state, ArdourKeyboard::push_points_modifier ()); _pushing = Keyboard::modifier_state_equals (event->button.state, ArdourKeyboard::push_points_modifier ());
@ -4123,6 +4121,12 @@ ControlPointDrag::motion (GdkEvent* event, bool)
float const fraction = 1.0 - (cy / _point->line().height()); float const fraction = 1.0 - (cy / _point->line().height());
if (_first_move) {
_editor->begin_reversible_command (_("automation event move"));
_point->line().start_drag_single (_point, _fixed_grab_x, fraction);
_first_move = false;
}
_point->line().drag_motion (_editor->sample_to_pixel_unrounded (cx_frames), fraction, false, _pushing, _final_index); _point->line().drag_motion (_editor->sample_to_pixel_unrounded (cx_frames), fraction, false, _pushing, _final_index);
show_verbose_cursor_text (_point->line().get_verbose_cursor_string (fraction)); show_verbose_cursor_text (_point->line().get_verbose_cursor_string (fraction));
@ -4142,8 +4146,10 @@ ControlPointDrag::finished (GdkEvent* event, bool movement_occurred)
motion (event, false); motion (event, false);
} }
_point->line().end_drag (_pushing, _final_index); if (!_first_move) {
_editor->commit_reversible_command (); _point->line().end_drag (_pushing, _final_index);
_editor->commit_reversible_command ();
}
} }
void void

View file

@ -834,6 +834,7 @@ private:
double _fixed_grab_y; double _fixed_grab_y;
double _cumulative_x_drag; double _cumulative_x_drag;
double _cumulative_y_drag; double _cumulative_y_drag;
bool _first_move;
bool _pushing; bool _pushing;
uint32_t _final_index; uint32_t _final_index;
static double _zero_gain_fraction; static double _zero_gain_fraction;

View file

@ -512,7 +512,8 @@ Editor::button_selection (ArdourCanvas::Item* /*item*/, GdkEvent* event, ItemTyp
break; break;
case ControlPointItem: case ControlPointItem:
set_selected_track_as_side_effect (op); /* for object/track exclusivity, we don't call set_selected_track_as_side_effect (op); */
if (eff_mouse_mode != MouseRange) { if (eff_mouse_mode != MouseRange) {
_mouse_changed_selection |= set_selected_control_point_from_click (press, op); _mouse_changed_selection |= set_selected_control_point_from_click (press, op);
} }

View file

@ -325,19 +325,23 @@ Editor::set_selected_control_point_from_click (bool press, Selection::Operation
if (!clicked_control_point) { if (!clicked_control_point) {
return false; return false;
} }
bool ret = false;
switch (op) { switch (op) {
case Selection::Set: case Selection::Set:
if (press) { if (press) {
selection->set (clicked_control_point); selection->set (clicked_control_point);
ret = true;
} }
break; break;
case Selection::Add: case Selection::Add:
if (press) { if (press) {
selection->add (clicked_control_point); selection->add (clicked_control_point);
ret = true;
} }
break; break;
case Selection::Toggle: case Selection::Toggle:
/* This is a bit of a hack; if we Primary-Click-Drag a control /* This is a bit of a hack; if we Primary-Click-Drag a control
point (for push drag) we want the point we clicked on to be point (for push drag) we want the point we clicked on to be
selected, otherwise we end up confusingly dragging an selected, otherwise we end up confusingly dragging an
@ -352,9 +356,11 @@ Editor::set_selected_control_point_from_click (bool press, Selection::Operation
*/ */
selection->toggle (clicked_control_point); selection->toggle (clicked_control_point);
_control_point_toggled_on_press = true; _control_point_toggled_on_press = true;
ret = true;
} else if (!press && !_control_point_toggled_on_press) { } else if (!press && !_control_point_toggled_on_press) {
/* This is the release, and the point wasn't toggled on the press, so do it now */ /* This is the release, and the point wasn't toggled on the press, so do it now */
selection->toggle (clicked_control_point); selection->toggle (clicked_control_point);
ret = true;
} else { } else {
/* Reset our flag */ /* Reset our flag */
_control_point_toggled_on_press = false; _control_point_toggled_on_press = false;
@ -365,7 +371,7 @@ Editor::set_selected_control_point_from_click (bool press, Selection::Operation
break; break;
} }
return true; return ret;
} }
void void