Fix dbz possibility in moodbar

Took me forever to find this. Randomly happens when changing tracks.
This commit is contained in:
Mark Furneaux 2014-05-25 00:16:12 -04:00
parent f65c48ef9c
commit af42ccea38
1 changed files with 20 additions and 14 deletions

View File

@ -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<const QStyleOptionSlider*>(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());