painter->drawRoundedRect( valueRect, RADIUS, RADIUS );
}
+ if ( slideroptions->buffering == 0.0 && slideroptions->animationloading > 0.0 )
+ {
+ int width = groove.width() - groove.width() / 6;
+ QRect innerRect = groove.adjusted( slideroptions->animationloading * width + 1, 1,
+ width * ( -1.0 + slideroptions->animationloading ) - 1, 0);
+ QColor overlayColor = QColor( "Orange" );
+ overlayColor.setAlpha( 128 );
+ painter->setBrush( overlayColor );
+ painter->drawRoundedRect( innerRect, RADIUS, RADIUS );
+ }
+
/* draw buffering overlay */
if ( slideroptions->buffering > 0.0 && slideroptions->buffering < 1.0 )
{
#include "util/input_slider.hpp"
#include "util/timetooltip.hpp"
#include "adapters/seekpoints.hpp"
+#include "input_manager.hpp"
#include <QPaintEvent>
#include <QPainter>
#include <QPropertyAnimation>
#include <QApplication>
#include <QDebug>
+#include <QSequentialAnimationGroup>
#define MINIMUM 0
#define MAXIMUM 1000
isJumping = false;
f_buffering = 0.0;
mHandleOpacity = 1.0;
+ mLoading = 0.0;
chapters = NULL;
mHandleLength = -1;
b_seekable = true;
animHandle->setStartValue( 0.0 );
animHandle->setEndValue( 1.0 );
+ QPropertyAnimation *animLoadingIn = new QPropertyAnimation( this, "loadingProperty", this );
+ animLoadingIn->setDuration( 2000 );
+ animLoadingIn->setStartValue( 0.0 );
+ animLoadingIn->setEndValue( 1.0 );
+ animLoadingIn->setEasingCurve( QEasingCurve::OutBounce );
+ QPropertyAnimation *animLoadingOut = new QPropertyAnimation( this, "loadingProperty", this );
+ animLoadingOut->setDuration( 2000 );
+ animLoadingOut->setStartValue( 1.0 );
+ animLoadingOut->setEndValue( 0.0 );
+ animLoadingOut->setEasingCurve( QEasingCurve::OutBounce );
+
+ animLoading = new QSequentialAnimationGroup();
+ animLoading->addAnimation( animLoadingIn );
+ animLoading->addAnimation( animLoadingOut );
+ animLoading->setLoopCount( -1 );
+
hideHandleTimer = new QTimer( this );
hideHandleTimer->setSingleShot( true );
hideHandleTimer->setInterval( FADEOUTDELAY );
+ CONNECT( MainInputManager::getInstance(), inputChanged( input_thread_t * ), this , inputUpdated( input_thread_t * ) );
CONNECT( this, sliderMoved( int ), this, startSeekTimer() );
CONNECT( seekLimitTimer, timeout(), this, updatePos() );
CONNECT( hideHandleTimer, timeout(), this, hideHandle() );
if ( f_buffering_ < f_buffering )
bufferingStart = QTime::currentTime();
f_buffering = f_buffering_;
+ if ( f_buffering > 0.0 || isEnabled() ) {
+ animLoading->stop();
+ mLoading = 0.0;
+ }
repaint();
}
+void SeekSlider::inputUpdated( input_thread_t *p_input )
+{
+ if ( p_input == NULL ) {
+ animLoading->stop();
+ mLoading = 0.0;
+ repaint();
+ }
+ else if ( f_buffering == 0.0 && !isEnabled() )
+ animLoading->start();
+}
+
void SeekSlider::processReleasedButton()
{
if ( !isSliding && !isJumping ) return;
option.animate = ( animHandle->state() == QAbstractAnimation::Running
|| hideHandleTimer->isActive() );
option.animationopacity = mHandleOpacity;
+ option.animationloading = mLoading;
option.sliderPosition = sliderPosition();
option.sliderValue = value();
option.maximum = maximum();
return mHandleOpacity;
}
+qreal SeekSlider::loading() const
+{
+ return mLoading;
+}
+
void SeekSlider::setHandleOpacity(qreal opacity)
{
mHandleOpacity = opacity;
update();
}
+void SeekSlider::setLoading(qreal loading)
+{
+ mLoading = loading;
+ /* Request a new paintevent */
+ update();
+}
+
inline int SeekSlider::handleLength()
{
if ( mHandleLength > 0 )
class QPropertyAnimation;
class QCommonStyle;
class TimeTooltip;
+class QSequentialAnimationGroup;
/* Input Slider derived from QSlider */
class SeekSlider : public QSlider
{
Q_OBJECT
Q_PROPERTY(qreal handleOpacity READ handleOpacity WRITE setHandleOpacity)
+ Q_PROPERTY(qreal loadingProperty READ loading WRITE setLoading)
public:
SeekSlider( Qt::Orientation q, QWidget *_parent = 0, bool _classic = false );
virtual ~SeekSlider();
void processReleasedButton();
qreal handleOpacity() const;
+ qreal loading() const;
void setHandleOpacity( qreal opacity );
+ void setLoading( qreal loading );
int handleLength();
private:
/* Handle's animation */
qreal mHandleOpacity;
+ qreal mLoading;
QPropertyAnimation *animHandle;
+ QSequentialAnimationGroup *animLoading;
QTimer *hideHandleTimer;
public slots:
private slots:
void startSeekTimer();
void updatePos();
+ void inputUpdated( input_thread_t *p_input );
signals:
void sliderDragged( float );