From e2f03241a1ba9d6b536b0b7a6f995e4e8d894408 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Wed, 25 May 2016 14:13:51 +0300 Subject: Move images load function from resourcemanager into separate file. --- src/resources/item/item.cpp | 6 +- src/resources/loaders/imageloader.cpp | 88 +++++++++++++++++++++++ src/resources/loaders/imageloader.h | 41 +++++++++++ src/resources/map/map.cpp | 6 +- src/resources/map/mapitem.cpp | 4 +- src/resources/mapreader.cpp | 4 +- src/resources/resourcemanager/resourcemanager.cpp | 64 ++--------------- src/resources/resourcemanager/resourcemanager.h | 6 -- 8 files changed, 144 insertions(+), 75 deletions(-) create mode 100644 src/resources/loaders/imageloader.cpp create mode 100644 src/resources/loaders/imageloader.h (limited to 'src/resources') diff --git a/src/resources/item/item.cpp b/src/resources/item/item.cpp index d62d9aaf1..8400e2675 100644 --- a/src/resources/item/item.cpp +++ b/src/resources/item/item.cpp @@ -30,7 +30,7 @@ #include "resources/iteminfo.h" -#include "resources/resourcemanager/resourcemanager.h" +#include "resources/loaders/imageloader.h" #include "net/serverfeatures.h" @@ -100,7 +100,7 @@ void Item::setId(const int id, const std::string dye = combineDye2(paths.getStringValue( "itemIcons").append(info.getDisplay().image), info.getDyeIconColorsString(color)); - mImage = resourceManager->getImage(dye); + mImage = ImageLoader::getImage(dye); if (!mImage) { @@ -121,7 +121,7 @@ Image *Item::getImage(const int id, const ItemColor color) { const ItemInfo &info = ItemDB::get(id); - Image *image = resourceManager->getImage(combineDye2(paths.getStringValue( + Image *image = ImageLoader::getImage(combineDye2(paths.getStringValue( "itemIcons").append(info.getDisplay().image), info.getDyeIconColorsString(color))); diff --git a/src/resources/loaders/imageloader.cpp b/src/resources/loaders/imageloader.cpp new file mode 100644 index 000000000..936d9b090 --- /dev/null +++ b/src/resources/loaders/imageloader.cpp @@ -0,0 +1,88 @@ +/* + * The ManaPlus Client + * Copyright (C) 2004-2009 The Mana World Development Team + * Copyright (C) 2009-2010 The Mana Developers + * Copyright (C) 2011-2016 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "logger.h" + +#include "resources/image.h" +#include "resources/imagehelper.h" + +#include "resources/loaders/imageloader.h" + +#include "resources/resourcemanager/resourcemanager.h" + +#include "resources/dye/dye.h" + +#include "utils/checkutils.h" +#include "utils/physfsrwops.h" + +#include "debug.h" + +namespace +{ + struct DyedImageLoader final + { + std::string path; + static Resource *load(const void *const v) + { + BLOCK_START("DyedImageLoader::load") + if (!v) + { + BLOCK_END("DyedImageLoader::load") + return nullptr; + } + + const DyedImageLoader *const rl + = static_cast(v); + + std::string path1 = rl->path; + const size_t p = path1.find('|'); + Dye *d = nullptr; + if (p != std::string::npos) + { + d = new Dye(path1.substr(p + 1)); + path1 = path1.substr(0, p); + } + SDL_RWops *const rw = MPHYSFSRWOPS_openRead(path1.c_str()); + if (!rw) + { + delete d; + reportAlways("Image loading error: %s", path1.c_str()); + BLOCK_END("DyedImageLoader::load") + return nullptr; + } + Resource *const res = d ? imageHelper->load(rw, *d) + : imageHelper->load(rw); + delete d; + if (!res) + reportAlways("Image loading error: %s", path1.c_str()); + BLOCK_END("DyedImageLoader::load") + return res; + } + }; +} // namespace + +Image *ImageLoader::getImage(const std::string &idPath) +{ + DyedImageLoader rl = { idPath }; + return static_cast(resourceManager->get(idPath, + DyedImageLoader::load, &rl)); +} diff --git a/src/resources/loaders/imageloader.h b/src/resources/loaders/imageloader.h new file mode 100644 index 000000000..6d60782a5 --- /dev/null +++ b/src/resources/loaders/imageloader.h @@ -0,0 +1,41 @@ +/* + * The ManaPlus Client + * Copyright (C) 2004-2009 The Mana World Development Team + * Copyright (C) 2009-2010 The Mana Developers + * Copyright (C) 2011-2016 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef RESOURCES_LOADERS_IMAGELOADER_H +#define RESOURCES_LOADERS_IMAGELOADER_H + +#include "localconsts.h" + +#include + +class Image; + +namespace ImageLoader +{ + /** + * Convenience wrapper around ResourceManager::get for loading + * images. + */ + Image *getImage(const std::string &idPath) A_WARN_UNUSED; +} // namespace ImageLoader + +#endif // RESOURCES_LOADERS_IMAGELOADER_H diff --git a/src/resources/map/map.cpp b/src/resources/map/map.cpp index 7fde6a005..a5e14fc10 100644 --- a/src/resources/map/map.cpp +++ b/src/resources/map/map.cpp @@ -52,7 +52,7 @@ #include "resources/map/mapobjectlist.h" #include "resources/map/tileanimation.h" -#include "resources/resourcemanager/resourcemanager.h" +#include "resources/loaders/imageloader.h" #ifdef USE_OPENGL #include "render/renderers.h" @@ -236,7 +236,7 @@ void Map::initializeAmbientLayers() restrict2 break; // the FOR loop } - Image *restrict const img = resourceManager->getImage( + Image *restrict const img = ImageLoader::getImage( getProperty(name + "image")); if (img) { @@ -266,7 +266,7 @@ void Map::initializeAmbientLayers() restrict2 toString(i)).append("image")); i ++) { const std::string name("background" + toString(i)); - Image *restrict const img = resourceManager->getImage( + Image *restrict const img = ImageLoader::getImage( getProperty(name + "image")); if (img) diff --git a/src/resources/map/mapitem.cpp b/src/resources/map/mapitem.cpp index 58a105ab9..6443bb196 100644 --- a/src/resources/map/mapitem.cpp +++ b/src/resources/map/mapitem.cpp @@ -29,7 +29,7 @@ #include "resources/image.h" -#include "resources/resourcemanager/resourcemanager.h" +#include "resources/loaders/imageloader.h" #include "render/graphics.h" @@ -115,7 +115,7 @@ void MapItem::setType(const int type) } if (!name.empty()) - mImage = resourceManager->getImage(name); + mImage = ImageLoader::getImage(name); else mImage = nullptr; } diff --git a/src/resources/mapreader.cpp b/src/resources/mapreader.cpp index 979153c87..036918f66 100644 --- a/src/resources/mapreader.cpp +++ b/src/resources/mapreader.cpp @@ -46,6 +46,8 @@ #include "resources/map/tileanimation.h" +#include "resources/loaders/imageloader.h" + #include "resources/resourcemanager/resourcemanager.h" #include "utils/base64.h" @@ -1048,7 +1050,7 @@ Tileset *MapReader::readTileset(XmlNodePtr node, if (!source.empty()) { - Image *const tilebmp = resourceManager->getImage( + Image *const tilebmp = ImageLoader::getImage( resolveRelativePath(pathDir, source)); if (tilebmp) diff --git a/src/resources/resourcemanager/resourcemanager.cpp b/src/resources/resourcemanager/resourcemanager.cpp index abec23475..0cff0fb2c 100644 --- a/src/resources/resourcemanager/resourcemanager.cpp +++ b/src/resources/resourcemanager/resourcemanager.cpp @@ -37,11 +37,11 @@ #include "resources/imagehelper.h" #include "resources/imageset.h" #include "resources/memorymanager.h" -#include "resources/sdlmusic.h" -#include "resources/soundeffect.h" #include "resources/dye/dye.h" +#include "resources/loaders/imageloader.h" + #include "resources/sprite/spritedef.h" #include "utils/checkutils.h" @@ -527,62 +527,8 @@ Resource *ResourceManager::get(const std::string &idPath, return resource; } -struct DyedImageLoader final -{ - ResourceManager *manager; - std::string path; - static Resource *load(const void *const v) - { - BLOCK_START("DyedImageLoader::load") - if (!v) - { - BLOCK_END("DyedImageLoader::load") - return nullptr; - } - - const DyedImageLoader *const rl - = static_cast(v); - if (!rl->manager) - { - BLOCK_END("DyedImageLoader::load") - return nullptr; - } - - std::string path1 = rl->path; - const size_t p = path1.find('|'); - Dye *d = nullptr; - if (p != std::string::npos) - { - d = new Dye(path1.substr(p + 1)); - path1 = path1.substr(0, p); - } - SDL_RWops *const rw = MPHYSFSRWOPS_openRead(path1.c_str()); - if (!rw) - { - delete d; - reportAlways("Image loading error: %s", path1.c_str()); - BLOCK_END("DyedImageLoader::load") - return nullptr; - } - Resource *const res = d ? imageHelper->load(rw, *d) - : imageHelper->load(rw); - delete d; - if (!res) - reportAlways("Image loading error: %s", path1.c_str()); - BLOCK_END("DyedImageLoader::load") - return res; - } -}; - -Image *ResourceManager::getImage(const std::string &idPath) -{ - DyedImageLoader rl = { this, idPath }; - return static_cast(get(idPath, DyedImageLoader::load, &rl)); -} - struct ImageSetLoader final { - ResourceManager *manager; std::string path; int w, h; static Resource *load(const void *const v) @@ -592,10 +538,8 @@ struct ImageSetLoader final const ImageSetLoader *const rl = static_cast(v); - if (!rl->manager) - return nullptr; - Image *const img = rl->manager->getImage(rl->path); + Image *const img = ImageLoader::getImage(rl->path); if (!img) { reportAlways("Image loading error: %s", rl->path.c_str()); @@ -610,7 +554,7 @@ struct ImageSetLoader final ImageSet *ResourceManager::getImageSet(const std::string &imagePath, const int w, const int h) { - ImageSetLoader rl = { this, imagePath, w, h }; + ImageSetLoader rl = { imagePath, w, h }; std::stringstream ss; ss << imagePath << "[" << w << "x" << h << "]"; return static_cast(get(ss.str(), ImageSetLoader::load, &rl)); diff --git a/src/resources/resourcemanager/resourcemanager.h b/src/resources/resourcemanager/resourcemanager.h index 613934f91..1cc4fab68 100644 --- a/src/resources/resourcemanager/resourcemanager.h +++ b/src/resources/resourcemanager/resourcemanager.h @@ -133,12 +133,6 @@ class ResourceManager final : public MemoryCounter */ bool addResource(const std::string &idPath, Resource *const resource); - /** - * Convenience wrapper around ResourceManager::get for loading - * images. - */ - Image *getImage(const std::string &idPath) A_WARN_UNUSED; - /** * Creates a image set based on the image referenced by the given * path and the supplied sprite sizes -- cgit v1.2.3-60-g2f50