diff options
| author | richard <none@none> | 2010-01-11 14:48:28 -0800 | 
|---|---|---|
| committer | richard <none@none> | 2010-01-11 14:48:28 -0800 | 
| commit | 34f33212de1a69281bc5cb639b035d9465d8f846 (patch) | |
| tree | f245e1ffc4348665f01b6532717bfa31516966ff | |
| parent | fb9a20802f3386bee82a8bd9a479f209374fa9a4 (diff) | |
| parent | 3e5f5a205034cde29ef80a9230d8cd4867e6dec5 (diff) | |
merge
| -rw-r--r-- | indra/llcommon/llfasttimer.h | 155 | ||||
| -rw-r--r-- | indra/llui/llfloater.cpp | 8 | ||||
| -rw-r--r-- | indra/newview/CMakeLists.txt | 3 | ||||
| -rw-r--r-- | indra/newview/llpanelvolumepulldown.cpp | 154 | ||||
| -rw-r--r-- | indra/newview/llpanelvolumepulldown.h | 64 | ||||
| -rw-r--r-- | indra/newview/llstatusbar.cpp | 19 | ||||
| -rw-r--r-- | indra/newview/llstatusbar.h | 2 | ||||
| -rw-r--r-- | indra/newview/llviewerfloaterreg.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/panel_status_bar.xml | 1 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/panel_volume_pulldown.xml | 55 | 
10 files changed, 370 insertions, 93 deletions
| diff --git a/indra/llcommon/llfasttimer.h b/indra/llcommon/llfasttimer.h index f5c90291b8..645bbb88ff 100644 --- a/indra/llcommon/llfasttimer.h +++ b/indra/llcommon/llfasttimer.h @@ -39,40 +39,24 @@  #define TIME_FAST_TIMERS 0  #if LL_WINDOWS +#include <intrin.h> +#define LL_INLINE __forceinline  // shift off lower 8 bits for lower resolution but longer term timing  // on 1Ghz machine, a 32-bit word will hold ~1000 seconds of timing  inline U32 get_cpu_clock_count_32()  { -	U32 ret_val; -	__asm  -	{ -        _emit   0x0f -        _emit   0x31 -		shr eax,8 -		shl edx,24 -		or eax, edx -		mov dword ptr [ret_val], eax -	} -    return ret_val; +	U64 time_stamp = __rdtsc(); +	return (U32)(time_stamp >> 8);  }  // return full timer value, *not* shifted by 8 bits  inline U64 get_cpu_clock_count_64()  { -	U64 ret_val; -	__asm  -	{ -        _emit   0x0f -        _emit   0x31 -		mov eax,eax -		mov edx,edx -		mov dword ptr [ret_val+4], edx -		mov dword ptr [ret_val], eax -	} -    return ret_val; +	return __rdtsc();  } - +#else +#define LL_INLINE  #endif // LL_WINDOWS  #if (LL_LINUX || LL_SOLARIS || LL_DARWIN) && (defined(__i386__) || defined(__amd64__)) @@ -113,10 +97,25 @@ class LLMutex;  #include <queue>  #include "llsd.h" -  class LL_COMMON_API LLFastTimer  {  public: + +	class NamedTimer; + +	struct LL_COMMON_API FrameState +	{ +		FrameState(NamedTimer* timerp); + +		U32 				mSelfTimeCounter; +		U32 				mCalls; +		FrameState*			mParent;		// info for caller timer +		FrameState*			mLastCaller;	// used to bootstrap tree construction +		NamedTimer*			mTimer; +		U16					mActiveCount;	// number of timers with this ID active on stack +		bool				mMoveUpTree;	// needs to be moved up the tree of timers at the end of frame +	}; +  	// stores a "named" timer instance to be reused via multiple LLFastTimer stack instances  	class LL_COMMON_API NamedTimer   	:	public LLInstanceTracker<NamedTimer> @@ -149,24 +148,10 @@ public:  		static NamedTimer& getRootNamedTimer(); -		struct FrameState -		{ -			FrameState(NamedTimer* timerp); - -			U32 		mSelfTimeCounter; -			U32 		mCalls; -			FrameState*	mParent;		// info for caller timer -			FrameState*	mLastCaller;	// used to bootstrap tree construction -			NamedTimer*	mTimer; -			U16			mActiveCount;	// number of timers with this ID active on stack -			bool		mMoveUpTree;	// needs to be moved up the tree of timers at the end of frame -		}; -  		S32 getFrameStateIndex() const { return mFrameStateIndex; }  		FrameState& getFrameState() const; -  	private:   		friend class LLFastTimer;  		friend class NamedTimerFactory; @@ -185,7 +170,6 @@ public:  		static void buildHierarchy();  		static void resetFrame();  		static void reset(); -  		//  		// members @@ -207,58 +191,47 @@ public:  		std::vector<NamedTimer*>	mChildren;  		bool						mCollapsed;				// don't show children  		bool						mNeedsSorting;			// sort children whenever child added -  	};  	// used to statically declare a new named timer  	class LL_COMMON_API DeclareTimer  	:	public LLInstanceTracker<DeclareTimer>  	{ +		friend class LLFastTimer;  	public:  		DeclareTimer(const std::string& name, bool open);  		DeclareTimer(const std::string& name);  		static void updateCachedPointers(); -		// convertable to NamedTimer::FrameState for convenient usage of LLFastTimer(declared_timer) -		operator NamedTimer::FrameState&() { return *mFrameState; }  	private: -		NamedTimer&				mTimer; -		NamedTimer::FrameState* mFrameState;  +		NamedTimer&		mTimer; +		FrameState*		mFrameState;   	}; -  public: -	static LLMutex* sLogLock; -	static std::queue<LLSD> sLogQueue; -	static BOOL sLog; -	static BOOL sMetricLog; - -	typedef std::vector<NamedTimer::FrameState> info_list_t; -	static info_list_t& getFrameStateList(); - -	enum RootTimerMarker { ROOT }; -	LLFastTimer(RootTimerMarker); +	LLFastTimer(LLFastTimer::FrameState* state); -	LLFastTimer(NamedTimer::FrameState& timer) -	:	mFrameState(&timer) +	LL_INLINE LLFastTimer(LLFastTimer::DeclareTimer& timer) +	:	mFrameState(timer.mFrameState)  	{  #if TIME_FAST_TIMERS  		U64 timer_start = get_cpu_clock_count_64();  #endif  #if FAST_TIMER_ON -		NamedTimer::FrameState* frame_state = &timer; -		U32 cur_time = get_cpu_clock_count_32(); -		mStartSelfTime = cur_time; -		mStartTotalTime = cur_time; +		LLFastTimer::FrameState* frame_state = mFrameState; +		mStartTime = get_cpu_clock_count_32();  		frame_state->mActiveCount++;  		frame_state->mCalls++;  		// keep current parent as long as it is active when we are  		frame_state->mMoveUpTree |= (frame_state->mParent->mActiveCount == 0); -		mLastTimer = sCurTimer; -		sCurTimer = this; +		LLFastTimer::CurTimerData* cur_timer_data = &LLFastTimer::sCurTimerData; +		mLastTimerData = *cur_timer_data; +		cur_timer_data->mCurTimer = this; +		cur_timer_data->mFrameState = frame_state; +		cur_timer_data->mChildTime = 0;  #endif  #if TIME_FAST_TIMERS  		U64 timer_end = get_cpu_clock_count_64(); @@ -266,26 +239,26 @@ public:  #endif  	} -	~LLFastTimer() +	LL_INLINE ~LLFastTimer()  	{  #if TIME_FAST_TIMERS  		U64 timer_start = get_cpu_clock_count_64();  #endif  #if FAST_TIMER_ON -		NamedTimer::FrameState* frame_state = mFrameState; -		U32 cur_time = get_cpu_clock_count_32(); -		frame_state->mSelfTimeCounter += cur_time - mStartSelfTime; +		LLFastTimer::FrameState* frame_state = mFrameState; +		U32 total_time = get_cpu_clock_count_32() - mStartTime; +		frame_state->mSelfTimeCounter += total_time - LLFastTimer::sCurTimerData.mChildTime;  		frame_state->mActiveCount--; -		LLFastTimer* last_timer = mLastTimer; -		sCurTimer = last_timer;  		// store last caller to bootstrap tree creation -		frame_state->mLastCaller = last_timer->mFrameState; +		// do this in the destructor in case of recursion to get topmost caller +		frame_state->mLastCaller = mLastTimerData.mFrameState;  		// we are only tracking self time, so subtract our total time delta from parents -		U32 total_time = cur_time - mStartTotalTime; -		last_timer->mStartSelfTime += total_time; +		mLastTimerData.mChildTime += total_time; + +		LLFastTimer::sCurTimerData = mLastTimerData;  #endif  #if TIME_FAST_TIMERS  		U64 timer_end = get_cpu_clock_count_64(); @@ -294,7 +267,20 @@ public:  #endif	  	} +public: +	static LLMutex*			sLogLock; +	static std::queue<LLSD> sLogQueue; +	static BOOL				sLog; +	static BOOL				sMetricLog; +	static bool 			sPauseHistory; +	static bool 			sResetHistory; +	static U64				sTimerCycles; +	static U32				sTimerCalls; + +	typedef std::vector<FrameState> info_list_t; +	static info_list_t& getFrameStateList(); +	  	// call this once a frame to reset timers  	static void nextFrame(); @@ -312,23 +298,26 @@ public:  	static void writeLog(std::ostream& os);  	static const NamedTimer* getTimerByName(const std::string& name); -public: -	static bool 			sPauseHistory; -	static bool 			sResetHistory; -	static U64				sTimerCycles; -	static U32				sTimerCalls; -	 +	struct CurTimerData +	{ +		LLFastTimer*	mCurTimer; +		FrameState*		mFrameState; +		U32				mChildTime; +	}; +	static CurTimerData		sCurTimerData; +  private: -	static LLFastTimer*		sCurTimer;  	static S32				sCurFrameIndex;  	static S32				sLastFrameIndex;  	static U64				sLastFrameTime;  	static info_list_t*		sTimerInfos; -	U32						mStartSelfTime;	// start time + time of all child timers -	U32						mStartTotalTime;	// start time + time of all child timers -	NamedTimer::FrameState*	mFrameState; -	LLFastTimer*			mLastTimer; +	U32							mStartTime; +	LLFastTimer::FrameState*	mFrameState; +	LLFastTimer::CurTimerData	mLastTimerData; +  }; +typedef class LLFastTimer LLFastTimer; +  #endif // LL_LLFASTTIMER_H diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp index 845203b420..a35d279500 100644 --- a/indra/llui/llfloater.cpp +++ b/indra/llui/llfloater.cpp @@ -878,9 +878,11 @@ void LLFloater::setSnappedTo(const LLView* snap_view)  	else  	{  		//RN: assume it's a floater as it must be a sibling to our parent floater -		LLFloater* floaterp = (LLFloater*)snap_view; -		 -		setSnapTarget(floaterp->getHandle()); +		const LLFloater* floaterp = dynamic_cast<const LLFloater*>(snap_view); +		if (floaterp) +		{ +			setSnapTarget(floaterp->getHandle()); +		}  	}  } diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 62cb8380c0..39594bcf3e 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -212,7 +212,6 @@ set(viewer_SOURCE_FILES      llfloaterurldisplay.cpp      llfloaterurlentry.cpp      llfloatervoicedevicesettings.cpp -    llfloatervolumepulldown.cpp      llfloaterwater.cpp      llfloaterwhitelistentry.cpp      llfloaterwindlight.cpp @@ -347,6 +346,7 @@ set(viewer_SOURCE_FILES      llpanelshower.cpp      llpanelteleporthistory.cpp      llpanelvolume.cpp +    llpanelvolumepulldown.cpp      llparcelselection.cpp      llparticipantlist.cpp      llpatchvertexarray.cpp @@ -848,6 +848,7 @@ set(viewer_HEADER_FILES      llpanelshower.h      llpanelteleporthistory.h      llpanelvolume.h +    llpanelvolumepulldown.h      llparcelselection.h      llparticipantlist.h      llpatchvertexarray.h diff --git a/indra/newview/llpanelvolumepulldown.cpp b/indra/newview/llpanelvolumepulldown.cpp new file mode 100644 index 0000000000..74e37efe4e --- /dev/null +++ b/indra/newview/llpanelvolumepulldown.cpp @@ -0,0 +1,154 @@ +/**  + * @file llpanelvolumepulldown.cpp + * @author Tofu Linden + * @brief A floater showing the master volume pull-down + * + * $LicenseInfo:firstyear=2008&license=viewergpl$ + *  + * Copyright (c) 2008-2009, Linden Research, Inc. + *  + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab.  Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + *  + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + *  + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + *  + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#include "llviewerprecompiledheaders.h" + +#include "llpanelvolumepulldown.h" + +// Viewer libs +#include "llviewercontrol.h" +#include "llstatusbar.h" + +// Linden libs +#include "llbutton.h" +#include "lltabcontainer.h" +#include "llfloaterreg.h" +#include "llfloaterpreference.h" +#include "llslider.h" + +/* static */ const F32 LLPanelVolumePulldown::sAutoCloseFadeStartTimeSec = 4.0f; +/* static */ const F32 LLPanelVolumePulldown::sAutoCloseTotalTimeSec = 5.0f; + +///---------------------------------------------------------------------------- +/// Class LLPanelVolumePulldown +///---------------------------------------------------------------------------- + +// Default constructor +LLPanelVolumePulldown::LLPanelVolumePulldown() +{ +    mCommitCallbackRegistrar.add("Vol.setControlFalse", boost::bind(&LLPanelVolumePulldown::setControlFalse, this, _2)); +	mCommitCallbackRegistrar.add("Vol.GoAudioPrefs", boost::bind(&LLPanelVolumePulldown::onAdvancedButtonClick, this, _2)); +	LLUICtrlFactory::instance().buildPanel(this, "panel_volume_pulldown.xml"); +} + +BOOL LLPanelVolumePulldown::postBuild() +{ +	// set the initial volume-slider's position to reflect reality +	LLSlider* volslider =  getChild<LLSlider>( "mastervolume" ); +	volslider->setValue(gSavedSettings.getF32("AudioLevelMaster")); + +	return LLPanel::postBuild(); +} + +/*virtual*/ +void LLPanelVolumePulldown::onMouseEnter(S32 x, S32 y, MASK mask) +{ +	mHoverTimer.stop(); +	LLPanel::onMouseEnter(x,y,mask); +} + + +/*virtual*/ +void LLPanelVolumePulldown::onMouseLeave(S32 x, S32 y, MASK mask) +{ +	mHoverTimer.start(); +	LLPanel::onMouseLeave(x,y,mask); +} + +/*virtual*/  +void LLPanelVolumePulldown::handleVisibilityChange ( BOOL new_visibility ) +{ +	if (new_visibility)	 +	{ +		mHoverTimer.start(); // timer will be stopped when mouse hovers over panel +		gFocusMgr.setTopCtrl(this); +	} +	else +	{ +		mHoverTimer.stop(); +		gFocusMgr.setTopCtrl(NULL); +	} +} + +/*virtual*/  +void LLPanelVolumePulldown::onTopLost() +{ +	setVisible(FALSE); +} + +void LLPanelVolumePulldown::onAdvancedButtonClick(const LLSD& user_data) +{ +	// close the global volume minicontrol, we're bringing up the big one +	setVisible(FALSE); + +	// bring up the prefs floater +	LLFloaterPreference* prefsfloater = dynamic_cast<LLFloaterPreference*> +		(LLFloaterReg::showInstance("preferences")); +	if (prefsfloater) +	{ +		// grab the 'audio' panel from the preferences floater and +		// bring it the front! +		LLTabContainer* tabcontainer = prefsfloater->getChild<LLTabContainer>("pref core"); +		LLPanel* audiopanel = prefsfloater->getChild<LLPanel>("audio"); +		if (tabcontainer && audiopanel) +		{ +			tabcontainer->selectTabPanel(audiopanel); +		} +	} +} + +void LLPanelVolumePulldown::setControlFalse(const LLSD& user_data) +{ +	std::string control_name = user_data.asString(); +	LLControlVariable* control = findControl(control_name); +	 +	if (control) +		control->set(LLSD(FALSE)); +} + +//virtual +void LLPanelVolumePulldown::draw() +{ +	F32 alpha = mHoverTimer.getStarted()  +		? clamp_rescale(mHoverTimer.getElapsedTimeF32(), sAutoCloseFadeStartTimeSec, sAutoCloseTotalTimeSec, 1.f, 0.f) +		: 1.0f; +	LLViewDrawContext context(alpha); + +	LLPanel::draw(); + +	if (alpha == 0.f) +	{ +		setVisible(FALSE); +	} +} + diff --git a/indra/newview/llpanelvolumepulldown.h b/indra/newview/llpanelvolumepulldown.h new file mode 100644 index 0000000000..9f20caa1a8 --- /dev/null +++ b/indra/newview/llpanelvolumepulldown.h @@ -0,0 +1,64 @@ +/**  + * @file llpanelvolumepulldown.h + * @author Tofu Linden + * @brief A panel showing the master volume pull-down + * + * $LicenseInfo:firstyear=2008&license=viewergpl$ + *  + * Copyright (c) 2008-2009, Linden Research, Inc. + *  + * Second Life Viewer Source Code + * The source code in this file ("Source Code") is provided by Linden Lab + * to you under the terms of the GNU General Public License, version 2.0 + * ("GPL"), unless you have obtained a separate licensing agreement + * ("Other License"), formally executed by you and Linden Lab.  Terms of + * the GPL can be found in doc/GPL-license.txt in this distribution, or + * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 + *  + * There are special exceptions to the terms and conditions of the GPL as + * it is applied to this Source Code. View the full text of the exception + * in the file doc/FLOSS-exception.txt in this software distribution, or + * online at + * http://secondlifegrid.net/programs/open_source/licensing/flossexception + *  + * By copying, modifying or distributing this software, you acknowledge + * that you have read and understood your obligations described above, + * and agree to abide by those obligations. + *  + * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO + * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, + * COMPLETENESS OR PERFORMANCE. + * $/LicenseInfo$ + */ + +#ifndef LL_LLPANELVOLUMEPULLDOWN_H +#define LL_LLPANELVOLUMEPULLDOWN_H + +#include "linden_common.h" + +#include "llpanel.h" + +class LLFrameTimer; + +class LLPanelVolumePulldown : public LLPanel +{ + public: +	LLPanelVolumePulldown(); +	/*virtual*/ void draw(); +	/*virtual*/ void onMouseEnter(S32 x, S32 y, MASK mask); +	/*virtual*/ void onMouseLeave(S32 x, S32 y, MASK mask); +	/*virtual*/ void handleVisibilityChange ( BOOL new_visibility ); +	/*virtual*/ void onTopLost(); +	/*virtual*/ BOOL postBuild(); +	 + private: +	void setControlFalse(const LLSD& user_data); +	void onAdvancedButtonClick(const LLSD& user_data); + +	LLFrameTimer mHoverTimer; +	static const F32 sAutoCloseFadeStartTimeSec; +	static const F32 sAutoCloseTotalTimeSec; +}; + + +#endif // LL_LLPANELVOLUMEPULLDOWN_H diff --git a/indra/newview/llstatusbar.cpp b/indra/newview/llstatusbar.cpp index 5ce3bbb9f6..b3b2b9ee5d 100644 --- a/indra/newview/llstatusbar.cpp +++ b/indra/newview/llstatusbar.cpp @@ -42,7 +42,7 @@  #include "llfloaterbuycurrency.h"  #include "llfloaterchat.h"  #include "llfloaterlagmeter.h" -#include "llfloatervolumepulldown.h" +#include "llpanelvolumepulldown.h"  #include "llfloaterregioninfo.h"  #include "llfloaterscriptdebug.h"  #include "llhudicon.h" @@ -204,6 +204,21 @@ LLStatusBar::LLStatusBar(const LLRect& rect)  	addChild(mSGPacketLoss);  	childSetActionTextbox("stat_btn", onClickStatGraph); + +	mPanelVolumePulldown = new LLPanelVolumePulldown(); +	addChild(mPanelVolumePulldown); + +	LLRect volume_pulldown_rect = mPanelVolumePulldown->getRect(); +	LLButton* volbtn =  getChild<LLButton>( "volume_btn" ); +	volume_pulldown_rect.setLeftTopAndSize(volbtn->getRect().mLeft - +	     (volume_pulldown_rect.getWidth() - volbtn->getRect().getWidth())/2, +			       volbtn->calcScreenRect().mBottom, +			       volume_pulldown_rect.getWidth(), +			       volume_pulldown_rect.getHeight()); + +	mPanelVolumePulldown->setShape(volume_pulldown_rect); +	mPanelVolumePulldown->setFollows(FOLLOWS_TOP|FOLLOWS_RIGHT); +	mPanelVolumePulldown->setVisible(FALSE);  }  LLStatusBar::~LLStatusBar() @@ -501,7 +516,7 @@ static void onClickScriptDebug(void*)  void LLStatusBar::onMouseEnterVolume(LLUICtrl* ctrl)  {  	// show the master volume pull-down -	LLFloaterReg::showInstance("volume_pulldown"); +	gStatusBar->mPanelVolumePulldown->setVisible(TRUE);  }  static void onClickVolume(void* data) diff --git a/indra/newview/llstatusbar.h b/indra/newview/llstatusbar.h index f77cc1acb8..0e98da0fe4 100644 --- a/indra/newview/llstatusbar.h +++ b/indra/newview/llstatusbar.h @@ -112,7 +112,7 @@ private:  	S32				mSquareMetersCommitted;  	LLFrameTimer*	mBalanceTimer;  	LLFrameTimer*	mHealthTimer; -		 +	LLPanelVolumePulldown* mPanelVolumePulldown;  	static std::vector<std::string> sDays;  	static std::vector<std::string> sMonths;  	static const U32 MAX_DATE_STRING_LENGTH; diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp index 23bdbc7381..f8d1f34f9d 100644 --- a/indra/newview/llviewerfloaterreg.cpp +++ b/indra/newview/llviewerfloaterreg.cpp @@ -106,7 +106,6 @@  #include "llfloateruipreview.h"  #include "llfloaterurldisplay.h"  #include "llfloatervoicedevicesettings.h" -#include "llfloatervolumepulldown.h"  #include "llfloaterwater.h"  #include "llfloaterwhitelistentry.h"  #include "llfloaterwindlight.h" @@ -256,7 +255,6 @@ void LLViewerFloaterReg::registerFloaters()  	LLFloaterReg::add("upload_image", "floater_image_preview.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterImagePreview>, "upload");  	LLFloaterReg::add("upload_sound", "floater_sound_preview.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterSoundPreview>, "upload"); -	LLFloaterReg::add("volume_pulldown", "floater_volume_pulldown.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterVolumePulldown>);  	LLFloaterReg::add("voice_controls", "floater_voice_controls.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLCallFloater>);  	LLFloaterReg::add("whitelist_entry", "floater_whitelist_entry.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterWhiteListEntry>);	 diff --git a/indra/newview/skins/default/xui/en/panel_status_bar.xml b/indra/newview/skins/default/xui/en/panel_status_bar.xml index 00f54feabd..5c9c9b5611 100644 --- a/indra/newview/skins/default/xui/en/panel_status_bar.xml +++ b/indra/newview/skins/default/xui/en/panel_status_bar.xml @@ -84,7 +84,6 @@       tool_tip="Global Volume Control"       width="16" />      <text -     enabled="true"       follows="right|bottom"       halign="center"       height="12" diff --git a/indra/newview/skins/default/xui/en/panel_volume_pulldown.xml b/indra/newview/skins/default/xui/en/panel_volume_pulldown.xml new file mode 100644 index 0000000000..60d4a7e00b --- /dev/null +++ b/indra/newview/skins/default/xui/en/panel_volume_pulldown.xml @@ -0,0 +1,55 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<panel + background_opaque="true" + background_visible="false" + border_visible="false" + border="false" + chrome="true"  + follows="bottom" + height="150" + layout="topleft" + name="volumepulldown_floater" + width="32"> +  <!-- floater background image --> +  <icon +   height="150" +   image_name="Inspector_Background" +   layout="topleft" +   left="0" +   name="normal_background" +   top="0" +   width="32" /> + <slider +  control_name="AudioLevelMaster" +  follows="left|top" +  left="0" +  top="1" +  orientation="vertical" +  height="120" +  increment="0.05" +  initial_value="0.5" +  layout="topleft" +  name="mastervolume" +  show_text="false" +  slider_label.halign="right" +  top_pad="2" +  volume="true"> +  <slider.commit_callback +   function="Vol.setControlFalse" +   parameter="MuteAudio" /> +  </slider> +  <button +    left="7" +    top_pad="9" +    width="18" +    height="12" +    follows="top|left" +    name="prefs_btn" +    image_unselected="Icon_Gear_Foreground" +    image_disabled="Icon_Gear_Background" +    image_pressed="Icon_Gear_Press" +    scale_image="false"> +    <button.commit_callback +       function="Vol.GoAudioPrefs" /> +  </button> +</panel> | 
