00001
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include "MyGUI_Precompiled.h"
00024 #include "MyGUI_ResourceImageSet.h"
00025 #include "MyGUI_ResourceManager.h"
00026 #include "MyGUI_LanguageManager.h"
00027
00028 namespace MyGUI
00029 {
00030
00031 std::string ResourceImageSet::mTextureEmpty;
00032 IntSize ResourceImageSet::mSizeEmpty;
00033 std::vector<IntPoint> ResourceImageSet::mFramesEmpty;
00034
00035 void ResourceImageSet::deserialization(xml::ElementPtr _node, Version _version)
00036 {
00037 Base::deserialization(_node, _version);
00038
00039
00040 xml::ElementEnumerator group_node = _node->getElementEnumerator();
00041 while (group_node.next("Group"))
00042 {
00043 GroupImage group;
00044 group.name = group_node->findAttribute("name");
00045
00046 group.texture = group_node->findAttribute("texture");
00047
00048 if (_version >= Version(1, 1))
00049 {
00050 group.texture = LanguageManager::getInstance().replaceTags(group.texture);
00051 }
00052
00053 group.size = IntSize::parse(group_node->findAttribute("size"));
00054
00055 xml::ElementEnumerator index_node = group_node->getElementEnumerator();
00056 while (index_node.next("Index"))
00057 {
00058 IndexImage index;
00059 index.name = index_node->findAttribute("name");
00060 index.rate = utility::parseFloat(index_node->findAttribute("rate"));
00061
00062 xml::ElementEnumerator frame_node = index_node->getElementEnumerator();
00063 while (frame_node.next("Frame"))
00064 {
00065 size_t count = utility::parseSizeT(frame_node->findAttribute("count"));
00066 const IntPoint& point = IntPoint::parse(frame_node->findAttribute("point"));
00067 if ((count < 1) || (count > 256)) count = 1;
00068 while (count > 0)
00069 {
00070 index.frames.push_back(point);
00071 -- count;
00072 }
00073 }
00074
00075 group.indexes.push_back(index);
00076 }
00077
00078 mGroups.push_back(group);
00079 }
00080 }
00081
00082 ImageIndexInfo ResourceImageSet::getIndexInfo(const std::string& _group, const std::string& _index)
00083 {
00084 size_t index_group = getGroupIndex(_group);
00085 if (index_group != ITEM_NONE)
00086 {
00087 GroupImage& group = mGroups[index_group];
00088 size_t index_image = getImageIndex(group, _index);
00089 if (index_image != ITEM_NONE)
00090 {
00091 IndexImage& index = group.indexes[index_image];
00092 return ImageIndexInfo(group.texture, group.size, index.rate, index.frames);
00093 }
00094 }
00095 return ImageIndexInfo(mTextureEmpty, mSizeEmpty, 0, mFramesEmpty);
00096 }
00097
00098 ImageIndexInfo ResourceImageSet::getIndexInfo(size_t _group, const std::string& _index)
00099 {
00100 if (_group < mGroups.size())
00101 {
00102 GroupImage& group = mGroups[_group];
00103 size_t index_image = getImageIndex(group, _index);
00104 if (index_image != ITEM_NONE)
00105 {
00106 IndexImage& index = group.indexes[index_image];
00107 return ImageIndexInfo(group.texture, group.size, index.rate, index.frames);
00108 }
00109 }
00110 return ImageIndexInfo(mTextureEmpty, mSizeEmpty, 0, mFramesEmpty);
00111 }
00112
00113 ImageIndexInfo ResourceImageSet::getIndexInfo(const std::string& _group, size_t _index)
00114 {
00115 size_t index_group = getGroupIndex(_group);
00116 if (index_group != ITEM_NONE)
00117 {
00118 GroupImage& group = mGroups[index_group];
00119 if (_index < group.indexes.size())
00120 {
00121 IndexImage& index = group.indexes[_index];
00122 return ImageIndexInfo(group.texture, group.size, index.rate, index.frames);
00123 }
00124 }
00125 return ImageIndexInfo(mTextureEmpty, mSizeEmpty, 0, mFramesEmpty);
00126 }
00127
00128 ImageIndexInfo ResourceImageSet::getIndexInfo(size_t _group, size_t _index)
00129 {
00130 if (_group < mGroups.size())
00131 {
00132 GroupImage& group = mGroups[_group];
00133 if (_index < group.indexes.size())
00134 {
00135 IndexImage& index = group.indexes[_index];
00136 return ImageIndexInfo(group.texture, group.size, index.rate, index.frames);
00137 }
00138 }
00139 return ImageIndexInfo(mTextureEmpty, mSizeEmpty, 0, mFramesEmpty);
00140 }
00141
00142 ImageIndexInfo ResourceImageSet::getIndexInfo(const IntSize& _group, size_t _index)
00143 {
00144 size_t index_group = getGroupIndex(_group);
00145 if (index_group != ITEM_NONE)
00146 {
00147 GroupImage& group = mGroups[index_group];
00148 if (_index < group.indexes.size())
00149 {
00150 IndexImage& index = group.indexes[_index];
00151 return ImageIndexInfo(group.texture, group.size, index.rate, index.frames);
00152 }
00153 }
00154 return ImageIndexInfo(mTextureEmpty, mSizeEmpty, 0, mFramesEmpty);
00155 }
00156
00157 ImageIndexInfo ResourceImageSet::getIndexInfo(const IntSize& _group, const std::string& _index)
00158 {
00159 size_t index_group = getGroupIndex(_group);
00160 if (index_group != ITEM_NONE)
00161 {
00162 GroupImage& group = mGroups[index_group];
00163 size_t index_image = getImageIndex(group, _index);
00164 if (index_image != ITEM_NONE)
00165 {
00166 IndexImage& index = group.indexes[index_image];
00167 return ImageIndexInfo(group.texture, group.size, index.rate, index.frames);
00168 }
00169 }
00170 return ImageIndexInfo(mTextureEmpty, mSizeEmpty, 0, mFramesEmpty);
00171 }
00172
00173 }