Fix memory leak when creating new tileset

This commit is contained in:
BigBahss 2021-02-18 15:02:25 -05:00
parent f989563cc0
commit 3bcdb1d728

View file

@ -1205,15 +1205,15 @@ void MainWindow::on_actionNew_Tileset_triggered() {
} }
directory.mkdir(fullDirectoryPath); directory.mkdir(fullDirectoryPath);
directory.mkdir(fullDirectoryPath + "/palettes"); directory.mkdir(fullDirectoryPath + "/palettes");
Tileset *newSet = new Tileset(); Tileset newSet;
newSet->name = createTilesetDialog->fullSymbolName; newSet.name = createTilesetDialog->fullSymbolName;
newSet->tilesImagePath = fullDirectoryPath + "/tiles.png"; newSet.tilesImagePath = fullDirectoryPath + "/tiles.png";
newSet->metatiles_path = fullDirectoryPath + "/metatiles.bin"; newSet.metatiles_path = fullDirectoryPath + "/metatiles.bin";
newSet->metatile_attrs_path = fullDirectoryPath + "/metatile_attributes.bin"; newSet.metatile_attrs_path = fullDirectoryPath + "/metatile_attributes.bin";
newSet->is_secondary = createTilesetDialog->isSecondary ? "TRUE" : "FALSE"; newSet.is_secondary = createTilesetDialog->isSecondary ? "TRUE" : "FALSE";
int numMetaTiles = createTilesetDialog->isSecondary ? (Project::getNumTilesTotal() - Project::getNumTilesPrimary()) : Project::getNumTilesPrimary(); int numMetaTiles = createTilesetDialog->isSecondary ? (Project::getNumTilesTotal() - Project::getNumTilesPrimary()) : Project::getNumTilesPrimary();
QImage tilesImage(":/images/blank_tileset.png"); QImage tilesImage(":/images/blank_tileset.png");
editor->project->loadTilesetTiles(newSet, tilesImage); editor->project->loadTilesetTiles(&newSet, tilesImage);
for(int i = 0; i < numMetaTiles; ++i) { for(int i = 0; i < numMetaTiles; ++i) {
int tilesPerMetatile = projectConfig.getTripleLayerMetatilesEnabled() ? 12 : 8; int tilesPerMetatile = projectConfig.getTripleLayerMetatilesEnabled() ? 12 : 8;
Metatile *mt = new Metatile(); Metatile *mt = new Metatile();
@ -1231,32 +1231,32 @@ void MainWindow::on_actionNew_Tileset_triggered() {
mt->encounterType = 0; mt->encounterType = 0;
mt->terrainType = 0; mt->terrainType = 0;
newSet->metatiles.append(mt); newSet.metatiles.append(mt);
} }
for(int i = 0; i < 16; ++i) { for(int i = 0; i < 16; ++i) {
QList<QRgb> currentPal; QList<QRgb> currentPal;
for(int i = 0; i < 16;++i) { for(int i = 0; i < 16;++i) {
currentPal.append(qRgb(0,0,0)); currentPal.append(qRgb(0,0,0));
} }
newSet->palettes.append(currentPal); newSet.palettes.append(currentPal);
newSet->palettePreviews.append(currentPal); newSet.palettePreviews.append(currentPal);
QString fileName = QString("%1.pal").arg(i, 2, 10, QLatin1Char('0')); QString fileName = QString("%1.pal").arg(i, 2, 10, QLatin1Char('0'));
newSet->palettePaths.append(fullDirectoryPath+"/palettes/" + fileName); newSet.palettePaths.append(fullDirectoryPath+"/palettes/" + fileName);
} }
newSet->palettes[0][1] = qRgb(255,0,255); newSet.palettes[0][1] = qRgb(255,0,255);
newSet->palettePreviews[0][1] = qRgb(255,0,255); newSet.palettePreviews[0][1] = qRgb(255,0,255);
newSet->is_compressed = "TRUE"; newSet.is_compressed = "TRUE";
newSet->padding = "0"; newSet.padding = "0";
editor->project->saveTilesetTilesImage(newSet); editor->project->saveTilesetTilesImage(&newSet);
editor->project->saveTilesetMetatiles(newSet); editor->project->saveTilesetMetatiles(&newSet);
editor->project->saveTilesetMetatileAttributes(newSet); editor->project->saveTilesetMetatileAttributes(&newSet);
editor->project->saveTilesetPalettes(newSet); editor->project->saveTilesetPalettes(&newSet);
//append to tileset specific files //append to tileset specific files
newSet->appendToHeaders(editor->project->root + "/data/tilesets/headers.inc", createTilesetDialog->friendlyName); newSet.appendToHeaders(editor->project->root + "/data/tilesets/headers.inc", createTilesetDialog->friendlyName);
newSet->appendToGraphics(editor->project->root + "/data/tilesets/graphics.inc", createTilesetDialog->friendlyName, !createTilesetDialog->isSecondary); newSet.appendToGraphics(editor->project->root + "/data/tilesets/graphics.inc", createTilesetDialog->friendlyName, !createTilesetDialog->isSecondary);
newSet->appendToMetatiles(editor->project->root + "/data/tilesets/metatiles.inc", createTilesetDialog->friendlyName, !createTilesetDialog->isSecondary); newSet.appendToMetatiles(editor->project->root + "/data/tilesets/metatiles.inc", createTilesetDialog->friendlyName, !createTilesetDialog->isSecondary);
if(!createTilesetDialog->isSecondary) { if(!createTilesetDialog->isSecondary) {
this->ui->comboBox_PrimaryTileset->addItem(createTilesetDialog->fullSymbolName); this->ui->comboBox_PrimaryTileset->addItem(createTilesetDialog->fullSymbolName);
} else { } else {