From a8305dadb38e429a65399dd866ce19cf0d538c42 Mon Sep 17 00:00:00 2001 From: itsmattkc <34096995+itsmattkc@users.noreply.github.com> Date: Wed, 27 Jul 2022 11:47:10 -0700 Subject: [PATCH] slider: only use one screen for wrapping --- app/widget/slider/base/sliderladder.cpp | 35 +++++++++++++++---------- app/widget/slider/base/sliderladder.h | 2 ++ 2 files changed, 23 insertions(+), 14 deletions(-) diff --git a/app/widget/slider/base/sliderladder.cpp b/app/widget/slider/base/sliderladder.cpp index 747a14cf4..5c927f61a 100644 --- a/app/widget/slider/base/sliderladder.cpp +++ b/app/widget/slider/base/sliderladder.cpp @@ -77,6 +77,14 @@ SliderLadder::SliderLadder(double drag_multiplier, int nb_outer_values, QString drag_timer_.setInterval(10); connect(&drag_timer_, &QTimer::timeout, this, &SliderLadder::TimerUpdate); + screen_ = nullptr; + foreach (QScreen *screen, qApp->screens()) { + if (screen->geometry().contains(QCursor::pos())) { + screen_ = screen; + break; + } + } + if (UsingLadders()) { drag_start_x_ = -1; wrap_count_ = 0; @@ -198,21 +206,20 @@ void SliderLadder::TimerUpdate() emit DraggedByValue(now_pos - drag_start_x_, elements_.at(active_element_)->GetMultiplier()); // Determine if cursor is at desktop edge, if so wrap around to other side - int left = 0; - int right = 0; - foreach (QScreen *screen, qApp->screens()) { - left = qMin(left, screen->geometry().left()); - right = qMax(right, screen->geometry().right()); - } - if (now_pos == left || now_pos == right) { - if (now_pos == left) { - wrap_count_--; - now_pos = right-1; - } else { - wrap_count_++; - now_pos = left+1; + if (screen_) { + int left = screen_->geometry().left(); + int right = screen_->geometry().right(); + int width = right - left; + if (now_pos <= left || now_pos >= right) { + if (now_pos <= left) { + wrap_count_--; + now_pos += width; + } else { + wrap_count_++; + now_pos -= width; + } + QCursor::setPos(now_pos, QCursor::pos().y()); } - QCursor::setPos(now_pos, QCursor::pos().y()); } drag_start_x_ = now_pos; diff --git a/app/widget/slider/base/sliderladder.h b/app/widget/slider/base/sliderladder.h index 8426c1f22..16c1307ad 100644 --- a/app/widget/slider/base/sliderladder.h +++ b/app/widget/slider/base/sliderladder.h @@ -95,6 +95,8 @@ private: QTimer drag_timer_; + QScreen *screen_; + private slots: void TimerUpdate();