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 {