1
0
mirror of https://github.com/tumic0/GPXSee.git synced 2025-07-01 05:19:15 +02:00

Compare commits

...

41 Commits

Author SHA1 Message Date
7e89f339f4 Remove obsolete environment variables setup 2023-04-02 15:31:54 +02:00
9e80319577 Remove the Qt5 modules... 2023-04-02 15:22:19 +02:00
0596201fb2 Fixed Qt5 modules list 2023-04-02 15:17:02 +02:00
dce078bca6 Use Qt 5.15.2 as the Qt5 version for OS X builds 2023-04-02 15:11:37 +02:00
34f935462f Use the official Qt builds instead of homebrew in mac builds 2023-04-02 15:02:55 +02:00
84a592998d Only tile big (> Qt OpenGL cache size / 2) images 2023-04-02 14:36:03 +02:00
c114383c85 Do not outline countour height entries 2023-04-01 12:04:21 +02:00
ab2f8d8350 Added major NAD83(2011)-based projections 2023-03-30 00:01:16 +02:00
164e59602e Added missing BCNCAR rendering 2023-03-30 00:00:45 +02:00
1b858ac4f2 Back to Qt 6.4.0 2023-03-26 19:35:42 +02:00
0a58808017 Try Qt 6.4.3 in Android builds 2023-03-26 19:25:23 +02:00
b80cd05d4b Added currents rendering 2023-03-25 13:31:15 +01:00
66c951f38c Merge branch 'origin/master' into Weblate. 2023-03-25 10:55:47 +01:00
46109d0ce0 Render masts as pylons 2023-03-25 10:55:32 +01:00
cd1f80f2c1 Label sizes adjustment 2023-03-25 00:12:06 +01:00
02699b0636 Merge branch 'origin/master' into Weblate. 2023-03-25 00:12:03 +01:00
bb8727755a Properly crop the image 2023-03-24 23:07:28 +01:00
69831f0c90 Merge branch 'origin/master' into Weblate. 2023-03-24 23:07:22 +01:00
dbe407d9d9 Various ENC rendering improvements 2023-03-24 22:54:53 +01:00
b78d4741f6 Merge branch 'origin/master' into Weblate. 2023-03-24 22:54:50 +01:00
405b1397e9 Merge branch 'origin/master' into Weblate. 2023-03-24 09:24:25 +01:00
raf
2f280c744b Translated using Weblate (Catalan)
Currently translated at 100.0% (467 of 467 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/ca/
2023-03-24 09:24:25 +01:00
54d6016b1a A better point items layout algorithm 2023-03-24 09:18:13 +01:00
65afd802ce A better "entry prohibited" line 2023-03-24 09:17:28 +01:00
e6b96d8717 Merge branch 'origin/master' into Weblate. 2023-03-23 01:05:49 +01:00
f057ebdbb7 Added fog signals rendering 2023-03-23 01:05:44 +01:00
f941dce573 Merge branch 'origin/master' into Weblate. 2023-03-22 00:43:25 +01:00
416bd3472f Render lights merged with the root objects, not as separate objects 2023-03-22 00:41:03 +01:00
034a9d9b28 Translated using Weblate (Norwegian Bokmål)
Currently translated at 100.0% (467 of 467 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/nb_NO/
2023-03-19 23:39:43 +01:00
048198dfe1 Removed duplicit map error debug output 2023-03-18 10:11:11 +01:00
a50fa28c08 Properly chceck for GCS/PCS files 2023-03-18 09:51:07 +01:00
152f17f15a Do not try to load the style when it does not exist 2023-03-18 09:04:55 +01:00
873db27768 Version++ 2023-03-16 23:42:57 +01:00
62f3343f75 Render international border lines 2023-03-16 21:37:27 +01:00
07581f027b Fixed header length check 2023-03-16 20:58:28 +01:00
b3767e85e1 Added missing nmea serial port baudrate setting 2023-03-16 02:03:40 +01:00
4fdeb3169f Translated using Weblate (Esperanto)
Currently translated at 93.1% (435 of 467 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/eo/
2023-03-12 23:00:19 +01:00
18836107af Translated using Weblate (Ukrainian)
Currently translated at 99.5% (465 of 467 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/uk/
2023-03-12 23:00:19 +01:00
630fef2143 Translated using Weblate (Russian)
Currently translated at 100.0% (467 of 467 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/ru/
2023-03-12 23:00:19 +01:00
00c8d70eab Translated using Weblate (Finnish)
Currently translated at 97.4% (455 of 467 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/fi/
2023-03-12 23:00:18 +01:00
426490ef4d Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (467 of 467 strings)

Translation: GPXSee/Translations
Translate-URL: https://hosted.weblate.org/projects/gpxsee/translations/zh_Hans/
2023-03-07 01:50:18 +01:00
39 changed files with 299 additions and 142 deletions

View File

@ -1,4 +1,4 @@
version: 12.2.{build}
version: 12.3.{build}
configuration:
- Release

View File

@ -28,12 +28,10 @@ jobs:
- name: Install Qt (Desktop)
uses: jurplel/install-qt-action@v3
with:
aqtversion: '==2.1.0'
version: '6.4.0'
- name: Install Qt (Android)
uses: jurplel/install-qt-action@v3
with:
aqtversion: '==2.1.0'
version: '6.4.0'
target: 'android'
arch: 'android_armv7'

View File

@ -10,14 +10,12 @@ jobs:
name: GPXSee Qt5 build
runs-on: macos-latest
steps:
- name: Set environment variables
run: echo "PATH=/usr/local/opt/qt@5/bin:$PATH" >> $GITHUB_ENV
- name: Checkout
uses: actions/checkout@v3
- name: Install dependencies
run: |
brew update
brew install qt5
- name: Install Qt
uses: jurplel/install-qt-action@v3
with:
version: '5.15.2'
- name: Create localization
run: lrelease gpxsee.pro
- name: Configure build
@ -36,14 +34,13 @@ jobs:
name: GPXSee Qt6 build
runs-on: macos-latest
steps:
- name: Set environment variables
run: echo "PATH=/usr/local/opt/qt@6/bin:$PATH" >> $GITHUB_ENV
- name: Checkout
uses: actions/checkout@v3
- name: Install dependencies
run: |
brew update
brew install qt6
- name: Install Qt
uses: jurplel/install-qt-action@v3
with:
version: '6.4.3'
modules: qtpositioning qt5compat qtserialport
- name: Create localization
run: lrelease gpxsee.pro
- name: Configure build

View File

@ -345,6 +345,7 @@ FEH2010,5593,1078,9122,7019,8901,9603,0,0,0,,,,
CIGD11,6135,1100,9122,7019,8901,9603,0,0,0,,,,
Nepal 1981,6207,1111,9122,7015,8901,9603,293.17,726.18,245.36,,,,
CGRS93,6311,1112,9122,7030,8901,9607,8.846,-4.394,-1.122,0.00237,0.146528,-0.130428,0.783926
NAD83(2011),6318,1116,9122,7019,8901,9603,0,0,0,,,,
Mexico ITRF2008,6365,1120,9122,7019,8901,9603,0,0,0,,,,
RDN2008,6706,1132,9122,7019,8901,9603,0,0,0,,,,
Aden 1925,6881,1135,9122,7012,8901,9603,-24,-203,268,,,,

1 HD1909 3819 1024 9122 7004 8901 9607 595.48 121.69 515.35 -4.115 2.9383 -0.853 -3.408
345 CIGD11 6135 1100 9122 7019 8901 9603 0 0 0
346 Nepal 1981 6207 1111 9122 7015 8901 9603 293.17 726.18 245.36
347 CGRS93 6311 1112 9122 7030 8901 9607 8.846 -4.394 -1.122 0.00237 0.146528 -0.130428 0.783926
348 NAD83(2011) 6318 1116 9122 7019 8901 9603 0 0 0
349 Mexico ITRF2008 6365 1120 9122 7019 8901 9603 0 0 0
350 RDN2008 6706 1132 9122 7019 8901 9603 0 0 0
351 Aden 1925 6881 1135 9122 7012 8901 9603 -24 -203 268

View File

@ -2071,6 +2071,28 @@ SIRGAS 2000 / UTM zone 23N,6210,4674,16023,9001,9807,4400,8801,0,9102,8802,-45,9
SIRGAS 2000 / UTM zone 24N,6211,4674,16024,9001,9807,4400,8801,0,9102,8802,-39,9102,8805,0.9996,9201,8806,500000,9001,8807,0,9001,,,,,,
CGRS93 / Cyprus Local Transverse Mercator,6312,6311,6308,9001,9807,4400,8801,0,9102,8802,33,9102,8805,0.99995,9201,8806,200000,9001,8807,-3500000,9001,,,,,,
Macedonia State Coordinate System zone 7,6316,3906,18277,9001,9807,4498,8801,0,9102,8802,21,9102,8805,0.9999,9201,8806,7500000,9001,8807,0,9001,,,,,,
NAD83(2011) / UTM zone 59N,6328,6318,16059,9001,9807,4400,8801,0,9102,8802,171,9102,8805,0.9996,9201,8806,500000,9001,8807,0,9001,,,,,,
NAD83(2011) / UTM zone 60N,6329,6318,16060,9001,9807,4400,8801,0,9102,8802,177,9102,8805,0.9996,9201,8806,500000,9001,8807,0,9001,,,,,,
NAD83(2011) / UTM zone 1N,6330,6318,16001,9001,9807,4400,8801,0,9102,8802,-177,9102,8805,0.9996,9201,8806,500000,9001,8807,0,9001,,,,,,
NAD83(2011) / UTM zone 2N,6331,6318,16002,9001,9807,4400,8801,0,9102,8802,-171,9102,8805,0.9996,9201,8806,500000,9001,8807,0,9001,,,,,,
NAD83(2011) / UTM zone 3N,6332,6318,16003,9001,9807,4400,8801,0,9102,8802,-165,9102,8805,0.9996,9201,8806,500000,9001,8807,0,9001,,,,,,
NAD83(2011) / UTM zone 4N,6333,6318,16004,9001,9807,4400,8801,0,9102,8802,-159,9102,8805,0.9996,9201,8806,500000,9001,8807,0,9001,,,,,,
NAD83(2011) / UTM zone 5N,6334,6318,16005,9001,9807,4400,8801,0,9102,8802,-153,9102,8805,0.9996,9201,8806,500000,9001,8807,0,9001,,,,,,
NAD83(2011) / UTM zone 6N,6335,6318,16006,9001,9807,4400,8801,0,9102,8802,-147,9102,8805,0.9996,9201,8806,500000,9001,8807,0,9001,,,,,,
NAD83(2011) / UTM zone 7N,6336,6318,16007,9001,9807,4400,8801,0,9102,8802,-141,9102,8805,0.9996,9201,8806,500000,9001,8807,0,9001,,,,,,
NAD83(2011) / UTM zone 8N,6337,6318,16008,9001,9807,4400,8801,0,9102,8802,-135,9102,8805,0.9996,9201,8806,500000,9001,8807,0,9001,,,,,,
NAD83(2011) / UTM zone 9N,6338,6318,16009,9001,9807,4400,8801,0,9102,8802,-129,9102,8805,0.9996,9201,8806,500000,9001,8807,0,9001,,,,,,
NAD83(2011) / UTM zone 10N,6339,6318,16010,9001,9807,4400,8801,0,9102,8802,-123,9102,8805,0.9996,9201,8806,500000,9001,8807,0,9001,,,,,,
NAD83(2011) / UTM zone 11N,6340,6318,16011,9001,9807,4400,8801,0,9102,8802,-117,9102,8805,0.9996,9201,8806,500000,9001,8807,0,9001,,,,,,
NAD83(2011) / UTM zone 12N,6341,6318,16012,9001,9807,4400,8801,0,9102,8802,-111,9102,8805,0.9996,9201,8806,500000,9001,8807,0,9001,,,,,,
NAD83(2011) / UTM zone 13N,6342,6318,16013,9001,9807,4400,8801,0,9102,8802,-105,9102,8805,0.9996,9201,8806,500000,9001,8807,0,9001,,,,,,
NAD83(2011) / UTM zone 14N,6343,6318,16014,9001,9807,4400,8801,0,9102,8802,-99,9102,8805,0.9996,9201,8806,500000,9001,8807,0,9001,,,,,,
NAD83(2011) / UTM zone 15N,6344,6318,16015,9001,9807,4400,8801,0,9102,8802,-93,9102,8805,0.9996,9201,8806,500000,9001,8807,0,9001,,,,,,
NAD83(2011) / UTM zone 16N,6345,6318,16016,9001,9807,4400,8801,0,9102,8802,-87,9102,8805,0.9996,9201,8806,500000,9001,8807,0,9001,,,,,,
NAD83(2011) / UTM zone 17N,6346,6318,16017,9001,9807,4400,8801,0,9102,8802,-81,9102,8805,0.9996,9201,8806,500000,9001,8807,0,9001,,,,,,
NAD83(2011) / UTM zone 18N,6347,6318,16018,9001,9807,4400,8801,0,9102,8802,-75,9102,8805,0.9996,9201,8806,500000,9001,8807,0,9001,,,,,,
NAD83(2011) / UTM zone 19N,6348,6318,16019,9001,9807,4400,8801,0,9102,8802,-69,9102,8805,0.9996,9201,8806,500000,9001,8807,0,9001,,,,,,
NAD83(2011) / Conus Albers,6350,6318,5068,9001,9822,4499,8821,23,9102,8822,-96,9102,8823,29.3,9110,8824,45.3,9110,8826,0,9001,8827,0,9001,,,
Mexico ITRF92 / LCC,6362,4483,6361,9001,9802,4500,8821,12,9102,8822,-102,9102,8823,17.5,9102,8824,29.5,9102,8826,2500000,9001,8827,0,9001,,,
Mexico ITRF2008 / UTM zone 11N,6366,6365,16011,9001,9807,4400,8801,0,9102,8802,-117,9102,8805,0.9996,9201,8806,500000,9001,8807,0,9001,,,,,,
Mexico ITRF2008 / UTM zone 12N,6367,6365,16012,9001,9807,4400,8801,0,9102,8802,-111,9102,8805,0.9996,9201,8806,500000,9001,8807,0,9001,,,,,,

Can't render this file because it is too large.

View File

@ -3,7 +3,7 @@ unix:!macx:!android {
} else {
TARGET = GPXSee
}
VERSION = 12.2
VERSION = 12.3
QT += core \
gui \

View File

@ -194,6 +194,10 @@
<file alias="breakers.png">icons/map/marine/breakers.png</file>
<file alias="overfalls.png">icons/map/marine/overfalls.png</file>
<file alias="boarding-place.png">icons/map/marine/boarding-place.png</file>
<file alias="light.png">icons/map/marine/light.png</file>
<file alias="building.png">icons/map/marine/building.png</file>
<file alias="fog-signal.png">icons/map/marine/fog-signal.png</file>
<file alias="construction.png">icons/map/marine/construction.png</file>
</qresource>
<!-- Mapsforge rendertheme -->

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 137 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 180 B

After

Width:  |  Height:  |  Size: 147 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 225 B

BIN
icons/map/marine/light.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 441 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 326 B

After

Width:  |  Height:  |  Size: 288 B

View File

@ -1020,6 +1020,7 @@
<translation>
<numerusform>%n fitxer</numerusform>
<numerusform>%n fitxers</numerusform>
<numerusform>%n fitxers</numerusform>
</translation>
</message>
</context>

View File

@ -1912,7 +1912,7 @@
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="749"/>
<source>DEM cache size:</source>
<translation type="unfinished"></translation>
<translation>DEM-kaŝmemora grandeco:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="769"/>

View File

@ -1912,7 +1912,7 @@
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="749"/>
<source>DEM cache size:</source>
<translation type="unfinished"></translation>
<translation>DEM-välimuistin koko:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="769"/>

View File

@ -1894,7 +1894,7 @@
<location filename="../src/GUI/optionsdialog.cpp" line="741"/>
<location filename="../src/GUI/optionsdialog.cpp" line="748"/>
<source>Image cache size:</source>
<translation>Bildehurtiglagringstørrelse:</translation>
<translation>Bildehurtiglagerstørrelse:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="742"/>
@ -1912,7 +1912,7 @@
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="749"/>
<source>DEM cache size:</source>
<translation type="unfinished"></translation>
<translation>DEM-hurtiglagerstørrelse:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="769"/>

View File

@ -1913,7 +1913,7 @@
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="749"/>
<source>DEM cache size:</source>
<translation type="unfinished"></translation>
<translation>Размер кэша DEM:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="769"/>

View File

@ -1913,7 +1913,7 @@
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="749"/>
<source>DEM cache size:</source>
<translation type="unfinished"></translation>
<translation>Розмір кешу DEM:</translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="769"/>

View File

@ -1911,7 +1911,7 @@
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="749"/>
<source>DEM cache size:</source>
<translation type="unfinished"></translation>
<translation>DEM </translation>
</message>
<message>
<location filename="../src/GUI/optionsdialog.cpp" line="769"/>

View File

@ -37,7 +37,7 @@ Unicode true
; The name of the installer
Name "GPXSee"
; Program version
!define VERSION "12.2"
!define VERSION "12.3"
; The file to write
OutFile "GPXSee-${VERSION}_x64.exe"

View File

@ -7,6 +7,7 @@
#include <QLibraryInfo>
#include <QSurfaceFormat>
#include <QImageReader>
#include <QFileInfo>
#ifdef Q_OS_ANDROID
#include <QCoreApplication>
#include <QJniObject>
@ -154,10 +155,13 @@ void App::loadDatums()
QString ellipsoidsFile(ProgramPaths::ellipsoidsFile());
QString gcsFile(ProgramPaths::gcsFile());
if (ellipsoidsFile.isNull())
if (!QFileInfo::exists(ellipsoidsFile)) {
qWarning("No ellipsoids file found.");
if (gcsFile.isNull())
ellipsoidsFile = QString();
} if (!QFileInfo::exists(gcsFile)) {
qWarning("No GCS file found.");
gcsFile = QString();
}
if (!ellipsoidsFile.isNull() && !gcsFile.isNull()) {
Ellipsoid::loadList(ellipsoidsFile);
@ -170,8 +174,9 @@ void App::loadPCSs()
{
QString pcsFile(ProgramPaths::pcsFile());
if (pcsFile.isNull())
if (!QFileInfo::exists(pcsFile)) {
qWarning("No PCS file found.");
else
qWarning("Maps based on a projection different from EPSG:3857 won't work.");
} else
PCS::loadList(pcsFile);
}

View File

@ -137,11 +137,8 @@ TreeNode<MapAction*> GUI::createMapActionsNode(const TreeNode<Map*> &node)
MapAction *a = new MapAction(map, _mapsActionGroup);
connect(a, &MapAction::loaded, this, &GUI::mapInitialized);
tree.addItem(a);
} else {
qWarning("%s: %s", qPrintable(map->path()),
qPrintable(map->errorString()));
} else
delete map;
}
}
return tree;

View File

@ -3,7 +3,7 @@
#include "pluginparameters.h"
static const QMap<QString, QStringList> pluginParams = {
{"nmea", {"nmea.source"}},
{"nmea", {"nmea.source", "nmea.baudrate"}},
{"serialnmea", {"serialnmea.serial_port"}},
{"geoclue2", {"desktopId"}}
};

View File

@ -38,6 +38,15 @@ inline bool operator==(const Coordinates &c1, const Coordinates &c2)
{return (c1.lat() == c2.lat() && c1.lon() == c2.lon());}
inline bool operator!=(const Coordinates &c1, const Coordinates &c2)
{return !(c1 == c2);}
inline bool operator<(const Coordinates &c1, const Coordinates &c2)
{
if (c1.lon() < c2.lon())
return true;
else if (c1.lon() > c2.lon())
return false;
else
return (c1.lat() < c2.lat());
}
#ifndef QT_NO_DEBUG
QDebug operator<<(QDebug dbg, const Coordinates &c);

View File

@ -15,9 +15,10 @@ public:
bool operator!=(const Range &other) const
{return _min != other._min || _max != other._max;}
int size() const {return (_max - _min);}
int min() const {return _min;}
int max() const {return _max;}
int size() const {return (_max - _min);}
int mid() const {return _min + size()/2;}
bool isValid() const {return size() >= 0;}
bool isNull() const {return _min == 0 && _max == 0;}

View File

@ -15,6 +15,7 @@
#define CATWAT 69
#define CATWRK 71
#define COMCHA 77
#define CURVEL 84
#define DRVAL1 87
#define ELEVAT 90
#define FUNCTN 94

View File

@ -19,55 +19,60 @@ static QMap<uint,uint> orderMapInit()
{
QMap<uint,uint> map;
map.insert(TYPE(CGUSTA), 0);
map.insert(SUBTYPE(BUAARE, 1), 1);
map.insert(SUBTYPE(BUAARE, 5), 2);
map.insert(SUBTYPE(BUAARE, 4), 3);
map.insert(SUBTYPE(BUAARE, 3), 4);
map.insert(SUBTYPE(BUAARE, 2), 5);
map.insert(SUBTYPE(BUAARE, 6), 6);
map.insert(SUBTYPE(BUAARE, 0), 7);
map.insert(TYPE(RDOSTA), 8);
map.insert(TYPE(RADSTA), 9);
map.insert(TYPE(RTPBCN), 10);
map.insert(TYPE(BCNISD), 11);
map.insert(TYPE(BCNLAT), 12);
map.insert(TYPE(I_BCNLAT), 12);
map.insert(TYPE(BCNSAW), 13);
map.insert(TYPE(BCNSPP), 14);
map.insert(TYPE(BOYCAR), 15);
map.insert(TYPE(BOYINB), 16);
map.insert(TYPE(BOYISD), 17);
map.insert(TYPE(BOYLAT), 18);
map.insert(TYPE(I_BOYLAT), 18);
map.insert(TYPE(BOYSAW), 19);
map.insert(TYPE(BOYSPP), 20);
map.insert(TYPE(MORFAC), 21);
map.insert(TYPE(OFSPLF), 22);
map.insert(TYPE(LIGHTS), 23);
map.insert(TYPE(LIGHTS), 0);
map.insert(TYPE(FOGSIG), 0);
map.insert(TYPE(CGUSTA), 1);
map.insert(SUBTYPE(BUAARE, 1), 2);
map.insert(SUBTYPE(BUAARE, 5), 3);
map.insert(SUBTYPE(BUAARE, 4), 4);
map.insert(SUBTYPE(BUAARE, 3), 5);
map.insert(SUBTYPE(BUAARE, 2), 6);
map.insert(SUBTYPE(BUAARE, 6), 7);
map.insert(SUBTYPE(BUAARE, 0), 8);
map.insert(TYPE(RDOSTA), 9);
map.insert(TYPE(RADSTA), 10);
map.insert(TYPE(RTPBCN), 11);
map.insert(TYPE(BCNISD), 12);
map.insert(TYPE(BCNLAT), 13);
map.insert(TYPE(I_BCNLAT), 13);
map.insert(TYPE(BCNSAW), 14);
map.insert(TYPE(BCNSPP), 15);
map.insert(TYPE(BOYCAR), 16);
map.insert(TYPE(BOYINB), 17);
map.insert(TYPE(BOYISD), 18);
map.insert(TYPE(BOYLAT), 19);
map.insert(TYPE(I_BOYLAT), 19);
map.insert(TYPE(BOYSAW), 20);
map.insert(TYPE(BOYSPP), 21);
map.insert(TYPE(MORFAC), 22);
map.insert(TYPE(OFSPLF), 23);
map.insert(TYPE(OBSTRN), 24);
map.insert(TYPE(WRECKS), 25);
map.insert(TYPE(UWTROC), 26);
map.insert(TYPE(WATTUR), 27);
map.insert(TYPE(PILBOP), 28);
map.insert(TYPE(SISTAT), 29);
map.insert(TYPE(I_SISTAT), 29);
map.insert(TYPE(I_RDOCAL), 30);
map.insert(TYPE(I_TRNBSN), 31);
map.insert(TYPE(HRBFAC), 32);
map.insert(TYPE(I_HRBFAC), 32);
map.insert(TYPE(PILPNT), 33);
map.insert(TYPE(ACHBRT), 34);
map.insert(TYPE(I_ACHBRT), 34);
map.insert(TYPE(CRANES), 35);
map.insert(TYPE(I_CRANES), 35);
map.insert(TYPE(I_WTWGAG), 36);
map.insert(TYPE(PYLONS), 37);
map.insert(TYPE(LNDMRK), 38);
map.insert(TYPE(SILTNK), 39);
map.insert(TYPE(LNDELV), 40);
map.insert(TYPE(SMCFAC), 41);
map.insert(TYPE(BUISGL), 42);
map.insert(TYPE(CURENT), 28);
map.insert(TYPE(PILBOP), 29);
map.insert(TYPE(SISTAT), 30);
map.insert(TYPE(I_SISTAT), 30);
map.insert(TYPE(RDOCAL), 31);
map.insert(TYPE(I_RDOCAL), 31);
map.insert(TYPE(I_TRNBSN), 32);
map.insert(TYPE(HRBFAC), 33);
map.insert(TYPE(I_HRBFAC), 33);
map.insert(TYPE(PILPNT), 34);
map.insert(TYPE(ACHBRT), 35);
map.insert(TYPE(I_ACHBRT), 35);
map.insert(TYPE(CRANES), 36);
map.insert(TYPE(I_CRANES), 36);
map.insert(TYPE(I_WTWGAG), 37);
map.insert(TYPE(PYLONS), 38);
map.insert(TYPE(SLCONS), 39);
map.insert(TYPE(LNDMRK), 40);
map.insert(TYPE(SILTNK), 41);
map.insert(TYPE(LNDELV), 42);
map.insert(TYPE(SMCFAC), 43);
map.insert(TYPE(BUISGL), 44);
map.insert(TYPE(I_DISMAR), 0xFFFFFFFE);
map.insert(TYPE(SOUNDG), 0xFFFFFFFF);
@ -246,10 +251,15 @@ MapData::Point::Point(uint type, const Coordinates &c, const QString &label,
if (type>>16 == I_DISMAR && params.size()) {
_label = hUnits((type>>8)&0xFF) + " " + QString::fromLatin1(params.at(0));
_type = SUBTYPE(I_DISMAR, type & 0xFF);
} else if (type == TYPE(I_RDOCAL) && params.size() > 1) {
} else if ((type>>16 == I_RDOCAL || type>>16 == RDOCAL) && params.size() > 1) {
if (!params.at(1).isEmpty())
_label = QString("VHF ") + QString::fromLatin1(params.at(1));
_param = QVariant(params.at(0).toDouble());
} else if (type>>16 == CURENT && params.size() > 1) {
if (!params.at(1).isEmpty())
_label = QString::fromLatin1(params.at(1))
+ QString::fromUtf8("\xE2\x80\x89kt");
_param = QVariant(params.at(0).toDouble());
} else if (type>>16 == I_SISTAT || type>>16 == SISTAT) {
if (_label.isEmpty())
_label = sistat(type & 0xFF);
@ -540,9 +550,13 @@ MapData::Attr MapData::pointAttr(const ISO8211::Record &r, uint OBJL)
subtype |= av.at(1).toByteArray().toUInt() << 8;
if ((OBJL == I_DISMAR && key == I_WTWDIS)
|| (OBJL == I_RDOCAL && key == ORIENT))
|| (OBJL == RDOCAL && key == ORIENT)
|| (OBJL == I_RDOCAL && key == ORIENT)
|| (OBJL == CURENT && key == ORIENT))
params[0] = av.at(1).toByteArray();
if (OBJL == I_RDOCAL && key == COMCHA)
if ((OBJL == I_RDOCAL && key == COMCHA)
|| (OBJL == RDOCAL && key == COMCHA)
|| (OBJL == CURENT && key == CURVEL))
params[1] = av.at(1).toByteArray();
}

View File

@ -27,6 +27,7 @@
#define COALNE 30
#define CONVYR 34
#define CRANES 35
#define CURENT 36
#define DAMCON 38
#define DWRTPT 41
#define DEPARE 42
@ -39,6 +40,7 @@
#define FNCLNE 52
#define FERYRT 53
#define FLODOC 57
#define FOGSIG 58
#define GATCON 61
#define HRBFAC 64
#define HULKES 65
@ -63,6 +65,7 @@
#define PYLONS 98
#define RADSTA 102
#define RTPBCN 103
#define RDOCAL 104
#define RDOSTA 105
#define RAILWY 106
#define RCRTCL 108

View File

@ -10,8 +10,24 @@
using namespace ENC;
#define ICON_PADDING 2
#define TSSLPT_SIZE 0.005 /* ll */
#define RDOCAL_SIZE 12 /* px */
#define TSSLPT_SIZE 0.005 /* ll */
#define RDOCAL_SIZE 12 /* px */
#define CURENT_SIZE 12 /* px */
class PointItem : public TextPointItem
{
public:
PointItem(const QPoint &point, const QString *text, const QFont *font,
const QImage *img, const QImage *rimg, const QColor *color,
const QColor *haloColor) : TextPointItem(point, text, font, img, color,
haloColor, 0, ICON_PADDING), _rimg(rimg) {}
~PointItem() {delete _rimg;}
private:
const QImage *_rimg;
};
typedef QMap<Coordinates, const MapData::Point*> PointMap;
const float C1 = 0.866025f; /* sqrt(3)/2 */
@ -49,6 +65,18 @@ static QFont *font(Style::FontSize size)
}
}
static const QImage *light()
{
static QImage img(":/marine/light.png");
return &img;
}
static const QImage *signal()
{
static QImage img(":/marine/fog-signal.png");
return &img;
}
static const Style& style()
{
static Style s;
@ -95,6 +123,7 @@ static QImage *rdocalArrow(qreal angle)
QImage::Format_ARGB32_Premultiplied);
img->fill(Qt::transparent);
QPainter p(img);
p.setRenderHint(QPainter::Antialiasing);
p.setPen(QPen(QColor("#eb49eb"), 1));
QPointF arrow[3];
@ -114,14 +143,54 @@ static QImage *rdocalArrow(qreal angle)
return img;
}
static QImage *currentArrow(qreal angle)
{
QImage *img = new QImage(CURENT_SIZE*2, CURENT_SIZE*2,
QImage::Format_ARGB32_Premultiplied);
img->fill(Qt::transparent);
QPainter p(img);
p.setRenderHint(QPainter::Antialiasing);
p.setPen(QPen(Qt::black, 1));
QPointF arrow[3];
arrow[0] = QPointF(img->width()/2, img->height()/2);
arrow[1] = arrow[0] + QPointF(qSin(angle - M_PI/3) * CURENT_SIZE,
qCos(angle - M_PI/3) * CURENT_SIZE);
arrow[2] = arrow[0] + QPointF(qSin(angle - M_PI + M_PI/3) * CURENT_SIZE,
qCos(angle - M_PI + M_PI/3) * CURENT_SIZE);
QLineF l(arrow[1], arrow[2]);
QPointF pt(l.pointAt(0.5));
QLineF l2(arrow[0], pt);
p.translate(arrow[0] - pt);
p.drawPolyline(QPolygonF() << arrow[1] << arrow[0] << arrow[2]);
p.drawLine(arrow[0], l2.pointAt(2));
return img;
}
static QImage *image(uint type, const QVariant &param)
{
if (type>>16 == I_RDOCAL)
if (type>>16 == RDOCAL || type>>16 == I_RDOCAL)
return rdocalArrow(deg2rad(90 - param.toDouble()));
else if (type>>16 == CURENT)
return currentArrow(deg2rad(90 - param.toDouble()));
else
return 0;
}
static bool showLabel(const QImage *img, const Range &range, int zoom, int type)
{
if (type>>16 == I_DISMAR)
return true;
if ((img || type>>16 == SOUNDG) && zoom < range.mid())
return false;
return true;
}
QPainterPath RasterTile::painterPath(const Polygon &polygon) const
{
QPainterPath path;
@ -266,21 +335,37 @@ void RasterTile::processPolygons(QList<TextItem*> &textItems)
}
void RasterTile::processPoints(QList<TextItem*> &textItems,
QList<QImage*> &images)
QList<TextItem*> &lights)
{
const Style &s = style();
PointMap lightsMap, signalsMap;
int i;
std::sort(_points.begin(), _points.end(), pointLess);
for (int i = 0; i < _points.size(); i++) {
/* Lights & Signals */
for (i = 0; i < _points.size(); i++) {
const MapData::Point *point = _points.at(i);
if (point->type()>>16 == LIGHTS)
lightsMap.insert(point->pos(), point);
else if (point->type()>>16 == FOGSIG)
signalsMap.insert(point->pos(), point);
else
break;
}
/* Everything else */
for ( ; i < _points.size(); i++) {
const MapData::Point *point = _points.at(i);
QPoint pos(ll2xy(point->pos()).toPoint());
const Style::Point &style = s.point(point->type());
const QString *label = point->label().isEmpty() ? 0 : &(point->label());
QImage *rimg = style.img().isNull()
? image(point->type(), point->param()) : 0;
const QImage *img = style.img().isNull() ? rimg : &style.img();
const QFont *fnt = font(style.textFontSize());
const QFont *fnt = showLabel(img, _zooms, _zoom, point->type())
? font(style.textFontSize()) : 0;
const QColor *color = &style.textColor();
const QColor *hColor = style.haloColor().isValid()
? &style.haloColor() : 0;
@ -288,16 +373,16 @@ void RasterTile::processPoints(QList<TextItem*> &textItems,
if ((!label || !fnt) && !img)
continue;
TextPointItem *item = new TextPointItem(ll2xy(point->pos()).toPoint(),
label, fnt, img, color, hColor, 0, ICON_PADDING);
PointItem *item = new PointItem(pos, label, fnt, img, rimg, color,
hColor);
if (item->isValid() && !item->collides(textItems)) {
textItems.append(item);
if (rimg)
images.append(rimg);
} else {
if (lightsMap.contains(point->pos()))
lights.append(new TextPointItem(pos, 0, 0, light(), 0, 0, 0, 0));
if (signalsMap.contains(point->pos()))
lights.append(new TextPointItem(pos, 0, 0, signal(), 0, 0, 0, 0));
} else
delete item;
delete rimg;
}
}
}
@ -328,14 +413,13 @@ void RasterTile::processLines(QList<TextItem*> &textItems)
void RasterTile::render()
{
QList<TextItem*> textItems;
QList<QImage*> images;
QList<TextItem*> textItems, lights;
_pixmap.setDevicePixelRatio(_ratio);
_pixmap.fill(Qt::transparent);
processPolygons(textItems);
processPoints(textItems, images);
processPoints(textItems, lights);
processLines(textItems);
QPainter painter(&_pixmap);
@ -347,10 +431,11 @@ void RasterTile::render()
drawLines(&painter);
drawArrows(&painter);
drawTextItems(&painter, lights);
drawTextItems(&painter, textItems);
qDeleteAll(textItems);
qDeleteAll(images);
qDeleteAll(lights);
//painter.setPen(Qt::red);
//painter.setBrush(Qt::NoBrush);

View File

@ -13,12 +13,14 @@ namespace ENC {
class RasterTile
{
public:
RasterTile(const Projection &proj, const Transform &transform, int zoom,
const QRect &rect, qreal ratio, const QList<MapData::Line*> &lines,
const QList<MapData::Poly*> &polygons, const QList<MapData::Point*> &points)
: _proj(proj), _transform(transform), _zoom(zoom), _rect(rect),
_ratio(ratio), _pixmap(rect.width() * ratio, rect.height() * ratio),
_lines(lines), _polygons(polygons), _points(points), _valid(false) {}
RasterTile(const Projection &proj, const Transform &transform,
const Range &zooms, int zoom, const QRect &rect, qreal ratio,
const QList<MapData::Line*> &lines, const QList<MapData::Poly*> &polygons,
const QList<MapData::Point*> &points)
: _proj(proj), _transform(transform), _zooms(zooms), _zoom(zoom),
_rect(rect), _ratio(ratio),
_pixmap(rect.width() * ratio, rect.height() * ratio), _lines(lines),
_polygons(polygons), _points(points), _valid(false) {}
int zoom() const {return _zoom;}
QPoint xy() const {return _rect.topLeft();}
@ -33,7 +35,7 @@ private:
QPainterPath painterPath(const Polygon &polygon) const;
QPolygonF polyline(const QVector<Coordinates> &path) const;
QPolygonF tsslptArrow(const Coordinates &c, qreal angle) const;
void processPoints(QList<TextItem*> &textItems, QList<QImage*> &images);
void processPoints(QList<TextItem*> &textItems, QList<TextItem *> &lights);
void processLines(QList<TextItem*> &textItems);
void processPolygons(QList<TextItem*> &textItems);
void drawBitmapPath(QPainter *painter, const QImage &img,
@ -45,6 +47,7 @@ private:
Projection _proj;
Transform _transform;
Range _zooms;
int _zoom;
QRect _rect;
qreal _ratio;

View File

@ -178,12 +178,11 @@ void Style::pointStyle()
{
_points[SUBTYPE(BUAARE, 1)].setTextFontSize(Large);
_points[SUBTYPE(BUAARE, 5)].setTextFontSize(Large);
_points[SUBTYPE(BUAARE, 3)].setTextFontSize(Small);
_points[SUBTYPE(BUAARE, 4)].setTextFontSize(Large);
_points[SUBTYPE(BUAARE, 2)].setTextFontSize(Small);
_points[SUBTYPE(BUAARE, 6)].setTextFontSize(Small);
_points[SUBTYPE(BUAARE, 0)].setTextFontSize(Small);
_points[TYPE(SOUNDG)].setTextFontSize(Small);
_points[TYPE(SOUNDG)].setHaloColor(QColor());
_points[TYPE(LIGHTS)] = Point(QImage(":/marine/light-major.png"), Small);
_points[TYPE(BOYCAR)] = Point(QImage(":/marine/buoy.png"), Small);
_points[TYPE(BOYINB)] = Point(QImage(":/marine/buoy.png"), Small);
_points[TYPE(BOYISD)] = Point(QImage(":/marine/buoy.png"), Small);
@ -191,12 +190,14 @@ void Style::pointStyle()
_points[TYPE(I_BOYLAT)] = Point(QImage(":/marine/buoy.png"), Small);
_points[TYPE(BOYSAW)] = Point(QImage(":/marine/buoy.png"), Small);
_points[TYPE(BOYSPP)] = Point(QImage(":/marine/buoy.png"), Small);
_points[TYPE(BCNCAR)] = Point(QImage(":/marine/beacon.png"), Small);
_points[TYPE(BCNISD)] = Point(QImage(":/marine/beacon.png"), Small);
_points[TYPE(BCNLAT)] = Point(QImage(":/marine/beacon.png"), Small);
_points[TYPE(I_BCNLAT)] = Point(QImage(":/marine/beacon.png"), Small);
_points[TYPE(BCNSAW)] = Point(QImage(":/marine/beacon.png"), Small);
_points[TYPE(BCNSPP)] = Point(QImage(":/marine/beacon.png"), Small);
_points[SUBTYPE(LNDMRK, 3)] = Point(QImage(":/marine/chimney.png"));
_points[SUBTYPE(LNDMRK, 7)] = Point(QImage(":/marine/pylon.png"));
_points[SUBTYPE(LNDMRK, 9)] = Point(QImage(":/marine/monument.png"));
_points[SUBTYPE(LNDMRK, 20)] = Point(QImage(":/marine/church.png"));
_points[SUBTYPE(LNDMRK, 17)] = Point(QImage(":/marine/tower.png"));
@ -235,14 +236,14 @@ void Style::pointStyle()
_points[SUBTYPE(MORFAC, 5)] = Point(QImage(":/marine/pile.png"), Small);
_points[SUBTYPE(MORFAC, 7)] = Point(QImage(":/marine/mooring-buoy.png"),
Small);
_points[TYPE(CRANES)] = Point(QImage(":/marine/crane.png"));
_points[TYPE(I_CRANES)] = Point(QImage(":/marine/crane.png"));
_points[SUBTYPE(I_DISMAR, 1)] = Point(QImage(":/marine/distance-mark.png"));
_points[TYPE(CRANES)] = Point(QImage(":/marine/crane.png"), Small);
_points[TYPE(I_CRANES)] = Point(QImage(":/marine/crane.png"), Small);
_points[SUBTYPE(I_DISMAR, 1)] = Point(QImage(":/marine/distance-mark.png"),
Small);
_points[SUBTYPE(I_DISMAR, 1)].setTextColor(QColor("#ffffff"));
_points[SUBTYPE(I_DISMAR, 1)].setTextFontSize(Small);
_points[SUBTYPE(I_DISMAR, 1)].setHaloColor(QColor());
_points[SUBTYPE(I_DISMAR, 2)] = Point(QImage(":/marine/distance-mark-land.png"));
_points[SUBTYPE(I_DISMAR, 2)].setTextFontSize(Small);
_points[SUBTYPE(I_DISMAR, 2)] = Point(QImage(":/marine/distance-mark-land.png"),
Small);
_points[SUBTYPE(I_DISMAR, 2)].setHaloColor(QColor());
_points[SUBTYPE(I_DISMAR, 3)] = _points[SUBTYPE(I_DISMAR, 2)];
_points[SUBTYPE(I_DISMAR, 4)] = _points[SUBTYPE(I_DISMAR, 2)];
@ -252,7 +253,8 @@ void Style::pointStyle()
_points[TYPE(RTPBCN)] = Point(QImage(":/marine/radar-transponder.png"));
_points[TYPE(SILTNK)] = Point(QImage(":/marine/silo.png"));
_points[TYPE(I_TRNBSN)] = Point(QImage(":/marine/turning-basin.png"));
_points[TYPE(I_WTWGAG)] = Point(QImage(":/marine/gauge.png"));
_points[TYPE(I_WTWGAG)] = Point(QImage(":/marine/gauge.png"), Small);
_points[TYPE(RDOCAL)].setTextColor(QColor("#eb49eb"));
_points[TYPE(I_RDOCAL)].setTextColor(QColor("#eb49eb"));
_points[TYPE(PYLONS)] = Point(QImage(":/marine/pylon.png"));
_points[SUBTYPE(I_BERTHS, 6)] = Point(QImage(":/marine/fleeting-area.png"));
@ -261,26 +263,33 @@ void Style::pointStyle()
_points[SUBTYPE(WATTUR, 4)] = Point(QImage(":/marine/overfalls.png"));
_points[TYPE(PILBOP)] = Point(QImage(":/marine/boarding-place.png"));
_points[TYPE(SISTAT)] = Point(QImage(":/marine/pylon.png"));
_points[TYPE(SLCONS)] = Point(QImage(":/marine/construction.png"), Small);
_points[SUBTYPE(SMCFAC, 7)] = Point(QImage(":/POI/restaurant-11.png"));
_points[SUBTYPE(SMCFAC, 11)] = Point(QImage(":/POI/pharmacy-11.png"));
_points[SUBTYPE(SMCFAC, 12)] = Point(QImage(":/POI/drinking-water-11.png"));
_points[SUBTYPE(SMCFAC, 13)] = Point(QImage(":/POI/fuel-11.png"));
_points[SUBTYPE(SMCFAC, 18)] = Point(QImage(":/POI/toilet-11.png"));
_points[SUBTYPE(SMCFAC, 20)] = Point(QImage(":/POI/telephone-11.png"));
_points[SUBTYPE(SMCFAC, 22)] = Point(QImage(":/POI/parking-11.png"));
_points[SUBTYPE(SMCFAC, 25)] = Point(QImage(":/POI/campsite-11.png"));
_points[SUBTYPE(BUISGL, 2)] = Point(QImage(":/POI/harbor-11.png"));
_points[SUBTYPE(BUISGL, 5)] = Point(QImage(":/POI/hospital-11.png"));
_points[SUBTYPE(BUISGL, 6)] = Point(QImage(":/POI/post-11.png"));
_points[SUBTYPE(BUISGL, 7)] = Point(QImage(":/POI/lodging-11.png"));
_points[SUBTYPE(BUISGL, 9)] = Point(QImage(":/POI/police-11.png"));
_points[SUBTYPE(BUISGL, 13)] = Point(QImage(":/POI/bank-11.png"));
_points[SUBTYPE(BUISGL, 19)] = Point(QImage(":/POI/school-11.png"));
_points[SUBTYPE(BUISGL, 20)] = Point(QImage(":/POI/religious-christian-11.png"));
_points[SUBTYPE(BUISGL, 22)] = Point(QImage(":/POI/religious-jewish-11.png"));
_points[SUBTYPE(BUISGL, 26)] = Point(QImage(":/POI/religious-muslim-11.png"));
_points[SUBTYPE(BUISGL, 42)] = Point(QImage(":/POI/bus-11.png"));
_points[SUBTYPE(SMCFAC, 7)] = Point(QImage(":/POI/restaurant-11.png"), Small);
_points[SUBTYPE(SMCFAC, 11)] = Point(QImage(":/POI/pharmacy-11.png"), Small);
_points[SUBTYPE(SMCFAC, 12)] = Point(QImage(":/POI/drinking-water-11.png"),
Small);
_points[SUBTYPE(SMCFAC, 13)] = Point(QImage(":/POI/fuel-11.png"), Small);
_points[SUBTYPE(SMCFAC, 18)] = Point(QImage(":/POI/toilet-11.png"), Small);
_points[SUBTYPE(SMCFAC, 20)] = Point(QImage(":/POI/telephone-11.png"), Small);
_points[SUBTYPE(SMCFAC, 22)] = Point(QImage(":/POI/parking-11.png"), Small);
_points[SUBTYPE(SMCFAC, 25)] = Point(QImage(":/POI/campsite-11.png"), Small);
_points[TYPE(BUISGL)] = Point(QImage(":/marine/building.png"), Small);
_points[SUBTYPE(BUISGL, 2)] = Point(QImage(":/POI/harbor-11.png"), Small);
_points[SUBTYPE(BUISGL, 5)] = Point(QImage(":/POI/hospital-11.png"), Small);
_points[SUBTYPE(BUISGL, 6)] = Point(QImage(":/POI/post-11.png"), Small);
_points[SUBTYPE(BUISGL, 7)] = Point(QImage(":/POI/lodging-11.png"), Small);
_points[SUBTYPE(BUISGL, 9)] = Point(QImage(":/POI/police-11.png"), Small);
_points[SUBTYPE(BUISGL, 13)] = Point(QImage(":/POI/bank-11.png"), Small);
_points[SUBTYPE(BUISGL, 19)] = Point(QImage(":/POI/school-11.png"), Small);
_points[SUBTYPE(BUISGL, 20)] = Point(QImage(":/POI/religious-christian-11.png"),
Small);
_points[SUBTYPE(BUISGL, 22)] = Point(QImage(":/POI/religious-jewish-11.png"),
Small);
_points[SUBTYPE(BUISGL, 26)] = Point(QImage(":/POI/religious-muslim-11.png"),
Small);
_points[SUBTYPE(BUISGL, 33)] = Point(QImage(":/marine/pylon.png"), Small);
_points[SUBTYPE(BUISGL, 42)] = Point(QImage(":/POI/bus-11.png"), Small);
}
Style::Style()

View File

@ -1,3 +1,4 @@
#include <QFileInfo>
#include "common/programpaths.h"
#include "vectortile.h"
#include "style.h"
@ -76,7 +77,7 @@ void MapData::load()
_style = new Style(_typ);
else {
QString typFile(ProgramPaths::typFile());
if (!typFile.isEmpty()) {
if (QFileInfo::exists(typFile)) {
SubFile typ(&typFile);
_style = new Style(&typ);
} else

View File

@ -357,7 +357,8 @@ void RasterTile::processStreetNames(QList<TextItem*> &textItems)
? &style.textColor() : 0;
TextPathItem *item = new TextPathItem(poly.points,
&poly.label.text(), _rect, fnt, color, &haloColor);
&poly.label.text(), _rect, fnt, color, Style::isContourLine(poly.type)
? 0 : &haloColor);
if (item->isValid() && !item->collides(textItems))
textItems.append(item);
else

View File

@ -217,7 +217,7 @@ bool RGNFile::load(Handle &hdl)
&& readUInt32(hdl, _base.size)))
return false;
if (hdrLen >= 0x68) {
if (hdrLen >= 0x71) {
if (!(readUInt32(hdl, _polygons.offset) && readUInt32(hdl, _polygons.size)
&& seek(hdl, _gmpOffset + 0x29) && readUInt32(hdl, _polygonsGblFlags)
&& readUInt32(hdl, _polygonsLclFlags[0])

View File

@ -392,6 +392,7 @@ void Style::defaultLineStyle()
_lines[0x10505] = Line(QImage(":/marine/safety-zone-line.png"));
_lines[0x10507] = Line(QPen(QColor("#e728e7"), 1, Qt::DashLine));
_lines[0x10601] = Line(QPen(QColor("#000000"), 1, Qt::SolidLine));
_lines[0x10603] = Line(QPen(QColor("#e728e7"), 2, Qt::DashDotLine));
_lines[0x10606] = Line(QImage(":/marine/anchor-line.png"));
_lines[0x1060c] = Line(QPen(QColor("#e728e7"), 1, Qt::SolidLine));
_lines[0x1060d] = Line(QPen(QColor("#eb49eb"), 1, Qt::DashLine));

View File

@ -195,8 +195,8 @@ void ENCMap::draw(QPainter *painter, const QRectF &rect, Flags flags)
_transform.img2proj(pointRect.bottomRight()));
_data.points(pointRectD.toRectC(_projection, 20), &points);
tiles.append(RasterTile(_projection, _transform, _zoom,
QRect(ttl, QSize(TILE_SIZE, TILE_SIZE)), _tileRatio,
tiles.append(RasterTile(_projection, _transform, _data.zooms(),
_zoom, QRect(ttl, QSize(TILE_SIZE, TILE_SIZE)), _tileRatio,
lines, polygons, points));
}
}

View File

@ -2,6 +2,11 @@
#include "image.h"
#define TILE_SIZE 256
#if QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)
#define OPENGL_SIZE_LIMIT 536870912 /* 512MB */
#else
#define OPENGL_SIZE_LIMIT 134217728 /* 128MB */
#endif
void Image::draw(QPainter *painter, const QRectF &rect, Map::Flags flags)
{
@ -11,7 +16,7 @@ void Image::draw(QPainter *painter, const QRectF &rect, Map::Flags flags)
/* When OpenGL is used, big images are rendered incredibly slow or not at
all using the QPainter::drawImage() function with a source rect set. So
we have to tile the image ourself before it can be drawn. */
if (flags & Map::OpenGL) {
if (flags & Map::OpenGL && _img.sizeInBytes() > OPENGL_SIZE_LIMIT) {
for (int i = sr.left()/TILE_SIZE; i <= sr.right()/TILE_SIZE; i++) {
for (int j = sr.top()/TILE_SIZE; j <= sr.bottom()/TILE_SIZE; j++) {
QPoint tl(i * TILE_SIZE, j * TILE_SIZE);

View File

@ -80,7 +80,6 @@ Map *MapList::loadFile(const QString &path, const Projection &proj, bool *isDir)
errors.append(it.key() + ": " + map->errorString());
++it;
}
} else {
for (it = _parsers.begin(); it != _parsers.end(); it++) {
map = it.value()(path, proj, isDir);