setToolTip( psz_length );
}
-#define WLENGTH 100 // px
-#define WHEIGHT 28 // px
+/* This work is derived from Amarok's work under GPLv2+
+ - Mark Kretschmann
+ - Gábor Lehel
+ */
+#define WLENGTH 90 // px
+#define WHEIGHT 25 // px
#define SOUNDMIN 0 // %
#define SOUNDMAX 200 // % OR 400 ?
SoundSlider::SoundSlider( QWidget *_parent, int _i_step, bool b_hard )
: QAbstractSlider( _parent )
{
- padding = 3;
+ paddingL = 5;
+ paddingR = 3;
f_step = ( _i_step * 100 ) / AOUT_VOLUME_MAX ;
setRange( SOUNDMIN, b_hard ? (2 * SOUNDMAX) : SOUNDMAX );
pixGradient = QPixmap( mask.size() );
- QPainter p( &pixGradient );
- QLinearGradient gradient( padding, 2, WLENGTH , 2 );
+ QLinearGradient gradient( paddingL, 4, WLENGTH + paddingL , 4 );
gradient.setColorAt( 0.0, Qt::white );
gradient.setColorAt( 0.2, QColor( 20, 226, 20 ) );
gradient.setColorAt( 0.5, QColor( 255, 176, 15 ) );
gradient.setColorAt( 1.0, QColor( 235, 30, 20 ) );
- p.setPen( Qt::NoPen );
- p.setBrush( gradient );
- p.drawRect( pixGradient.rect() );
- p.end();
+ QPainter painter( &pixGradient );
+ painter.setPen( Qt::NoPen );
+ painter.setBrush( gradient );
+ painter.drawRect( pixGradient.rect() );
+ painter.end();
- pixGradient.setMask( mask );
+ pixGradient.setMask( mask );
}
void SoundSlider::wheelEvent( QWheelEvent *event )
b_sliding = true;
i_oldvalue = value();
emit sliderPressed();
+ changeValue( event->x() - paddingL );
}
}
{
if( b_sliding )
{
- QRect rect( padding - 15, padding - 1,
+ QRect rect( paddingL - 15, -1,
WLENGTH + 15 * 2, WHEIGHT + 4 );
if( !rect.contains( event->pos() ) )
{ /* We are outside */
else
{ /* We are inside */
b_outside = false;
- changeValue( event->x() - padding );
+ changeValue( event->x() - paddingL );
emit sliderMoved( value() );
}
}
void SoundSlider::changeValue( int x )
{
- setValue( QStyle::sliderValueFromPosition(
- minimum(), maximum(), x, width() - 2 * padding ) );
+ setValue( x * maximum() / WLENGTH );
}
void SoundSlider::paintEvent(QPaintEvent *e)
{
QPainter painter( this );
- const int offset = int( double( ( width() - 2 * padding ) * value() ) / maximum() );
+ const int offset = int(
+ double( WLENGTH * value() ) /
+ double( maximum() ) ) + paddingL;
const QRectF boundsG( 0, 0, offset , pixGradient.height() );
painter.drawPixmap( boundsG, pixGradient, boundsG );
const QRectF boundsO( 0, 0, pixOutside.width(), pixOutside.height() );
painter.drawPixmap( boundsO, pixOutside, boundsO );
+ painter.setPen( palette().color( QPalette::Active, QPalette::Mid ) );
+ QFont font; font.setPixelSize( 9 );
+ painter.setFont( font );
+ const QRect rect( 0, 0, 34, 15 );
+ painter.drawText( rect, Qt::AlignRight | Qt::AlignVCenter,
+ QString::number( value() ) + '%' );
+
painter.end();
}