{
DEBUG_TRACE (DEBUG::Drags, "New RegionMoveDrag\n");
- double speed = 1;
- RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*> (&_primary->get_time_axis_view ());
- if (rtv && rtv->is_track()) {
- speed = rtv->track()->speed ();
- }
-
- _last_position = MusicFrame (static_cast<framepos_t> (_primary->region()->position() / speed), 0);
+ _last_position = MusicFrame (_primary->region()->position(), 0);
}
void
void
TrimDrag::start_grab (GdkEvent* event, Gdk::Cursor*)
{
- double speed = 1.0;
TimeAxisView* tvp = &_primary->get_time_axis_view ();
RouteTimeAxisView* tv = dynamic_cast<RouteTimeAxisView*>(tvp);
- if (tv && tv->is_track()) {
- speed = tv->track()->speed();
- }
-
- framepos_t const region_start = (framepos_t) (_primary->region()->position() / speed);
- framepos_t const region_end = (framepos_t) (_primary->region()->last_frame() / speed);
- framecnt_t const region_length = (framecnt_t) (_primary->region()->length() / speed);
+ framepos_t const region_start = _primary->region()->position();
+ framepos_t const region_end = _primary->region()->last_frame();
+ framecnt_t const region_length = _primary->region()->length();
framepos_t const pf = adjusted_current_frame (event);
setup_snap_delta (MusicFrame(region_start, 0));
{
RegionView* rv = _primary;
- double speed = 1.0;
TimeAxisView* tvp = &_primary->get_time_axis_view ();
RouteTimeAxisView* tv = dynamic_cast<RouteTimeAxisView*>(tvp);
pair<set<boost::shared_ptr<Playlist> >::iterator,bool> insert_result;
frameoffset_t frame_delta = 0;
- if (tv && tv->is_track()) {
- speed = tv->track()->speed();
- }
MusicFrame adj_frame = adjusted_frame (_drags->current_pointer_frame () + snap_delta (event->button.state), event, true);
framecnt_t dt = adj_frame.frame - raw_grab_frame () + _pointer_frame_offset - snap_delta (event->button.state);
switch (_operation) {
case StartTrim:
- show_verbose_cursor_time ((framepos_t) (rv->region()->position() / speed));
+ show_verbose_cursor_time (rv->region()->position());
break;
case EndTrim:
- show_verbose_cursor_duration ((framepos_t) rv->region()->position() / speed, (framepos_t) rv->region()->last_frame() / speed);
+ show_verbose_cursor_duration (rv->region()->position(), rv->region()->last_frame());
break;
case ContentsTrim:
// show_verbose_cursor_time (frame_delta);
} else {
--bbt.bars;
}
- const double beat = map.beat_at_bbt (bbt);
- const framepos_t frame = map.frame_at_beat (beat);
+ const framepos_t frame = map.frame_at_bbt (bbt);
_real_section = map.add_meter (Meter (_marker->meter().divisions_per_bar(), _marker->meter().note_divisor())
- , beat, bbt, frame, _real_section->position_lock_style());
+ , bbt, frame, _real_section->position_lock_style());
if (!_real_section) {
aborted (true);
return;
if (ArdourKeyboard::indicates_constraint (event->button.state)) {
/* adjust previous tempo to match pointer frame */
- _editor->session()->tempo_map().gui_stretch_tempo (_tempo, map.frame_at_quarter_note (_grab_qn), pf);
+ _editor->session()->tempo_map().gui_stretch_tempo (_tempo, map.frame_at_quarter_note (_grab_qn), pf, _grab_qn, map.quarter_note_at_frame (pf));
}
ostringstream sstr;
_before_state = &map.get_state();
_tempo = const_cast<TempoSection*> (&map.tempo_section_at_frame (raw_grab_frame()));
+ if (_tempo->locked_to_meter()) {
+ _drag_valid = false;
+ return;
+ }
+
_next_tempo = map.next_tempo_section (_tempo);
if (_next_tempo) {
if (!map.next_tempo_section (_next_tempo)) {
void
TempoTwistDrag::finished (GdkEvent* event, bool movement_occurred)
{
- TempoMap& map (_editor->session()->tempo_map());
-
if (!movement_occurred || !_drag_valid) {
return;
}
_editor->tempo_curve_selected (_tempo, false);
_editor->tempo_curve_selected (_next_tempo, false);
+ TempoMap& map (_editor->session()->tempo_map());
XMLNode &after = map.get_state();
_editor->session()->add_command(new MementoCommand<TempoMap>(map, _before_state, &after));
_editor->commit_reversible_command ();
, _grab_qn (0.0)
, _tempo (0)
, _before_state (0)
+ , _drag_valid (true)
{
DEBUG_TRACE (DEBUG::Drags, "New TempoEndDrag\n");
TempoMarker* marker = reinterpret_cast<TempoMarker*> (_item->get_data ("marker"));
/* get current state */
_before_state = &tmap.get_state();
+ if (_tempo->locked_to_meter()) {
+ _drag_valid = false;
+ return;
+ }
ostringstream sstr;
void
TempoEndDrag::motion (GdkEvent* event, bool first_move)
{
+ if (!_drag_valid) {
+ return;
+ }
+
TempoMap& map (_editor->session()->tempo_map());
if (first_move) {
_editor->begin_reversible_command (_("stretch end tempo"));
}
-
-
framepos_t const pf = adjusted_current_frame (event, false);
map.gui_stretch_tempo_end (&map.tempo_section_at_frame (_tempo->frame() - 1), map.frame_at_quarter_note (_grab_qn), pf);
void
TempoEndDrag::finished (GdkEvent* event, bool movement_occurred)
{
- if (!movement_occurred) {
+ if (!movement_occurred || !_drag_valid) {
return;
}