1
0
mirror of https://github.com/tomahawk-player/tomahawk.git synced 2025-08-30 17:20:26 +02:00

* Added ImageRegistry. Finally a global image cache (and soon to be SVG renderer).

This commit is contained in:
Christian Muehlhaeuser
2012-12-04 19:59:59 +01:00
parent 076f3370ad
commit 454e645b92
3 changed files with 152 additions and 0 deletions

View File

@@ -99,6 +99,7 @@ set( libGuiSources
resolvers/ScriptResolver.cpp
resolvers/QtScriptResolver.cpp
utils/ImageRegistry.cpp
utils/WidgetDragFilter.cpp
utils/XspfGenerator.cpp
utils/JspfLoader.cpp

View File

@@ -0,0 +1,110 @@
/*
* Copyright 2012, Christian Muehlhaeuser <muesli@tomahawk-player.org>
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 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "ImageRegistry.h"
#include "utils/Logger.h"
static QHash< QString, QHash< int, QHash< int, QPixmap > > > s_cache;
ImageRegistry* ImageRegistry::s_instance = 0;
ImageRegistry*
ImageRegistry::instance()
{
return s_instance;
}
ImageRegistry::ImageRegistry()
{
s_instance = this;
}
QPixmap
ImageRegistry::getFromCache( const QString& image, const QSize& size, TomahawkUtils::ImageMode mode )
{
QHash< int, QPixmap > subsubcache;
QHash< int, QHash< int, QPixmap > > subcache;
if ( s_cache.contains( image ) )
{
subcache = s_cache.value( image );
if ( subcache.contains( mode ) )
{
subsubcache = subcache.value( mode );
if ( subsubcache.contains( size.width() ) )
{
return subsubcache.value( size.width() );
}
}
}
// Image not found in cache. Let's load it.
QPixmap pixmap( image );
if ( !pixmap.isNull() )
{
switch ( mode )
{
case TomahawkUtils::RoundedCorners:
pixmap = TomahawkUtils::createRoundedImage( pixmap, size );
break;
default:
break;
}
if ( !size.isNull() && pixmap.size() != size )
pixmap = pixmap.scaled( size, Qt::IgnoreAspectRatio, Qt::SmoothTransformation );
putInCache( image, size, mode, pixmap );
}
return pixmap;
}
void
ImageRegistry::putInCache( const QString& image, const QSize& size, TomahawkUtils::ImageMode mode, const QPixmap& pixmap )
{
tDebug() << Q_FUNC_INFO << "Adding to image cache:" << image << size << mode;
QHash< int, QPixmap > subsubcache;
QHash< int, QHash< int, QPixmap > > subcache;
if ( s_cache.contains( image ) )
{
subcache = s_cache.value( image );
if ( subcache.contains( mode ) )
{
subsubcache = subcache.value( mode );
/* if ( subsubcache.contains( size.width() ) )
{
Q_ASSERT( false );
}*/
}
}
subsubcache.insert( size.width(), pixmap );
subcache.insert( mode, subsubcache );
s_cache.insert( image, subcache );
}

View File

@@ -0,0 +1,41 @@
/*
* Copyright 2012, Christian Muehlhaeuser <muesli@tomahawk-player.org>
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 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef IMAGE_REGISTRY_H
#define IMAGE_REGISTRY_H
#include <QPixmap>
#include "utils/TomahawkUtilsGui.h"
#include "DllMacro.h"
class DLLEXPORT ImageRegistry
{
public:
static ImageRegistry* instance();
explicit ImageRegistry();
QPixmap getFromCache( const QString& image, const QSize& size, TomahawkUtils::ImageMode mode = TomahawkUtils::Original );
private:
void putInCache( const QString& image, const QSize& size, TomahawkUtils::ImageMode mode, const QPixmap& pixmap );
static ImageRegistry* s_instance;
};
#endif // IMAGE_REGISTRY_H