commit 1193e8ca390e4f236b9915c33baa6aabb2e313ee
parent 28c9776bda3ca635a02edcb38fb84ff2a10a2594
Author: Daniel Vrátil <dvratil@kde.org>
Date:   Sun,  3 Feb 2019 18:15:51 +0100
Update the cover page
Diffstat:
6 files changed, 136 insertions(+), 17 deletions(-)
diff --git a/harbour-passilic.pro b/harbour-passilic.pro
@@ -7,6 +7,7 @@ INCLUDEPATH += 3rdparty/kitemmodels/
 SOURCES += \
     src/main.cpp \
     src/abbreviations.cpp \
+    src/imageprovider.cpp \
     src/passwordfiltermodel.cpp \
     src/passwordprovider.cpp \
     src/passwordsmodel.cpp \
@@ -16,6 +17,7 @@ SOURCES += \
 
 HEADERS += \
     src/abbreviations.h \
+    src/imageprovider.h \
     src/passwordfiltermodel.h \
     src/passwordprovider.h \
     src/passwordsmodel.h \
@@ -26,13 +28,13 @@ DISTFILES += \
     qml/harbour-passilic.qml \
     qml/cover/CoverPage.qml \
     qml/pages/PasswordListPage.qml \
+    qml/pages/PassphraseRequester.qml \
     rpm/harbour-passilic.changes.in \
     rpm/harbour-passilic.changes.run.in \
     rpm/harbour-passilic.spec \
     rpm/harbour-passilic.yaml \
     translations/*.ts \
-    harbour-passilic.desktop \
-    qml/pages/PassphraseRequester.qml
+    harbour-passilic.desktop
 
 SAILFISHAPP_ICONS = 86x86 108x108 128x128 172x172
 
diff --git a/qml/cover/CoverPage.qml b/qml/cover/CoverPage.qml
@@ -2,21 +2,12 @@ import QtQuick 2.0
 import Sailfish.Silica 1.0
 
 CoverBackground {
-    Label {
-        id: label
-        anchors.centerIn: parent
-        text: qsTr("My Cover")
-    }
 
-    CoverActionList {
-        id: coverAction
-
-        CoverAction {
-            iconSource: "image://theme/icon-cover-next"
-        }
+    Image {
+        source: "image://passImage/cover.png?" + Theme.primaryColor
+        anchors.centerIn: parent
 
-        CoverAction {
-            iconSource: "image://theme/icon-cover-pause"
-        }
+        width: parent.width - 2 * Theme.paddingLarge
+        height: sourceSize.height * width / sourceSize.width
     }
 }
diff --git a/qml/images/cover.png b/qml/images/cover.png
Binary files differ.
diff --git a/src/imageprovider.cpp b/src/imageprovider.cpp
@@ -0,0 +1,80 @@
+/*
+ *   Copyright (C) 2019  Daniel Vrátil <dvratil@kde.org>
+ *
+ *   This program is free software; you can redistribute it and/or modify
+ *   it under the terms of the GNU Library General Public License as
+ *   published by the Free Software Foundation; either version 2, 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 Library General Public
+ *   License along with this program; if not, write to the
+ *   Free Software Foundation, Inc.,
+ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+
+#include "imageprovider.h"
+
+#include <QPainter>
+#include <QColor>
+#include <QMap>
+
+#include <sailfishapp.h>
+
+namespace {
+
+static const auto schemaMap = QMap<QString, QString>{
+    {{QStringLiteral("passIcon"), QStringLiteral("icons")},
+     {QStringLiteral("passImage"), QStringLiteral("images")}}
+};
+
+static QString pathForSchema(const QString &schema)
+{
+    return schemaMap.value(schema);
+}
+
+}
+
+ImageProvider::ImageProvider(const QString &schema)
+    : QQuickImageProvider(QQuickImageProvider::Pixmap)
+    , mSchema(schema)
+{
+    Q_ASSERT(schemaMap.contains(schema));
+}
+
+// Based on https://together.jolla.com/question/44325/iconbutton-how-to-use-own-icons-with-highlight/
+QPixmap ImageProvider::requestPixmap(const QString &id, QSize *size, const QSize &requestedSize)
+{
+    const auto parts = id.splitRef(QLatin1Char('?'));
+
+    auto source = findSource(parts.at(0));
+    if (size) {
+        *size = source.size();
+    }
+
+    if (parts.size() > 1) {
+        const auto color = parts.at(1).toString();
+        if (QColor::isValidColor(color)) {
+            QPainter painter(&source);
+            painter.setCompositionMode(QPainter::CompositionMode_SourceIn);
+            painter.fillRect(source.rect(), color);
+            painter.end();
+        }
+    }
+
+    if (requestedSize.width() > 0 && requestedSize.height() > 0) {
+        return source.scaled(requestedSize, Qt::IgnoreAspectRatio);
+    } else {
+        return source;
+    }
+}
+
+QPixmap ImageProvider::findSource(const QStringRef &name)
+{
+    const QString imgPath = QStringLiteral("qml/") % pathForSchema(mSchema) % QStringLiteral("/") % name;
+    return QPixmap(SailfishApp::pathTo(imgPath).toString(QUrl::RemoveScheme));
+}
diff --git a/src/imageprovider.h b/src/imageprovider.h
@@ -0,0 +1,38 @@
+/*
+ *   Copyright (C) 2019  Daniel Vrátil <dvratil@kde.org>
+ *
+ *   This program is free software; you can redistribute it and/or modify
+ *   it under the terms of the GNU Library General Public License as
+ *   published by the Free Software Foundation; either version 2, 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 Library General Public
+ *   License along with this program; if not, write to the
+ *   Free Software Foundation, Inc.,
+ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ */
+
+#ifndef IMAGEPROVIDER_H
+#define IMAGEROVIDER_H
+
+#include <QQuickImageProvider>
+
+class ImageProvider : public QQuickImageProvider
+{
+public:
+    explicit ImageProvider(const QString &schema);
+
+    QPixmap requestPixmap(const QString &id, QSize *size, const QSize &requestedSize) override;
+
+private:
+    QPixmap findSource(const QStringRef &name);
+
+    QString mSchema;
+};
+
+#endif // IMAGEPROVIDER
diff --git a/src/main.cpp b/src/main.cpp
@@ -1,5 +1,5 @@
 /*
- *   Copyright (C) 2018  Daniel Vrátil <dvratil@kde.org>
+ *   Copyright (C) 2019  Daniel Vrátil <dvratil@kde.org>
  *
  *   This program is free software; you can redistribute it and/or modify
  *   it under the terms of the GNU Library General Public License as
@@ -20,6 +20,7 @@
 #include "passwordsmodel.h"
 #include "passwordfiltermodel.h"
 #include "passwordsortproxymodel.h"
+#include "imageprovider.h"
 
 #ifdef QT_QML_DEBUG
 #include <QtQuick>
@@ -28,6 +29,11 @@
 
 #include <sailfishapp.h>
 
+void addImageProvider(QQmlEngine *engine, const QString &id)
+{
+    engine->addImageProvider(id, new ImageProvider(id));
+}
+
 int main(int argc, char *argv[])
 {
     QScopedPointer<QGuiApplication> app(SailfishApp::application(argc, argv));
@@ -37,6 +43,8 @@ int main(int argc, char *argv[])
     qmlRegisterType<PasswordFilterModel>("harbour.passilic", 1, 0, "PasswordFilterModel");
     qmlRegisterType<PasswordSortProxyModel>("harbour.passilic", 1, 0, "PasswordSortProxyModel");
 
+    addImageProvider(view->engine(), QStringLiteral("passIcon"));
+    addImageProvider(view->engine(), QStringLiteral("passImage"));
     view->setSource(SailfishApp::pathToMainQml());
     view->show();