reimplemented rubberband and hand drag routines

This commit is contained in:
itsmattkc
2019-10-14 07:28:27 +11:00
parent 6f4e5a04e4
commit b09fc2b697
8 changed files with 76 additions and 27 deletions
+32 -3
View File
@@ -11,6 +11,7 @@
TimelineWidget::TimelineWidget(QWidget *parent) :
QWidget(parent),
rubberband_(QRubberBand::Rectangle, this),
hand_drag_view_(nullptr),
timeline_node_(nullptr),
playhead_(0)
{
@@ -588,7 +589,7 @@ void TimelineWidget::AddGhost(TimelineViewGhostItem *ghost)
void TimelineWidget::StartRubberBandSelect(bool clear_current_selection)
{
rubberband_origin_ = QCursor::pos();
drag_origin_ = QCursor::pos();
rubberband_.show();
if (!clear_current_selection) {
@@ -604,14 +605,14 @@ void TimelineWidget::MoveRubberBandSelect()
{
QPoint rubberband_now = QCursor::pos();
rubberband_.setGeometry(QRect(mapFromGlobal(rubberband_origin_), mapFromGlobal(rubberband_now)).normalized());
rubberband_.setGeometry(QRect(mapFromGlobal(drag_origin_), mapFromGlobal(rubberband_now)).normalized());
foreach (TimelineView* view, views_) {
view->DeselectAll();
// Map global mouse coordinates to viewport
QRect mapped_rect(view->viewport()->mapFromGlobal(rubberband_origin_),
QRect mapped_rect(view->viewport()->mapFromGlobal(drag_origin_),
view->viewport()->mapFromGlobal(rubberband_now));
// Normalize and get items in rect
@@ -634,3 +635,31 @@ void TimelineWidget::EndRubberBandSelect()
rubberband_.hide();
rubberband_already_selected_.clear();
}
void TimelineWidget::StartHandDrag()
{
// Determine which view to hand drag by which is under the cursor now
foreach (TimelineView* view, views_) {
if (view->underMouse()) {
hand_drag_view_ = view;
hand_drag_view_origin_ = view->GetScrollCoordinates();
drag_origin_ = QCursor::pos();
break;
}
}
}
void TimelineWidget::MoveHandDrag()
{
if (hand_drag_view_ == nullptr) {
return;
}
// Drag the view if we found one in StartHandDrag()
hand_drag_view_->SetScrollCoordinates(hand_drag_view_origin_ + (drag_origin_ - QCursor::pos()));
}
void TimelineWidget::EndHandDrag()
{
hand_drag_view_ = nullptr;
}