Skip to content

Commit

Permalink
add support for inverted ambiences (black icons)
Browse files Browse the repository at this point in the history
  • Loading branch information
Karry committed Nov 14, 2018
1 parent a09d684 commit 0c67170
Show file tree
Hide file tree
Showing 9 changed files with 96 additions and 8 deletions.
3 changes: 2 additions & 1 deletion CMakeLists.txt
Expand Up @@ -239,7 +239,8 @@ set(HEADER_FILES
src/CollectionListModel.h
src/QVariantConverters.h
src/CollectionTrackModel.h
src/CollectionMapBridge.h)
src/CollectionMapBridge.h
src/IconProvider.h)

# keep qml files in source list - it makes qtcreator happy
# find qml -type f
Expand Down
Binary file added pics/icon-cover-remove-dark.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion qml/custom/POIIcon.qml
Expand Up @@ -139,7 +139,7 @@ Image{
}

function iconUrl(icon){
return '../../poi-icons/' + icon + '.svg';
return 'image://harbour-osmscout/poi-icons/' + icon + '.svg?' + Theme.primaryColor;
}

function typeIcon(type){
Expand Down
2 changes: 1 addition & 1 deletion qml/custom/RouteStepIcon.qml
Expand Up @@ -55,7 +55,7 @@ Image{
}

function iconUrl(icon){
return '../../routestep/' + icon + '.svg';
return 'image://harbour-osmscout/routestep/' + icon + '.svg?' + Theme.primaryColor;
}

function typeIcon(type){
Expand Down
4 changes: 1 addition & 3 deletions qml/pages/Collection.qml
Expand Up @@ -89,9 +89,7 @@ Page {
Image{
id: entryIcon

source: model.type == "waypoint" ?
'../../poi-icons/marker.svg' :
"../../pics/route.svg"
source: 'image://harbour-osmscout/' + (model.type == "waypoint" ? 'poi-icons/marker.svg' :'pics/route.svg') + '?' + Theme.primaryColor

width: Theme.iconSizeMedium
fillMode: Image.PreserveAspectFit
Expand Down
3 changes: 2 additions & 1 deletion qml/pages/Cover.qml
Expand Up @@ -197,7 +197,8 @@ CoverBackground {
enabled: true
iconBackground: true
CoverAction {
iconSource: "../../pics/icon-cover-remove.png"
// installed custom image provider is not available in cover page
iconSource: Theme.primaryColor == "#000000" ? "../../pics/icon-cover-remove-dark.png" : "../../pics/icon-cover-remove.png"
onTriggered: {
map.zoomOut(2.0);
bindToCurrentPositionTimer.restart();
Expand Down
1 change: 1 addition & 0 deletions rpm/harbour-osmscout.changes.in
Expand Up @@ -256,3 +256,4 @@
* 2018-xx-xx Lukáš Karas <lukas.karas@centrum.cz> 1.2-1
- make collection visible when waypoint or track is displayed
- add Chinese translation
- add support for inverted ambiences (black icons)
85 changes: 85 additions & 0 deletions src/IconProvider.h
@@ -0,0 +1,85 @@
/**
* Copyright (C) 2014 Kimmo Lindholm ( https://together.jolla.com/users/196/kimmoli/ )
*
* https://together.jolla.com/question/44325/iconbutton-how-to-use-own-icons-with-highlight/
*
* DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
* Version 2, December 2004
*
* Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
*
* Everyone is permitted to copy and distribute verbatim or modified
* copies of this license document, and changing it is allowed as long
* as the name is changed.
*
* DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
* TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
*
* 0. You just DO WHAT THE FUCK YOU WANT TO.
*/

#ifndef ICONPROVIDER_H
#define ICONPROVIDER_H

#include <sailfishapp/sailfishapp.h>

#include <QQuickImageProvider>
#include <QPainter>
#include <QColor>

#include <cassert>
#include <QtSvg/QSvgRenderer>

class IconProvider : public QQuickImageProvider
{
public:
IconProvider() : QQuickImageProvider(QQuickImageProvider::Pixmap)
{
}

QPixmap requestPixmap(const QString &id, QSize *size, const QSize &requestedSize)
{
QStringList parts = id.split('?');
assert(!parts.isEmpty());

QString iconPath = SailfishApp::pathTo(parts.at(0)).toString(QUrl::RemoveScheme);
qDebug() << "Loading icon " << iconPath;
QPixmap sourcePixmap;
if (iconPath.endsWith(".svg") && requestedSize.isValid()){
QSvgRenderer renderer(iconPath);
if (renderer.isValid()) {
sourcePixmap = QPixmap(requestedSize);
sourcePixmap.fill(Qt::transparent);

QPainter painter(&sourcePixmap);
renderer.render(&painter, sourcePixmap.rect());
painter.end();
}
}else {
sourcePixmap.load(iconPath);
}

if (size) {
*size = sourcePixmap.size();
}

if (parts.length() > 1) {
QString colorString = parts.at(1);
if (QColor::isValidColor(colorString)) {
QPainter painter(&sourcePixmap);
painter.setCompositionMode(QPainter::CompositionMode_SourceIn);
painter.fillRect(sourcePixmap.rect(), colorString);
painter.end();
}
}

if (requestedSize.width() > 0 && requestedSize.height() > 0) {
return sourcePixmap.scaled(requestedSize.width(), requestedSize.height(), Qt::IgnoreAspectRatio);
} else {
return sourcePixmap;
}
}
};

#endif // ICONPROVIDER_H

4 changes: 3 additions & 1 deletion src/OSMScout.cpp
Expand Up @@ -36,6 +36,7 @@

#include <osmscout/Settings.h> // Library settings
#include "AppSettings.h" // Application settings
#include "IconProvider.h" // IconProvider

// collections
#include "Storage.h"
Expand Down Expand Up @@ -127,7 +128,7 @@ int main(int argc, char* argv[])

bool desktop = false;
for (QString arg: app->arguments()){
desktop = (arg == "--desktop");
desktop |= (arg == "--desktop");
}

QString home = QStandardPaths::writableLocation(QStandardPaths::HomeLocation);
Expand Down Expand Up @@ -200,6 +201,7 @@ int main(int argc, char* argv[])
if (!desktop) {
QScopedPointer<QQuickView> view(SailfishApp::createView());
view->rootContext()->setContextProperty("OSMScoutVersionString", OSMSCOUT_SAILFISH_VERSION_STRING);
view->engine()->addImageProvider(QLatin1String("harbour-osmscout"), new IconProvider());
view->setSource(SailfishApp::pathTo("qml/main.qml"));
view->showFullScreen();
result=app->exec();
Expand Down

0 comments on commit 0c67170

Please sign in to comment.