File indexing completed on 2024-04-28 04:05:02

0001 /*
0002     SPDX-FileCopyrightText: 2012 Viranch Mehta <viranch.mehta@gmail.com>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-only
0005 */
0006 
0007 #ifndef KGAMEIMAGEPROVIDER_H
0008 #define KGAMEIMAGEPROVIDER_H
0009 
0010 // Qt
0011 #include <QQuickImageProvider>
0012 #include <QSvgRenderer>
0013 
0014 class KGameThemeProvider;
0015 
0016 /**
0017  * @class KGameImageProvider
0018  * @short A QDeclarativeImageProvider that renders requested sprites and
0019  * returns corresponding pixmap to the QML view.
0020  *
0021  * This class is a QDeclarativeImageProvider that takes a KGameThemeProvider
0022  * in its constructor and uses it to get full path to SVGs. These theme
0023  * SVGs are read and requested sprite pixmap is extracted and given to
0024  * the QML image element that requests it.
0025  *
0026  * For porting KDE games to QML, there is a KGameItem QML component provided
0027  * by KGameCore QML plugin which is a small wrapper to request pixmaps from
0028  * this KGameImageProvider. See KGameItem's documentation for details.
0029  * @since 4.11
0030  */
0031 class KGameImageProvider : public QQuickImageProvider
0032 {
0033 public:
0034     /// Construcs a new KGameImageProvider with the supplied KGameThemeProvider
0035     /// @param provider The KGameThemeProvider used to discover the game's
0036     /// themes.
0037     explicit KGameImageProvider(KGameThemeProvider *provider);
0038 
0039     /// Reimplemented method that is called when a sprite pixmap is requested
0040     QImage requestImage(const QString &source, QSize *size, const QSize &requestedSize) override;
0041 
0042 private:
0043     void reloadRenderer();
0044 
0045     QString m_themeName;
0046     KGameThemeProvider *m_provider;
0047     QSvgRenderer m_renderer;
0048 };
0049 
0050 #endif // KGAMEIMAGEPROVIDER_H