From 63bed529c78ca05d3e32a0b6ec3bcfd6152e53de Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Wed, 29 Jun 2011 23:52:17 +0300 Subject: Fix memory leak in desktop.cpp --- src/resources/resourcemanager.cpp | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) (limited to 'src/resources/resourcemanager.cpp') diff --git a/src/resources/resourcemanager.cpp b/src/resources/resourcemanager.cpp index 410611fc3..78ca6a284 100644 --- a/src/resources/resourcemanager.cpp +++ b/src/resources/resourcemanager.cpp @@ -726,3 +726,34 @@ void ResourceManager::clearScheduled() } deletedSurfaces.clear(); } + +struct RescaledLoader +{ + ResourceManager *manager; + Image *image; + int width; + int height; + static Resource *load(void *v) + { + if (!v) + return NULL; + RescaledLoader *l = static_cast< RescaledLoader * >(v); + if (!l->manager) + return NULL; + Image *rescaled = l->image->SDLgetScaledImage(l->width, l->height); + if (!rescaled) + return NULL; + return rescaled; + } +}; + +Image *ResourceManager::getRescaled(Image *image, int width, int height) +{ + if (!image) + return 0; + + std::string idPath = image->getIdPath() + strprintf("_rescaled%dx%d", width, height); + RescaledLoader l = { this, image, width, height }; + Image *img = static_cast(get(idPath, RescaledLoader::load, &l)); + return img; +} -- cgit v1.2.3-70-g09d2