QFusionStyle: fix painting handle with tickmarks enabled
The handle was drawn outside of the widget's rect when tickmarks were enabled (TicksAbove/TicksLeft). Pick-to: 6.5 Fixes: QTBUG-83604 Change-Id: Iff3a1a330317576a759e3fd6795d0b4849e2044b Reviewed-by: Axel Spoerl <axel.spoerl@qt.io> (cherry picked from commit 574692e5ac95e1f2061812a43f14d325c077b7c8) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> (cherry picked from commit eb31663d038185661854b854e7765d2947121664)
This commit is contained in:
parent
ed68a6ba41
commit
3011891fb4
@ -3305,23 +3305,28 @@ QRect QFusionStyle::subControlRect(ComplexControl control, const QStyleOptionCom
|
|||||||
int tickSize = proxy()->pixelMetric(PM_SliderTickmarkOffset, option, widget);
|
int tickSize = proxy()->pixelMetric(PM_SliderTickmarkOffset, option, widget);
|
||||||
switch (subControl) {
|
switch (subControl) {
|
||||||
case SC_SliderHandle: {
|
case SC_SliderHandle: {
|
||||||
|
const bool bothTicks = (slider->tickPosition & QSlider::TicksBothSides) == QSlider::TicksBothSides;
|
||||||
if (slider->orientation == Qt::Horizontal) {
|
if (slider->orientation == Qt::Horizontal) {
|
||||||
rect.setHeight(proxy()->pixelMetric(PM_SliderThickness, option));
|
rect.setHeight(proxy()->pixelMetric(PM_SliderThickness, option));
|
||||||
rect.setWidth(proxy()->pixelMetric(PM_SliderLength, option));
|
rect.setWidth(proxy()->pixelMetric(PM_SliderLength, option));
|
||||||
int centerY = slider->rect.center().y() - rect.height() / 2;
|
int centerY = slider->rect.center().y() - rect.height() / 2;
|
||||||
|
if (!bothTicks) {
|
||||||
if (slider->tickPosition & QSlider::TicksAbove)
|
if (slider->tickPosition & QSlider::TicksAbove)
|
||||||
centerY += tickSize;
|
centerY += tickSize;
|
||||||
if (slider->tickPosition & QSlider::TicksBelow)
|
if (slider->tickPosition & QSlider::TicksBelow)
|
||||||
centerY -= tickSize;
|
centerY -= tickSize - 1;
|
||||||
|
}
|
||||||
rect.moveTop(centerY);
|
rect.moveTop(centerY);
|
||||||
} else {
|
} else {
|
||||||
rect.setWidth(proxy()->pixelMetric(PM_SliderThickness, option));
|
rect.setWidth(proxy()->pixelMetric(PM_SliderThickness, option));
|
||||||
rect.setHeight(proxy()->pixelMetric(PM_SliderLength, option));
|
rect.setHeight(proxy()->pixelMetric(PM_SliderLength, option));
|
||||||
int centerX = slider->rect.center().x() - rect.width() / 2;
|
int centerX = slider->rect.center().x() - rect.width() / 2;
|
||||||
|
if (!bothTicks) {
|
||||||
if (slider->tickPosition & QSlider::TicksAbove)
|
if (slider->tickPosition & QSlider::TicksAbove)
|
||||||
centerX += tickSize;
|
centerX += tickSize;
|
||||||
if (slider->tickPosition & QSlider::TicksBelow)
|
if (slider->tickPosition & QSlider::TicksBelow)
|
||||||
centerX -= tickSize;
|
centerX -= tickSize - 1;
|
||||||
|
}
|
||||||
rect.moveLeft(centerX);
|
rect.moveLeft(centerX);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3329,18 +3334,23 @@ QRect QFusionStyle::subControlRect(ComplexControl control, const QStyleOptionCom
|
|||||||
case SC_SliderGroove: {
|
case SC_SliderGroove: {
|
||||||
QPoint grooveCenter = slider->rect.center();
|
QPoint grooveCenter = slider->rect.center();
|
||||||
const int grooveThickness = QStyleHelper::dpiScaled(7, option);
|
const int grooveThickness = QStyleHelper::dpiScaled(7, option);
|
||||||
|
const bool bothTicks = (slider->tickPosition & QSlider::TicksBothSides) == QSlider::TicksBothSides;
|
||||||
if (slider->orientation == Qt::Horizontal) {
|
if (slider->orientation == Qt::Horizontal) {
|
||||||
rect.setHeight(grooveThickness);
|
rect.setHeight(grooveThickness);
|
||||||
|
if (!bothTicks) {
|
||||||
if (slider->tickPosition & QSlider::TicksAbove)
|
if (slider->tickPosition & QSlider::TicksAbove)
|
||||||
grooveCenter.ry() += tickSize;
|
grooveCenter.ry() += tickSize;
|
||||||
if (slider->tickPosition & QSlider::TicksBelow)
|
if (slider->tickPosition & QSlider::TicksBelow)
|
||||||
grooveCenter.ry() -= tickSize;
|
grooveCenter.ry() -= tickSize - 1;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
rect.setWidth(grooveThickness);
|
rect.setWidth(grooveThickness);
|
||||||
|
if (!bothTicks) {
|
||||||
if (slider->tickPosition & QSlider::TicksAbove)
|
if (slider->tickPosition & QSlider::TicksAbove)
|
||||||
grooveCenter.rx() += tickSize;
|
grooveCenter.rx() += tickSize;
|
||||||
if (slider->tickPosition & QSlider::TicksBelow)
|
if (slider->tickPosition & QSlider::TicksBelow)
|
||||||
grooveCenter.rx() -= tickSize;
|
grooveCenter.rx() -= tickSize - 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
rect.moveCenter(grooveCenter);
|
rect.moveCenter(grooveCenter);
|
||||||
break;
|
break;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user