diff options
| author | Andrey Kleshchev <andreykproductengine@lindenlab.com> | 2021-06-18 19:11:33 +0300 | 
|---|---|---|
| committer | Andrey Kleshchev <andreykproductengine@lindenlab.com> | 2021-06-18 20:15:51 +0300 | 
| commit | da5cc13df2d3cff17cb6afb586da278709e9d40a (patch) | |
| tree | c0ae3d9c7c13d3d3afd1d3478140d009a73144fd /indra/llui | |
| parent | 9a36c1ac2183f07420fb92627f80febf9fd8c2af (diff) | |
SL-15410 Menu search breaks torn off menus
Diffstat (limited to 'indra/llui')
| -rw-r--r-- | indra/llui/llmenugl.cpp | 41 | ||||
| -rw-r--r-- | indra/llui/llmenugl.h | 4 | 
2 files changed, 41 insertions, 4 deletions
| diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp index 37dbe9b40e..f04ce74ce1 100644 --- a/indra/llui/llmenugl.cpp +++ b/indra/llui/llmenugl.cpp @@ -2362,6 +2362,16 @@ void LLMenuGL::arrange( void )  				(*item_iter)->setRect( rect );  			}  		} + + +        if (getTornOff()) +        { +            LLTearOffMenu * torn_off_menu = dynamic_cast<LLTearOffMenu*>(getParent()); +            if (torn_off_menu) +            { +                torn_off_menu->updateSize(); +            } +        }  	}  	if (mKeepFixedSize)  	{ @@ -3894,7 +3904,7 @@ LLTearOffMenu::LLTearOffMenu(LLMenuGL* menup) :  	LLRect rect;  	menup->localRectToOtherView(LLRect(-1, menup->getRect().getHeight(), menup->getRect().getWidth() + 3, 0), &rect, gFloaterView);  	// make sure this floater is big enough for menu -	mTargetHeight = (F32)(rect.getHeight() + floater_header_size); +	mTargetHeight = rect.getHeight() + floater_header_size;  	reshape(rect.getWidth(), rect.getHeight());  	setRect(rect); @@ -3926,12 +3936,12 @@ LLTearOffMenu::~LLTearOffMenu()  void LLTearOffMenu::draw()  {  	mMenu->setBackgroundVisible(isBackgroundOpaque()); -	mMenu->needsArrange();  	if (getRect().getHeight() != mTargetHeight)  	{  		// animate towards target height -		reshape(getRect().getWidth(), llceil(lerp((F32)getRect().getHeight(), mTargetHeight, LLSmoothInterpolation::getInterpolant(0.05f)))); +        reshape(getRect().getWidth(), llceil(lerp((F32)getRect().getHeight(), (F32)mTargetHeight, LLSmoothInterpolation::getInterpolant(0.05f)))); +        mMenu->needsArrange();  	}  	LLFloater::draw();  } @@ -4014,6 +4024,31 @@ LLTearOffMenu* LLTearOffMenu::create(LLMenuGL* menup)  	return tearoffp;  } +void LLTearOffMenu::updateSize() +{ +    if (mMenu) +    { +        S32 floater_header_size = getHeaderHeight(); +        const LLRect &floater_rect = getRect(); +        LLRect new_rect; +        mMenu->localRectToOtherView(LLRect(-1, mMenu->getRect().getHeight() + floater_header_size, mMenu->getRect().getWidth() + 3, 0), &new_rect, gFloaterView); + +        if (floater_rect.getWidth() != new_rect.getWidth() +            || mTargetHeight != new_rect.getHeight()) +        { +            // make sure this floater is big enough for menu +            mTargetHeight = new_rect.getHeight(); +            reshape(new_rect.getWidth(), mTargetHeight); + +            // Restore menu position +            LLRect menu_rect = mMenu->getRect(); +            menu_rect.setOriginAndSize(1, 1, +                menu_rect.getWidth(), menu_rect.getHeight()); +            mMenu->setRect(menu_rect); +        } +    } +} +  void LLTearOffMenu::closeTearOff()  {  	removeChild(mMenu); diff --git a/indra/llui/llmenugl.h b/indra/llui/llmenugl.h index 273bd789c4..01e677315b 100644 --- a/indra/llui/llmenugl.h +++ b/indra/llui/llmenugl.h @@ -873,6 +873,8 @@ public:  	virtual BOOL handleKeyHere(KEY key, MASK mask);  	virtual void translate(S32 x, S32 y); +	void updateSize(); +  private:  	LLTearOffMenu(LLMenuGL* menup); @@ -880,7 +882,7 @@ private:  	LLView*		mOldParent;  	LLMenuGL*	mMenu; -	F32			mTargetHeight; +	S32			mTargetHeight;  };  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | 
