diff options
author | Andrei Karas <akaras@inbox.ru> | 2012-07-14 12:39:24 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2012-07-14 12:39:24 +0300 |
commit | 8ba9dc8011a3b17d97828f9a8b800f8ad56459bf (patch) | |
tree | 08ed78a8911c288d7984af662f93836c9b8a6cf7 /src/resources/resourcemanager.cpp | |
parent | a42faf3f01378c00b2410905c7fb78f3b5270790 (diff) | |
download | plus-8ba9dc8011a3b17d97828f9a8b800f8ad56459bf.tar.gz plus-8ba9dc8011a3b17d97828f9a8b800f8ad56459bf.tar.bz2 plus-8ba9dc8011a3b17d97828f9a8b800f8ad56459bf.tar.xz plus-8ba9dc8011a3b17d97828f9a8b800f8ad56459bf.zip |
Add to resourcemanager method to load imageset from image.
Diffstat (limited to 'src/resources/resourcemanager.cpp')
-rw-r--r-- | src/resources/resourcemanager.cpp | 35 |
1 files changed, 34 insertions, 1 deletions
diff --git a/src/resources/resourcemanager.cpp b/src/resources/resourcemanager.cpp index b88c4dbb5..8b9c4e3c0 100644 --- a/src/resources/resourcemanager.cpp +++ b/src/resources/resourcemanager.cpp @@ -552,6 +552,39 @@ ImageSet *ResourceManager::getImageSet(const std::string &imagePath, return static_cast<ImageSet*>(get(ss.str(), ImageSetLoader::load, &rl)); } + +struct SubImageSetLoader +{ + ResourceManager *manager; + Image *parent; + int width, height; + static Resource *load(void *v) + { + if (!v) + return nullptr; + + SubImageSetLoader *rl = static_cast< SubImageSetLoader * >(v); + if (!rl->manager) + return nullptr; + + if (!rl->parent) + return nullptr; + ImageSet *res = new ImageSet(rl->parent, rl->width, rl->height); + return res; + } +}; + +ImageSet *ResourceManager::getSubImageSet(Image *parent, int width, int height) +{ + if (!parent) + return nullptr; + + SubImageSetLoader rl = { this, parent, width, height }; + std::stringstream ss; + ss << parent->getIdPath() << ", set[" << width << "x" << height << "]"; + return static_cast<ImageSet*>(get(ss.str(), SubImageSetLoader::load, &rl)); +} + struct SubImageLoader { ResourceManager *manager; @@ -574,7 +607,7 @@ struct SubImageLoader }; Image *ResourceManager::getSubImage(Image *parent, int x, int y, - int width, int height) + int width, int height) { if (!parent) return nullptr; |