X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fgui%2Fqt4%2Futil%2Finput_slider.cpp;h=dc81a95e26f8de414ce1de92594ec8ef41d81f67;hb=b5077c0ef45f56e5b4126f78b71aadecf8f2857f;hp=aca7b7e1a5fd5febd2f57264f6a30e0470dd28f5;hpb=5c4a98c1069891afa6b0ed52bfe87b81a1c68d8b;p=vlc diff --git a/modules/gui/qt4/util/input_slider.cpp b/modules/gui/qt4/util/input_slider.cpp index aca7b7e1a5..dc81a95e26 100644 --- a/modules/gui/qt4/util/input_slider.cpp +++ b/modules/gui/qt4/util/input_slider.cpp @@ -5,6 +5,7 @@ * $Id$ * * Authors: Clément Stenac + * Jean-Baptiste Kempf * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -20,8 +21,10 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/ +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif -#include "qt4.hpp" #include "util/input_slider.hpp" #include @@ -29,21 +32,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,34 +57,65 @@ 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 ); } +/* 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 ) +SoundSlider::SoundSlider( QWidget *_parent, int _i_step, bool b_hard, + char *psz_colors ) : QAbstractSlider( _parent ) { paddingL = 5; @@ -88,21 +123,34 @@ SoundSlider::SoundSlider( QWidget *_parent, int _i_step, bool b_hard ) f_step = ( _i_step * 100 ) / AOUT_VOLUME_MAX ; setRange( SOUNDMIN, b_hard ? (2 * SOUNDMAX) : SOUNDMAX ); + setMouseTracking( true ); + b_sliding = false; - pixOutside = QPixmap( ":/pixmaps/volume-slider-outside.png" ); + pixOutside = QPixmap( ":/volslide-outside" ); - const QPixmap temp( ":/pixmaps/volume-slider-inside.png" ); + const QPixmap temp( ":/volslide-inside" ); const QBitmap mask( temp.createHeuristicMask() ); setMinimumSize( pixOutside.size() ); pixGradient = QPixmap( mask.size() ); + /* Gradient building from the preferences */ 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 ) ); + + QStringList colorList = qfu( psz_colors ).split( ";" ); + free( psz_colors ); + + /* Fill with 255 if the list is too short */ + if( colorList.size() < 12 ) + for( int i = colorList.size(); i < 12; i++) + colorList.append( "255" ); + +#define c(i) colorList.at(i).toInt() + gradient.setColorAt( 0.0, QColor( c(0), c(1), c(2) ) ); + gradient.setColorAt( 0.2, QColor( c(3), c(4), c(5) ) ); + gradient.setColorAt( 0.5, QColor( c(6), c(7), c(8) ) ); + gradient.setColorAt( 1.0, QColor( c(9), c(10), c(11) ) ); QPainter painter( &pixGradient ); painter.setPen( Qt::NoPen ); @@ -167,7 +215,11 @@ void SoundSlider::mouseMoveEvent( QMouseEvent *event ) } } else - event->ignore(); + { + int i = ( event->x() - paddingL ) * maximum() / WLENGTH; + i = __MIN( __MAX( 0, i ), maximum() ); + setToolTip( QString("%1 \%" ).arg( i ) ); + } } void SoundSlider::changeValue( int x )