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 + + 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 . +*/ 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 - === - * - * Copyright 2014, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot - * - * Originally from Tomahawk, +/* * Copyright 2012, Christian Muehlhaeuser - * - * 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 . - */ + + 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 . +*/ #include "ImageRegistry.h" #include #include -#include +#include #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 - === - * - * Copyright 2014, Teo Mrnjavac - * - * Originally from Tomahawk, +/* * Copyright 2012, Christian Muehlhaeuser - * - * 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 . - */ + + 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 . +*/ #ifndef IMAGE_REGISTRY_H #define IMAGE_REGISTRY_H #include -#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; };