diff options
Diffstat (limited to 'indra/llui')
| -rw-r--r-- | indra/llui/lldockcontrol.cpp | 27 | ||||
| -rw-r--r-- | indra/llui/llmenubutton.cpp | 7 | ||||
| -rw-r--r-- | indra/llui/llmenubutton.h | 1 | ||||
| -rw-r--r-- | indra/llui/llscrolllistcolumn.cpp | 9 | 
4 files changed, 38 insertions, 6 deletions
| diff --git a/indra/llui/lldockcontrol.cpp b/indra/llui/lldockcontrol.cpp index d48674f306..f6f5a0beb3 100644 --- a/indra/llui/lldockcontrol.cpp +++ b/indra/llui/lldockcontrol.cpp @@ -220,10 +220,15 @@ void LLDockControl::moveDockable()  	case TOP:  		x = dockRect.getCenterX() - dockableRect.getWidth() / 2;  		y = dockRect.mTop + dockableRect.getHeight(); -		// unique docking used with dock tongue, so add tongue height o the Y coordinate +		// unique docking used with dock tongue, so add tongue height to the Y coordinate  		if (use_tongue)  		{  			y += mDockTongue->getHeight(); + +			if ( y > rootRect.mTop) +			{ +				y = rootRect.mTop; +			}  		}  		// check is dockable inside root view rect @@ -257,7 +262,7 @@ void LLDockControl::moveDockable()  	case BOTTOM:  		x = dockRect.getCenterX() - dockableRect.getWidth() / 2;  		y = dockRect.mBottom; -		// unique docking used with dock tongue, so add tongue height o the Y coordinate +		// unique docking used with dock tongue, so add tongue height to the Y coordinate  		if (use_tongue)  		{  			y -= mDockTongue->getHeight(); @@ -292,9 +297,21 @@ void LLDockControl::moveDockable()  		break;  	} -	// move dockable -	dockableRect.setLeftTopAndSize(x, y, dockableRect.getWidth(), -			dockableRect.getHeight()); +	S32 max_available_height = rootRect.getHeight() - mDockTongueY - mDockTongue->getHeight(); + +	// A floater should be shrunk so it doesn't cover a part of its docking tongue and +	// there is a space between a dockable floater and a control to which it is docked. +	if (use_tongue && dockableRect.getHeight() >= max_available_height) +	{ +		dockableRect.setLeftTopAndSize(x, y, dockableRect.getWidth(), max_available_height); +		mDockableFloater->reshape(dockableRect.getWidth(), dockableRect.getHeight()); +	} +	else +	{ +		// move dockable +		dockableRect.setLeftTopAndSize(x, y, dockableRect.getWidth(), +				dockableRect.getHeight()); +	}  	LLRect localDocableParentRect;  	mDockableFloater->getParent()->screenRectToLocal(dockableRect,  			&localDocableParentRect); diff --git a/indra/llui/llmenubutton.cpp b/indra/llui/llmenubutton.cpp index ac568a83e4..eed0085273 100644 --- a/indra/llui/llmenubutton.cpp +++ b/indra/llui/llmenubutton.cpp @@ -175,6 +175,13 @@ void LLMenuButton::updateMenuOrigin()  			mY = rect.mTop + mMenuHandle.get()->getRect().getHeight();  			break;  		} +		case MP_TOP_RIGHT: +		{ +			const LLRect& menu_rect = mMenuHandle.get()->getRect(); +			mX = rect.mRight - menu_rect.getWidth(); +			mY = rect.mTop + menu_rect.getHeight(); +			break; +		}  		case MP_BOTTOM_LEFT:  		{  			mX = rect.mLeft; diff --git a/indra/llui/llmenubutton.h b/indra/llui/llmenubutton.h index 9e91b9e99d..7b657595da 100644 --- a/indra/llui/llmenubutton.h +++ b/indra/llui/llmenubutton.h @@ -47,6 +47,7 @@ public:  	typedef enum e_menu_position  	{  		MP_TOP_LEFT, +		MP_TOP_RIGHT,  		MP_BOTTOM_LEFT  	} EMenuPosition; diff --git a/indra/llui/llscrolllistcolumn.cpp b/indra/llui/llscrolllistcolumn.cpp index 2a4c1ca44c..696e4a2bb1 100644 --- a/indra/llui/llscrolllistcolumn.cpp +++ b/indra/llui/llscrolllistcolumn.cpp @@ -83,7 +83,14 @@ void LLScrollColumnHeader::draw()  			&& (sort_column == mColumn->mSortingColumn || sort_column == mColumn->mName);  	BOOL is_ascending = mColumn->mParentCtrl->getSortAscending(); -	setImageOverlay(is_ascending ? "up_arrow.tga" : "down_arrow.tga", LLFontGL::RIGHT, draw_arrow ? LLColor4::white : LLColor4::transparent); +	if (draw_arrow) +	{ +		setImageOverlay(is_ascending ? "up_arrow.tga" : "down_arrow.tga", LLFontGL::RIGHT, LLColor4::white); +	} +	else +	{ +		setImageOverlay(LLUUID::null); +	}  	// Draw children  	LLButton::draw(); | 
