#include "patch_change.h"
#include "ui_config.h"
#include "verbose_cursor.h"
+#include "video_timeline.h"
using namespace std;
using namespace ARDOUR;
start_grab (e, c);
}
+bool
+DragManager::preview_video () const {
+ for (list<Drag*>::const_iterator i = _drags.begin(); i != _drags.end(); ++i) {
+ if ((*i)->preview_video ()) {
+ return true;
+ }
+ }
+ return false;
+}
+
void
DragManager::start_grab (GdkEvent* e, Gdk::Cursor* c)
{
, _drags (0)
, _item (i)
, _pointer_sample_offset (0)
+ , _video_sample_offset (0)
+ , _preview_video (false)
, _x_constrained (false)
, _y_constrained (false)
, _was_rolling (false)
_raw_grab_sample = _editor->canvas_event_sample (event, &_grab_x, &_grab_y);
setup_pointer_sample_offset ();
+ setup_video_sample_offset ();
+ if (! UIConfiguration::instance ().get_preview_video_frame_on_drag ()) {
+ _preview_video = false;
+ }
_grab_sample = adjusted_sample (_raw_grab_sample, event).sample;
_last_pointer_sample = _grab_sample;
_last_pointer_x = _grab_x;
_editor->verbose_cursor()->show ();
}
+void
+Drag::show_view_preview (samplepos_t sample)
+{
+ if (_preview_video) {
+ ARDOUR_UI::instance()->video_timeline->manual_seek_video_monitor (sample);
+ }
+}
+
boost::shared_ptr<Region>
Drag::add_midi_region (MidiTimeAxisView* view, bool commit)
{
return i;
}
+void
+RegionDrag::setup_video_sample_offset ()
+{
+ if (_views.empty ()) {
+ _preview_video = true;
+ return;
+ }
+ samplepos_t first_sync = _views.begin()->view->region()->sync_position ();
+ for (list<DraggingView>::const_iterator i = _views.begin(); i != _views.end(); ++i) {
+ first_sync = std::min (first_sync, i->view->region()->sync_position ());
+ }
+ _video_sample_offset = first_sync + _pointer_sample_offset - raw_grab_sample ();
+ _preview_video = true;
+}
+
RegionMotionDrag::RegionMotionDrag (Editor* e, ArdourCanvas::Item* i, RegionView* p, list<RegionView*> const & v, bool b)
: RegionDrag (e, i, p, v)
, _brushing (b)
setup_snap_delta (_last_position);
show_verbose_cursor_time (_last_position.sample);
+ show_view_preview (_last_position.sample + _video_sample_offset);
pair<TimeAxisView*, double> const tv = _editor->trackview_by_y_position (current_pointer_y ());
if (tv.first) {
if (x_delta != 0 && !_brushing) {
show_verbose_cursor_time (_last_position.sample);
+ show_view_preview (_last_position.sample + _video_sample_offset);
}
/* keep track of pointer movement */
RouteTimeAxisView* dest_rtv = 0;
if (i->view->region()->locked() || (i->view->region()->video_locked() && !_ignore_video_lock)) {
+ ++i;
continue;
}
void
TrimDrag::start_grab (GdkEvent* event, Gdk::Cursor*)
{
- TimeAxisView* tvp = &_primary->get_time_axis_view ();
-
samplepos_t const region_start = _primary->region()->position();
samplepos_t const region_end = _primary->region()->last_sample();
samplecnt_t const region_length = _primary->region()->length();
if (Keyboard::modifier_state_equals (event->button.state, ArdourKeyboard::trim_contents_modifier ())) {
/* Move the contents of the region around without changing the region bounds */
_operation = ContentsTrim;
+ _preview_video = false;
Drag::start_grab (event, _editor->cursors()->trimmer);
} else {
/* These will get overridden for a point trim.*/
show_verbose_cursor_time (pf);
break;
}
+ show_view_preview (_operation == StartTrim ? region_start : region_end);
for (list<DraggingView>::const_iterator i = _views.begin(); i != _views.end(); ++i) {
i->view->region()->suspend_property_changes ();
{
RegionView* rv = _primary;
- TimeAxisView* tvp = &_primary->get_time_axis_view ();
pair<set<boost::shared_ptr<Playlist> >::iterator,bool> insert_result;
sampleoffset_t sample_delta = 0;
// show_verbose_cursor_time (sample_delta);
break;
}
+ show_view_preview ((_operation == StartTrim ? rv->region()->position() : rv->region()->last_sample()));
}
void
setup_snap_delta (MusicSample (r->position(), 0));
show_verbose_cursor_duration (r->position(), r->position() + r->fade_in()->back()->when, 32);
+ show_view_preview (r->position() + r->fade_in()->back()->when);
}
void
}
show_verbose_cursor_duration (region->position(), region->position() + fade_length, 32);
+ show_view_preview (region->position() + fade_length);
}
void
setup_snap_delta (MusicSample (r->last_sample(), 0));
show_verbose_cursor_duration (r->last_sample() - r->fade_out()->back()->when, r->last_sample());
+ show_view_preview (r->fade_out()->back()->when);
}
void
}
show_verbose_cursor_duration (region->last_sample() - fade_length, region->last_sample());
+ show_view_preview (region->last_sample() - fade_length);
}
void
} else {
show_verbose_cursor_time (location->end());
}
+ show_view_preview ((is_start ? location->start() : location->end()) + _video_sample_offset);
setup_snap_delta (MusicSample (is_start ? location->start() : location->end(), 0));
Selection::Operation op = ArdourKeyboard::selection_type (event->button.state);
_pointer_sample_offset = raw_grab_sample() - (is_start ? location->start() : location->end());
}
+void
+MarkerDrag::setup_video_sample_offset ()
+{
+ _video_sample_offset = 0;
+ _preview_video = true;
+}
+
void
MarkerDrag::motion (GdkEvent* event, bool)
{
assert (!_copied_locations.empty());
show_verbose_cursor_time (newframe);
+ show_view_preview (newframe + _video_sample_offset);
_editor->set_snapped_cursor_position(newframe);
}
: RegionDrag (e, i, p, v)
{
DEBUG_TRACE (DEBUG::Drags, "New TimeFXDrag\n");
+ _preview_video = false;
}
void
}
const samplepos_t start = map.sample_at_quarter_note (eqaf) - _region_view->region()->position();
- Temporal::Beats length = _region_view->get_grid_beats (pf);
+ Temporal::Beats length = Temporal::Beats(1.0 / 32.0); /* 1/32 beat = 1/128 note */
_editor->begin_reversible_command (_("Create Hit"));
_region_view->clear_editor_note_selection();