1
0
mirror of https://github.com/tumic0/GPXSee.git synced 2024-11-24 11:45:53 +01:00

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...
This commit is contained in:
Martin Tůma 2023-02-22 23:22:18 +01:00
parent f952e02535
commit 7a53fb8e01

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);
} }