GUI: Fix various memory leaks related to grid widget

This commit is contained in:
Le Philousophe 2022-01-03 13:32:01 +01:00 committed by Filippos Karapetis
parent 690f9d2a5c
commit 1b3ac06f69
3 changed files with 28 additions and 23 deletions

View File

@ -114,7 +114,7 @@ struct ArchiveMemberListBackComparator {
}
};
void GuiManager::initIconsSet() {
Common::Archive *dat = nullptr;
Common::Archive *dat;
_iconsSet.clear();
@ -138,35 +138,37 @@ void GuiManager::initIconsSet() {
delete iconDir;
}
dat = nullptr;
const char fname[] = "gui-icons.dat";
Common::File *file = new Common::File;
if (ConfMan.hasKey("themepath")) {
Common::FSNode *fs = new Common::FSNode(normalizePath(ConfMan.get("themepath") + "/" + fname, '/'));
if (!fs->exists()) {
delete fs;
} else {
if (fs->exists()) {
dat = Common::makeZipArchive(*fs);
}
delete fs;
}
if (!dat) {
Common::File *file = new Common::File;
if (ConfMan.hasKey("iconspath"))
file->open(normalizePath(ConfMan.get("iconspath") + "/" + fname, '/'));
if (!file->isOpen())
file->open(fname);
if (file->isOpen())
dat = Common::makeZipArchive(file);
if (!dat) {
warning("GUI: Could not find '%s'", fname);
delete file;
return;
}
}
if (!dat && !file->isOpen() && ConfMan.hasKey("iconspath"))
file->open(normalizePath(ConfMan.get("iconspath") + "/" + fname, '/'));
if (!dat && !file->isOpen())
file->open(fname);
if (!dat && file->isOpen())
dat = Common::makeZipArchive(file);
if (!dat) {
warning("GUI: Could not find '%s'", fname);
delete file;
return;
}
_iconsSet.add(fname, dat, 0, false); // Do not autofree
_iconsSet.add(fname, dat);
debug(2, "GUI: Loaded icon file: %s", fname);
}

View File

@ -172,8 +172,8 @@ LauncherDialog::LauncherDialog(const Common::String &dialogName)
}
if (_metadataParser.parse() == false) {
warning("Failed to parse XML file '%s'", (*md)->getDisplayName().encode().c_str());
_metadataParser.close();
}
_metadataParser.close();
}
}

View File

@ -317,6 +317,9 @@ Graphics::ManagedSurface *loadSurfaceFromFile(const Common::String &name, int re
Common::SeekableReadStream *stream = g_gui.getIconsSet().createReadStreamForMember(name);
Graphics::SVGBitmap *image = nullptr;
image = new Graphics::SVGBitmap(stream);
delete stream;
surf = new Graphics::ManagedSurface(renderWidth, renderHeight, *image->getPixelFormat());
image->render(*surf, renderWidth, renderHeight);
delete image;