summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--LICENSES/GPLv3+-ImageRegistry16
-rw-r--r--src/libcalamaresui/utils/ImageRegistry.cpp93
-rw-r--r--src/libcalamaresui/utils/ImageRegistry.h48
3 files changed, 85 insertions, 72 deletions
diff --git a/LICENSES/GPLv3+-ImageRegistry b/LICENSES/GPLv3+-ImageRegistry
new file mode 100644
index 000000000..362e89766
--- /dev/null
+++ b/LICENSES/GPLv3+-ImageRegistry
@@ -0,0 +1,16 @@
+/*
+ * 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/>.
+*/
diff --git a/src/libcalamaresui/utils/ImageRegistry.cpp b/src/libcalamaresui/utils/ImageRegistry.cpp
index 9ed646e50..a8c4aa209 100644
--- a/src/libcalamaresui/utils/ImageRegistry.cpp
+++ b/src/libcalamaresui/utils/ImageRegistry.cpp
@@ -1,35 +1,30 @@
-/* === This file is part of Calamares - <http://github.com/calamares> ===
- *
- * Copyright 2014, Teo Mrnjavac <teo@kde.org>
- * Copyright 2017, Adriaan de Groot <groot@kde.org>
- *
- * Originally from Tomahawk,
+/*
* Copyright 2012, Christian Muehlhaeuser <muesli@tomahawk-player.org>
- *
- * Calamares 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.
- *
- * Calamares 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 Calamares. If not, see <http://www.gnu.org/licenses/>.
- */
+
+ 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 <QSvgRenderer>
#include <QPainter>
-#include <QIcon>
+#include <qicon.h>
#include "utils/Logger.h"
static QHash< QString, QHash< int, QHash< qint64, QPixmap > > > s_cache;
-ImageRegistry* ImageRegistry::s_instance = nullptr;
+ImageRegistry* ImageRegistry::s_instance = 0;
ImageRegistry*
@@ -46,22 +41,28 @@ ImageRegistry::ImageRegistry()
QIcon
-ImageRegistry::icon( const QString& image, CalamaresUtils::ImageMode mode )
+ImageRegistry::icon( const QString& image, TomahawkUtils::ImageMode mode )
{
- return pixmap( image, CalamaresUtils::defaultIconSize(), mode );
+ return pixmap( image, TomahawkUtils::defaultIconSize(), mode );
}
qint64
-ImageRegistry::cacheKey( const QSize& size, qreal opacity, QColor tint )
+ImageRegistry::cacheKey( const QSize& size, float opacity, QColor tint )
{
- return size.width() * 100 + size.height() * 10 + int( opacity * 100.0 ) + tint.value();
+ return size.width() * 100 + size.height() * 10 + ( opacity * 100.0 ) + tint.value();
}
QPixmap
-ImageRegistry::pixmap( const QString& image, const QSize& size, CalamaresUtils::ImageMode mode, qreal opacity, QColor tint )
+ImageRegistry::pixmap( const QString& image, const QSize& size, TomahawkUtils::ImageMode mode, float opacity, QColor tint )
{
+ if ( size.width() < 0 || size.height() < 0 )
+ {
+ Q_ASSERT( false );
+ return QPixmap();
+ }
+
QHash< qint64, QPixmap > subsubcache;
QHash< int, QHash< qint64, QPixmap > > subcache;
@@ -83,11 +84,10 @@ ImageRegistry::pixmap( const QString& image, const QSize& size, CalamaresUtils::
// Image not found in cache. Let's load it.
QPixmap pixmap;
- if ( image.toLower().endsWith( ".svg" ) ||
- image.toLower().endsWith( ".svgz" ) )
+ if ( image.toLower().endsWith( ".svg" ) )
{
QSvgRenderer svgRenderer( image );
- QPixmap p( size.isNull() ? svgRenderer.defaultSize() : size );
+ QPixmap p( size.isNull() || size.height() == 0 || size.width() == 0 ? svgRenderer.defaultSize() : size );
p.fill( Qt::transparent );
QPainter pixPainter( &p );
@@ -96,17 +96,7 @@ ImageRegistry::pixmap( const QString& image, const QSize& size, CalamaresUtils::
pixPainter.end();
if ( tint.alpha() > 0 )
- {
- QImage resultImage( p.size(), QImage::Format_ARGB32_Premultiplied );
- QPainter painter( &resultImage );
- painter.drawPixmap( 0, 0, p );
- painter.setCompositionMode( QPainter::CompositionMode_Screen );
- painter.fillRect( resultImage.rect(), tint );
- painter.end();
-
- resultImage.setAlphaChannel( p.toImage().alphaChannel() );
- p = QPixmap::fromImage( resultImage );
- }
+ p = TomahawkUtils::tinted( p, tint );
pixmap = p;
}
@@ -117,8 +107,8 @@ ImageRegistry::pixmap( const QString& image, const QSize& size, CalamaresUtils::
{
switch ( mode )
{
- case CalamaresUtils::RoundedCorners:
- pixmap = CalamaresUtils::createRoundedImage( pixmap, size );
+ case TomahawkUtils::RoundedCorners:
+ pixmap = TomahawkUtils::createRoundedImage( pixmap, size );
break;
default:
@@ -126,7 +116,18 @@ ImageRegistry::pixmap( const QString& image, const QSize& size, CalamaresUtils::
}
if ( !size.isNull() && pixmap.size() != size )
- pixmap = pixmap.scaled( size, Qt::IgnoreAspectRatio, Qt::SmoothTransformation );
+ {
+ if ( size.width() == 0 )
+ {
+ pixmap = pixmap.scaledToHeight( size.height(), Qt::SmoothTransformation );
+ }
+ else if ( size.height() == 0 )
+ {
+ pixmap = pixmap.scaledToWidth( size.width(), Qt::SmoothTransformation );
+ }
+ else
+ pixmap = pixmap.scaled( size, Qt::IgnoreAspectRatio, Qt::SmoothTransformation );
+ }
putInCache( image, size, mode, opacity, pixmap, tint );
}
@@ -136,9 +137,9 @@ ImageRegistry::pixmap( const QString& image, const QSize& size, CalamaresUtils::
void
-ImageRegistry::putInCache( const QString& image, const QSize& size, CalamaresUtils::ImageMode mode, qreal opacity, const QPixmap& pixmap, QColor tint )
+ImageRegistry::putInCache( const QString& image, const QSize& size, TomahawkUtils::ImageMode mode, float opacity, const QPixmap& pixmap, QColor tint )
{
-// cDebug( LOGVERBOSE ) << Q_FUNC_INFO << "Adding to image cache:" << image << size << mode;
+ tDebug( LOGVERBOSE ) << Q_FUNC_INFO << "Adding to image cache:" << image << size << mode;
QHash< qint64, QPixmap > subsubcache;
QHash< int, QHash< qint64, QPixmap > > subcache;
diff --git a/src/libcalamaresui/utils/ImageRegistry.h b/src/libcalamaresui/utils/ImageRegistry.h
index 4909b0183..880fa546a 100644
--- a/src/libcalamaresui/utils/ImageRegistry.h
+++ b/src/libcalamaresui/utils/ImageRegistry.h
@@ -1,45 +1,41 @@
-/* === This file is part of Calamares - <http://github.com/calamares> ===
- *
- * Copyright 2014, Teo Mrnjavac <teo@kde.org>
- *
- * Originally from Tomahawk,
+/*
* Copyright 2012, Christian Muehlhaeuser <muesli@tomahawk-player.org>
- *
- * Calamares 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.
- *
- * Calamares 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 Calamares. If not, see <http://www.gnu.org/licenses/>.
- */
+
+ 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/CalamaresUtilsGui.h"
-#include "UiDllMacro.h"
+#include "utils/TomahawkUtilsGui.h"
+#include "DllMacro.h"
-class UIDLLEXPORT ImageRegistry
+class DLLEXPORT ImageRegistry
{
public:
static ImageRegistry* instance();
explicit ImageRegistry();
- QIcon icon( const QString& image, CalamaresUtils::ImageMode mode = CalamaresUtils::Original );
- QPixmap pixmap( const QString& image, const QSize& size, CalamaresUtils::ImageMode mode = CalamaresUtils::Original, qreal opacity = 1.0, QColor tint = QColor( 0, 0, 0, 0 ) );
+ QIcon icon( const QString& image, TomahawkUtils::ImageMode mode = TomahawkUtils::Original );
+ QPixmap pixmap( const QString& image, const QSize& size, TomahawkUtils::ImageMode mode = TomahawkUtils::Original, float opacity = 1.0, QColor tint = QColor( 0, 0, 0, 0 ) );
private:
- qint64 cacheKey( const QSize& size, qreal opacity, QColor tint );
- void putInCache( const QString& image, const QSize& size, CalamaresUtils::ImageMode mode, qreal opacity, const QPixmap& pixmap, QColor tint );
+ qint64 cacheKey( const QSize& size, float opacity, QColor tint );
+ void putInCache( const QString& image, const QSize& size, TomahawkUtils::ImageMode mode, float opacity, const QPixmap& pixmap, QColor tint );
static ImageRegistry* s_instance;
};