/*!\reimp */ void QSlider::paintEvent( QPaintEvent * ) { QPainter p( this ); const QRect & sliderR = sliderRect(); const QColorGroup & g = colorGroup(); int mid = thickness()/2; if ( ticks & Above ) mid += style().sliderLength() / 8; if ( ticks & Below ) mid -= style().sliderLength() / 8; if ( orient == Horizontal ) { style().drawSliderGroove(&p, 0, tickOffset, width(), thickness(), g, mid, Horizontal ); // p.fillRect( 0, 0, width(), tickOffset, g.background() ); // p.fillRect( 0, tickOffset + thickness(), // width(), height()/*###*/, g.background() ); erase( 0, 0, width(), tickOffset ); erase( 0, tickOffset + thickness(), width(), height() ); } else { style().drawSliderGroove( &p, tickOffset, 0, thickness(), height(), g, mid, Vertical ); // p.fillRect( 0, 0, tickOffset, height(), g.background() ); // p.fillRect( tickOffset + thickness(), 0, // width()/*###*/, height(), g.background() ); erase( 0, 0, tickOffset, height() ); erase( tickOffset + thickness(), 0, width()/*###*/, height() ); } int interval = tickInt; if ( interval <= 0 ) { interval = lineStep(); if ( positionFromValue( interval ) - positionFromValue( 0 ) < 3 ) interval = pageStep(); } if ( ticks & Above ) drawTicks( &p, g, 0, tickOffset - 2, interval ); if ( ticks & Below ) { int avail = (orient == Horizontal) ? height() : width(); avail -= tickOffset + thickness(); drawTicks( &p, g, tickOffset + thickness() + 1, avail - 2, interval ); } if ( hasFocus() ) { QRect r; if ( orient == Horizontal ) r.setRect( 0, tickOffset-1, width(), thickness()+2 ); else r.setRect( tickOffset-1, 0, thickness()+2, height() ); r = r.intersect( rect() ); if (style() == MotifStyle) style().drawFocusRect(&p, QRect(r.x()+1, r.y()+1, r.width()-2, r.height()-2), g); else style().drawFocusRect(&p, r, g); } paintSlider( &p, g, sliderR ); }
void QvisOpacitySlider::rangeChange() { int newPos = positionFromValue(value()); if(newPos != sliderPos) reallyMoveSlider( newPos ); }
void QSlider::moveSlider( int pos ) { int a = available(); int newPos = QMIN( a, QMAX( 0, pos ) ); int newVal = valueFromPosition( newPos ); if ( sliderVal != newVal ) { sliderVal = newVal; emit sliderMoved( sliderVal ); } if ( tracking() && sliderVal != value() ) { setValue( sliderVal ); // ### Why do we emit the valueChanged signal here? It will get emitted in // valueChange() anyway... //emit valueChanged( sliderVal ); } switch ( (GUIStyle)style() ) { case WindowsStyle: newPos = positionFromValue( newVal ); break; default: case MotifStyle: break; } if ( sliderPos != newPos ) reallyMoveSlider( newPos ); }
/*!\reimp */ void QSlider::mouseMoveEvent( QMouseEvent *e ) { if ( state != Dragging ) return; if ( style() == WindowsStyle ) { QRect r = rect(); int m = style().maximumSliderDragDistance(); if ( m >= 0 ) { if ( orientation() == Horizontal ) r.setRect( r.x() - m, r.y() - 2*m/3, r.width() + 2*m, r.height() + 3*m ); else r.setRect( r.x() - 2*m/3, r.y() - m, r.width() + 3*m, r.height() + 2*m ); if ( !r.contains( e->pos() ) ) { moveSlider( positionFromValue( sliderStartVal) ); return; } } } int pos = goodPart( e->pos() ); moveSlider( pos - clickOffset ); }
void QvisOpacitySlider::paintEvent(QPaintEvent *) { QPainter p(this); int mid = thickness()/2 + sliderLength() / 8; // Draw the gradient pixmap. if(gradientImage == 0) createGradientImage(); p.drawImage(0, tickOffset, *gradientImage); // Draw the groove on which the slider slides. drawSliderGroove(&p, 0, tickOffset, imageWidth(), thickness(), mid); // Figure out the interval between the tick marks. int interval = tickInt; if(interval <= 0) { interval = singleStep(); if(positionFromValue(interval) - positionFromValue(0) < 3) interval = pageStep(); } // Draw the tick marks. p.fillRect(0, 0, imageWidth(), tickOffset, palette().brush(QPalette::Background)); p.fillRect(0, tickOffset + thickness(), imageWidth(), height(), palette().brush(QPalette::Background)); drawTicks(&p, palette(), 0, tickOffset - 2, interval); // Draw the slider paintSlider(&p, palette(), sliderRect()); // Draw the value text. paintValueText(&p, palette(), imageWidth(), height()); // If this widget has focus, draw the focus rectangle. if(hasFocus()) { QStyleOptionFocusRect so; so.initFrom(this); style()->drawPrimitive(QStyle::PE_FrameFocusRect, &so, &p); } }
void QSlider::valueChange() { if ( sliderVal != value() ) { int newPos = positionFromValue( value() ); sliderVal = value(); reallyMoveSlider( newPos ); } emit valueChanged(value()); }
/*! Reimplementation of QWidget::updateMask(). Draws the mask of the slider when transparency is required. \sa QWidget::setAutoMask() */ void QSlider::updateMask() { QBitmap bm( size() ); bm.fill( color0 ); { QPainter p( &bm, this ); QRect sliderR = sliderRect(); QColorGroup g(color1, color1, color1, color1, color1, color1, color1, color1, color0); int mid = tickOffset + thickness()/2; if ( ticks & Above ) mid += style().sliderLength() / 8; if ( ticks & Below ) mid -= style().sliderLength() / 8; if ( orient == Horizontal ) { style().drawSliderGrooveMask(&p, 0, tickOffset, width(), thickness(), mid, Horizontal ); } else { style().drawSliderGrooveMask( &p, tickOffset, 0, thickness(), height(), mid, Vertical ); } style().drawSliderMask( &p, sliderR.x(), sliderR.y(), sliderR.width(), sliderR.height(), orient, ticks & Above, ticks & Below ); int interval = tickInt; if ( interval <= 0 ) { interval = lineStep(); if ( positionFromValue( interval ) - positionFromValue( 0 ) < 3 ) interval = pageStep(); } if ( ticks & Above ) drawTicks( &p, g, 0, tickOffset - 2, interval ); if ( ticks & Below ) { int avail = (orient == Horizontal) ? height() : width(); avail -= tickOffset + thickness(); drawTicks( &p, g, tickOffset + thickness() + 1, avail - 2, interval ); } } setMask( bm ); }
void QvisOpacitySlider::moveSlider(int pos) { int newPos = qMin(available(), qMax( 0, pos)); int newVal = valueFromPosition(newPos); newPos = positionFromValue( newVal ); if(sliderPos != newPos) reallyMoveSlider(newPos); }
void QvisOpacitySlider::drawTicks( QPainter *p, const QPalette& g, int dist, int w, int i) const { p->setPen(g.color(QPalette::Text)); int v = minimum(); int fudge = sliderLength() / 2 + 1; while(v <= maximum() + 1) { int pos = positionFromValue(v) + fudge; p->drawLine( pos, dist, pos, dist + w ); v += i; } }
void QSlider::drawTicks( QPainter *p, const QColorGroup& g, int dist, int w, int i ) const { p->setPen( g.foreground() ); int v = minValue(); int fudge = slideLength() / 2 + 1; if(!i) i = 1; while ( v <= maxValue() + 1 ) { int pos = positionFromValue( v ) + fudge; if ( orient == Horizontal ) p->drawLine( pos, dist, pos, dist + w ); else p->drawLine( dist, pos, dist + w, pos ); v += i; } }
void QvisOpacitySlider::mouseMoveEvent(QMouseEvent *e) { if(state != Dragging) return; QRect r = rect(); int m = maximumSliderDragDistance(); if(m >= 0) { r.setRect(r.x() - m, r.y() - 2*m/3, r.width() + 2*m, r.height() + 3*m); if(!r.contains(e->pos())) { moveSlider( positionFromValue( sliderStartVal) ); return; } } moveSlider(e->pos().x() - clickOffset ); }