if (event->motion.state & Gdk::BUTTON1_MASK || event->motion.state & Gdk::BUTTON2_MASK) {
if (!from_autoscroll) {
- _editor->maybe_autoscroll (&event->motion, allow_vertical_autoscroll ());
+ _editor->maybe_autoscroll (true, allow_vertical_autoscroll ());
}
motion (event, _move_threshold_passed != old_move_threshold_passed);
speed = tv->track()->speed();
}
- nframes64_t region_start = (nframes64_t) (_primary->region()->position() / speed);
- nframes64_t region_end = (nframes64_t) (_primary->region()->last_frame() / speed);
- nframes64_t region_length = (nframes64_t) (_primary->region()->length() / speed);
-
+ nframes64_t const region_start = (nframes64_t) (_primary->region()->position() / speed);
+ nframes64_t const region_end = (nframes64_t) (_primary->region()->last_frame() / speed);
+ nframes64_t const region_length = (nframes64_t) (_primary->region()->length() / speed);
nframes64_t const pf = adjusted_current_frame (event);
for (list<DraggingView>::const_iterator i = _views.begin(); i != _views.end(); ++i) {
RegionView* rv = i->view;
rv->fake_set_opaque(false);
+ rv->enable_display (false);
rv->region()->clear_history ();
rv->region()->suspend_property_changes ();
for (list<DraggingView>::const_iterator i = _views.begin(); i != _views.end(); ++i) {
_editor->thaw_region_after_trim (*i->view);
+ i->view->enable_display (true);
i->view->fake_set_opaque (true);
if (_have_transaction) {
_editor->session()->add_command (new StatefulDiffCommand (i->view->region()));
if (_cursor == _editor->playhead_cursor) {
_editor->_dragging_playhead = true;
- if (_editor->session() && _was_rolling && _stop) {
- _editor->session()->request_stop ();
- }
+ Session* s = _editor->session ();
+
+ if (s) {
+ if (_was_rolling && _stop) {
+ s->request_stop ();
+ }
- if (_editor->session() && _editor->session()->is_auditioning()) {
- _editor->session()->cancel_audition ();
+ if (s->is_auditioning()) {
+ s->cancel_audition ();
+ }
+
+ s->request_suspend_timecode_transmission ();
+
+ if (s->timecode_transmission_suspended ()) {
+ nframes64_t const f = _editor->playhead_cursor->current_frame;
+ s->send_mmc_locate (f);
+ s->send_full_time_code (f);
+ }
}
}
_editor->show_verbose_time_cursor (_cursor->current_frame, 10);
+ Session* s = _editor->session ();
+ if (s && _item == &_editor->playhead_cursor->canvas_item && s->timecode_transmission_suspended ()) {
+ nframes64_t const f = _editor->playhead_cursor->current_frame;
+ s->send_mmc_locate (f);
+ s->send_full_time_code (f);
+ }
+
+
#ifdef GTKOSX
_editor->update_canvas_now ();
#endif
motion (event, false);
if (_item == &_editor->playhead_cursor->canvas_item) {
- if (_editor->session()) {
- _editor->session()->request_locate (_editor->playhead_cursor->current_frame, _was_rolling);
+ Session* s = _editor->session ();
+ if (s) {
+ s->request_locate (_editor->playhead_cursor->current_frame, _was_rolling);
_editor->_pending_locate_request = true;
+ s->request_resume_timecode_transmission ();
}
}
}
void
CursorDrag::aborted ()
{
- _editor->_dragging_playhead = false;
+ if (_editor->_dragging_playhead) {
+ _editor->session()->request_resume_timecode_transmission ();
+ _editor->_dragging_playhead = false;
+ }
+
_cursor->set_position (adjusted_frame (grab_frame (), 0, false));
}
_pointer_frame_offset = grab_frame() - ((nframes64_t) r->fade_in()->back()->when + r->position());
_editor->show_verbose_duration_cursor (r->position(), r->position() + r->fade_in()->back()->when, 10);
+
}
void
/* just a click */
- if ((event->type == GDK_BUTTON_RELEASE) && (event->button.button == 1) && Keyboard::modifier_state_equals (event->button.state, Keyboard::TertiaryModifier)) {
+ if (Keyboard::modifier_state_equals (event->button.state, Keyboard::TertiaryModifier)) {
_editor->reset_point_selection ();
}
_line->reset ();
}
+FeatureLineDrag::FeatureLineDrag (Editor* e, ArdourCanvas::Item* i)
+ : Drag (e, i),
+ _line (0),
+ _cumulative_x_drag (0)
+{
+
+}
+void
+FeatureLineDrag::start_grab (GdkEvent* event, Gdk::Cursor* /*cursor*/)
+{
+
+ Drag::start_grab (event);
+
+ _line = reinterpret_cast<SimpleLine*> (_item);
+ assert (_line);
+
+ /* need to get x coordinate in terms of parent (AudioRegionView) origin. */
+
+ double cx = event->button.x;
+ double cy = event->button.y;
+
+ _item->property_parent().get_value()->w2i(cx, cy);
+
+ /* store grab start in parent frame */
+ _region_view_grab_x = cx;
+
+ _before = _line->property_x1();
+
+ _arv = reinterpret_cast<AudioRegionView*> (_item->get_data ("regionview"));
+
+ _max_x = _editor->frame_to_pixel(_arv->get_duration());
+}
+
+void
+FeatureLineDrag::motion (GdkEvent* event, bool)
+{
+ double dx = _drags->current_pointer_x() - last_pointer_x();
+
+ double cx = _region_view_grab_x + _cumulative_x_drag + dx;
+
+ _cumulative_x_drag += dx;
+
+ /* Clamp the min and max extent of the drag to keep it within the region view bounds */
+
+ if (cx > _max_x){
+ cx = _max_x;
+ }
+ else if(cx < 0){
+ cx = 0;
+ }
+
+ _line->property_x1() = cx;
+ _line->property_x2() = cx;
+
+ _before = _line->property_x1();
+}
+
+void
+FeatureLineDrag::finished (GdkEvent* event, bool)
+{
+ _arv = reinterpret_cast<AudioRegionView*> (_item->get_data ("regionview"));
+ _arv->update_transient(_before, _line->property_x1());
+}
+
+void
+FeatureLineDrag::aborted ()
+{
+ //_line->reset ();
+}
+
void
RubberbandSelectDrag::start_grab (GdkEvent* event, Gdk::Cursor *)
{
_editor->begin_reversible_command (_("rubberband selection"));
if (grab_frame() < last_pointer_frame()) {
- committed = _editor->select_all_within (grab_frame(), last_pointer_frame() - 1, y1, y2, _editor->track_views, op);
+ committed = _editor->select_all_within (grab_frame(), last_pointer_frame() - 1, y1, y2, _editor->track_views, op, false);
} else {
- committed = _editor->select_all_within (last_pointer_frame(), grab_frame() - 1, y1, y2, _editor->track_views, op);
+ committed = _editor->select_all_within (last_pointer_frame(), grab_frame() - 1, y1, y2, _editor->track_views, op, false);
}
if (!committed) {
Gdk::Cursor* cursor = 0;
if (!_editor->temp_location) {
- _editor->temp_location = new Location;
+ _editor->temp_location = new Location (*_editor->session());
}
switch (_operation) {
flags = Location::IsRangeMarker;
_editor->range_bar_drag_rect->hide();
}
- newloc = new Location(_editor->temp_location->start(), _editor->temp_location->end(), rangename, (Location::Flags) flags);
+ newloc = new Location (
+ *_editor->session(), _editor->temp_location->start(), _editor->temp_location->end(), rangename, (Location::Flags) flags
+ );
+
_editor->session()->locations()->add (newloc, true);
XMLNode &after = _editor->session()->locations()->get_state();
_editor->session()->add_command(new MementoCommand<Locations>(*(_editor->session()->locations()), &before, &after));
switch (_editor->mouse_mode) {
case MouseObject:
/* find the two markers on either side and then make the selection from it */
- _editor->select_all_within (start, end, 0.0f, FLT_MAX, _editor->track_views, Selection::Set);
+ _editor->select_all_within (start, end, 0.0f, FLT_MAX, _editor->track_views, Selection::Set, false);
break;
case MouseRange:
region->move_selection (dx, dy);
char buf[12];
- snprintf (buf, sizeof (buf), "%s (%d)", Evoral::midi_note_name (cnote->note()->note()).c_str(),
+ snprintf (buf, sizeof (buf), "%s (%d)", Evoral::midi_note_name (cnote->note()->note() + drag_delta_note).c_str(),
(int) floor ((cnote->note()->note() + drag_delta_note)));
_editor->show_verbose_canvas_cursor_with (buf);
}