mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-08 07:45:00 +01:00
implement dragging for region/cue markers
This commit is contained in:
parent
c2a012545b
commit
ab2357dfa1
3 changed files with 30 additions and 5 deletions
|
|
@ -7158,6 +7158,7 @@ RegionMarkerDrag::RegionMarkerDrag (Editor* ed, RegionView* r, ArdourCanvas::Ite
|
||||||
, rv (r)
|
, rv (r)
|
||||||
, view (static_cast<ArdourMarker*> (i->get_data ("marker")))
|
, view (static_cast<ArdourMarker*> (i->get_data ("marker")))
|
||||||
, model (rv->find_model_cue_marker (view))
|
, model (rv->find_model_cue_marker (view))
|
||||||
|
, dragging_model (model)
|
||||||
{
|
{
|
||||||
assert (view);
|
assert (view);
|
||||||
}
|
}
|
||||||
|
|
@ -7167,27 +7168,45 @@ RegionMarkerDrag::~RegionMarkerDrag ()
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
RegionMarkerDrag::start_grab (GdkEvent *, Gdk::Cursor* c)
|
RegionMarkerDrag::start_grab (GdkEvent* ev, Gdk::Cursor* c)
|
||||||
{
|
{
|
||||||
|
Drag::start_grab (ev, c);
|
||||||
|
show_verbose_cursor_time (model.position());
|
||||||
|
setup_snap_delta (MusicSample (model.position(), 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
RegionMarkerDrag::motion (GdkEvent *, bool)
|
RegionMarkerDrag::motion (GdkEvent* ev, bool first_move)
|
||||||
{
|
{
|
||||||
|
samplepos_t pos = adjusted_current_sample (ev);
|
||||||
|
|
||||||
|
if (pos < rv->region()->position() || pos >= (rv->region()->position() + rv->region()->length())) {
|
||||||
|
/* out of bounds */
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
dragging_model.set_position (pos);
|
||||||
|
view->set_position (pos - rv->region()->position());
|
||||||
|
show_verbose_cursor_time (dragging_model.position() - rv->region()->position()); /* earlier */
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
RegionMarkerDrag::finished (GdkEvent *, bool)
|
RegionMarkerDrag::finished (GdkEvent *, bool did_move)
|
||||||
{
|
{
|
||||||
|
if (did_move) {
|
||||||
|
rv->region()->move_cue_marker (model, dragging_model.position());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
RegionMarkerDrag::aborted (bool)
|
RegionMarkerDrag::aborted (bool)
|
||||||
{
|
{
|
||||||
|
view->set_position (model.position());
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
RegionMarkerDrag::setup_pointer_sample_offset ()
|
RegionMarkerDrag::setup_pointer_sample_offset ()
|
||||||
{
|
{
|
||||||
|
const samplepos_t model_abs_pos = rv->region()->position() + (model.position() - rv->region()->start()); /* distance */
|
||||||
|
_pointer_sample_offset = raw_grab_sample() - model_abs_pos; /* distance */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1401,6 +1401,7 @@ class RegionMarkerDrag : public Drag
|
||||||
RegionView* rv;
|
RegionView* rv;
|
||||||
ArdourMarker* view;
|
ArdourMarker* view;
|
||||||
ARDOUR::CueMarker model;
|
ARDOUR::CueMarker model;
|
||||||
|
ARDOUR::CueMarker dragging_model;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* __gtk2_ardour_editor_drag_h_ */
|
#endif /* __gtk2_ardour_editor_drag_h_ */
|
||||||
|
|
|
||||||
|
|
@ -751,7 +751,12 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
|
||||||
if (Keyboard::modifier_state_equals (event->button.state, Keyboard::ModifierMask(Keyboard::PrimaryModifier|Keyboard::TertiaryModifier))) {
|
if (Keyboard::modifier_state_equals (event->button.state, Keyboard::ModifierMask(Keyboard::PrimaryModifier|Keyboard::TertiaryModifier))) {
|
||||||
hide_marker (item, event);
|
hide_marker (item, event);
|
||||||
} else {
|
} else {
|
||||||
_drags->set (new MarkerDrag (this, item), event);
|
ArdourMarker* marker = static_cast<ArdourMarker*> (item->get_data ("marker"));
|
||||||
|
if (marker->type() == ArdourMarker::RegionCue) {
|
||||||
|
_drags->set (new RegionMarkerDrag (this, marker->region_view(), item), event);
|
||||||
|
} else {
|
||||||
|
_drags->set (new MarkerDrag (this, item), event);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue