diff options
| -rw-r--r-- | indra/newview/llagentwearablesfetch.cpp | 12 | ||||
| -rw-r--r-- | indra/newview/llpaneleditwearable.cpp | 106 | ||||
| -rw-r--r-- | indra/newview/llpaneleditwearable.h | 15 | ||||
| -rw-r--r-- | indra/newview/llpanelgrouproles.cpp | 13 | ||||
| -rw-r--r-- | indra/newview/llpanelgrouproles.h | 3 | ||||
| -rw-r--r-- | indra/newview/llsidepanelappearance.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/llstartup.cpp | 21 | ||||
| -rw-r--r-- | indra/newview/llstartup.h | 4 | ||||
| -rw-r--r-- | indra/newview/llvoavatar.cpp | 23 | ||||
| -rw-r--r-- | indra/newview/llvoavatar.h | 14 | ||||
| -rw-r--r-- | indra/newview/llvoavatarself.cpp | 26 | ||||
| -rw-r--r-- | indra/newview/llvoavatarself.h | 3 | ||||
| -rw-r--r-- | indra/newview/llworldview.cpp | 6 | ||||
| -rw-r--r-- | indra/newview/skins/default/textures/textures.xml | 2 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/panel_outfit_edit.xml | 36 | 
15 files changed, 247 insertions, 39 deletions
diff --git a/indra/newview/llagentwearablesfetch.cpp b/indra/newview/llagentwearablesfetch.cpp index 03d09a3798..43a0d48d8b 100644 --- a/indra/newview/llagentwearablesfetch.cpp +++ b/indra/newview/llagentwearablesfetch.cpp @@ -37,6 +37,7 @@  #include "llagentwearables.h"  #include "llappearancemgr.h"  #include "llinventoryfunctions.h" +#include "llstartup.h"  #include "llvoavatarself.h"  LLInitialWearablesFetch::LLInitialWearablesFetch(const LLUUID& cof_id) : @@ -260,8 +261,11 @@ void LLLibraryOutfitsFetch::folderDone()  	LLInventoryModel::item_array_t wearable_array;  	gInventory.collectDescendents(mMyOutfitsID, cat_array, wearable_array,   								  LLInventoryModel::EXCLUDE_TRASH); -	// Early out if we already have items in My Outfits. -	if (cat_array.count() > 0 || wearable_array.count() > 0) +	 +	// Early out if we already have items in My Outfits +	// except the case when My Outfits contains just initial outfit +	if (cat_array.count() > 1 || +		cat_array.count() == 1 && cat_array[0]->getUUID() != LLAppearanceMgr::getInstance()->getBaseOutfitUUID())  	{  		mOutfitsPopulated = true;  		return; @@ -272,6 +276,7 @@ void LLLibraryOutfitsFetch::folderDone()  	// If Library->Clothing->Initial Outfits exists, use that.  	LLNameCategoryCollector matchFolderFunctor("Initial Outfits"); +	cat_array.clear();  	gInventory.collectDescendentsIf(mLibraryClothingID,  									cat_array, wearable_array,   									LLInventoryModel::EXCLUDE_TRASH, @@ -489,6 +494,9 @@ void LLLibraryOutfitsFetch::contentsDone()  			llwarns << "Library folder import for uuid:" << folder_id << " failed to find folder." << llendl;  			continue;  		} + +		//initial outfit should be already in My Outfits +		if (cat->getName() == LLStartUp::getInitialOutfitName()) continue;  		// First, make a folder in the My Outfits directory.  		LLUUID new_outfit_folder_id = gInventory.createNewCategory(mMyOutfitsID, LLFolderType::FT_OUTFIT, cat->getName()); diff --git a/indra/newview/llpaneleditwearable.cpp b/indra/newview/llpaneleditwearable.cpp index 8e9b164c09..b5b21584aa 100644 --- a/indra/newview/llpaneleditwearable.cpp +++ b/indra/newview/llpaneleditwearable.cpp @@ -645,6 +645,12 @@ BOOL LLPanelEditWearable::postBuild()  	mWearablePtr = NULL; +	configureAlphaCheckbox(LLVOAvatarDefines::TEX_LOWER_ALPHA, "lower alpha texture invisible"); +	configureAlphaCheckbox(LLVOAvatarDefines::TEX_UPPER_ALPHA, "upper alpha texture invisible"); +	configureAlphaCheckbox(LLVOAvatarDefines::TEX_HEAD_ALPHA, "head alpha texture invisible"); +	configureAlphaCheckbox(LLVOAvatarDefines::TEX_EYES_ALPHA, "eye alpha texture invisible"); +	configureAlphaCheckbox(LLVOAvatarDefines::TEX_HAIR_ALPHA, "hair alpha texture invisible"); +  	return TRUE;  } @@ -667,11 +673,10 @@ BOOL LLPanelEditWearable::isDirty() const  void LLPanelEditWearable::draw()  {  	updateVerbs(); -	if (getWearable()) +	if (getWearable() && getWearable()->getType() == LLWearableType::WT_SHAPE)  	{ -		LLWearableType::EType type = getWearable()->getType(); -		updatePanelPickerControls(type); -		updateTypeSpecificControls(type); +		//updating avatar height +		updateTypeSpecificControls(LLWearableType::WT_SHAPE);  	}  	LLPanel::draw(); @@ -970,6 +975,13 @@ void LLPanelEditWearable::initializePanel()  	for_each_picker_ctrl_entry <LLTextureCtrl>     (getPanel(type), type, boost::bind(init_texture_ctrl, this, _1, _2));  	updateVerbs(); + +	if (getWearable()) +	{ +		LLWearableType::EType type = getWearable()->getType(); +		updatePanelPickerControls(type); +		updateTypeSpecificControls(type); +	}  }  void LLPanelEditWearable::toggleTypeSpecificControls(LLWearableType::EType type) @@ -992,6 +1004,13 @@ void LLPanelEditWearable::updateTypeSpecificControls(LLWearableType::EType type)  		std::string avatar_height_str = llformat("%.2f", gAgentAvatarp->mBodySize.mV[VZ]);  		mTxtAvatarHeight->setTextArg("[HEIGHT]", avatar_height_str);  	} + +	if (LLWearableType::WT_ALPHA == type) +	{ +		updateAlphaCheckboxes(); + +		initPreviousAlphaTextures(); +	}  }  void LLPanelEditWearable::onTabExpandedCollapsed(const LLSD& param, U8 index) @@ -1217,4 +1236,83 @@ void LLPanelEditWearable::updateVerbs()  } +void LLPanelEditWearable::configureAlphaCheckbox(LLVOAvatarDefines::ETextureIndex te, const std::string& name) +{ +	LLCheckBoxCtrl* checkbox = mPanelAlpha->getChild<LLCheckBoxCtrl>(name); +	checkbox->setCommitCallback(boost::bind(&LLPanelEditWearable::onInvisibilityCommit, this, checkbox, te)); + +	mAlphaCheckbox2Index[name] = te; +} + +void LLPanelEditWearable::onInvisibilityCommit(LLCheckBoxCtrl* checkbox_ctrl, LLVOAvatarDefines::ETextureIndex te) +{ +	if (!checkbox_ctrl) return; +	if (!getWearable()) return; + +	llinfos << "onInvisibilityCommit, self " << this << " checkbox_ctrl " << checkbox_ctrl << llendl; + +	bool new_invis_state = checkbox_ctrl->get(); +	if (new_invis_state) +	{ +		LLLocalTextureObject *lto = getWearable()->getLocalTextureObject(te); +		mPreviousAlphaTexture[te] = lto->getID(); +		 +		LLViewerFetchedTexture* image = LLViewerTextureManager::getFetchedTexture( IMG_INVISIBLE ); +		U32 index = gAgentWearables.getWearableIndex(getWearable()); +		gAgentAvatarp->setLocalTexture(te, image, FALSE, index); +		gAgentAvatarp->wearableUpdated(getWearable()->getType(), FALSE); +	} +	else +	{ +		// Try to restore previous texture, if any. +		LLUUID prev_id = mPreviousAlphaTexture[te]; +		if (prev_id.isNull() || (prev_id == IMG_INVISIBLE)) +		{ +			prev_id = LLUUID( gSavedSettings.getString( "UIImgDefaultAlphaUUID" ) ); +		} +		if (prev_id.isNull()) return; +		 +		LLViewerFetchedTexture* image = LLViewerTextureManager::getFetchedTexture(prev_id); +		if (!image) return; + +		U32 index = gAgentWearables.getWearableIndex(getWearable()); +		gAgentAvatarp->setLocalTexture(te, image, FALSE, index); +		gAgentAvatarp->wearableUpdated(getWearable()->getType(), FALSE); +	} + +	updatePanelPickerControls(getWearable()->getType()); +} + +void LLPanelEditWearable::updateAlphaCheckboxes() +{ +	for(string_texture_index_map_t::iterator iter = mAlphaCheckbox2Index.begin(); +		iter != mAlphaCheckbox2Index.end(); ++iter ) +	{ +		LLVOAvatarDefines::ETextureIndex te = (LLVOAvatarDefines::ETextureIndex)iter->second; +		LLCheckBoxCtrl* ctrl = mPanelAlpha->getChild<LLCheckBoxCtrl>(iter->first); +		if (ctrl) +		{ +			ctrl->set(!gAgentAvatarp->isTextureVisible(te, mWearablePtr)); +		} +	} +} + +void LLPanelEditWearable::initPreviousAlphaTextures() +{ +	initPreviousAlphaTextureEntry(TEX_LOWER_ALPHA); +	initPreviousAlphaTextureEntry(TEX_UPPER_ALPHA); +	initPreviousAlphaTextureEntry(TEX_HEAD_ALPHA); +	initPreviousAlphaTextureEntry(TEX_EYES_ALPHA); +	initPreviousAlphaTextureEntry(TEX_LOWER_ALPHA); +} + +void LLPanelEditWearable::initPreviousAlphaTextureEntry(LLVOAvatarDefines::ETextureIndex te) +{ +	LLLocalTextureObject *lto = getWearable()->getLocalTextureObject(te); +	if (lto) +	{ +		mPreviousAlphaTexture[te] = lto->getID(); +	} +} +  // EOF diff --git a/indra/newview/llpaneleditwearable.h b/indra/newview/llpaneleditwearable.h index 6f9ac82407..0953f09b6c 100644 --- a/indra/newview/llpaneleditwearable.h +++ b/indra/newview/llpaneleditwearable.h @@ -36,8 +36,10 @@  #include "llpanel.h"  #include "llscrollingpanellist.h"  #include "llmodaldialog.h" +#include "llvoavatardefines.h"  #include "llwearabletype.h" +class LLCheckBoxCtrl;  class LLWearable;  class LLTextEditor;  class LLTextBox; @@ -86,6 +88,13 @@ private:  	void				toggleTypeSpecificControls(LLWearableType::EType type);  	void				updateTypeSpecificControls(LLWearableType::EType type); +	//alpha mask checkboxes +	void configureAlphaCheckbox(LLVOAvatarDefines::ETextureIndex te, const std::string& name); +	void onInvisibilityCommit(LLCheckBoxCtrl* checkbox_ctrl, LLVOAvatarDefines::ETextureIndex te); +	void updateAlphaCheckboxes(); +	void initPreviousAlphaTextures(); +	void initPreviousAlphaTextureEntry(LLVOAvatarDefines::ETextureIndex te); +  	// the pointer to the wearable we're editing. NULL means we're not editing a wearable.  	LLWearable *mWearablePtr;  	LLViewerInventoryItem* mWearableItem; @@ -122,6 +131,12 @@ private:  	LLPanel *mPanelSkirt;  	LLPanel *mPanelAlpha;  	LLPanel *mPanelTattoo; + +	typedef std::map<std::string, LLVOAvatarDefines::ETextureIndex> string_texture_index_map_t; +	string_texture_index_map_t mAlphaCheckbox2Index; + +	typedef std::map<LLVOAvatarDefines::ETextureIndex, LLUUID> s32_uuid_map_t; +	s32_uuid_map_t mPreviousAlphaTexture;  };  #endif diff --git a/indra/newview/llpanelgrouproles.cpp b/indra/newview/llpanelgrouproles.cpp index 7dec2251e8..b356fe6bfd 100644 --- a/indra/newview/llpanelgrouproles.cpp +++ b/indra/newview/llpanelgrouproles.cpp @@ -1749,8 +1749,7 @@ BOOL LLPanelGroupRolesSubTab::postBuildSubTab(LLView* root)  	mRoleTitle->setKeystrokeCallback(onPropertiesKey, this);  	mRoleDescription->setCommitOnFocusLost(TRUE); -	mRoleDescription->setCommitCallback(onDescriptionCommit, this); -	mRoleDescription->setFocusReceivedCallback(boost::bind(onDescriptionFocus, _1, this)); +	mRoleDescription->setKeystrokeCallback(boost::bind(&LLPanelGroupRolesSubTab::onDescriptionKeyStroke, this, _1));  	setFooterEnabled(FALSE); @@ -2206,14 +2205,10 @@ void LLPanelGroupRolesSubTab::onPropertiesKey(LLLineEditor* ctrl, void* user_dat  	self->notifyObservers();  } -// static  -void LLPanelGroupRolesSubTab::onDescriptionFocus(LLFocusableElement* ctrl, void* user_data) +void LLPanelGroupRolesSubTab::onDescriptionKeyStroke(LLTextEditor* caller)  { -	LLPanelGroupRolesSubTab* self = static_cast<LLPanelGroupRolesSubTab*>(user_data); -	if (!self) return; - -	self->mHasRoleChange = TRUE; -	self->notifyObservers(); +	mHasRoleChange = TRUE; +	notifyObservers();  }  // static  diff --git a/indra/newview/llpanelgrouproles.h b/indra/newview/llpanelgrouproles.h index 44aa7cea38..cb7941ad9e 100644 --- a/indra/newview/llpanelgrouproles.h +++ b/indra/newview/llpanelgrouproles.h @@ -244,8 +244,9 @@ public:  	static void onPropertiesKey(LLLineEditor*, void*); +	void onDescriptionKeyStroke(LLTextEditor* caller); +  	static void onDescriptionCommit(LLUICtrl*, void*); -	static void onDescriptionFocus(LLFocusableElement*, void*);  	static void onMemberVisibilityChange(LLUICtrl*, void*);  	void handleMemberVisibilityChange(bool value); diff --git a/indra/newview/llsidepanelappearance.cpp b/indra/newview/llsidepanelappearance.cpp index 010d593b27..707fc1555a 100644 --- a/indra/newview/llsidepanelappearance.cpp +++ b/indra/newview/llsidepanelappearance.cpp @@ -344,10 +344,10 @@ void LLSidepanelAppearance::toggleWearableEditPanel(BOOL visible, LLWearable *we  	// Toggle panel visibility.  	mEditWearable->setVisible(visible); -	mEditWearable->setWearable(wearable);  	if (visible)  	{ +		mEditWearable->setWearable(wearable);  		mEditWearable->onOpen(LLSD()); // currently no-op, just for consistency  		if (!disable_camera_switch && gSavedSettings.getBOOL("AppearanceCameraMovement") )  		{ diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index 0a464b3b6c..466c154f36 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -225,6 +225,7 @@ extern S32 gStartImageHeight;  static bool gGotUseCircuitCodeAck = false;  static std::string sInitialOutfit;  static std::string sInitialOutfitGender;	// "male" or "female" +static boost::signals2::connection sWearablesLoadedCon;  static bool gUseCircuitCallbackCalled = false; @@ -2430,6 +2431,8 @@ void LLStartUp::loadInitialOutfit( const std::string& outfit_folder_name,  	}  	else  	{ +		sWearablesLoadedCon = gAgentWearables.addLoadedCallback(LLStartUp::saveInitialOutfit); +  		bool do_copy = true;  		bool do_append = false;  		LLViewerInventoryCategory *cat = gInventory.getCategory(cat_id); @@ -2475,6 +2478,24 @@ void LLStartUp::loadInitialOutfit( const std::string& outfit_folder_name,  } +//static +void LLStartUp::saveInitialOutfit() +{ +	if (sInitialOutfit.empty()) return; +	 +	if (sWearablesLoadedCon.connected()) +	{ +		sWearablesLoadedCon.disconnect(); +	} + +	LLAppearanceMgr::getInstance()->makeNewOutfitLinks(sInitialOutfit); +} + +std::string& LLStartUp::getInitialOutfitName() +{ +	return sInitialOutfit; +} +  // Loads a bitmap to display during load  void init_start_screen(S32 location_id)  { diff --git a/indra/newview/llstartup.h b/indra/newview/llstartup.h index 16cc74504f..e1e108ca6a 100644 --- a/indra/newview/llstartup.h +++ b/indra/newview/llstartup.h @@ -102,6 +102,10 @@ public:  	static void loadInitialOutfit( const std::string& outfit_folder_name,  								   const std::string& gender_name ); +	//save loaded initial outfit into My Outfits category +	static void saveInitialOutfit(); + +	static std::string& getInitialOutfitName();  	static bool dispatchURL();  		// if we have a SLURL or sim string ("Ahern/123/45") that started diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 4371396629..a72d7f9227 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -7887,3 +7887,26 @@ BOOL LLVOAvatar::isTextureDefined(LLVOAvatarDefines::ETextureIndex te, U32 index  			getImage(te, index)->getID() != IMG_DEFAULT);  } +//virtual +BOOL LLVOAvatar::isTextureVisible(LLVOAvatarDefines::ETextureIndex type, U32 index) const +{ +	if (isIndexLocalTexture(type)) +	{ +		return isTextureDefined(type, index); +	} +	else +	{ +		// baked textures can use TE images directly +		return ((isTextureDefined(type) || isSelf()) +				&& (getTEImage(type)->getID() != IMG_INVISIBLE  +					|| LLDrawPoolAlpha::sShowDebugAlpha)); +	} +} + +//virtual +BOOL LLVOAvatar::isTextureVisible(LLVOAvatarDefines::ETextureIndex type, LLWearable *wearable) const +{ +	// non-self avatars don't have wearables +	return FALSE; +} + diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h index 86a7cdae02..df47e9ba1d 100644 --- a/indra/newview/llvoavatar.h +++ b/indra/newview/llvoavatar.h @@ -462,7 +462,9 @@ public:  	//--------------------------------------------------------------------  public:  	virtual BOOL    isTextureDefined(LLVOAvatarDefines::ETextureIndex type, U32 index = 0) const; -	BOOL			isTextureVisible(LLVOAvatarDefines::ETextureIndex index) const; +	virtual BOOL	isTextureVisible(LLVOAvatarDefines::ETextureIndex type, U32 index = 0) const; +	virtual BOOL	isTextureVisible(LLVOAvatarDefines::ETextureIndex type, LLWearable *wearable) const; +  protected:  	BOOL			isFullyBaked();  	static BOOL		areAllNearbyInstancesBaked(S32& grey_avatars); @@ -1039,14 +1041,4 @@ protected: // Shared with LLVOAvatarSelf  }; // LLVOAvatar -//------------------------------------------------------------------------ -// Inlines -//------------------------------------------------------------------------ -inline BOOL LLVOAvatar::isTextureVisible(LLVOAvatarDefines::ETextureIndex te) const -{ -	return ((isTextureDefined(te) || isSelf()) -			&& (getTEImage(te)->getID() != IMG_INVISIBLE  -				|| LLDrawPoolAlpha::sShowDebugAlpha)); -} -  #endif // LL_VO_AVATAR_H diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp index cf3fb01b5a..a8e2f446c2 100644 --- a/indra/newview/llvoavatarself.cpp +++ b/indra/newview/llvoavatarself.cpp @@ -1332,6 +1332,32 @@ BOOL LLVOAvatarSelf::isTextureDefined(LLVOAvatarDefines::ETextureIndex type, U32  	return isDefined;  } +//virtual +BOOL LLVOAvatarSelf::isTextureVisible(LLVOAvatarDefines::ETextureIndex type, U32 index) const +{ +	if (isIndexBakedTexture(type)) +	{ +		return LLVOAvatar::isTextureVisible(type); +	} + +	LLUUID tex_id = getLocalTextureID(type,index); +	return (tex_id != IMG_INVISIBLE)  +			|| (LLDrawPoolAlpha::sShowDebugAlpha); +} + +//virtual +BOOL LLVOAvatarSelf::isTextureVisible(LLVOAvatarDefines::ETextureIndex type, LLWearable *wearable) const +{ +	if (isIndexBakedTexture(type)) +	{ +		return LLVOAvatar::isTextureVisible(type); +	} + +	U32 index = gAgentWearables.getWearableIndex(wearable); +	return isTextureVisible(type,index); +} + +  //-----------------------------------------------------------------------------  // requestLayerSetUploads()  //----------------------------------------------------------------------------- diff --git a/indra/newview/llvoavatarself.h b/indra/newview/llvoavatarself.h index 8e6d9698f2..189c1ac808 100644 --- a/indra/newview/llvoavatarself.h +++ b/indra/newview/llvoavatarself.h @@ -179,6 +179,9 @@ public:  	BOOL				isLocalTextureDataFinal(const LLTexLayerSet* layerset) const;  	// If you want to check all textures of a given type, pass gAgentWearables.getWearableCount() for index  	/*virtual*/ BOOL    isTextureDefined(LLVOAvatarDefines::ETextureIndex type, U32 index) const; +	/*virtual*/ BOOL	isTextureVisible(LLVOAvatarDefines::ETextureIndex type, U32 index = 0) const; +	/*virtual*/ BOOL	isTextureVisible(LLVOAvatarDefines::ETextureIndex type, LLWearable *wearable) const; +  	//--------------------------------------------------------------------  	// Local Textures diff --git a/indra/newview/llworldview.cpp b/indra/newview/llworldview.cpp index 7261e63147..b44a365677 100644 --- a/indra/newview/llworldview.cpp +++ b/indra/newview/llworldview.cpp @@ -44,6 +44,7 @@ static LLDefaultChildRegistry::Register<LLWorldView> r("world_view");  LLWorldView::LLWorldView(const Params& p)  :	LLUICtrl (p)  { +	gSavedSettings.getControl("SidebarCameraMovement")->getSignal()->connect(boost::bind(&LLWorldView::toggleSidebarCameraMovement, this, _2));  }  void LLWorldView::reshape(S32 width, S32 height, BOOL called_from_parent) @@ -59,3 +60,8 @@ void LLWorldView::reshape(S32 width, S32 height, BOOL called_from_parent)  	LLUICtrl::reshape(width, height, called_from_parent);  } +void LLWorldView::toggleSidebarCameraMovement(const LLSD::Boolean& new_visibility) +{ +	reshape(getParent()->getRect().getWidth(),getRect().getHeight()); +} + diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index 2c1cb59387..91890009f4 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -111,7 +111,7 @@ with the same filename but different name    <texture name="DownArrow" file_name="bottomtray/DownArrow.png" preload="false" />    <texture name="DownArrow_Off" file_name="icons/DownArrow_off.png" preload="false" /> -  <texture name="Dragbar" file_name="icons/Dragbar.png" preload="false" /> +  <texture name="Dragbar" file_name="windows/Dragbar.png" preload="false" scale.left="35" scale.top="5" scale.right="29" scale.bottom="5" />    <texture name="DropDown_Disabled" file_name="widgets/DropDown_Disabled.png" preload="true" scale.left="4" scale.top="19" scale.right="99" scale.bottom="4" />    <texture name="DropDown_Press" file_name="widgets/DropDown_Press.png" preload="true" scale.left="4" scale.top="19" scale.right="99" scale.bottom="4" /> diff --git a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml index 895cc4e3cc..bc984ccc44 100644 --- a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml +++ b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml @@ -150,8 +150,14 @@  <!-- LIST OF WEARABLES (CURRENT OUTFIT/ WEARABLES TO ADD) --> +<!-- *NOTE: border_size is used to calculate space between layout panel and for resize bar height +required height for dragbar is 10, so resizebar height should be 10 px. +It is calculated as border_size + 2*UIResizeBarOverlap +-->      <layout_stack       animate="false" +     border_size="8" +     clip="false"       default_tab_group="2"       follows="all"       height="495" @@ -222,15 +228,24 @@          <layout_panel +         background_visible="true" +         bg_alpha_color="DkGray2"           auto_resize="true"           default_tab_group="3" -         height="210"  +         height="211"           min_height="210"           name="add_wearables_panel"           width="313"           tab_group="2"           user_resize="true"           visible="false"> +          <icon +           follows="left|top|right" +           height="10" +           image_name="Dragbar" +           left="0" +           top_pad="-9" +           width="313" />           	<text               follows="top|left|right"               font="SansSerifBold" @@ -239,22 +254,19 @@               left="5"               name="add_to_outfit_label"               text_color="LtGray" -             top="3" +             top="4"               value="Add to Outfit:"               use_ellipses="true"               width="150" />              <button -             follows="top|left|right" +             follows="top|right"               height="20" -             image_hover_unselected="Toolbar_Middle_Over"               image_overlay="Search_Icon" -             image_selected="Toolbar_Middle_Selected" -             image_unselected="Toolbar_Middle_Off"               is_toggle="true"               layout="topleft"               left_pad="5"               name="filter_button" -             top="3" +             top_delta="0"               width="20" />              <combo_box               follows="top|left|right" @@ -262,14 +274,14 @@               layout="topleft"               right="-5"               name="filter_wearables_combobox" -             top="2" +             top_delta="0"               width="110"/>              <layout_stack               animate="true"               follows="all"               height="155" -             width="311" +             width="313"               layout="topleft"               name="filter_panels"               top_pad="5" @@ -301,6 +313,8 @@                  </layout_panel>                  <layout_panel                   auto_resize="true" +                 background_visible="true" +                 bg_alpha_color="0.107 0.107 0.107 1"                   height="145"                   min_width="130"                   name="inventory_panel" @@ -308,6 +322,7 @@                   user_resize="true">                      <inventory_panel  		             allow_multi_select="true" +		             background_visible="false"  		             border="false"  		             follows="left|top|right|bottom"  		             height="140" @@ -321,7 +336,7 @@  		            <panel  		             name="filtered_wearables_panel"  		             background_opaque="true" -		             background_visible="true" +		             background_visible="false"  		             layout="topleft"  		             follows="left|top|right|bottom"  		             border="false" @@ -332,6 +347,7 @@  		             top_delta="0"  		             visible="true">  		             <wearable_items_list +		              color="0.107 0.107 0.107 1"  		              name="filtered_wearables_list"  		              allow_select="true"  		              layout="topleft"  | 
