Allow to drag time selection markers
This commit is contained in:
parent
c063be6a76
commit
921b4aaa75
|
@ -1480,7 +1480,6 @@ Editor::which_canvas_cursor(ItemType type) const
|
|||
case MinsecRulerItem:
|
||||
case BBTRulerItem:
|
||||
case SamplesRulerItem:
|
||||
case SelectionMarkerItem:
|
||||
cursor = _cursors->timebar;
|
||||
break;
|
||||
|
||||
|
@ -1498,6 +1497,7 @@ Editor::which_canvas_cursor(ItemType type) const
|
|||
case VideoBarItem:
|
||||
case TransportMarkerBarItem:
|
||||
case DropZoneItem:
|
||||
case SelectionMarkerItem:
|
||||
cursor = _cursors->grabber;
|
||||
break;
|
||||
|
||||
|
|
|
@ -5805,6 +5805,64 @@ SelectionDrag::aborted (bool)
|
|||
/* XXX: TODO */
|
||||
}
|
||||
|
||||
SelectionMarkerDrag::SelectionMarkerDrag (Editor* e, ArdourCanvas::Item* i)
|
||||
: Drag (e, i, e->default_time_domain ())
|
||||
, _edit_start (true)
|
||||
{
|
||||
DEBUG_TRACE (DEBUG::Drags, "New SelectionMarkerDrag\n");
|
||||
bool ok = _editor->get_selection_extents (_start_at_start, _end_at_start);
|
||||
assert (ok);
|
||||
|
||||
// SelectionStart, SelectionEnd
|
||||
cout << " SelectionMarkerDrag " << _start_at_start << " - " << _end_at_start << " " << i->whoami() << "\n";
|
||||
}
|
||||
|
||||
void
|
||||
SelectionMarkerDrag::start_grab (GdkEvent* event, Gdk::Cursor*)
|
||||
{
|
||||
Drag::start_grab (event);
|
||||
timepos_t const pos = adjusted_current_time (event, false);
|
||||
_edit_start = pos.distance (_start_at_start).abs () < pos.distance (_end_at_start).abs ();
|
||||
}
|
||||
|
||||
void
|
||||
SelectionMarkerDrag::motion (GdkEvent* event, bool first_move)
|
||||
{
|
||||
if (first_move) {
|
||||
_editor->begin_reversible_selection_op (X_("set time selection"));
|
||||
}
|
||||
timepos_t const pos = adjusted_current_time (event, true);
|
||||
if (_edit_start) {
|
||||
if (pos < _end_at_start) {
|
||||
_editor->get_selection ().clear_time ();
|
||||
_editor->get_selection ().add (pos, _end_at_start);
|
||||
}
|
||||
} else {
|
||||
if (pos > _start_at_start) {
|
||||
_editor->get_selection ().clear_time ();
|
||||
_editor->get_selection ().add (_start_at_start, pos);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
SelectionMarkerDrag::finished (GdkEvent* event, bool movement_occurred)
|
||||
{
|
||||
if (movement_occurred) {
|
||||
_editor->commit_reversible_selection_op ();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
SelectionMarkerDrag::aborted (bool movement_occurred)
|
||||
{
|
||||
if (movement_occurred) {
|
||||
_editor->abort_reversible_selection_op ();
|
||||
}
|
||||
_editor->get_selection ().clear_time ();
|
||||
_editor->get_selection ().add (_start_at_start, _end_at_start);
|
||||
}
|
||||
|
||||
RangeMarkerBarDrag::RangeMarkerBarDrag (Editor* e, ArdourCanvas::Item* i, Operation o)
|
||||
: Drag (e, i, e->default_time_domain (), false)
|
||||
, _operation (o)
|
||||
|
|
|
@ -1378,6 +1378,23 @@ private:
|
|||
Temporal::timepos_t end_at_start;
|
||||
};
|
||||
|
||||
/** Drag time-selection markers */
|
||||
class SelectionMarkerDrag : public Drag
|
||||
{
|
||||
public:
|
||||
SelectionMarkerDrag (Editor*, ArdourCanvas::Item*);
|
||||
|
||||
void start_grab (GdkEvent*, Gdk::Cursor* c = 0);
|
||||
void motion (GdkEvent*, bool);
|
||||
void finished (GdkEvent *, bool);
|
||||
void aborted (bool);
|
||||
|
||||
private:
|
||||
bool _edit_start;
|
||||
Temporal::timepos_t _start_at_start;
|
||||
Temporal::timepos_t _end_at_start;
|
||||
};
|
||||
|
||||
/** Range marker drag */
|
||||
class RangeMarkerBarDrag : public Drag
|
||||
{
|
||||
|
|
|
@ -800,6 +800,10 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
|
|||
_drags->set (new BBTMarkerDrag (this, item), event);
|
||||
return true;
|
||||
|
||||
case SelectionMarkerItem:
|
||||
_drags->set (new SelectionMarkerDrag (this, item), event);
|
||||
return true;
|
||||
|
||||
case MeterMarkerItem:
|
||||
_drags->set (
|
||||
new MeterMarkerDrag (
|
||||
|
@ -849,7 +853,6 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
|
|||
case SamplesRulerItem:
|
||||
case MinsecRulerItem:
|
||||
case MarkerBarItem:
|
||||
case SelectionMarkerItem:
|
||||
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);
|
||||
|
@ -1794,6 +1797,7 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
|
|||
case AutomationLineItem:
|
||||
case StartSelectionTrimItem:
|
||||
case EndSelectionTrimItem:
|
||||
case SelectionMarkerItem:
|
||||
return true;
|
||||
|
||||
case MarkerBarItem:
|
||||
|
@ -1841,7 +1845,6 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
|
|||
case SamplesRulerItem:
|
||||
case MinsecRulerItem:
|
||||
case BBTRulerItem:
|
||||
case SelectionMarkerItem:
|
||||
return true;
|
||||
break;
|
||||
|
||||
|
|
Loading…
Reference in New Issue