diff --git a/app/widget/timelinewidget/timelinewidget.h b/app/widget/timelinewidget/timelinewidget.h index fad1da588..64bbbddb0 100644 --- a/app/widget/timelinewidget/timelinewidget.h +++ b/app/widget/timelinewidget/timelinewidget.h @@ -216,6 +216,9 @@ private: virtual void HoverMove(TimelineViewMouseEvent *event) override; + protected: + TimelineCoordinate ValidatedCoordinate(TimelineCoordinate coord); + }; class PointerTool : public Tool @@ -415,7 +418,7 @@ private: }; - class AddTool : public Tool + class AddTool : public BeamTool { public: AddTool(TimelineWidget* parent); diff --git a/app/widget/timelinewidget/tool/add.cpp b/app/widget/timelinewidget/tool/add.cpp index 8f1ae9c74..a7a34a1f7 100644 --- a/app/widget/timelinewidget/tool/add.cpp +++ b/app/widget/timelinewidget/tool/add.cpp @@ -27,7 +27,7 @@ OLIVE_NAMESPACE_ENTER TimelineWidget::AddTool::AddTool(TimelineWidget *parent) : - Tool(parent), + BeamTool(parent), ghost_(nullptr) { } @@ -63,15 +63,7 @@ void TimelineWidget::AddTool::MousePress(TimelineViewMouseEvent *event) if (add_type == Timeline::kTrackTypeNone || add_type == track.type()) { - drag_start_point_ = event->GetFrame(); - - if (Core::instance()->snapping()) { - rational movement; - parent()->SnapPoint({drag_start_point_}, &movement); - if (!movement.isNull()) { - drag_start_point_ += movement; - } - } + drag_start_point_ = ValidatedCoordinate(event->GetCoordinates(true)).GetFrame(); ghost_ = new TimelineViewGhostItem(); ghost_->SetIn(drag_start_point_); diff --git a/app/widget/timelinewidget/tool/beam.cpp b/app/widget/timelinewidget/tool/beam.cpp index a04d14b9e..e2fe1120e 100644 --- a/app/widget/timelinewidget/tool/beam.cpp +++ b/app/widget/timelinewidget/tool/beam.cpp @@ -29,7 +29,20 @@ TimelineWidget::BeamTool::BeamTool(TimelineWidget *parent) : void TimelineWidget::BeamTool::HoverMove(TimelineViewMouseEvent *event) { - parent()->SetViewBeamCursor(event->GetCoordinates(true)); + parent()->SetViewBeamCursor(ValidatedCoordinate(event->GetCoordinates(true))); +} + +TimelineCoordinate TimelineWidget::BeamTool::ValidatedCoordinate(TimelineCoordinate coord) +{ + if (Core::instance()->snapping()) { + rational movement; + parent()->SnapPoint({coord.GetFrame()}, &movement); + if (!movement.isNull()) { + coord.SetFrame(coord.GetFrame() + movement); + } + } + + return coord; } OLIVE_NAMESPACE_EXIT diff --git a/app/widget/timelinewidget/tool/razor.cpp b/app/widget/timelinewidget/tool/razor.cpp index 298a36b3b..49177ce8a 100644 --- a/app/widget/timelinewidget/tool/razor.cpp +++ b/app/widget/timelinewidget/tool/razor.cpp @@ -37,7 +37,7 @@ void TimelineWidget::RazorTool::MousePress(TimelineViewMouseEvent *event) void TimelineWidget::RazorTool::MouseMove(TimelineViewMouseEvent *event) { if (!dragging_) { - drag_start_ = event->GetCoordinates(true); + drag_start_ = ValidatedCoordinate(event->GetCoordinates(true)); dragging_ = true; } diff --git a/app/widget/timelinewidget/view/timelineview.cpp b/app/widget/timelinewidget/view/timelineview.cpp index d3ae73c56..cf253104e 100644 --- a/app/widget/timelinewidget/view/timelineview.cpp +++ b/app/widget/timelinewidget/view/timelineview.cpp @@ -37,6 +37,7 @@ OLIVE_NAMESPACE_ENTER TimelineView::TimelineView(Qt::Alignment vertical_alignment, QWidget *parent) : TimelineViewBase(parent), + show_beam_cursor_(false), connected_track_list_(nullptr) { Q_ASSERT(vertical_alignment == Qt::AlignTop || vertical_alignment == Qt::AlignBottom); @@ -426,9 +427,8 @@ void TimelineView::ConnectTrackList(TrackList *list) void TimelineView::SetBeamCursor(const TimelineCoordinate &coord) { - bool update_required = true;/*(coord.GetTrack().type() == connected_track_list_->type() - || cursor_coord_.GetTrack().type() == connected_track_list_->type() - || !show_beam_cursor_);*/ + bool update_required = coord.GetTrack().type() == connected_track_list_->type() + || cursor_coord_.GetTrack().type() == connected_track_list_->type(); show_beam_cursor_ = true; cursor_coord_ = coord;