libosmscout 1.1.1
Loading...
Searching...
No Matches
MapRenderer.h
Go to the documentation of this file.
1#ifndef OSMSCOUT_CLIENT_QT_MAPRENDERER_H
2#define OSMSCOUT_CLIENT_QT_MAPRENDERER_H
3
4/*
5 OSMScout - a Qt backend for libosmscout and libosmscout-map
6 Copyright (C) 2010 Tim Teulings
7 Copyright (C) 2017 Lukas Karas
8
9 This library is free software; you can redistribute it and/or
10 modify it under the terms of the GNU Lesser General Public
11 License as published by the Free Software Foundation; either
12 version 2.1 of the License, or (at your option) any later version.
13
14 This library is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 Lesser General Public License for more details.
18
19 You should have received a copy of the GNU Lesser General Public
20 License along with this library; if not, write to the Free Software
21 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 */
23
25
26#include <osmscoutclient/DBThread.h>
27
31
32#include <QObject>
33#include <QSettings>
34#include <QMutex>
35#include <QPainter>
36
37namespace osmscout {
38
42class OSMSCOUT_CLIENT_QT_API DBRenderJob : public QObject, public DBJob{
43 Q_OBJECT
44private:
45 osmscout::MercatorProjection renderProjection;
46 QMap<QString,QMap<osmscout::TileKey,osmscout::TileRef>> tiles;
47 osmscout::MapParameter *drawParameter;
48 QPainter *p;
49 bool success;
50 bool drawCanvasBackground;
51 bool renderBasemap;
52 bool renderDatabases;
53 std::vector<OverlayObjectRef> overlayObjects;
54 StyleConfigRef emptyStyleConfig;
55
56public:
58 QMap<QString,QMap<osmscout::TileKey,osmscout::TileRef>> tiles,
59 osmscout::MapParameter *drawParameter,
60 QPainter *p,
61 std::vector<OverlayObjectRef> overlayObjects,
62 StyleConfigRef emptyStyleConfig,
63 bool drawCanvasBackground=true,
64 bool renderBasemap=true,
65 bool renderDatabases=true);
66
67 ~DBRenderJob() override = default;
68
69 void Run(const osmscout::BasemapDatabaseRef& basemapDatabase,
70 const std::list<DBInstanceRef> &allDatabases,
71 ReadLock &&locker) override;
72
73 inline bool IsSuccess() const{
74 return success;
75 };
76
77private:
78 bool addBasemapData(MapDataRef data) const;
79 bool addOverlayObjectData(MapDataRef data, TypeConfigRef typeConfig) const;
80};
81
85class OSMSCOUT_CLIENT_QT_API MapRenderer : public QObject {
86 Q_OBJECT
87
88protected:
89 QThread *thread;
90 SettingsRef settings;
91 DBThreadRef dbThread;
92
93#if QT_VERSION < QT_VERSION_CHECK(5, 14, 0) /* For compatibility with QT 5.6 */
94 QMutex lock{QMutex::Recursive};
95#else
96 QRecursiveMutex lock;
97#endif
98
99 double mapDpi;
101
102 QString fontName;
103 double fontSize;
105 bool showAltLanguage{false};
106 QString units;
107
108 mutable QMutex overlayLock;
109 std::map<int,OverlayObjectRef> overlayObjectMap; // <! map guarded by overlayLock, OverlayWay object is multithread
110
111signals:
112 void Redraw();
114
115 void mapDpiChangeSignal(double);
116 void renderSeaSignal(bool);
117 void fontNameSignal(QString);
118 void fontSizeSignal(double);
120 void unitsSignal(QString);
122 void databaseLoadFinished(const osmscout::GeoBox &geoBox);
123
124private:
125 // slots
126 Slot<double> mapDpiChangeSlot{
127 [this](const double &d){
129 }
130 };
131
132 Slot<bool> renderSeaSlot{
133 [this](const bool &b){
134 renderSeaSignal(b);
135 }
136 };
137
138 Slot<std::string> fontNameSlot{
139 [this](const std::string &str){
140 fontNameSignal(QString::fromStdString(str));
141 }
142 };
143
144 Slot<double> fontSizeSlot{
145 [this](const double &d){
146 fontSizeSignal(d);
147 }
148 };
149
150 Slot<bool> showAltLanguageSlot{
151 [this](const bool &b){
152 showAltLanguageSignal(b);
153 }
154 };
155
156 Slot<std::string> unitsSlot{
157 [this](const std::string &str){
158 unitsSignal(QString::fromStdString(str));
159 }
160 };
161
162 Slot<> stylesheetFilenameChangedSlot{ std::bind(&MapRenderer::stylesheetFilenameChanged, this) };
163 Slot<GeoBox> databaseLoadFinishedSlot{ std::bind(&MapRenderer::databaseLoadFinished, this, std::placeholders::_1) };
164
165public slots:
166 virtual void Initialize() = 0;
167
168 virtual void InvalidateVisualCache() = 0;
170 virtual void onDatabaseLoaded(osmscout::GeoBox boundingBox) = 0;
171
172 virtual void onMapDPIChange(double dpi);
173 virtual void onRenderSeaChanged(bool);
174 virtual void onFontNameChanged(const QString&);
175 virtual void onFontSizeChanged(double);
176 virtual void onShowAltLanguageChanged(bool);
177 virtual void onUnitsChanged(const QString&);
178
179protected:
181 SettingsRef settings,
182 DBThreadRef dbThread,
183 QString iconDirectory);
184
185 osmscout::GeoBox overlayObjectsBox() const;
186
187 void getOverlayObjects(std::vector<OverlayObjectRef> &objs,
188 osmscout::GeoBox requestBox) const;
189
190public:
191 virtual ~MapRenderer();
192
199 virtual bool RenderMap(QPainter& painter,
200 const MapViewStruct& request) = 0;
201
202 void addOverlayObject(int id, const OverlayObjectRef& obj);
203
206
207 std::map<int,OverlayObjectRef> getOverlayObjects() const;
208};
209
210using MapRendererRef = std::shared_ptr<MapRenderer>;
211
212}
213
214#endif /* OSMSCOUT_CLIENT_QT_MAPRENDERER_H */
#define OSMSCOUT_CLIENT_QT_API
Definition ClientQtImportExport.h:45
~DBRenderJob() override=default
bool IsSuccess() const
Definition MapRenderer.h:73
void Run(const osmscout::BasemapDatabaseRef &basemapDatabase, const std::list< DBInstanceRef > &allDatabases, ReadLock &&locker) override
DBRenderJob(osmscout::MercatorProjection renderProjection, QMap< QString, QMap< osmscout::TileKey, osmscout::TileRef > > tiles, osmscout::MapParameter *drawParameter, QPainter *p, std::vector< OverlayObjectRef > overlayObjects, StyleConfigRef emptyStyleConfig, bool drawCanvasBackground=true, bool renderBasemap=true, bool renderDatabases=true)
void showAltLanguageSignal(bool)
void fontSizeSignal(double)
void getOverlayObjects(std::vector< OverlayObjectRef > &objs, osmscout::GeoBox requestBox) const
double fontSize
Definition MapRenderer.h:103
virtual void onShowAltLanguageChanged(bool)
osmscout::GeoBox overlayObjectsBox() const
QThread * thread
Definition MapRenderer.h:89
void databaseLoadFinished(const osmscout::GeoBox &geoBox)
void unitsSignal(QString)
void stylesheetFilenameChanged()
virtual void onRenderSeaChanged(bool)
bool showAltLanguage
Definition MapRenderer.h:105
virtual bool RenderMap(QPainter &painter, const MapViewStruct &request)=0
virtual void Initialize()=0
virtual void onFontNameChanged(const QString &)
QString units
Definition MapRenderer.h:106
void removeOverlayObject(int id)
void mapDpiChangeSignal(double)
void renderSeaSignal(bool)
void addOverlayObject(int id, const OverlayObjectRef &obj)
bool renderSea
Definition MapRenderer.h:100
double mapDpi
Definition MapRenderer.h:99
virtual void InvalidateVisualCache()=0
QMutex overlayLock
Definition MapRenderer.h:108
virtual void onUnitsChanged(const QString &)
MapRenderer(QThread *thread, SettingsRef settings, DBThreadRef dbThread, QString iconDirectory)
virtual void onFontSizeChanged(double)
virtual void onStylesheetFilenameChanged()
QString fontName
Definition MapRenderer.h:102
virtual void onMapDPIChange(double dpi)
void fontNameSignal(QString)
QString iconDirectory
Definition MapRenderer.h:104
std::map< int, OverlayObjectRef > getOverlayObjects() const
virtual void onDatabaseLoaded(osmscout::GeoBox boundingBox)=0
QRecursiveMutex lock
Definition MapRenderer.h:96
SettingsRef settings
Definition MapRenderer.h:90
DBThreadRef dbThread
Definition MapRenderer.h:91
std::map< int, OverlayObjectRef > overlayObjectMap
Definition MapRenderer.h:109
Definition MercatorProjection.h:40
Definition ReadWriteLock.h:115
Definition Signal.h:98
std::shared_ptr< TypeConfig > TypeConfigRef
Definition TypeConfig.h:1396
Definition Area.h:39
std::shared_ptr< BasemapDatabase > BasemapDatabaseRef
Reference counted reference to an Database instance.
Definition BasemapDatabase.h:88
std::shared_ptr< StyleConfig > StyleConfigRef
Definition StyleConfig.h:859
std::shared_ptr< MapData > MapDataRef
Definition MapData.h:63
std::shared_ptr< OverlayObject > OverlayObjectRef
Definition OverlayObject.h:232
std::shared_ptr< MapRenderer > MapRendererRef
Definition MapRenderer.h:210