1
0
mirror of https://github.com/tumic0/GPXSee.git synced 2025-02-21 10:10:49 +01:00

Compare commits

...

3 Commits

Author SHA1 Message Date
aea8402016 Version++ 2023-02-22 23:31:26 +01:00
7a53fb8e01 Remove the qpainter/qimage draw workaround
Seems to be fixed in newer Qt versions and it did not properly work in older
Qt versions anyway...
2023-02-22 23:22:18 +01:00
f952e02535 Allow arbitrary large images
GeoTIFFs can be very huge, the limit of 128MB set in Qt6 is not sufficient for
real-life aerial images. Behave like Qt5 with no limit.
2023-02-22 22:45:18 +01:00
5 changed files with 11 additions and 16 deletions

View File

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

View File

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

View File

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

View File

@ -6,6 +6,7 @@
#include <QNetworkAccessManager> #include <QNetworkAccessManager>
#include <QLibraryInfo> #include <QLibraryInfo>
#include <QSurfaceFormat> #include <QSurfaceFormat>
#include <QImageReader>
#ifdef Q_OS_ANDROID #ifdef Q_OS_ANDROID
#include <QCoreApplication> #include <QCoreApplication>
#include <QJniObject> #include <QJniObject>
@ -59,6 +60,9 @@ App::App(int &argc, char **argv) : QApplication(argc, argv)
fmt.setStencilBufferSize(8); fmt.setStencilBufferSize(8);
fmt.setSamples(4); fmt.setSamples(4);
QSurfaceFormat::setDefaultFormat(fmt); QSurfaceFormat::setDefaultFormat(fmt);
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
QImageReader::setAllocationLimit(0);
#endif // QT6
loadDatums(); loadDatums();
loadPCSs(); loadPCSs();

View File

@ -11,26 +11,17 @@ void Image::draw(QPainter *painter, const QRectF &rect, Map::Flags flags)
/* When OpenGL is used, big images are rendered incredibly slow or not at /* 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 all using the QPainter::drawImage() function with a source rect set. So
we have to tile the image ourself before it can be drawn. we have to tile the image ourself before it can be drawn. */
We have to use a list of dynamically allocated pixmaps as QPainter
rendering is broken in yet another way with OpenGL and drawPixmap() does
access already deleted image instances when reusing a single pixmap. */
if (flags & Map::OpenGL) { if (flags & Map::OpenGL) {
QList<QPixmap *> list;
for (int i = sr.left()/TILE_SIZE; i <= sr.right()/TILE_SIZE; i++) { 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++) { for (int j = sr.top()/TILE_SIZE; j <= sr.bottom()/TILE_SIZE; j++) {
QPoint tl(i * TILE_SIZE, j * TILE_SIZE); QPoint tl(i * TILE_SIZE, j * TILE_SIZE);
QRect tile(tl, QSize(TILE_SIZE, TILE_SIZE)); QRect tile(tl, QSize(TILE_SIZE, TILE_SIZE));
QPixmap *pm = new QPixmap(QPixmap::fromImage(_img.copy(tile))); QPixmap pm(QPixmap::fromImage(_img.copy(tile)));
list.append(pm); pm.setDevicePixelRatio(ratio);
pm->setDevicePixelRatio(ratio); painter->drawPixmap(tl/ratio, pm);
painter->drawPixmap(tl/ratio, *pm);
} }
} }
qDeleteAll(list);
} else } else
painter->drawImage(rect.topLeft(), _img, sr); painter->drawImage(rect.topLeft(), _img, sr);
} }