From af42ccea38b8c5af73148554823829d4f9750436 Mon Sep 17 00:00:00 2001 From: Mark Furneaux Date: Sun, 25 May 2014 00:16:12 -0400 Subject: [PATCH] Fix dbz possibility in moodbar Took me forever to find this. Randomly happens when changing tracks. --- src/moodbar/moodbarproxystyle.cpp | 34 ++++++++++++++++++------------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/src/moodbar/moodbarproxystyle.cpp b/src/moodbar/moodbarproxystyle.cpp index 2dd99f308..523abc749 100644 --- a/src/moodbar/moodbarproxystyle.cpp +++ b/src/moodbar/moodbarproxystyle.cpp @@ -241,15 +241,15 @@ void MoodbarProxyStyle::EnsureMoodbarRendered(const QStyleOptionSlider* opt) { } if (moodbar_pixmap_dirty_) { - moodbar_pixmap_ = - MoodbarPixmap(moodbar_colors_, slider_->size(), slider_->palette(), opt); + moodbar_pixmap_ = MoodbarPixmap(moodbar_colors_, slider_->size(), + slider_->palette(), opt); moodbar_pixmap_dirty_ = false; } } int MoodbarProxyStyle::GetExtraSpace(const QStyleOptionComplex* opt) const { - int space_available = - slider_->style()->pixelMetric(QStyle::PM_SliderSpaceAvailable, opt, slider_); + int space_available = slider_->style()->pixelMetric( + QStyle::PM_SliderSpaceAvailable, opt, slider_); int w = slider_->width(); return w - space_available; } @@ -272,20 +272,25 @@ QRect MoodbarProxyStyle::subControlRect(ComplexControl cc, switch (sc) { case SC_SliderGroove: { int margin_leftright = GetExtraSpace(opt) / 2; - return opt->rect.adjusted(margin_leftright, kMarginSize, -margin_leftright, - -kMarginSize); + return opt->rect.adjusted(margin_leftright, kMarginSize, + -margin_leftright, -kMarginSize); } case SC_SliderHandle: { const QStyleOptionSlider* slider_opt = qstyleoption_cast(opt); - int space_available = - slider_->style()->pixelMetric(QStyle::PM_SliderSpaceAvailable, opt, slider_); + int space_available = slider_->style()->pixelMetric( + QStyle::PM_SliderSpaceAvailable, opt, slider_); int w = slider_->width(); int margin = (w - space_available) / 2; - int x = (slider_opt->sliderValue - slider_opt->minimum) * - (space_available - kArrowWidth) / - (slider_opt->maximum - slider_opt->minimum); + int x = 0; + + if (slider_opt->maximum != slider_opt->minimum) { + x = (slider_opt->sliderValue - slider_opt->minimum) * + (space_available - kArrowWidth) / + (slider_opt->maximum - slider_opt->minimum); + } + x += margin; return QRect(QPoint(opt->rect.left() + x, opt->rect.top()), @@ -325,14 +330,14 @@ QPixmap MoodbarProxyStyle::MoodbarPixmap(const ColorVector& colors, const QSize& size, const QPalette& palette, const QStyleOptionSlider* opt) { - int margin_leftright = GetExtraSpace(opt); const QRect rect(QPoint(0, 0), size); QRect border_rect(rect); // I would expect we need to adjust by margin_lr/2, so the extra space is // distributed on both side, but if we do so, the margin is too small, and I'm // not sure why... - border_rect.adjust(margin_leftright, kMarginSize, -margin_leftright, -kMarginSize); + border_rect.adjust(margin_leftright, kMarginSize, -margin_leftright, + -kMarginSize); QRect inner_rect(border_rect); inner_rect.adjust(kBorderSize, kBorderSize, -kBorderSize, -kBorderSize); @@ -355,7 +360,8 @@ QPixmap MoodbarProxyStyle::MoodbarPixmap(const ColorVector& colors, p.drawRect(rect.adjusted(1, 1, -2, -2)); // Then, thicker border on left and right, because of the margins. p.setPen(QPen(palette.brush(QPalette::Active, QPalette::Background), - margin_leftright*2-kBorderSize, Qt::SolidLine, Qt::FlatCap, Qt::MiterJoin)); + margin_leftright * 2 - kBorderSize, Qt::SolidLine, Qt::FlatCap, + Qt::MiterJoin)); p.drawLine(rect.topLeft(), rect.bottomLeft()); p.drawLine(rect.topRight(), rect.bottomRight());