diff --git a/src/libtiled/mapreader.cpp b/src/libtiled/mapreader.cpp index 7b5209abc1..81b9d4e89c 100644 --- a/src/libtiled/mapreader.cpp +++ b/src/libtiled/mapreader.cpp @@ -268,13 +268,8 @@ Map *MapReaderPrivate::readMap() // Try to load the tileset images auto tilesets = mMap->tilesets(); for (SharedTileset &tileset : tilesets) { - if (!tileset->imageSource().isEmpty()) { - if (!tileset->loadImage()) { - mError = tr("Error loading tileset image:\n'%1'").arg(tileset->imageSource()); - mMap.reset(); - return nullptr; - } - } + if (!tileset->imageSource().isEmpty()) + tileset->loadImage(); } mMap->recomputeDrawMargins(); diff --git a/src/libtiled/varianttomapconverter.cpp b/src/libtiled/varianttomapconverter.cpp index 9741712df9..9ef5b62c0a 100644 --- a/src/libtiled/varianttomapconverter.cpp +++ b/src/libtiled/varianttomapconverter.cpp @@ -106,6 +106,13 @@ Map *VariantToMapConverter::toMap(const QVariant &variant, map->addLayer(layer); } + // Try to load the tileset images + auto tilesets = map->tilesets(); + for (SharedTileset &tileset : tilesets) { + if (!tileset->imageSource().isEmpty()) + tileset->loadImage(); + } + return map.take(); } @@ -175,20 +182,23 @@ SharedTileset VariantToMapConverter::toTileset(const QVariant &variant) tileset->setTileOffset(QPoint(tileOffsetX, tileOffsetY)); - const QString trans = variantMap[QLatin1String("transparentcolor")].toString(); - if (!trans.isEmpty() && QColor::isValidColor(trans)) - tileset->setTransparentColor(QColor(trans)); - QVariant imageVariant = variantMap[QLatin1String("image")]; if (!imageVariant.isNull()) { - QString imagePath = resolvePath(mMapDir, imageVariant); - if (!tileset->loadFromImage(imagePath)) { - mError = tr("Error loading tileset image:\n'%1'").arg(imagePath); - return SharedTileset(); - } + const int imageWidth = variantMap[QLatin1String("imagewidth")].toInt(); + const int imageHeight = variantMap[QLatin1String("imageheight")].toInt(); + + ImageReference imageRef; + imageRef.source = resolvePath(mMapDir, imageVariant); + imageRef.size = QSize(imageWidth, imageHeight); + + tileset->setImageReference(imageRef); } + const QString trans = variantMap[QLatin1String("transparentcolor")].toString(); + if (!trans.isEmpty() && QColor::isValidColor(trans)) + tileset->setTransparentColor(QColor(trans)); + tileset->setProperties(toProperties(variantMap[QLatin1String("properties")])); // Read terrains diff --git a/src/tiled/tilesetview.cpp b/src/tiled/tilesetview.cpp index 426bfedf7f..54b6cb5ff8 100644 --- a/src/tiled/tilesetview.cpp +++ b/src/tiled/tilesetview.cpp @@ -217,7 +217,19 @@ void TileDelegate::paint(QPainter *painter, const QPixmap &tileImage = tile->image(); const int extra = mTilesetView->drawGrid() ? 1 : 0; const qreal zoom = mTilesetView->scale(); - const QSize tileSize = (tileImage.isNull() ? QSize(32, 32) : tileImage.size()) * zoom; + + QSize tileSize = tileImage.size(); + if (tileImage.isNull()) { + Tileset *tileset = model->tileset(); + if (tileset->imageSource().isEmpty()) { + tileSize = QSize(32, 32); + } else { + int max = std::max(tileset->tileWidth(), tileset->tileWidth()); + int min = std::min(max, 32); + tileSize = QSize(min, min); + } + } + tileSize *= zoom; // Compute rectangle to draw the image in: bottom- and left-aligned QRect targetRect = option.rect.adjusted(0, 0, -extra, -extra);