Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsanimatedicon.cpp - QgsAnimatedIcon 3 : : 4 : : --------------------- 5 : : begin : 13.3.2017 6 : : copyright : (C) 2017 by Matthias Kuhn 7 : : email : matthias@opengis.ch 8 : : *************************************************************************** 9 : : * * 10 : : * This program is free software; you can redistribute it and/or modify * 11 : : * it under the terms of the GNU General Public License as published by * 12 : : * the Free Software Foundation; either version 2 of the License, or * 13 : : * (at your option) any later version. * 14 : : * * 15 : : ***************************************************************************/ 16 : : 17 : : #include "qgsanimatedicon.h" 18 : : 19 : 0 : QgsAnimatedIcon::QgsAnimatedIcon( const QString &iconPath, QObject *parent ) 20 : 0 : : QObject( parent ) 21 : 0 : , mMovie( new QMovie( this ) ) 22 : 0 : { 23 : 0 : if ( !iconPath.isEmpty() ) 24 : : { 25 : 0 : mMovie->setFileName( iconPath ); 26 : 0 : } 27 : 0 : mMovie->setCacheMode( QMovie::CacheAll ); 28 : 0 : connect( mMovie, &QMovie::frameChanged, this, &QgsAnimatedIcon::onFrameChanged ); 29 : 0 : } 30 : : 31 : 0 : QString QgsAnimatedIcon::iconPath() const 32 : : { 33 : 0 : return mMovie->fileName(); 34 : : } 35 : : 36 : 0 : void QgsAnimatedIcon::setIconPath( const QString &iconPath ) 37 : : { 38 : 0 : mMovie->setFileName( iconPath ); 39 : 0 : } 40 : : 41 : 0 : QIcon QgsAnimatedIcon::icon() const 42 : : { 43 : 0 : return mIcon; 44 : : } 45 : : 46 : 0 : bool QgsAnimatedIcon::connectFrameChanged( const QObject *receiver, const char *method ) 47 : : { 48 : 0 : if ( connect( this, SIGNAL( frameChanged() ), receiver, method ) ) 49 : : { 50 : 0 : mMovie->setPaused( false ); 51 : 0 : return true; 52 : : } 53 : : else 54 : 0 : return false; 55 : 0 : } 56 : : 57 : 0 : bool QgsAnimatedIcon::disconnectFrameChanged( const QObject *receiver, const char *method ) 58 : : { 59 : 0 : return disconnect( this, SIGNAL( frameChanged() ), receiver, method ); 60 : : } 61 : : 62 : 0 : int QgsAnimatedIcon::width() const 63 : : { 64 : 0 : return mMovie->currentPixmap().width(); 65 : 0 : } 66 : : 67 : 0 : int QgsAnimatedIcon::height() const 68 : : { 69 : 0 : return mMovie->currentPixmap().height(); 70 : 0 : } 71 : 0 : void QgsAnimatedIcon::onFrameChanged() 72 : : { 73 : 0 : if ( !isSignalConnected( QMetaMethod::fromSignal( &QgsAnimatedIcon::frameChanged ) ) ) 74 : 0 : mMovie->setPaused( true ); 75 : : 76 : 0 : mIcon = QIcon( mMovie->currentPixmap() ); 77 : 0 : emit frameChanged(); 78 : 0 : }