}
double step = fraction * current_page_frames();
}
double step = fraction * current_page_frames();
/*
_control_scroll_target is an optional<T>
/*
_control_scroll_target is an optional<T>
- it acts like a pointer to an nframes_t, with a operator conversion to boolean
- to check that it has a value
- could possibly use playhead_cursor->current_frame to store
- the value and a boolean in the class to know when it's out of date
+ it acts like a pointer to an nframes_t, with
+ a operator conversion to boolean to check
+ that it has a value could possibly use
+ playhead_cursor->current_frame to store the
+ value and a boolean in the class to know
+ when it's out of date
- if ( !_control_scroll_target )
- {
+
+ if (!_control_scroll_target) {
_control_scroll_target = session->transport_frame();
_dragging_playhead = true;
}
_control_scroll_target = session->transport_frame();
_dragging_playhead = true;
}
switch (ev->button) {
case 1:
switch (ev->button) {
case 1:
- // Since we are about to move the playhead, cancel any running
+ // Since we will locate the playhead on button release, cancel any running
// auditions.
if (session->is_auditioning()) {
session->cancel_audition ();
}
// auditions.
if (session->is_auditioning()) {
session->cancel_audition ();
}
- /* transport playhead */
- session->request_locate (where);
+ playhead_cursor->set_position (where);
_dragging_playhead = true;
break;
_dragging_playhead = true;
break;
/* transport playhead */
_dragging_playhead = false;
snap_to (where);
/* transport playhead */
_dragging_playhead = false;
snap_to (where);
- session->request_locate (where);
+ session->request_locate (where, session->transport_rolling());
top = other;
bottom = region;
}
top = other;
bottom = region;
}
+
+ if (!(top->opaque())) {
+ continue;
+ }
offset = start - _position;
offset = start - _position;
+ /* Prevent data from piling up inthe crossfade buffers when reading a transparent region */
+ if (!(_out->opaque())) {
+ memset (crossfade_buffer_out, 0, sizeof (Sample) * to_write);
+ } else if (!(_in->opaque())) {
+ memset (crossfade_buffer_in, 0, sizeof (Sample) * to_write);
+ }
+
_out->read_at (crossfade_buffer_out, mixdown_buffer, gain_buffer, start, to_write, chan_n, read_frames, skip_frames);
_in->read_at (crossfade_buffer_in, mixdown_buffer, gain_buffer, start, to_write, chan_n, read_frames, skip_frames);
_out->read_at (crossfade_buffer_out, mixdown_buffer, gain_buffer, start, to_write, chan_n, read_frames, skip_frames);
_in->read_at (crossfade_buffer_in, mixdown_buffer, gain_buffer, start, to_write, chan_n, read_frames, skip_frames);
+ /* Top layer shouldn't be transparent */
+
+ if (!((layer_relation > 0 ? _in : _out)->opaque())) {
+ Invalidated (shared_from_this());
+ return false;
+ }
+
/* layer ordering cannot change */
int32_t new_layer_relation = (int32_t) (_in->layer() - _out->layer());
/* layer ordering cannot change */
int32_t new_layer_relation = (int32_t) (_in->layer() - _out->layer());
save = !(_splicing || _nudging);
}
save = !(_splicing || _nudging);
}
- if ((what_changed & Region::MuteChanged) &&
+ if ((what_changed & our_interests) &&
!(what_changed & Change (ARDOUR::PositionChanged|ARDOUR::LengthChanged))) {
check_dependents (region, false);
}
!(what_changed & Change (ARDOUR::PositionChanged|ARDOUR::LengthChanged))) {
check_dependents (region, false);
}