X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fgui%2Fqt4%2Futil%2Finput_slider.cpp;h=cdb6f6ce3114778e75aa9486cc36f99ee881a759;hb=f1d202e5e7254f7d9cafe7fba4f9d5f73aee5510;hp=73240774d7ef23d7da2da4deaba5c72065960ae4;hpb=3ba76bd83228994b472b72c47e892df3e5e06eda;p=vlc diff --git a/modules/gui/qt4/util/input_slider.cpp b/modules/gui/qt4/util/input_slider.cpp index 73240774d7..cdb6f6ce31 100644 --- a/modules/gui/qt4/util/input_slider.cpp +++ b/modules/gui/qt4/util/input_slider.cpp @@ -21,7 +21,6 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/ -#include "qt4.hpp" #include "util/input_slider.hpp" #include @@ -29,21 +28,22 @@ #include #include -InputSlider::InputSlider( QWidget *_parent ) : DirectSlider( _parent ) +InputSlider::InputSlider( QWidget *_parent ) : QSlider( _parent ) { InputSlider::InputSlider( Qt::Horizontal, _parent ); } InputSlider::InputSlider( Qt::Orientation q,QWidget *_parent ) : - DirectSlider( q, _parent ) + QSlider( q, _parent ) { - mymove = false; + b_sliding = false; setMinimum( 0 ); setMouseTracking(true); setMaximum( 1000 ); setSingleStep( 2 ); setPageStep( 10 ); setTracking( true ); + secstotimestr( psz_length, 0 ); CONNECT( this, valueChanged(int), this, userDrag( int ) ); } @@ -53,37 +53,68 @@ void InputSlider::setPosition( float pos, int a, int b ) setEnabled( false ); else setEnabled( true ); - mymove = true; - setValue( (int)(pos * 1000.0 ) ); - mymove = false; + + if( !b_sliding ) + setValue( (int)(pos * 1000.0 ) ); inputLength = b; } void InputSlider::userDrag( int new_value ) { - float f_pos = (float)(new_value)/1000.0; - if( !mymove ) + if( b_sliding ) { + float f_pos = (float)(new_value)/1000.0; emit sliderDragged( f_pos ); } } +void InputSlider::mouseReleaseEvent( QMouseEvent *event ) +{ + b_sliding = false; +} + +void InputSlider::mousePressEvent(QMouseEvent* event) +{ + b_sliding = true ; + if( event->button() != Qt::LeftButton && + event->button() != Qt::MidButton ) + { + QSlider::mousePressEvent( event ); + return; + } + + QMouseEvent newEvent( event->type(), event->pos(), event->globalPos(), + Qt::MouseButton( event->button() ^ Qt::LeftButton ^ Qt::MidButton ), + Qt::MouseButtons( event->buttons() ^ Qt::LeftButton ^ Qt::MidButton ), + event->modifiers() ); + QSlider::mousePressEvent( &newEvent ); +} + void InputSlider::mouseMoveEvent(QMouseEvent *event) { - char psz_length[MSTRTIME_MAX_SIZE]; + if( b_sliding ) + { + QSlider::mouseMoveEvent( event ); + } + secstotimestr( psz_length, ( event->x() * inputLength) / size().width() ); 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 ); @@ -97,19 +128,19 @@ SoundSlider::SoundSlider( QWidget *_parent, int _i_step, bool b_hard ) 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 ) @@ -128,6 +159,7 @@ void SoundSlider::mousePressEvent( QMouseEvent *event ) b_sliding = true; i_oldvalue = value(); emit sliderPressed(); + changeValue( event->x() - paddingL ); } } @@ -149,7 +181,7 @@ void SoundSlider::mouseMoveEvent( QMouseEvent *event ) { 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 */ @@ -160,7 +192,7 @@ void SoundSlider::mouseMoveEvent( QMouseEvent *event ) else { /* We are inside */ b_outside = false; - changeValue( event->x() - padding ); + changeValue( event->x() - paddingL ); emit sliderMoved( value() ); } } @@ -170,14 +202,15 @@ void SoundSlider::mouseMoveEvent( QMouseEvent *event ) 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 ); @@ -185,6 +218,13 @@ void SoundSlider::paintEvent(QPaintEvent *e) 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(); }