MyGUI
3.2.1
|
00001 /* 00002 * This source file is part of MyGUI. For the latest info, see http://mygui.info/ 00003 * Distributed under the MIT License 00004 * (See accompanying file COPYING.MIT or copy at http://opensource.org/licenses/MIT) 00005 */ 00006 00007 #include "MyGUI_Precompiled.h" 00008 #include "MyGUI_SkinItem.h" 00009 #include "MyGUI_FactoryManager.h" 00010 #include "MyGUI_Widget.h" 00011 #include "MyGUI_RenderManager.h" 00012 #include "MyGUI_SubWidgetManager.h" 00013 00014 namespace MyGUI 00015 { 00016 SkinItem::SkinItem() : 00017 mText(nullptr), 00018 mMainSkin(nullptr), 00019 mTexture(nullptr), 00020 mSubSkinsVisible(true) 00021 { 00022 } 00023 00024 void SkinItem::_setSkinItemAlign(const IntSize& _size) 00025 { 00026 for (VectorSubWidget::iterator skin = mSubSkinChild.begin(); skin != mSubSkinChild.end(); ++skin) 00027 (*skin)->_setAlign(_size); 00028 } 00029 00030 void SkinItem::_setSkinItemVisible(bool _value) 00031 { 00032 for (VectorSubWidget::iterator skin = mSubSkinChild.begin(); skin != mSubSkinChild.end(); ++skin) 00033 (*skin)->setVisible(_value); 00034 } 00035 00036 void SkinItem::_setSkinItemColour(const Colour& _value) 00037 { 00038 for (VectorSubWidget::iterator skin = mSubSkinChild.begin(); skin != mSubSkinChild.end(); ++skin) 00039 { 00040 ISubWidgetRect* rect = (*skin)->castType<ISubWidgetRect>(false); 00041 if (rect) 00042 rect->_setColour(_value); 00043 } 00044 } 00045 00046 void SkinItem::_setSkinItemAlpha(float _value) 00047 { 00048 for (VectorSubWidget::iterator skin = mSubSkinChild.begin(); skin != mSubSkinChild.end(); ++skin) 00049 (*skin)->setAlpha(_value); 00050 } 00051 00052 void SkinItem::_correctSkinItemView() 00053 { 00054 for (VectorSubWidget::iterator skin = mSubSkinChild.begin(); skin != mSubSkinChild.end(); ++skin) 00055 (*skin)->_correctView(); 00056 } 00057 00058 void SkinItem::_updateSkinItemView() 00059 { 00060 for (VectorSubWidget::iterator skin = mSubSkinChild.begin(); skin != mSubSkinChild.end(); ++skin) 00061 (*skin)->_updateView(); 00062 } 00063 00064 bool SkinItem::_setSkinItemState(const std::string& _state) 00065 { 00066 MapWidgetStateInfo::const_iterator iter = mStateInfo.find(_state); 00067 if (iter == mStateInfo.end()) 00068 return false; 00069 00070 size_t index = 0; 00071 for (VectorSubWidget::iterator skin = mSubSkinChild.begin(); skin != mSubSkinChild.end(); ++skin, ++index) 00072 { 00073 IStateInfo* data = (*iter).second[index]; 00074 if (data != nullptr) 00075 (*skin)->setStateData(data); 00076 } 00077 return true; 00078 } 00079 00080 void SkinItem::_createSkinItem(ResourceSkin* _info) 00081 { 00082 mStateInfo = _info->getStateInfo(); 00083 00084 // все что с текстурой можно тоже перенести в скин айтем и setRenderItemTexture 00085 mTextureName = _info->getTextureName(); 00086 mTexture = RenderManager::getInstance().getTexture(mTextureName); 00087 00088 setRenderItemTexture(mTexture); 00089 00090 std::string categoryName = SubWidgetManager::getInstance().getCategoryName(); 00091 // загружаем кирпичики виджета 00092 FactoryManager& factory = FactoryManager::getInstance(); 00093 for (VectorSubWidgetInfo::const_iterator iter = _info->getBasisInfo().begin(); iter != _info->getBasisInfo().end(); ++iter) 00094 { 00095 IObject* object = factory.createObject(categoryName, (*iter).type); 00096 if (object == nullptr) 00097 continue; 00098 00099 ISubWidget* sub = object->castType<ISubWidget>(); 00100 sub->_setCroppedParent(static_cast<Widget*>(this)); 00101 sub->setCoord((*iter).coord); 00102 sub->setAlign((*iter).align); 00103 00104 mSubSkinChild.push_back(sub); 00105 addRenderItem(sub); 00106 00107 // ищем дефолтные сабвиджеты 00108 if (mMainSkin == nullptr) 00109 mMainSkin = sub->castType<ISubWidgetRect>(false); 00110 if (mText == nullptr) 00111 mText = sub->castType<ISubWidgetText>(false); 00112 } 00113 00114 _setSkinItemState("normal"); 00115 } 00116 00117 void SkinItem::_deleteSkinItem() 00118 { 00119 mTexture = nullptr; 00120 00121 mStateInfo.clear(); 00122 00123 removeAllRenderItems(); 00124 // удаляем все сабскины 00125 mMainSkin = nullptr; 00126 mText = nullptr; 00127 00128 for (VectorSubWidget::iterator skin = mSubSkinChild.begin(); skin != mSubSkinChild.end(); ++skin) 00129 delete (*skin); 00130 mSubSkinChild.clear(); 00131 } 00132 00133 void SkinItem::_setTextureName(const std::string& _texture) 00134 { 00135 mTextureName = _texture; 00136 mTexture = RenderManager::getInstance().getTexture(mTextureName); 00137 00138 setRenderItemTexture(mTexture); 00139 } 00140 00141 const std::string& SkinItem::_getTextureName() const 00142 { 00143 return mTextureName; 00144 } 00145 00146 void SkinItem::_setSubSkinVisible(bool _visible) 00147 { 00148 if (mSubSkinsVisible == _visible) 00149 return; 00150 mSubSkinsVisible = _visible; 00151 00152 _updateSkinItemView(); 00153 } 00154 00155 ISubWidgetText* SkinItem::getSubWidgetText() 00156 { 00157 return mText; 00158 } 00159 00160 ISubWidgetRect* SkinItem::getSubWidgetMain() 00161 { 00162 return mMainSkin; 00163 } 00164 00165 } // namespace MyGUI