timageprovider.cpp - sailfish-safe - Sailfish frontend for safe(1)
(HTM) git clone git://git.z3bra.org/sailfish-safe.git
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
timageprovider.cpp (2483B)
---
1 /*
2 * Copyright (C) 2019 Daniel Vrátil <dvratil@kde.org>
3 * 2021 Willy Goiffon <contact@z3bra.org>
4 *
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <https://www.gnu.org/licenses/>.
17 */
18
19
20 #include "imageprovider.h"
21
22 #include <QPainter>
23 #include <QColor>
24 #include <QMap>
25
26 #include <sailfishapp.h>
27
28 namespace {
29
30 static const auto schemaMap = QMap<QString, QString>{
31 {{QStringLiteral("passIcon"), QStringLiteral("icons")},
32 {QStringLiteral("passImage"), QStringLiteral("images")}}
33 };
34
35 static QString pathForSchema(const QString &schema)
36 {
37 return schemaMap.value(schema);
38 }
39
40 }
41
42 ImageProvider::ImageProvider(const QString &schema)
43 : QQuickImageProvider(QQuickImageProvider::Pixmap)
44 , mSchema(schema)
45 {
46 Q_ASSERT(schemaMap.contains(schema));
47 }
48
49 // Based on https://together.jolla.com/question/44325/iconbutton-how-to-use-own-icons-with-highlight/
50 QPixmap ImageProvider::requestPixmap(const QString &id, QSize *size, const QSize &requestedSize)
51 {
52 const auto parts = id.splitRef(QLatin1Char('?'));
53
54 auto source = findSource(parts.at(0));
55 if (size) {
56 *size = source.size();
57 }
58
59 if (parts.size() > 1) {
60 const auto color = parts.at(1).toString();
61 if (QColor::isValidColor(color)) {
62 QPainter painter(&source);
63 painter.setCompositionMode(QPainter::CompositionMode_SourceIn);
64 painter.fillRect(source.rect(), color);
65 painter.end();
66 }
67 }
68
69 if (requestedSize.width() > 0 && requestedSize.height() > 0) {
70 return source.scaled(requestedSize, Qt::IgnoreAspectRatio);
71 } else {
72 return source;
73 }
74 }
75
76 QPixmap ImageProvider::findSource(const QStringRef &name)
77 {
78 const QString imgPath = QStringLiteral("qml/") % pathForSchema(mSchema) % QStringLiteral("/") % name;
79 return QPixmap(SailfishApp::pathTo(imgPath).toString(QUrl::RemoveScheme));
80 }