82void Slider::paint(QPainter *painter,
87 QGraphicsProxyWidget::paint(painter, option, widget);
92 QStyle *style = slider->style();
93 QStyleOptionSlider sliderOpt;
94 sliderOpt.initFrom(slider);
97 sliderOpt.subControls = QStyle::SC_None;
98 sliderOpt.activeSubControls = QStyle::SC_None;
99 sliderOpt.orientation = slider->orientation();
100 sliderOpt.maximum = slider->maximum();
101 sliderOpt.minimum = slider->minimum();
102 sliderOpt.tickPosition = (QSlider::TickPosition)slider->tickPosition();
103 sliderOpt.tickInterval = slider->tickInterval();
104 sliderOpt.upsideDown = (slider->orientation() == Qt::Horizontal) ?
105 (slider->invertedAppearance() != (sliderOpt.direction == Qt::RightToLeft))
106 : (!slider->invertedAppearance());
107 sliderOpt.direction = Qt::LeftToRight;
108 sliderOpt.sliderPosition = slider->sliderPosition();
109 sliderOpt.sliderValue = slider->value();
110 sliderOpt.singleStep = slider->singleStep();
111 sliderOpt.pageStep = slider->pageStep();
112 if (slider->orientation() == Qt::Horizontal) {
113 sliderOpt.state |= QStyle::State_Horizontal;
116 QRect backgroundRect =
117 style->subControlRect(QStyle::CC_Slider, &sliderOpt, QStyle::SC_SliderGroove, slider);
119 if (sliderOpt.orientation == Qt::Horizontal &&
120 d->background->hasElement(
"horizontal-background-center")) {
121 d->background->setElementPrefix(
"horizontal-background");
122 d->background->resizeFrame(backgroundRect.size());
123 d->background->paintFrame(painter, backgroundRect.topLeft());
124 }
else if (sliderOpt.orientation == Qt::Vertical &&
125 d->background->hasElement(
"vertical-background-center")) {
126 d->background->setElementPrefix(
"vertical-background");
127 d->background->resizeFrame(backgroundRect.size());
128 d->background->paintFrame(painter, backgroundRect.topLeft());
129 }
else if (sliderOpt.orientation == Qt::Horizontal) {
130 QRect elementRect = d->background->elementRect(
"horizontal-slider-line").toRect();
131 elementRect.setWidth(sliderOpt.rect.width());
132 elementRect.moveCenter(sliderOpt.rect.center());
133 d->background->paint(painter, elementRect,
"horizontal-slider-line");
135 QRect elementRect = d->background->elementRect(
"vertical-slider-line").toRect();
136 elementRect.setHeight(sliderOpt.rect.height());
137 elementRect.moveCenter(sliderOpt.rect.center());
138 d->background->paint(painter, elementRect,
"vertical-slider-line");
142 if (sliderOpt.tickPosition != QSlider::NoTicks) {
143 sliderOpt.subControls = QStyle::SC_SliderTickmarks;
144 sliderOpt.palette.setColor(
146 style->drawComplexControl(QStyle::CC_Slider, &sliderOpt, painter, slider);
149 QRect handleRect = style->subControlRect(QStyle::CC_Slider, &sliderOpt, QStyle::SC_SliderHandle, slider);
152 if (sliderOpt.orientation == Qt::Horizontal) {
153 handle =
"horizontal-slider-handle";
155 handle =
"vertical-slider-handle";
158 QRect elementRect = d->background->elementRect(handle).toRect();
159 elementRect.moveCenter(handleRect.center());
160 if (elementRect.right() > rect().right()) {
161 elementRect.moveRight(rect().right());
164 if (elementRect.left() < rect().left()) {
165 elementRect.moveLeft(rect().left());
168 if (elementRect.top() < rect().top()) {
169 elementRect.moveTop(rect().top());
172 if (elementRect.bottom() > rect().bottom()) {
173 elementRect.moveBottom(rect().bottom());
177 d->focusIndicator->setCustomPrefix(
"vertical-slider-");
179 d->focusIndicator->setCustomPrefix(
"horizontal-slider-");
181 d->focusIndicator->setCustomGeometry(elementRect);
182 d->background->paint(painter, elementRect, handle);