void StampBrush::endCapture() { if (mBrushBehavior != Capture) return; mBrushBehavior = Free; TileLayer *tileLayer = currentTileLayer(); Q_ASSERT(tileLayer); // Intersect with the layer and translate to layer coordinates QRect captured = capturedArea(); captured &= QRect(tileLayer->x(), tileLayer->y(), tileLayer->width(), tileLayer->height()); if (captured.isValid()) { captured.translate(-tileLayer->x(), -tileLayer->y()); Map *map = tileLayer->map(); TileLayer *capture = tileLayer->copy(captured); Map *stamp = new Map(map->orientation(), capture->width(), capture->height(), map->tileWidth(), map->tileHeight()); // Add tileset references to map foreach (const SharedTileset &tileset, capture->usedTilesets()) stamp->addTileset(tileset); stamp->addLayer(capture); emit stampCaptured(TileStamp(stamp)); } else {
void StampBrush::endCapture() { if (mBrushBehavior != Capture) return; mBrushBehavior = Free; TileLayer *tileLayer = currentTileLayer(); Q_ASSERT(tileLayer); // Intersect with the layer and translate to layer coordinates QRect captured = capturedArea(); captured &= QRect(tileLayer->x(), tileLayer->y(), tileLayer->width(), tileLayer->height()); if (captured.isValid()) { captured.translate(-tileLayer->x(), -tileLayer->y()); Map *map = tileLayer->map(); TileLayer *capture = tileLayer->copy(captured); Map *stamp = new Map(map->orientation(), capture->width(), capture->height(), map->tileWidth(), map->tileHeight()); //gets if the relative stagger should be the same as the base layer int staggerIndexOffSet; if (tileLayer->map()->staggerAxis() == Map::StaggerX) staggerIndexOffSet = captured.x() % 2; else staggerIndexOffSet = captured.y() % 2; stamp->setStaggerAxis(map->staggerAxis()); stamp->setStaggerIndex((Map::StaggerIndex)((map->staggerIndex() + staggerIndexOffSet) % 2)); // Add tileset references to map foreach (const SharedTileset &tileset, capture->usedTilesets()) stamp->addTileset(tileset); stamp->addLayer(capture); emit stampCaptured(TileStamp(stamp)); } else {
QVariant MapToVariantConverter::toVariant(const TileLayer &tileLayer, Map::LayerDataFormat format) const { QVariantMap tileLayerVariant; tileLayerVariant[QLatin1String("type")] = QLatin1String("tilelayer"); QRect bounds = tileLayer.bounds().translated(-tileLayer.position()); if (tileLayer.map()->infinite()) { tileLayerVariant[QLatin1String("width")] = bounds.width(); tileLayerVariant[QLatin1String("height")] = bounds.height(); tileLayerVariant[QLatin1String("startx")] = bounds.left(); tileLayerVariant[QLatin1String("starty")] = bounds.top(); } else { tileLayerVariant[QLatin1String("width")] = tileLayer.width(); tileLayerVariant[QLatin1String("height")] = tileLayer.height(); } addLayerAttributes(tileLayerVariant, tileLayer); switch (format) { case Map::XML: case Map::CSV: break; case Map::Base64: case Map::Base64Zlib: case Map::Base64Gzip: tileLayerVariant[QLatin1String("encoding")] = QLatin1String("base64"); if (format == Map::Base64Zlib) tileLayerVariant[QLatin1String("compression")] = QLatin1String("zlib"); else if (format == Map::Base64Gzip) tileLayerVariant[QLatin1String("compression")] = QLatin1String("gzip"); break; } if (tileLayer.map()->infinite()) { QVariantList chunkVariants; for (const QRect &rect : tileLayer.sortedChunksToWrite()) { QVariantMap chunkVariant; chunkVariant[QLatin1String("x")] = rect.x(); chunkVariant[QLatin1String("y")] = rect.y(); chunkVariant[QLatin1String("width")] = rect.width(); chunkVariant[QLatin1String("height")] = rect.height(); addTileLayerData(chunkVariant, tileLayer, format, rect); chunkVariants.append(chunkVariant); } tileLayerVariant[QLatin1String("chunks")] = chunkVariants; } else { addTileLayerData(tileLayerVariant, tileLayer, format, QRect(0, 0, tileLayer.width(), tileLayer.height())); } return tileLayerVariant; }