Merge pull request #4376 from TheUbuntuGuy/master
Fix dbz possibility in moodbar
This commit is contained in:
commit
f9be68a3a1
|
@ -241,15 +241,15 @@ void MoodbarProxyStyle::EnsureMoodbarRendered(const QStyleOptionSlider* opt) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (moodbar_pixmap_dirty_) {
|
if (moodbar_pixmap_dirty_) {
|
||||||
moodbar_pixmap_ =
|
moodbar_pixmap_ = MoodbarPixmap(moodbar_colors_, slider_->size(),
|
||||||
MoodbarPixmap(moodbar_colors_, slider_->size(), slider_->palette(), opt);
|
slider_->palette(), opt);
|
||||||
moodbar_pixmap_dirty_ = false;
|
moodbar_pixmap_dirty_ = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int MoodbarProxyStyle::GetExtraSpace(const QStyleOptionComplex* opt) const {
|
int MoodbarProxyStyle::GetExtraSpace(const QStyleOptionComplex* opt) const {
|
||||||
int space_available =
|
int space_available = slider_->style()->pixelMetric(
|
||||||
slider_->style()->pixelMetric(QStyle::PM_SliderSpaceAvailable, opt, slider_);
|
QStyle::PM_SliderSpaceAvailable, opt, slider_);
|
||||||
int w = slider_->width();
|
int w = slider_->width();
|
||||||
return w - space_available;
|
return w - space_available;
|
||||||
}
|
}
|
||||||
|
@ -272,20 +272,25 @@ QRect MoodbarProxyStyle::subControlRect(ComplexControl cc,
|
||||||
switch (sc) {
|
switch (sc) {
|
||||||
case SC_SliderGroove: {
|
case SC_SliderGroove: {
|
||||||
int margin_leftright = GetExtraSpace(opt) / 2;
|
int margin_leftright = GetExtraSpace(opt) / 2;
|
||||||
return opt->rect.adjusted(margin_leftright, kMarginSize, -margin_leftright,
|
return opt->rect.adjusted(margin_leftright, kMarginSize,
|
||||||
-kMarginSize);
|
-margin_leftright, -kMarginSize);
|
||||||
}
|
}
|
||||||
case SC_SliderHandle: {
|
case SC_SliderHandle: {
|
||||||
const QStyleOptionSlider* slider_opt =
|
const QStyleOptionSlider* slider_opt =
|
||||||
qstyleoption_cast<const QStyleOptionSlider*>(opt);
|
qstyleoption_cast<const QStyleOptionSlider*>(opt);
|
||||||
|
|
||||||
int space_available =
|
int space_available = slider_->style()->pixelMetric(
|
||||||
slider_->style()->pixelMetric(QStyle::PM_SliderSpaceAvailable, opt, slider_);
|
QStyle::PM_SliderSpaceAvailable, opt, slider_);
|
||||||
int w = slider_->width();
|
int w = slider_->width();
|
||||||
int margin = (w - space_available) / 2;
|
int margin = (w - space_available) / 2;
|
||||||
int x = (slider_opt->sliderValue - slider_opt->minimum) *
|
int x = 0;
|
||||||
(space_available - kArrowWidth) /
|
|
||||||
(slider_opt->maximum - slider_opt->minimum);
|
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;
|
x += margin;
|
||||||
|
|
||||||
return QRect(QPoint(opt->rect.left() + x, opt->rect.top()),
|
return QRect(QPoint(opt->rect.left() + x, opt->rect.top()),
|
||||||
|
@ -325,14 +330,14 @@ QPixmap MoodbarProxyStyle::MoodbarPixmap(const ColorVector& colors,
|
||||||
const QSize& size,
|
const QSize& size,
|
||||||
const QPalette& palette,
|
const QPalette& palette,
|
||||||
const QStyleOptionSlider* opt) {
|
const QStyleOptionSlider* opt) {
|
||||||
|
|
||||||
int margin_leftright = GetExtraSpace(opt);
|
int margin_leftright = GetExtraSpace(opt);
|
||||||
const QRect rect(QPoint(0, 0), size);
|
const QRect rect(QPoint(0, 0), size);
|
||||||
QRect border_rect(rect);
|
QRect border_rect(rect);
|
||||||
// I would expect we need to adjust by margin_lr/2, so the extra space is
|
// 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
|
// distributed on both side, but if we do so, the margin is too small, and I'm
|
||||||
// not sure why...
|
// 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);
|
QRect inner_rect(border_rect);
|
||||||
inner_rect.adjust(kBorderSize, kBorderSize, -kBorderSize, -kBorderSize);
|
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));
|
p.drawRect(rect.adjusted(1, 1, -2, -2));
|
||||||
// Then, thicker border on left and right, because of the margins.
|
// Then, thicker border on left and right, because of the margins.
|
||||||
p.setPen(QPen(palette.brush(QPalette::Active, QPalette::Background),
|
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.topLeft(), rect.bottomLeft());
|
||||||
p.drawLine(rect.topRight(), rect.bottomRight());
|
p.drawLine(rect.topRight(), rect.bottomRight());
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue