QGIS/src/core/qgsanimatedicon.cpp

79 lines
2.2 KiB
C++

/***************************************************************************
qgsanimatedicon.cpp - QgsAnimatedIcon
---------------------
begin : 13.3.2017
copyright : (C) 2017 by Matthias Kuhn
email : matthias@opengis.ch
***************************************************************************
* *
* 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 *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#include "qgsanimatedicon.h"
QgsAnimatedIcon::QgsAnimatedIcon( const QString &iconPath, QObject *parent )
: QObject( parent )
, mMovie( new QMovie( this ) )
{
if ( !iconPath.isEmpty() )
{
mMovie->setFileName( iconPath );
}
mMovie->setCacheMode( QMovie::CacheAll );
connect( mMovie, &QMovie::frameChanged, this, &QgsAnimatedIcon::onFrameChanged );
}
QString QgsAnimatedIcon::iconPath() const
{
return mMovie->fileName();
}
void QgsAnimatedIcon::setIconPath( const QString &iconPath )
{
mMovie->setFileName( iconPath );
}
QIcon QgsAnimatedIcon::icon() const
{
return mIcon;
}
bool QgsAnimatedIcon::connectFrameChanged( const QObject *receiver, const char *method )
{
if ( connect( this, SIGNAL( frameChanged() ), receiver, method ) )
{
mMovie->setPaused( false );
return true;
}
else
return false;
}
bool QgsAnimatedIcon::disconnectFrameChanged( const QObject *receiver, const char *method )
{
return disconnect( this, SIGNAL( frameChanged() ), receiver, method );
}
int QgsAnimatedIcon::width() const
{
return mMovie->currentPixmap().width();
}
int QgsAnimatedIcon::height() const
{
return mMovie->currentPixmap().height();
}
void QgsAnimatedIcon::onFrameChanged()
{
if ( !isSignalConnected( QMetaMethod::fromSignal( &QgsAnimatedIcon::frameChanged ) ) )
mMovie->setPaused( true );
mIcon = QIcon( mMovie->currentPixmap() );
emit frameChanged();
}