MyGUI 3.4.3
MyGUI_SkinItem.cpp
Go to the documentation of this file.
1/*
2 * This source file is part of MyGUI. For the latest info, see http://mygui.info/
3 * Distributed under the MIT License
4 * (See accompanying file COPYING.MIT or copy at http://opensource.org/licenses/MIT)
5 */
6
7#include "MyGUI_Precompiled.h"
8#include "MyGUI_SkinItem.h"
10#include "MyGUI_Widget.h"
11#include "MyGUI_RenderManager.h"
13
14namespace MyGUI
15{
16
18 {
19 for (auto& skin : mSubSkinChild)
20 skin->_setAlign(_size);
21 }
22
24 {
25 for (auto& skin : mSubSkinChild)
26 skin->setVisible(_value);
27 }
28
30 {
31 for (auto& skin : mSubSkinChild)
32 {
33 ISubWidgetRect* rect = skin->castType<ISubWidgetRect>(false);
34 if (rect)
35 rect->_setColour(_value);
36 }
37 }
38
39 void SkinItem::_setSkinItemAlpha(float _value)
40 {
41 for (auto& skin : mSubSkinChild)
42 skin->setAlpha(_value);
43 }
44
46 {
47 for (auto& skin : mSubSkinChild)
48 skin->_correctView();
49 }
50
52 {
53 for (auto& skin : mSubSkinChild)
54 skin->_updateView();
55 }
56
57 bool SkinItem::_setSkinItemState(std::string_view _state)
58 {
59 MapWidgetStateInfo::const_iterator iter = mStateInfo.find(_state);
60 if (iter == mStateInfo.end())
61 return false;
62
63 size_t index = 0;
64 for (VectorSubWidget::iterator skin = mSubSkinChild.begin(); skin != mSubSkinChild.end(); ++skin, ++index)
65 {
66 IStateInfo* data = (*iter).second[index];
67 if (data != nullptr)
68 (*skin)->setStateData(data);
69 }
70 return true;
71 }
72
74 {
75 mStateInfo = _info->getStateInfo();
76
77 // все что с текстурой можно тоже перенести в скин айтем и setRenderItemTexture
78 mTextureName = _info->getTextureName();
79 mTexture = RenderManager::getInstance().getTexture(mTextureName);
80
81 setRenderItemTexture(mTexture);
82
83 const std::string& categoryName = SubWidgetManager::getInstance().getCategoryName();
84 // загружаем кирпичики виджета
86 for (const auto& iter : _info->getBasisInfo())
87 {
88 IObject* object = factory.createObject(categoryName, iter.type);
89 if (object == nullptr)
90 continue;
91
92 ISubWidget* sub = object->castType<ISubWidget>();
93 sub->_setCroppedParent(static_cast<Widget*>(this));
94 sub->setCoord(iter.coord);
95 sub->setAlign(iter.align);
96
97 mSubSkinChild.push_back(sub);
98 addRenderItem(sub);
99
100 // ищем дефолтные сабвиджеты
101 if (mMainSkin == nullptr)
102 mMainSkin = sub->castType<ISubWidgetRect>(false);
103 if (mText == nullptr)
104 mText = sub->castType<ISubWidgetText>(false);
105 }
106
107 _setSkinItemState("normal");
108 }
109
111 {
112 mTexture = nullptr;
113
114 mStateInfo.clear();
115
117 // удаляем все сабскины
118 mMainSkin = nullptr;
119 mText = nullptr;
120
121 for (auto& skin : mSubSkinChild)
122 delete skin;
123 mSubSkinChild.clear();
124 }
125
126 void SkinItem::_setTextureName(std::string_view _texture)
127 {
128 mTextureName = _texture;
129 mTexture = RenderManager::getInstance().getTexture(mTextureName);
130
131 setRenderItemTexture(mTexture);
132 }
133
134 const std::string& SkinItem::_getTextureName() const
135 {
136 return mTextureName;
137 }
138
140 {
141 if (mSubSkinsVisible == _visible)
142 return;
143 mSubSkinsVisible = _visible;
144
146 }
147
149 {
150 return mText;
151 }
152
154 {
155 return mMainSkin;
156 }
157
158} // namespace MyGUI
static FactoryManager & getInstance()
IObject * createObject(std::string_view _category, std::string_view _type)
virtual void setCoord(const IntCoord &_value)
void _setCroppedParent(ICroppedRectangle *_parent)
Type * castType(bool _throw=true)
virtual void setAlign(Align _value)
virtual void _setColour(const Colour &)
void addRenderItem(ISubWidget *_item)
void setRenderItemTexture(ITexture *_texture)
virtual ITexture * getTexture(const std::string &_name)=0
static RenderManager & getInstance()
const MapWidgetStateInfo & getStateInfo() const
const VectorSubWidgetInfo & getBasisInfo() const
const std::string & getTextureName() const
ISubWidgetRect * getSubWidgetMain() const
ISubWidgetText * getSubWidgetText() const
void _setSkinItemAlpha(float _value)
void _createSkinItem(ResourceSkin *_info)
void _setTextureName(std::string_view _texture)
void _setSkinItemColour(const Colour &_value)
bool _setSkinItemState(std::string_view _state)
const std::string & _getTextureName() const
void _setSubSkinVisible(bool _visible)
void _setSkinItemAlign(const IntSize &_size)
void _setSkinItemVisible(bool _value)
static SubWidgetManager & getInstance()
const std::string & getCategoryName() const
widget description should be here.