MyGUI
3.2.0
|
00001 00006 /* 00007 This file is part of MyGUI. 00008 00009 MyGUI is free software: you can redistribute it and/or modify 00010 it under the terms of the GNU Lesser General Public License as published by 00011 the Free Software Foundation, either version 3 of the License, or 00012 (at your option) any later version. 00013 00014 MyGUI is distributed in the hope that it will be useful, 00015 but WITHOUT ANY WARRANTY; without even the implied warranty of 00016 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00017 GNU Lesser General Public License for more details. 00018 00019 You should have received a copy of the GNU Lesser General Public License 00020 along with MyGUI. If not, see <http://www.gnu.org/licenses/>. 00021 */ 00022 00023 #include "MyGUI_Precompiled.h" 00024 #include "MyGUI_SkinItem.h" 00025 #include "MyGUI_FactoryManager.h" 00026 #include "MyGUI_Widget.h" 00027 #include "MyGUI_RenderManager.h" 00028 00029 namespace MyGUI 00030 { 00031 SkinItem::SkinItem() : 00032 mText(nullptr), 00033 mMainSkin(nullptr), 00034 mTexture(nullptr), 00035 mSubSkinsVisible(true) 00036 { 00037 } 00038 00039 void SkinItem::_setSkinItemAlign(const IntSize& _size) 00040 { 00041 for (VectorSubWidget::iterator skin = mSubSkinChild.begin(); skin != mSubSkinChild.end(); ++skin) 00042 (*skin)->_setAlign(_size); 00043 } 00044 00045 void SkinItem::_setSkinItemVisible(bool _value) 00046 { 00047 for (VectorSubWidget::iterator skin = mSubSkinChild.begin(); skin != mSubSkinChild.end(); ++skin) 00048 (*skin)->setVisible(_value); 00049 } 00050 00051 void SkinItem::_setSkinItemColour(const Colour& _value) 00052 { 00053 for (VectorSubWidget::iterator skin = mSubSkinChild.begin(); skin != mSubSkinChild.end(); ++skin) 00054 { 00055 ISubWidgetRect* rect = (*skin)->castType<ISubWidgetRect>(false); 00056 if (rect) 00057 rect->_setColour(_value); 00058 } 00059 } 00060 00061 void SkinItem::_setSkinItemAlpha(float _value) 00062 { 00063 for (VectorSubWidget::iterator skin = mSubSkinChild.begin(); skin != mSubSkinChild.end(); ++skin) 00064 (*skin)->setAlpha(_value); 00065 } 00066 00067 void SkinItem::_correctSkinItemView() 00068 { 00069 for (VectorSubWidget::iterator skin = mSubSkinChild.begin(); skin != mSubSkinChild.end(); ++skin) 00070 (*skin)->_correctView(); 00071 } 00072 00073 void SkinItem::_updateSkinItemView() 00074 { 00075 for (VectorSubWidget::iterator skin = mSubSkinChild.begin(); skin != mSubSkinChild.end(); ++skin) 00076 (*skin)->_updateView(); 00077 } 00078 00079 bool SkinItem::_setSkinItemState(const std::string& _state) 00080 { 00081 MapWidgetStateInfo::const_iterator iter = mStateInfo.find(_state); 00082 if (iter == mStateInfo.end()) 00083 return false; 00084 00085 size_t index = 0; 00086 for (VectorSubWidget::iterator skin = mSubSkinChild.begin(); skin != mSubSkinChild.end(); ++skin, ++index) 00087 { 00088 IStateInfo* data = (*iter).second[index]; 00089 if (data != nullptr) 00090 (*skin)->setStateData(data); 00091 } 00092 return true; 00093 } 00094 00095 void SkinItem::_createSkinItem(ResourceSkin* _info) 00096 { 00097 mStateInfo = _info->getStateInfo(); 00098 00099 // все что с текстурой можно тоже перенести в скин айтем и setRenderItemTexture 00100 mTextureName = _info->getTextureName(); 00101 mTexture = RenderManager::getInstance().getTexture(mTextureName); 00102 00103 setRenderItemTexture(mTexture); 00104 00105 // загружаем кирпичики виджета 00106 FactoryManager& factory = FactoryManager::getInstance(); 00107 for (VectorSubWidgetInfo::const_iterator iter = _info->getBasisInfo().begin(); iter != _info->getBasisInfo().end(); ++iter) 00108 { 00109 IObject* object = factory.createObject("BasisSkin", (*iter).type); 00110 if (object == nullptr) 00111 continue; 00112 00113 ISubWidget* sub = object->castType<ISubWidget>(); 00114 sub->_setCroppedParent(static_cast<Widget*>(this)); 00115 sub->setCoord((*iter).coord); 00116 sub->setAlign((*iter).align); 00117 00118 mSubSkinChild.push_back(sub); 00119 addRenderItem(sub); 00120 00121 // ищем дефолтные сабвиджеты 00122 if (mMainSkin == nullptr) 00123 mMainSkin = sub->castType<ISubWidgetRect>(false); 00124 if (mText == nullptr) 00125 mText = sub->castType<ISubWidgetText>(false); 00126 } 00127 00128 _setSkinItemState("normal"); 00129 } 00130 00131 void SkinItem::_deleteSkinItem() 00132 { 00133 mTexture = nullptr; 00134 00135 mStateInfo.clear(); 00136 00137 removeAllRenderItems(); 00138 // удаляем все сабскины 00139 mMainSkin = nullptr; 00140 mText = nullptr; 00141 00142 for (VectorSubWidget::iterator skin = mSubSkinChild.begin(); skin != mSubSkinChild.end(); ++skin) 00143 delete (*skin); 00144 mSubSkinChild.clear(); 00145 } 00146 00147 void SkinItem::_setTextureName(const std::string& _texture) 00148 { 00149 mTextureName = _texture; 00150 mTexture = RenderManager::getInstance().getTexture(mTextureName); 00151 00152 setRenderItemTexture(mTexture); 00153 } 00154 00155 const std::string& SkinItem::_getTextureName() const 00156 { 00157 return mTextureName; 00158 } 00159 00160 void SkinItem::_setSubSkinVisible(bool _visible) 00161 { 00162 if (mSubSkinsVisible == _visible) 00163 return; 00164 mSubSkinsVisible = _visible; 00165 00166 _updateSkinItemView(); 00167 } 00168 00169 ISubWidgetText* SkinItem::getSubWidgetText() 00170 { 00171 return mText; 00172 } 00173 00174 ISubWidgetRect* SkinItem::getSubWidgetMain() 00175 { 00176 return mMainSkin; 00177 } 00178 00179 } // namespace MyGUI