summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/CMakeLists.txt2
-rw-r--r--src/Makefile.am2
-rw-r--r--src/resources/atlasmanager.cpp43
-rw-r--r--src/resources/atlasmanager.h19
-rw-r--r--src/resources/atlasresource.cpp74
-rw-r--r--src/resources/atlasresource.h53
-rw-r--r--src/resources/resourcemanager.cpp1
7 files changed, 134 insertions, 60 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 6c1336b1e..5cb0b3b65 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -512,6 +512,8 @@ SET(SRCS
resources/animation.h
resources/atlasmanager.cpp
resources/atlasmanager.h
+ resources/atlasresource.cpp
+ resources/atlasresource.h
resources/db/avatardb.cpp
resources/db/avatardb.h
resources/beingcommon.cpp
diff --git a/src/Makefile.am b/src/Makefile.am
index a85f4e8f3..f6d56adc0 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -617,6 +617,8 @@ manaplus_SOURCES += gui/widgets/avatarlistbox.cpp \
resources/animation.h \
resources/atlasmanager.cpp \
resources/atlasmanager.h \
+ resources/atlasresource.cpp \
+ resources/atlasresource.h \
resources/db/avatardb.cpp \
resources/db/avatardb.h \
resources/beingcommon.cpp \
diff --git a/src/resources/atlasmanager.cpp b/src/resources/atlasmanager.cpp
index 81ae0f2f6..e2a801a78 100644
--- a/src/resources/atlasmanager.cpp
+++ b/src/resources/atlasmanager.cpp
@@ -31,6 +31,7 @@
#include "utils/physfsrwops.h"
#include "utils/sdlcheckutils.h"
+#include "resources/atlasresource.h"
#include "resources/dye.h"
#include "resources/imagehelper.h"
#include "resources/openglimagehelper.h"
@@ -355,46 +356,4 @@ void AtlasManager::moveToDeleted(AtlasResource *const resource)
}
}
-AtlasResource::~AtlasResource()
-{
- FOR_EACH (std::vector<TextureAtlas*>::iterator, it, atlases)
- {
- TextureAtlas *const atlas = *it;
- if (atlas)
- {
- FOR_EACH (std::vector<AtlasItem*>::iterator, it2, atlas->items)
- {
- AtlasItem *const item = *it2;
- if (item)
- {
- Image *const image2 = item->image;
- if (image2)
- image2->decRef();
- delete item;
- }
- }
- Image *const image = atlas->atlasImage;
- if (image)
- image->decRef();
- delete atlas;
- }
- }
- ResourceManager *const resman = ResourceManager::getInstance();
- resman->clearDeleted(false);
-}
-
-void AtlasResource::incRef()
-{
- if (!getRefCount())
- AtlasManager::injectToResources(this);
- Resource::incRef();
-}
-
-void AtlasResource::decRef()
-{
- Resource::decRef();
- if (!getRefCount())
- AtlasManager::moveToDeleted(this);
-}
-
#endif
diff --git a/src/resources/atlasmanager.h b/src/resources/atlasmanager.h
index 58f43d251..cf461cc23 100644
--- a/src/resources/atlasmanager.h
+++ b/src/resources/atlasmanager.h
@@ -29,6 +29,7 @@
#include <SDL.h>
+class AtlasResource;
class Resource;
struct AtlasItem final
@@ -75,24 +76,6 @@ struct TextureAtlas final
std::vector <AtlasItem*> items;
};
-class AtlasResource final : public Resource
-{
- public:
- AtlasResource() :
- atlases()
- { }
-
- A_DELETE_COPY(AtlasResource)
-
- ~AtlasResource();
-
- void incRef() override final;
-
- void decRef() override final;
-
- std::vector<TextureAtlas*> atlases;
-};
-
class AtlasManager final
{
public:
diff --git a/src/resources/atlasresource.cpp b/src/resources/atlasresource.cpp
new file mode 100644
index 000000000..f83c8c4f6
--- /dev/null
+++ b/src/resources/atlasresource.cpp
@@ -0,0 +1,74 @@
+/*
+ * The ManaPlus Client
+ * Copyright (C) 2012-2014 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 <http://www.gnu.org/licenses/>.
+ */
+
+#include "main.h"
+
+#ifdef USE_OPENGL
+
+#include "resources/atlasresource.h"
+
+#include "resources/atlasmanager.h"
+#include "resources/resourcemanager.h"
+
+#include "debug.h"
+
+AtlasResource::~AtlasResource()
+{
+ FOR_EACH (std::vector<TextureAtlas*>::iterator, it, atlases)
+ {
+ TextureAtlas *const atlas = *it;
+ if (atlas)
+ {
+ FOR_EACH (std::vector<AtlasItem*>::iterator, it2, atlas->items)
+ {
+ AtlasItem *const item = *it2;
+ if (item)
+ {
+ Image *const image2 = item->image;
+ if (image2)
+ image2->decRef();
+ delete item;
+ }
+ }
+ Image *const image = atlas->atlasImage;
+ if (image)
+ image->decRef();
+ delete atlas;
+ }
+ }
+ ResourceManager *const resman = ResourceManager::getInstance();
+ resman->clearDeleted(false);
+}
+
+void AtlasResource::incRef()
+{
+ if (!getRefCount())
+ AtlasManager::injectToResources(this);
+ Resource::incRef();
+}
+
+void AtlasResource::decRef()
+{
+ Resource::decRef();
+ if (!getRefCount())
+ AtlasManager::moveToDeleted(this);
+}
+
+#endif
diff --git a/src/resources/atlasresource.h b/src/resources/atlasresource.h
new file mode 100644
index 000000000..6c2f95d21
--- /dev/null
+++ b/src/resources/atlasresource.h
@@ -0,0 +1,53 @@
+/*
+ * The ManaPlus Client
+ * Copyright (C) 2012-2014 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 <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef RESOURCES_ATLASRESOURCE_H
+#define RESOURCES_ATLASRESOURCE_H
+
+#ifdef USE_OPENGL
+
+#include "resources/resource.h"
+
+#include <vector>
+
+class Resource;
+
+struct TextureAtlas;
+
+class AtlasResource final : public Resource
+{
+ public:
+ AtlasResource() :
+ atlases()
+ { }
+
+ A_DELETE_COPY(AtlasResource)
+
+ ~AtlasResource();
+
+ void incRef() override final;
+
+ void decRef() override final;
+
+ std::vector<TextureAtlas*> atlases;
+};
+
+#endif // USE_OPENGL
+#endif // RESOURCES_ATLASRESOURCE_H
diff --git a/src/resources/resourcemanager.cpp b/src/resources/resourcemanager.cpp
index 9c6e3bbb6..67e9b557e 100644
--- a/src/resources/resourcemanager.cpp
+++ b/src/resources/resourcemanager.cpp
@@ -30,6 +30,7 @@
#include "resources/map/walklayer.h"
#include "resources/atlasmanager.h"
+#include "resources/atlasresource.h"
#include "resources/dye.h"
#include "resources/image.h"
#include "resources/imagehelper.h"