timeruler: add ability to resize markers and workarea

This commit is contained in:
itsmattkc
2022-05-09 17:53:21 -07:00
parent 7d370320d8
commit 0f99d8a662
8 changed files with 218 additions and 23 deletions
@@ -195,8 +195,26 @@ public:
rational time_diff = view_->SceneToTimeNoGrid(view_->mapToScene(event->pos()).x() - drag_mouse_start_.x());
// Snap points
rational presnap_time_diff = time_diff;
SnapPoints(&time_diff);
// Validate snapping
if (Core::instance()->snapping() && view_->GetSnapService()) {
for (size_t i=0; i<selected_.size(); i++) {
rational proposed_time = dragging_.at(i) + time_diff;
T *sel = selected_.at(i);
if (sel->has_sibling_at_time(proposed_time)) {
// Unsnap
time_diff = presnap_time_diff;
if (view_->GetSnapService()) {
view_->GetSnapService()->HideSnaps();
}
break;
}
}
}
// Validate movement
for (size_t i=0; i<selected_.size(); i++) {
rational proposed_time = dragging_.at(i) + time_diff;
+7 -2
View File
@@ -486,7 +486,7 @@ void TimeBasedWidget::SetPoint(Timeline::MovementMode m, const rational& time)
}
// Set workarea
command->add_child(new WorkareaSetRangeCommand(viewer_node_->project(), points, TimeRange(in_point, out_point)));
command->add_child(new WorkareaSetRangeCommand(points->workarea(), TimeRange(in_point, out_point)));
Core::instance()->undo_stack()->push(command);
}
@@ -511,7 +511,7 @@ void TimeBasedWidget::ResetPoint(Timeline::MovementMode m)
r.set_out(TimelineWorkArea::kResetOut);
}
Core::instance()->undo_stack()->push(new WorkareaSetRangeCommand(viewer_node_->project(), points, r));
Core::instance()->undo_stack()->push(new WorkareaSetRangeCommand(points->workarea(), r));
}
void TimeBasedWidget::PageScrollInternal(QScrollBar *bar, int maximum, int screen_position, bool whole_page_scroll)
@@ -772,6 +772,11 @@ bool TimeBasedWidget::SnapPoint(const std::vector<rational> &start_times, ration
for (auto it=ruler()->GetTimelinePoints()->markers()->cbegin(); it!=ruler()->GetTimelinePoints()->markers()->cend(); it++) {
TimelineMarker* m = *it;
// Ignore selected markers
if (std::find(ruler()->GetSelectedMarkers().cbegin(), ruler()->GetSelectedMarkers().cend(), m) != ruler()->GetSelectedMarkers().cend()) {
continue;
}
qreal marker_pos = TimeToScene(m->time_range().in());
AttemptSnap(potential_snaps, screen_pt, marker_pos, start_times, m->time_range().in());
+1 -2
View File
@@ -141,6 +141,7 @@ protected:
virtual const QVector<Block*> *GetSnapBlocks() const { return nullptr; }
virtual const QVector<KeyframeViewInputConnection*> *GetSnapKeyframes() const { return nullptr; }
virtual const std::vector<NodeKeyframe*> *GetSnapIgnoreKeyframes() const { return nullptr; }
virtual const std::vector<TimelineMarker*> *GetSnapIgnoreMarkers() const { return nullptr; }
protected slots:
/**
@@ -164,8 +165,6 @@ signals:
void ConnectedNodeChanged(ViewerOutput* old, ViewerOutput* now);
private:
/**
* @brief Set either in or out point to the current playhead
*