timeline: fix bug in trackviewitem drag/drop

This commit is contained in:
itsmattkc
2022-05-13 20:34:29 -07:00
parent ae8ab7ce3b
commit fb72ca4997
4 changed files with 24 additions and 3 deletions
+14 -2
View File
@@ -87,8 +87,14 @@ void ImportTool::DragEnter(TimelineViewMouseEvent *event)
}
}
PrepGhosts(drag_start_.GetFrame() - parent()->SceneToTime(import_pre_buffer_),
drag_start_.GetTrack().index());
// Create a reasonable amount of space to inset the cursor by when importing
ghost_offset_ = drag_start_.GetFrame();
if (!event->GetBypassImportBuffer()) {
ghost_offset_ -= parent()->SceneToTime(import_pre_buffer_);
}
PrepGhosts(ghost_offset_, drag_start_.GetTrack().index());
if (parent()->HasGhosts() || !parent()->GetConnectedNode()) {
event->accept();
@@ -107,6 +113,12 @@ void ImportTool::DragMove(TimelineViewMouseEvent *event)
if (parent()->HasGhosts()) {
rational time_movement = event->GetFrame() - drag_start_.GetFrame();
// Keep ghost offset no lower than 0
if (ghost_offset_ + time_movement < 0) {
time_movement = -ghost_offset_;
}
int track_movement = event->GetTrack().index() - drag_start_.GetTrack().index();
time_movement = ValidateTimeMovement(time_movement);
+2
View File
@@ -60,6 +60,8 @@ private:
int import_pre_buffer_;
rational ghost_offset_;
};
}
@@ -87,6 +87,7 @@ void TrackViewItem::dragEnterEvent(QDragEnterEvent *event)
TimelineViewMouseEvent e(0, 1, 1, track_->ToReference(), Qt::NoButton, event->keyboardModifiers());
e.SetMimeData(event->mimeData());
e.SetEvent(event);
e.SetBypassImportBuffer(true);
emit DragEntered(&e);
}
@@ -47,7 +47,8 @@ public:
button_(button),
modifiers_(modifiers),
source_event_(nullptr),
mime_data_(nullptr)
mime_data_(nullptr),
bypass_import_buffer_(false)
{
}
@@ -117,6 +118,9 @@ public:
source_event_->ignore();
}
bool GetBypassImportBuffer() const { return bypass_import_buffer_; }
void SetBypassImportBuffer(bool e) { bypass_import_buffer_ = e; }
private:
qreal scene_x_;
double scale_x_;
@@ -132,6 +136,8 @@ private:
const QMimeData* mime_data_;
bool bypass_import_buffer_;
};
}