54 mCurrentTextureName = _texture;
59 mRectImage.
top = _coord.
top;
64 updateSelectIndex(mIndexSelect);
74 if (mIndexSelect ==
ITEM_NONE) mIndexSelect = 0;
77 updateSelectIndex(mIndexSelect);
83 mRectImage.
top = _coord.
top;
88 if (mSizeTile.
empty()) mSizeTile = _coord.
size();
90 if (mIndexSelect ==
ITEM_NONE) mIndexSelect = 0;
93 updateSelectIndex(mIndexSelect);
103 if (mIndexSelect ==
ITEM_NONE) mIndexSelect = 0;
106 updateSelectIndex(mIndexSelect);
111 mCurrentTextureName = _texture;
123 updateSelectIndex(mIndexSelect);
127 void ImageBox::recalcIndexes()
133 if ((mSizeTile.
width <= 0) || (mSizeTile.
height <= 0))
136 size_t count_h = (size_t)(mRectImage.
width() / mSizeTile.
width);
137 size_t count_v = (size_t)(mRectImage.
height() / mSizeTile.
height);
145 int pos_h = mRectImage.
left;
146 int pos_v = mRectImage.
top;
148 for (
size_t v = 0; v < count_v; ++v)
150 for (
size_t h = 0; h < count_h; ++h)
153 pos_h += mSizeTile.
width;
155 pos_v += mSizeTile.
height;
156 pos_h = mRectImage.
left;
160 void ImageBox::updateSelectIndex(
size_t _index)
162 mIndexSelect = _index;
164 if ((_index ==
ITEM_NONE) || (_index >= mItems.size()))
174 VectorImages::iterator iter = mItems.begin() + _index;
176 if (iter->images.size() < 2)
190 if ( ! iter->images.empty())
192 _setUVSet(iter->images.front());
200 mItems.erase(mItems.begin() + _index);
204 if (mItems.empty()) updateSelectIndex(
ITEM_NONE);
205 else if ((_index < mIndexSelect) || (mIndexSelect == mItems.size())) updateSelectIndex(mIndexSelect--);
218 if (_index ==
ITEM_NONE) _index = mItems.size();
220 VectorImages::iterator iter = mItems.insert(mItems.begin() + _index,
ImageItem());
224 if ((mIndexSelect !=
ITEM_NONE) && (_index <= mIndexSelect)) updateSelectIndex(mIndexSelect++);
231 VectorImages::iterator iter = mItems.begin() + _index;
232 iter->images.clear();
235 if (_index == mIndexSelect) updateSelectIndex(mIndexSelect);
238 void ImageBox::frameEntered(
float _frame)
242 if (mItems.empty())
return;
243 VectorImages::iterator iter = mItems.begin() + mIndexSelect;
244 if ((iter->images.size() < 2) || (iter->frame_rate == 0))
return;
246 mCurrentTime += _frame;
248 while (mCurrentTime >= iter->frame_rate)
250 mCurrentTime -= iter->frame_rate;
252 if (mCurrentFrame >= (iter->images.size())) mCurrentFrame = 0;
255 _setUVSet(iter->images[mCurrentFrame]);
261 VectorImages::iterator iter = mItems.begin() + _index;
262 iter->images.clear();
268 VectorImages::iterator iter = mItems.begin() + _index;
275 VectorImages::iterator iter = mItems.begin() + _index;
276 iter->frame_rate = _rate;
282 VectorImages::iterator iter = mItems.begin() + _index;
283 return iter->frame_rate;
290 VectorImages::iterator iter = mItems.begin() + _index;
291 MYGUI_ASSERT_RANGE(_indexSourceFrame, iter->images.size(),
"ImageBox::addItemFrameDublicate");
292 iter->images.push_back(iter->images[_indexSourceFrame]);
299 VectorImages::iterator iter = mItems.begin() + _index;
301 if (_indexFrame ==
ITEM_NONE) _indexFrame = iter->images.size() - 1;
303 iter->images.insert(iter->images.begin() + _indexFrame,
311 VectorImages::iterator iter = mItems.begin() + _index;
313 if (_indexFrame ==
ITEM_NONE) _indexFrame = iter->images.size() - 1;
315 MYGUI_ASSERT_RANGE(_indexSourceFrame, iter->images.size(),
"ImageBox::insertItemFrameDublicate");
317 iter->images.insert(iter->images.begin() + _indexFrame, iter->images[_indexSourceFrame]);
324 VectorImages::iterator iter = mItems.begin() + _index;
334 VectorImages::iterator iter = mItems.begin() + _index;
336 if (_indexFrame ==
ITEM_NONE) _indexFrame = iter->images.size() - 1;
338 iter->images.erase(iter->images.begin() + _indexFrame);
343 mCurrentTextureName = _info.
texture;
348 if (_info.
frames.size() != 0)
350 std::vector<IntPoint>::const_iterator iter = _info.
frames.begin();
355 for (++iter; iter != _info.
frames.end(); ++iter)
363 updateSelectIndex(mIndexSelect);
370 return resource !=
nullptr;
375 if (mResource == _resource)
379 if (mResource ==
nullptr && _resource !=
nullptr)
381 if (mItemGroup.empty())
384 while (iter_group.
next())
386 mItemGroup = iter_group.
current().name;
387 if (mItemName.empty() && !iter_group.
current().indexes.empty())
389 mItemName = iter_group.
current().indexes[0].name;
394 else if (mItemName.empty())
397 while (iter_group.
next())
399 if (mItemGroup == iter_group.
current().name)
401 if (!iter_group.
current().indexes.empty())
403 mItemName = iter_group.
current().indexes[0].name;
411 mResource = _resource;
412 if (!mResource || mItemGroup.empty() || mItemName.empty()) updateSelectIndex(
ITEM_NONE);
418 if (mItemGroup == _group)
422 if (!mResource || mItemGroup.empty() || mItemName.empty()) updateSelectIndex(
ITEM_NONE);
428 if (mItemName == _name)
432 if (!mResource || mItemGroup.empty() || mItemName.empty()) updateSelectIndex(
ITEM_NONE);
438 mResource = _resource;
441 if (!mResource || mItemGroup.empty() || mItemName.empty()) updateSelectIndex(
ITEM_NONE);
445 void ImageBox::frameAdvise(
bool _advise)
449 if ( ! mFrameAdvise )
460 mFrameAdvise =
false;
477 if (mIndexSelect != _index) updateSelectIndex(_index);
480 void ImageBox::_setUVSet(
const FloatRect& _rect)
488 if (_key ==
"ImageTexture")
490 else if (_key ==
"ImageCoord")
492 else if (_key ==
"ImageTile")
494 else if (_key ==
"ImageIndex")
496 else if (_key ==
"ImageResource")
498 else if (_key ==
"ImageGroup")
500 else if (_key ==
"ImageName")
512 return mItems.size();