30 mCurrentTextureName = _texture;
34 mRectImage.left = _coord.
left;
35 mRectImage.top = _coord.
top;
36 mRectImage.right = _coord.
left + _coord.
width;
37 mRectImage.bottom = _coord.
top + _coord.
height;
40 updateSelectIndex(mIndexSelect);
48 if (mRectImage.empty())
55 updateSelectIndex(mIndexSelect);
60 mRectImage.left = _coord.
left;
61 mRectImage.top = _coord.
top;
62 mRectImage.right = _coord.
left + _coord.
width;
63 mRectImage.bottom = _coord.
top + _coord.
height;
73 if (mSizeTile.empty())
80 updateSelectIndex(mIndexSelect);
85 mCurrentTextureName = _texture;
97 updateSelectIndex(mIndexSelect);
101 void ImageBox::recalcIndexes()
107 if ((mSizeTile.
width <= 0) || (mSizeTile.
height <= 0))
110 size_t count_h = (size_t)(mRectImage.
width() / mSizeTile.
width);
111 size_t count_v = (size_t)(mRectImage.
height() / mSizeTile.
height);
117 "Tile count very mach, rect : "
119 <<
" indexes : " << (count_h * count_v) <<
" max : " <<
IMAGE_MAX_INDEX);
123 int pos_h = mRectImage.
left;
124 int pos_v = mRectImage.
top;
126 for (
size_t v = 0; v < count_v; ++v)
128 for (
size_t h = 0; h < count_h; ++h)
131 pos_h += mSizeTile.
width;
133 pos_v += mSizeTile.height;
134 pos_h = mRectImage.left;
138 void ImageBox::updateSelectIndex(
size_t _index)
140 mIndexSelect = _index;
142 if ((_index ==
ITEM_NONE) || (_index >= mItems.size()))
151 VectorImages::iterator iter = mItems.begin() + _index;
153 if (iter->images.size() < 2)
167 if (!iter->images.empty())
169 _setUVSet(iter->images.front());
177 mItems.erase(mItems.begin() + _index);
183 else if ((_index < mIndexSelect) || (mIndexSelect == mItems.size()))
184 updateSelectIndex(mIndexSelect--);
198 _index = mItems.size();
200 VectorImages::iterator iter = mItems.insert(mItems.begin() + _index,
ImageItem());
204 if ((mIndexSelect !=
ITEM_NONE) && (_index <= mIndexSelect))
205 updateSelectIndex(mIndexSelect++);
212 VectorImages::iterator iter = mItems.begin() + _index;
213 iter->images.clear();
216 if (_index == mIndexSelect)
217 updateSelectIndex(mIndexSelect);
220 void ImageBox::frameEntered(
float _frame)
227 VectorImages::iterator iter = mItems.begin() + mIndexSelect;
228 if ((iter->images.size() < 2) || (iter->frame_rate == 0))
231 mCurrentTime += _frame;
233 while (mCurrentTime >= iter->frame_rate)
235 mCurrentTime -= iter->frame_rate;
237 if (mCurrentFrame >= (iter->images.size()))
241 _setUVSet(iter->images[mCurrentFrame]);
247 VectorImages::iterator iter = mItems.begin() + _index;
248 iter->images.clear();
254 VectorImages::iterator iter = mItems.begin() + _index;
261 VectorImages::iterator iter = mItems.begin() + _index;
262 iter->frame_rate = _rate;
268 VectorImages::const_iterator iter = mItems.begin() + _index;
269 return iter->frame_rate;
276 VectorImages::iterator iter = mItems.begin() + _index;
277 MYGUI_ASSERT_RANGE(_indexSourceFrame, iter->images.size(),
"ImageBox::addItemFrameDuplicate");
278 iter->images.push_back(iter->images[_indexSourceFrame]);
285 VectorImages::iterator iter = mItems.begin() + _index;
288 _indexFrame = iter->images.size() - 1;
291 iter->images.begin() + _indexFrame,
299 VectorImages::iterator iter = mItems.begin() + _index;
302 _indexFrame = iter->images.size() - 1;
304 MYGUI_ASSERT_RANGE(_indexSourceFrame, iter->images.size(),
"ImageBox::insertItemFrameDuplicate");
306 iter->images.insert(iter->images.begin() + _indexFrame, iter->images[_indexSourceFrame]);
313 VectorImages::iterator iter = mItems.begin() + _index;
323 VectorImages::iterator iter = mItems.begin() + _index;
326 _indexFrame = iter->images.size() - 1;
328 iter->images.erase(iter->images.begin() + _indexFrame);
333 mCurrentTextureName = _info.
texture;
338 if (!_info.
frames.empty())
340 std::vector<IntPoint>::const_iterator iter = _info.
frames.begin();
345 for (++iter; iter != _info.
frames.end(); ++iter)
352 updateSelectIndex(mIndexSelect);
359 return resource !=
nullptr;
364 if (mResource == _resource)
368 if (mResource ==
nullptr)
370 if (mItemGroup.empty())
373 while (iter_group.
next())
375 mItemGroup = iter_group.
current().name;
376 if (mItemName.empty() && !iter_group.
current().indexes.empty())
378 mItemName = iter_group.
current().indexes[0].name;
383 else if (mItemName.empty())
386 while (iter_group.
next())
388 if (mItemGroup == iter_group.
current().name)
390 if (!iter_group.
current().indexes.empty())
392 mItemName = iter_group.
current().indexes[0].name;
400 mResource = _resource;
401 if (!mResource || mItemGroup.empty() || mItemName.empty())
409 if (mItemGroup == _group)
413 if (!mResource || mItemGroup.empty() || mItemName.empty())
421 if (mItemName == _name)
425 if (!mResource || mItemGroup.empty() || mItemName.empty())
433 mResource = _resource;
436 if (!mResource || mItemGroup.empty() || mItemName.empty())
442 void ImageBox::frameAdvise(
bool _advise)
457 mFrameAdvise =
false;
479 if (mIndexSelect != _index)
480 updateSelectIndex(_index);
483 void ImageBox::_setUVSet(
const FloatRect& _rect)
492 if (_key ==
"ImageTexture")
496 else if (_key ==
"ImageCoord")
500 else if (_key ==
"ImageTile")
504 else if (_key ==
"ImageIndex")
508 else if (_key ==
"ImageResource")
512 else if (_key ==
"ImageGroup")
516 else if (_key ==
"ImageName")
530 return mItems.size();
#define MYGUI_ASSERT_RANGE_INSERT(index, size, owner)
#define MYGUI_ASSERT_RANGE(index, size, owner)
#define MYGUI_LOG(level, text)
static FloatRect convertTextureCoord(const IntCoord &_coord, const IntSize &_textureSize)
T::const_reference current()
static Gui & getInstance()
EventHandle_FrameEventDelegate eventFrameStart
Type * castType(bool _throw=true)
void setItemGroup(std::string_view _group)
void setItemFrame(size_t _index, size_t _indexFrame, const IntCoord &_item)
IntSize getImageSize() const
void setItemFrameRate(size_t _index, float _rate)
void setImageTexture(std::string_view _texture)
void insertItemFrame(size_t _index, size_t _indexFrame, const IntCoord &_item)
void shutdownOverride() override
void deleteAllItemFrames(size_t _index)
bool setItemResource(std::string_view _name)
void resetItemSelect()
Reset item selection.
void setPropertyOverride(std::string_view _key, std::string_view _value) override
void setItemSelect(size_t _index)
Select specified _index.
void setItemName(std::string_view _name)
void setImageIndex(size_t _index)
void setItemResourcePtr(ResourceImageSetPtr _resource)
void setImageInfo(std::string_view _texture, const IntCoord &_coord, const IntSize &_tile)
void setItemResourceInfo(const ImageIndexInfo &_info)
ResourceImageSetPtr getItemResource() const
void insertItem(size_t _index, const IntCoord &_item)
Insert an item into a list at a specified position.
void insertItemFrameDuplicate(size_t _index, size_t _indexFrame, size_t _indexSourceFrame)
void deleteItemFrame(size_t _index, size_t _indexFrame)
size_t getItemCount() const
Get number of items.
float getItemFrameRate(size_t _index) const
void addItemFrameDuplicate(size_t _index, size_t _indexSourceFrame)
void deleteAllItems()
Delete all items.
void setImageCoord(const IntCoord &_coord)
void addItemFrame(size_t _index, const IntCoord &_item)
void setImageRect(const IntRect &_rect)
void setImageTile(const IntSize &_tile)
size_t getItemSelect() const
Get index of selected item (ITEM_NONE if none selected)
void deleteItem(size_t _index)
Delete item at a specified position.
void addItem(const IntCoord &_item)
Add an item to the end of a list.
void setItem(size_t _index, const IntCoord &_item)
Replace an item at a specified position.
size_t getImageIndex() const
EnumeratorGroupImage getEnumerator() const
IResource * getByName(std::string_view _name, bool _throw=true) const
static ResourceManager & getInstance()
ISubWidgetRect * getSubWidgetMain() const
void _setTextureName(std::string_view _texture)
const std::string & _getTextureName() const
const IntSize & getTextureSize(const std::string &_texture, bool _cache=true)
T parseValue(std::string_view _value)
types::TRect< int > IntRect
ResourceImageSet * ResourceImageSetPtr
types::TRect< float > FloatRect
constexpr size_t ITEM_NONE
const size_t IMAGE_MAX_INDEX
types::TCoord< int > IntCoord
types::TSize< int > IntSize
delegates::DelegateFunction< Args... > * newDelegate(void(*_func)(Args... args))
Enumerator< VectorGroupImage > EnumeratorGroupImage
const std::vector< IntPoint > & frames
std::string print() const
void set(T const &_left, T const &_top, T const &_right, T const &_bottom)
std::string print() const
void set(T const &_width, T const &_height)