From 75ce391e7e158eae620fef64738d68e35723dfb6 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Fri, 31 May 2019 17:22:03 +0200 Subject: [PATCH] [libcalamaresui] Add branding-aware function for loading image by name --- src/libcalamaresui/Branding.cpp | 17 +++++++++++++++++ src/libcalamaresui/Branding.h | 10 ++++++++++ 2 files changed, 27 insertions(+) diff --git a/src/libcalamaresui/Branding.cpp b/src/libcalamaresui/Branding.cpp index 4e573e091..48917f1ba 100644 --- a/src/libcalamaresui/Branding.cpp +++ b/src/libcalamaresui/Branding.cpp @@ -186,6 +186,7 @@ Branding::Branding( const QString& brandingFilePath, loadStrings( m_images, doc, "images", [&]( const QString& s ) -> QString { + // See also image() const QString imageName( expand( s ) ); QFileInfo imageFi( componentDir.absoluteFilePath( imageName ) ); if ( !imageFi.exists() ) @@ -314,6 +315,22 @@ Branding::image( Branding::ImageEntry imageEntry, const QSize& size ) const } } +QPixmap +Branding::image(const QString& imageName, const QSize& size) const +{ + QDir componentDir( componentDirectory() ); + QFileInfo imageFi( componentDir.absoluteFilePath( imageName ) ); + if ( !imageFi.exists() ) + { + const auto icon = QIcon::fromTheme( imageName ); + // Not found, bail out with the filename used + if ( icon.isNull() ) + return QPixmap(); + return icon.pixmap( size ); + } + return ImageRegistry::instance()->pixmap( imageFi.absoluteFilePath(), size ); +} + QString Branding::stylesheet() const { diff --git a/src/libcalamaresui/Branding.h b/src/libcalamaresui/Branding.h index 00174f604..23a7a7a49 100644 --- a/src/libcalamaresui/Branding.h +++ b/src/libcalamaresui/Branding.h @@ -123,6 +123,16 @@ public: QString styleString( Branding::StyleEntry styleEntry ) const; QString imagePath( Branding::ImageEntry imageEntry ) const; QPixmap image( Branding::ImageEntry imageEntry, const QSize& size ) const; + + /** @brief Look up an image in the branding directory or as an icon + * + * The @p name is checked in the branding directory: if it is an image + * file, return the pixmap from that file, at the requested size. + * If it isn't a file, look it up as an icon name in the current theme. + * May return a null pixmap if nothing is found. + */ + QPixmap image( const QString& name, const QSize& size ) const; + /** @brief Stylesheet to apply for this branding. May be empty. * * The file is loaded every time this function is called, so