summaryrefslogtreecommitdiff
path: root/indra/llui/llmenugl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/llui/llmenugl.cpp')
-rw-r--r--indra/llui/llmenugl.cpp543
1 files changed, 176 insertions, 367 deletions
diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp
index 19a5085a25..4e94aff7a5 100644
--- a/indra/llui/llmenugl.cpp
+++ b/indra/llui/llmenugl.cpp
@@ -112,12 +112,11 @@ LLColor4 LLMenuItemGL::sEnabledColor( 0.0f, 0.0f, 0.0f, 1.0f );
LLColor4 LLMenuItemGL::sDisabledColor( 0.5f, 0.5f, 0.5f, 1.0f );
LLColor4 LLMenuItemGL::sHighlightBackground( 0.0f, 0.0f, 0.7f, 1.0f );
LLColor4 LLMenuItemGL::sHighlightForeground( 1.0f, 1.0f, 1.0f, 1.0f );
-BOOL LLMenuItemGL::sDropShadowText = TRUE;
LLColor4 LLMenuGL::sDefaultBackgroundColor( 0.25f, 0.25f, 0.25f, 0.75f );
BOOL LLMenuGL::sKeyboardMode = FALSE;
-LLViewHandle LLMenuHolderGL::sItemLastSelectedHandle;
+LLHandle<LLView> LLMenuHolderGL::sItemLastSelectedHandle;
LLFrameTimer LLMenuHolderGL::sItemActivationTimer;
//LLColor4 LLMenuGL::sBackgroundColor( 0.8f, 0.8f, 0.0f, 1.0f );
@@ -199,7 +198,7 @@ BOOL LLMenuItemGL::handleKey(KEY key, MASK mask, BOOL called_from_parent)
if( called_from_parent )
{
// Downward traversal
- if (mEnabled)
+ if (getEnabled())
{
handled = childrenHandleKey( key, mask ) != NULL;
}
@@ -215,7 +214,7 @@ BOOL LLMenuItemGL::handleKey(KEY key, MASK mask, BOOL called_from_parent)
BOOL LLMenuItemGL::handleAcceleratorKey(KEY key, MASK mask)
{
- if( mEnabled && (!gKeyboard->getKeyRepeated(key) || mAllowKeyRepeat) && (key == mAcceleratorKey) && (mask == (mAcceleratorMask & MASK_NORMALKEYS)) )
+ if( getEnabled() && (!gKeyboard->getKeyRepeated(key) || mAllowKeyRepeat) && (key == mAcceleratorKey) && (mask == (mAcceleratorMask & MASK_NORMALKEYS)) )
{
doIt();
return TRUE;
@@ -225,15 +224,10 @@ BOOL LLMenuItemGL::handleAcceleratorKey(KEY key, MASK mask)
BOOL LLMenuItemGL::handleHover(S32 x, S32 y, MASK mask)
{
- mGotHover = TRUE;
+ setHover(TRUE);
getWindow()->setCursor(UI_CURSOR_ARROW);
return TRUE;
}
-
-void LLMenuItemGL::setBriefItem(BOOL b)
-{
- mBriefItem = b;
-}
// This function checks to see if the accelerator key is already in use;
// if not, it will be added to the list
@@ -282,7 +276,7 @@ BOOL LLMenuItemGL::addToAcceleratorList(std::list <LLKeyBinding*> *listp)
// This function appends the character string representation of
// the current accelerator key and mask to the provided string.
-void LLMenuItemGL::appendAcceleratorString( LLString& st )
+void LLMenuItemGL::appendAcceleratorString( LLString& st ) const
{
// break early if this is a silly thing to do.
if( KEY_NONE == mAcceleratorKey )
@@ -332,52 +326,14 @@ void LLMenuItemGL::setJumpKey(KEY key)
mJumpKey = LLStringOps::toUpper((char)key);
}
-KEY LLMenuItemGL::getJumpKey()
-{
- return mJumpKey;
-}
-
-
-// set the font used by all of the menu objects
-void LLMenuItemGL::setFont(LLFontGL* font)
-{
- mFont = font;
-}
-
-// returns the height in pixels for the current font.
-U32 LLMenuItemGL::getNominalHeight( void )
-{
- return llround(mFont->getLineHeight()) + MENU_ITEM_PADDING;
-}
-
-// functions to control the color scheme
-void LLMenuItemGL::setEnabledColor( const LLColor4& color )
-{
- sEnabledColor = color;
-}
-
-void LLMenuItemGL::setDisabledColor( const LLColor4& color )
-{
- sDisabledColor = color;
-}
-
-void LLMenuItemGL::setHighlightBGColor( const LLColor4& color )
-{
- sHighlightBackground = color;
-}
-void LLMenuItemGL::setHighlightFGColor( const LLColor4& color )
-{
- sHighlightForeground = color;
+// virtual
+U32 LLMenuItemGL::getNominalHeight( void ) const
+{
+ return llround(mFont->getLineHeight()) + MENU_ITEM_PADDING;
}
-// change the label
-void LLMenuItemGL::setLabel( const LLStringExplicit& label )
-{
- mLabel = label;
-}
-
// Get the parent menu for this item
LLMenuGL* LLMenuItemGL::getMenu()
{
@@ -388,7 +344,7 @@ LLMenuGL* LLMenuItemGL::getMenu()
// getNominalWidth() - returns the normal width of this control in
// pixels - this is used for calculating the widest item, as well as
// for horizontal arrangement.
-U32 LLMenuItemGL::getNominalWidth( void )
+U32 LLMenuItemGL::getNominalWidth( void ) const
{
U32 width;
@@ -442,17 +398,6 @@ void LLMenuItemGL::doIt( void )
mHighlight = highlight;
}
-// determine if this object represents an active sub-menu
-BOOL LLMenuItemGL::isActive( void ) const
-{
- return FALSE;
-}
-
-// determine if this object represents an open sub-menu
-BOOL LLMenuItemGL::isOpen( void ) const
-{
- return FALSE;
-}
BOOL LLMenuItemGL::handleKeyHere( KEY key, MASK mask, BOOL called_from_parent )
{
@@ -490,7 +435,7 @@ BOOL LLMenuItemGL::handleKeyHere( KEY key, MASK mask, BOOL called_from_parent )
BOOL LLMenuItemGL::handleMouseUp( S32 x, S32 y, MASK )
{
- if (mEnabled)
+ if (getEnabled())
{
// switch to mouse navigation mode
LLMenuGL::setKeyboardMode(FALSE);
@@ -504,7 +449,7 @@ BOOL LLMenuItemGL::handleMouseUp( S32 x, S32 y, MASK )
BOOL LLMenuItemGL::handleMouseDown( S32 x, S32 y, MASK )
{
- if (mEnabled)
+ if (getEnabled())
{
// switch to mouse navigation mode
LLMenuGL::setKeyboardMode(FALSE);
@@ -512,10 +457,7 @@ BOOL LLMenuItemGL::handleMouseDown( S32 x, S32 y, MASK )
setHighlight(TRUE);
return TRUE;
}
- else
- {
- return FALSE;
- }
+ return FALSE;
}
@@ -529,13 +471,13 @@ void LLMenuItemGL::draw( void )
if( getEnabled() && getHighlight() && !mBriefItem)
{
glColor4fv( sHighlightBackground.mV );
- gl_rect_2d( 0, mRect.getHeight(), mRect.getWidth(), 0 );
+ gl_rect_2d( 0, getRect().getHeight(), getRect().getWidth(), 0 );
}
LLColor4 color;
U8 font_style = mStyle;
- if (LLMenuItemGL::sDropShadowText && getEnabled() && !mDrawTextDisabled )
+ if (getEnabled() && !mDrawTextDisabled )
{
font_style |= LLFontGL::DROP_SHADOW_SOFT;
}
@@ -570,12 +512,12 @@ void LLMenuItemGL::draw( void )
LLFontGL::LEFT, LLFontGL::BOTTOM, font_style, S32_MAX, S32_MAX, NULL, FALSE );
if( !mDrawAccelLabel.empty() )
{
- mFont->render( mDrawAccelLabel.getWString(), 0, (F32)mRect.mRight - (F32)RIGHT_PLAIN_PIXELS, ((F32)MENU_ITEM_PADDING / 2.f) + 1.f, color,
+ mFont->render( mDrawAccelLabel.getWString(), 0, (F32)getRect().mRight - (F32)RIGHT_PLAIN_PIXELS, ((F32)MENU_ITEM_PADDING / 2.f) + 1.f, color,
LLFontGL::RIGHT, LLFontGL::BOTTOM, font_style, S32_MAX, S32_MAX, NULL, FALSE );
}
if( !mDrawBranchLabel.empty() )
{
- mFont->render( mDrawBranchLabel.getWString(), 0, (F32)mRect.mRight - (F32)RIGHT_PAD_PIXELS, ((F32)MENU_ITEM_PADDING / 2.f) + 1.f, color,
+ mFont->render( mDrawBranchLabel.getWString(), 0, (F32)getRect().mRight - (F32)RIGHT_PAD_PIXELS, ((F32)MENU_ITEM_PADDING / 2.f) + 1.f, color,
LLFontGL::RIGHT, LLFontGL::BOTTOM, font_style, S32_MAX, S32_MAX, NULL, FALSE );
}
}
@@ -595,7 +537,7 @@ void LLMenuItemGL::draw( void )
}
// clear got hover every frame
- mGotHover = FALSE;
+ setHover(FALSE);
}
BOOL LLMenuItemGL::setLabelArg( const LLString& key, const LLStringExplicit& text )
@@ -628,7 +570,7 @@ public:
virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask);
virtual BOOL handleHover(S32 x, S32 y, MASK mask);
- virtual U32 getNominalHeight( void ) { return SEPARATOR_HEIGHT_PIXELS; }
+ virtual U32 getNominalHeight( void ) const { return SEPARATOR_HEIGHT_PIXELS; }
};
LLMenuItemSeparatorGL::LLMenuItemSeparatorGL( const LLString &name ) :
@@ -638,42 +580,42 @@ LLMenuItemSeparatorGL::LLMenuItemSeparatorGL( const LLString &name ) :
void LLMenuItemSeparatorGL::draw( void )
{
- glColor4fv( sDisabledColor.mV );
- const S32 y = mRect.getHeight() / 2;
+ glColor4fv( getDisabledColor().mV );
+ const S32 y = getRect().getHeight() / 2;
const S32 PAD = 6;
- gl_line_2d( PAD, y, mRect.getWidth() - PAD, y );
+ gl_line_2d( PAD, y, getRect().getWidth() - PAD, y );
}
BOOL LLMenuItemSeparatorGL::handleMouseDown(S32 x, S32 y, MASK mask)
{
LLMenuGL* parent_menu = getMenu();
- if (y > mRect.getHeight() / 2)
+ if (y > getRect().getHeight() / 2)
{
- return parent_menu->handleMouseDown(x + mRect.mLeft, mRect.mTop + 1, mask);
+ return parent_menu->handleMouseDown(x + getRect().mLeft, getRect().mTop + 1, mask);
}
else
{
- return parent_menu->handleMouseDown(x + mRect.mLeft, mRect.mBottom - 1, mask);
+ return parent_menu->handleMouseDown(x + getRect().mLeft, getRect().mBottom - 1, mask);
}
}
BOOL LLMenuItemSeparatorGL::handleMouseUp(S32 x, S32 y, MASK mask)
{
LLMenuGL* parent_menu = getMenu();
- if (y > mRect.getHeight() / 2)
+ if (y > getRect().getHeight() / 2)
{
- return parent_menu->handleMouseUp(x + mRect.mLeft, mRect.mTop + 1, mask);
+ return parent_menu->handleMouseUp(x + getRect().mLeft, getRect().mTop + 1, mask);
}
else
{
- return parent_menu->handleMouseUp(x + mRect.mLeft, mRect.mBottom - 1, mask);
+ return parent_menu->handleMouseUp(x + getRect().mLeft, getRect().mBottom - 1, mask);
}
}
BOOL LLMenuItemSeparatorGL::handleHover(S32 x, S32 y, MASK mask)
{
LLMenuGL* parent_menu = getMenu();
- if (y > mRect.getHeight() / 2)
+ if (y > getRect().getHeight() / 2)
{
parent_menu->highlightPrevItem(this, FALSE);
return FALSE;
@@ -711,24 +653,13 @@ LLMenuItemVerticalSeparatorGL::LLMenuItemVerticalSeparatorGL( void )
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Class LLMenuItemTearOffGL
-//
-// This class represents a separator.
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-LLMenuItemTearOffGL::LLMenuItemTearOffGL(LLViewHandle parent_floater_handle) :
+LLMenuItemTearOffGL::LLMenuItemTearOffGL(LLHandle<LLFloater> parent_floater_handle) :
LLMenuItemGL("tear off", TEAROFF_SEPARATOR_LABEL),
mParentHandle(parent_floater_handle)
{
}
-EWidgetType LLMenuItemTearOffGL::getWidgetType() const
-{
- return WIDGET_TYPE_TEAROFF_MENU;
-}
-
-LLString LLMenuItemTearOffGL::getWidgetTag() const
-{
- return LL_MENU_ITEM_TEAR_OFF_GL_TAG;
-}
void LLMenuItemTearOffGL::doIt()
{
@@ -747,7 +678,7 @@ void LLMenuItemTearOffGL::doIt()
getMenu()->arrange();
- LLFloater* parent_floater = LLFloater::getFloaterByHandle(mParentHandle);
+ LLFloater* parent_floater = mParentHandle.get();
LLFloater* tear_off_menu = LLTearOffMenu::create(getMenu());
if (tear_off_menu)
@@ -768,27 +699,31 @@ void LLMenuItemTearOffGL::doIt()
void LLMenuItemTearOffGL::draw()
{
// disabled items can be highlighted, but shouldn't render as such
- if( getEnabled() && getHighlight() && !mBriefItem)
+ if( getEnabled() && getHighlight() && !isBriefItem())
{
- glColor4fv( sHighlightBackground.mV );
- gl_rect_2d( 0, mRect.getHeight(), mRect.getWidth(), 0 );
+ glColor4fv( getHighlightBGColor().mV );
+ gl_rect_2d( 0, getRect().getHeight(), getRect().getWidth(), 0 );
}
- if (mEnabled)
+ if (getEnabled())
{
- glColor4fv( sEnabledColor.mV );
+ glColor4fv( getEnabledColor().mV );
}
else
{
- glColor4fv( sDisabledColor.mV );
+ glColor4fv( getDisabledColor().mV );
}
- const S32 y = mRect.getHeight() / 3;
+ const S32 y = getRect().getHeight() / 3;
const S32 PAD = 6;
- gl_line_2d( PAD, y, mRect.getWidth() - PAD, y );
- gl_line_2d( PAD, y * 2, mRect.getWidth() - PAD, y * 2 );
+ gl_line_2d( PAD, y, getRect().getWidth() - PAD, y );
+ gl_line_2d( PAD, y * 2, getRect().getWidth() - PAD, y * 2 );
+}
+
+U32 LLMenuItemTearOffGL::getNominalHeight( void ) const
+{
+ return TEAROFF_SEPARATOR_HEIGHT_PIXELS;
}
-U32 LLMenuItemTearOffGL::getNominalHeight( void ) { return TEAROFF_SEPARATOR_HEIGHT_PIXELS; }
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Class LLMenuItemBlankGL
@@ -799,22 +734,16 @@ U32 LLMenuItemTearOffGL::getNominalHeight( void ) { return TEAROFF_SEPARATOR_HEI
class LLMenuItemBlankGL : public LLMenuItemGL
{
public:
- LLMenuItemBlankGL( void );
-
+ LLMenuItemBlankGL( void ) : LLMenuItemGL( "", "" )
+ {
+ setEnabled(FALSE);
+ }
virtual EWidgetType getWidgetType() const { return WIDGET_TYPE_MENU_ITEM_BLANK; }
virtual LLString getWidgetTag() const { return LL_MENU_ITEM_BLANK_GL_TAG; }
-
- // doIt() - do the primary funcationality of the menu item.
virtual void doIt( void ) {}
-
virtual void draw( void ) {}
};
-LLMenuItemBlankGL::LLMenuItemBlankGL( void )
-: LLMenuItemGL( "", "" )
-{
- mEnabled = FALSE;
-}
///============================================================================
/// Class LLMenuItemCallGL
@@ -905,7 +834,7 @@ void LLMenuItemCallGL::setEnabledControl(LLString enabled_control, LLView *conte
}
else
{
- context->addBoolControl(enabled_control, mEnabled);
+ context->addBoolControl(enabled_control, getEnabled());
control = context->findControl(enabled_control);
control->registerListener(this, "ENABLED");
}
@@ -925,7 +854,7 @@ void LLMenuItemCallGL::setVisibleControl(LLString enabled_control, LLView *conte
}
else
{
- context->addBoolControl(enabled_control, mEnabled);
+ context->addBoolControl(enabled_control, getEnabled());
control = context->findControl(enabled_control);
control->registerListener(this, "VISIBLE");
}
@@ -989,16 +918,6 @@ void LLMenuItemCallGL::doIt( void )
LLMenuItemGL::doIt();
}
-EWidgetType LLMenuItemCallGL::getWidgetType() const
-{
- return WIDGET_TYPE_MENU_ITEM_CALL;
-}
-
-LLString LLMenuItemCallGL::getWidgetTag() const
-{
- return LL_MENU_ITEM_CALL_GL_TAG;
-}
-
void LLMenuItemCallGL::buildDrawLabel( void )
{
LLPointer<LLEvent> fired_event = new LLEvent(this);
@@ -1018,7 +937,7 @@ void LLMenuItemCallGL::buildDrawLabel( void )
BOOL LLMenuItemCallGL::handleAcceleratorKey( KEY key, MASK mask )
{
- if( (!gKeyboard->getKeyRepeated(key) || mAllowKeyRepeat) && (key == mAcceleratorKey) && (mask == (mAcceleratorMask & MASK_NORMALKEYS)) )
+ if( (!gKeyboard->getKeyRepeated(key) || getAllowKeyRepeat()) && (key == mAcceleratorKey) && (mask == (mAcceleratorMask & MASK_NORMALKEYS)) )
{
LLPointer<LLEvent> fired_event = new LLEvent(this);
fireEvent(fired_event, "on_build");
@@ -1026,7 +945,7 @@ BOOL LLMenuItemCallGL::handleAcceleratorKey( KEY key, MASK mask )
{
setEnabled( mEnabledCallback( mUserData ) );
}
- if( !mEnabled )
+ if( !getEnabled() )
{
if( mOnDisabledCallback )
{
@@ -1127,20 +1046,10 @@ LLXMLNodePtr LLMenuItemCheckGL::getXML(bool save_children) const
return node;
}
-EWidgetType LLMenuItemCheckGL::getWidgetType() const
-{
- return WIDGET_TYPE_MENU_ITEM_CHECK;
-}
-
-LLString LLMenuItemCheckGL::getWidgetTag() const
-{
- return LL_MENU_ITEM_CHECK_GL_TAG;
-}
-
// called to rebuild the draw label
void LLMenuItemCheckGL::buildDrawLabel( void )
{
- if(mChecked || (mCheckCallback && mCheckCallback( mUserData ) ) )
+ if(mChecked || (mCheckCallback && mCheckCallback( getUserData() ) ) )
{
mDrawBoolLabel = BOOLEAN_TRUE_PREFIX;
}
@@ -1216,23 +1125,13 @@ LLView* LLMenuItemBranchGL::getChildByName(const LLString& name, BOOL recurse) c
return mBranch;
}
// Always recurse on branches
- return mBranch->getChildByName(name, recurse);
-}
-
-EWidgetType LLMenuItemBranchGL::getWidgetType() const
-{
- return WIDGET_TYPE_MENU_ITEM_BRANCH;
-}
-
-LLString LLMenuItemBranchGL::getWidgetTag() const
-{
- return LL_MENU_ITEM_BRANCH_GL_TAG;
+ return mBranch->getChild<LLView>(name, recurse);
}
// virtual
BOOL LLMenuItemBranchGL::handleMouseUp(S32 x, S32 y, MASK mask)
{
- if (mEnabled)
+ if (getEnabled())
{
// switch to mouse navigation mode
LLMenuGL::setKeyboardMode(FALSE);
@@ -1335,18 +1234,11 @@ BOOL LLMenuItemBranchGL::handleUnicodeChar(llwchar uni_char, BOOL called_from_pa
}
-// set the hover status (called by it's menu)
void LLMenuItemBranchGL::setHighlight( BOOL highlight )
{
if (highlight == getHighlight()) return;
- // make sure only yourself is highlighted
- if (highlight)
- {
- getMenu()->clearHoverItem();
- }
-
- BOOL auto_open = mEnabled && (!mBranch->getVisible() || mBranch->getTornOff());
+ BOOL auto_open = getEnabled() && (!mBranch->getVisible() || mBranch->getTornOff());
// torn off menus don't open sub menus on hover unless they have focus
if (getMenu()->getTornOff() && !((LLFloater*)getMenu()->getParent())->hasFocus())
{
@@ -1357,8 +1249,7 @@ void LLMenuItemBranchGL::setHighlight( BOOL highlight )
{
auto_open = FALSE;
}
-
- mHighlight = highlight;
+ LLMenuItemGL::setHighlight(highlight);
if( highlight )
{
if(auto_open)
@@ -1380,11 +1271,6 @@ void LLMenuItemBranchGL::setHighlight( BOOL highlight )
}
}
-void LLMenuItemBranchGL::setEnabledSubMenus(BOOL enabled)
-{
- mBranch->setEnabledSubMenus(enabled);
-}
-
void LLMenuItemBranchGL::draw()
{
LLMenuItemGL::draw();
@@ -1394,18 +1280,6 @@ void LLMenuItemBranchGL::draw()
}
}
-// determine if this object is active
-// which, for branching menus, means the branch is open and has "focus"
-BOOL LLMenuItemBranchGL::isActive( void ) const
-{
- return isOpen() && mBranch->getHighlightedItem();
-}
-
-BOOL LLMenuItemBranchGL::isOpen( void ) const
-{
- return mBranch->isOpen();
-}
-
void LLMenuItemBranchGL::updateBranchParent(LLView* parentp)
{
if (mBranch->getParent() == NULL)
@@ -1478,8 +1352,8 @@ void LLMenuItemBranchGL::openMenu()
LLRect rect = mBranch->getRect();
// calculate root-view relative position for branch menu
- S32 left = mRect.mRight;
- S32 top = mRect.mTop - mRect.mBottom;
+ S32 left = getRect().mRight;
+ S32 top = getRect().mTop - getRect().mBottom;
localPointToOtherView(left, top, &left, &top, mBranch->getParent());
@@ -1505,7 +1379,7 @@ void LLMenuItemBranchGL::openMenu()
if( x - menu_region_rect.mLeft > menu_region_width - rect.getWidth() )
{
// move sub-menu over to left side
- delta_x = llmax(-x, (-1 * (rect.getWidth() + mRect.getWidth())));
+ delta_x = llmax(-x, (-1 * (rect.getWidth() + getRect().getWidth())));
}
mBranch->translate( delta_x, delta_y );
mBranch->setVisible( TRUE );
@@ -1536,7 +1410,7 @@ public:
// returns the normal width of this control in pixels - this is
// used for calculating the widest item, as well as for horizontal
// arrangement.
- virtual U32 getNominalWidth( void );
+ virtual U32 getNominalWidth( void ) const;
// called to rebuild the draw label
virtual void buildDrawLabel( void );
@@ -1570,10 +1444,10 @@ LLMenuItemBranchDownGL::LLMenuItemBranchDownGL( const LLString& name,
// returns the normal width of this control in pixels - this is used
// for calculating the widest item, as well as for horizontal
// arrangement.
-U32 LLMenuItemBranchDownGL::getNominalWidth( void )
+U32 LLMenuItemBranchDownGL::getNominalWidth( void ) const
{
U32 width = LEFT_PAD_PIXELS + LEFT_WIDTH_PIXELS + RIGHT_PAD_PIXELS;
- width += mFont->getWidth( mLabel.getWString().c_str() );
+ width += getFont()->getWidth( mLabel.getWString().c_str() );
return width;
}
@@ -1588,32 +1462,33 @@ void LLMenuItemBranchDownGL::buildDrawLabel( void )
void LLMenuItemBranchDownGL::openMenu( void )
{
- if( mBranch->getVisible() && !mBranch->getTornOff() )
+ LLMenuGL* branch = getBranch();
+ if( branch->getVisible() && !branch->getTornOff() )
{
- mBranch->setVisible( FALSE );
+ branch->setVisible( FALSE );
}
else
{
- if (mBranch->getTornOff())
+ if (branch->getTornOff())
{
- gFloaterView->bringToFront((LLFloater*)mBranch->getParent());
+ gFloaterView->bringToFront((LLFloater*)branch->getParent());
}
else
{
// We're showing the drop-down menu, so patch up its labels/rects
- mBranch->arrange();
+ branch->arrange();
- LLRect rect = mBranch->getRect();
+ LLRect rect = branch->getRect();
S32 left = 0;
- S32 top = mRect.mBottom;
- localPointToOtherView(left, top, &left, &top, mBranch->getParent());
+ S32 top = getRect().mBottom;
+ localPointToOtherView(left, top, &left, &top, branch->getParent());
rect.setLeftTopAndSize( left, top,
rect.getWidth(), rect.getHeight() );
- mBranch->setRect( rect );
+ branch->setRect( rect );
S32 x = 0;
S32 y = 0;
- mBranch->localPointToScreen( 0, 0, &x, &y );
+ branch->localPointToScreen( 0, 0, &x, &y );
S32 delta_x = 0;
LLCoordScreen window_size;
@@ -1625,13 +1500,11 @@ void LLMenuItemBranchDownGL::openMenu( void )
{
delta_x = (window_width - rect.getWidth()) - x;
}
- mBranch->translate( delta_x, 0 );
+ branch->translate( delta_x, 0 );
setHighlight(TRUE);
- mBranch->setVisible( TRUE );
+ branch->setVisible( TRUE );
}
-
-
}
}
@@ -1640,21 +1513,18 @@ void LLMenuItemBranchDownGL::setHighlight( BOOL highlight )
{
if (highlight == getHighlight()) return;
- if (highlight)
- {
- getMenu()->clearHoverItem();
- }
- mHighlight = highlight;
+ //NOTE: Purposely calling all the way to the base to bypass auto-open.
+ LLMenuItemGL::setHighlight(highlight);
if( !highlight)
{
- if (mBranch->getTornOff())
+ if (getBranch()->getTornOff())
{
- ((LLFloater*)mBranch->getParent())->setFocus(FALSE);
- mBranch->clearHoverItem();
+ ((LLFloater*)getBranch()->getParent())->setFocus(FALSE);
+ getBranch()->clearHoverItem();
}
else
{
- mBranch->setVisible( FALSE );
+ getBranch()->setVisible( FALSE );
}
}
}
@@ -1684,8 +1554,8 @@ BOOL LLMenuItemBranchDownGL::handleMouseUp( S32 x, S32 y, MASK mask )
BOOL LLMenuItemBranchDownGL::handleAcceleratorKey(KEY key, MASK mask)
{
- BOOL branch_visible = mBranch->getVisible();
- BOOL handled = mBranch->handleAcceleratorKey(key, mask);
+ BOOL branch_visible = getBranch()->getVisible();
+ BOOL handled = getBranch()->handleAcceleratorKey(key, mask);
if (handled && !branch_visible && getVisible())
{
// flash this menu entry because we triggered an invisible menu item
@@ -1697,7 +1567,7 @@ BOOL LLMenuItemBranchDownGL::handleAcceleratorKey(KEY key, MASK mask)
BOOL LLMenuItemBranchDownGL::handleKeyHere(KEY key, MASK mask, BOOL called_from_parent)
{
- BOOL menu_open = mBranch->getVisible();
+ BOOL menu_open = getBranch()->getVisible();
// don't do keyboard navigation of top-level menus unless in keyboard mode, or menu expanded
if (getHighlight() && getMenu()->getVisible() && (isActive() || LLMenuGL::getKeyboardMode()))
{
@@ -1738,7 +1608,7 @@ BOOL LLMenuItemBranchDownGL::handleKeyHere(KEY key, MASK mask, BOOL called_from_
{
doIt();
}
- mBranch->highlightNextItem(NULL);
+ getBranch()->highlightNextItem(NULL);
return TRUE;
}
else if (key == KEY_UP)
@@ -1750,7 +1620,7 @@ BOOL LLMenuItemBranchDownGL::handleKeyHere(KEY key, MASK mask, BOOL called_from_
{
doIt();
}
- mBranch->highlightPrevItem(NULL);
+ getBranch()->highlightPrevItem(NULL);
return TRUE;
}
}
@@ -1761,19 +1631,19 @@ BOOL LLMenuItemBranchDownGL::handleKeyHere(KEY key, MASK mask, BOOL called_from_
void LLMenuItemBranchDownGL::draw( void )
{
//FIXME: try removing this
- if (mBranch->getVisible() && !mBranch->getTornOff())
+ if (getBranch()->getVisible() && !getBranch()->getTornOff())
{
setHighlight(TRUE);
}
if( getHighlight() )
{
- glColor4fv( sHighlightBackground.mV );
- gl_rect_2d( 0, mRect.getHeight(), mRect.getWidth(), 0 );
+ glColor4fv( getHighlightBGColor().mV );
+ gl_rect_2d( 0, getRect().getHeight(), getRect().getWidth(), 0 );
}
- U8 font_style = mStyle;
- if (LLMenuItemGL::sDropShadowText && getEnabled() && !mDrawTextDisabled )
+ U8 font_style = getFontStyle();
+ if (getEnabled() && !getDrawTextDisabled() )
{
font_style |= LLFontGL::DROP_SHADOW_SOFT;
}
@@ -1781,17 +1651,17 @@ void LLMenuItemBranchDownGL::draw( void )
LLColor4 color;
if (getHighlight())
{
- color = sHighlightForeground;
+ color = getHighlightFGColor();
}
- else if( mEnabled )
+ else if( getEnabled() )
{
- color = sEnabledColor;
+ color = getEnabledColor();
}
else
{
- color = sDisabledColor;
+ color = getDisabledColor();
}
- mFont->render( mLabel.getWString(), 0, (F32)mRect.getWidth() / 2.f, (F32)LABEL_BOTTOM_PAD_PIXELS, color,
+ getFont()->render( mLabel.getWString(), 0, (F32)getRect().getWidth() / 2.f, (F32)LABEL_BOTTOM_PAD_PIXELS, color,
LLFontGL::HCENTER, LLFontGL::BOTTOM, font_style );
@@ -1800,19 +1670,19 @@ void LLMenuItemBranchDownGL::draw( void )
{
LLString upper_case_label = mLabel.getString();
LLString::toUpper(upper_case_label);
- std::string::size_type offset = upper_case_label.find(mJumpKey);
+ std::string::size_type offset = upper_case_label.find(getJumpKey());
if (offset != std::string::npos)
{
- S32 x_offset = llround((F32)mRect.getWidth() / 2.f - mFont->getWidthF32(mLabel.getString(), 0, S32_MAX) / 2.f);
- S32 x_begin = x_offset + mFont->getWidth(mLabel, 0, offset);
- S32 x_end = x_offset + mFont->getWidth(mLabel, 0, offset + 1);
+ S32 x_offset = llround((F32)getRect().getWidth() / 2.f - getFont()->getWidthF32(mLabel.getString(), 0, S32_MAX) / 2.f);
+ S32 x_begin = x_offset + getFont()->getWidth(mLabel, 0, offset);
+ S32 x_end = x_offset + getFont()->getWidth(mLabel, 0, offset + 1);
gl_line_2d(x_begin, LABEL_BOTTOM_PAD_PIXELS, x_end, LABEL_BOTTOM_PAD_PIXELS);
}
}
// reset every frame so that we only show highlight
// when we get hover events on that frame
- mGotHover = FALSE;
+ setHover(FALSE);
}
///============================================================================
@@ -1820,7 +1690,7 @@ void LLMenuItemBranchDownGL::draw( void )
///============================================================================
// Default constructor
-LLMenuGL::LLMenuGL( const LLString& name, const LLString& label, LLViewHandle parent_floater_handle )
+LLMenuGL::LLMenuGL( const LLString& name, const LLString& label, LLHandle<LLFloater> parent_floater_handle )
: LLUICtrl( name, LLRect(), FALSE, NULL, NULL ),
mBackgroundColor( sDefaultBackgroundColor ),
mBgVisible( TRUE ),
@@ -1845,7 +1715,7 @@ LLMenuGL::LLMenuGL( const LLString& name, const LLString& label, LLViewHandle pa
setTabStop(FALSE);
}
-LLMenuGL::LLMenuGL( const LLString& label, LLViewHandle parent_floater_handle )
+LLMenuGL::LLMenuGL( const LLString& label, LLHandle<LLFloater> parent_floater_handle )
: LLUICtrl( label, LLRect(), FALSE, NULL, NULL ),
mBackgroundColor( sDefaultBackgroundColor ),
mBgVisible( TRUE ),
@@ -1879,7 +1749,7 @@ LLMenuGL::~LLMenuGL( void )
mJumpKeys.clear();
}
-void LLMenuGL::setCanTearOff(BOOL tear_off, LLViewHandle parent_floater_handle )
+void LLMenuGL::setCanTearOff(BOOL tear_off, LLHandle<LLFloater> parent_floater_handle )
{
if (tear_off && mTearOffItem == NULL)
{
@@ -2317,29 +2187,13 @@ LLView* LLMenuGL::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *fa
return menu;
}
-// control the color scheme
-void LLMenuGL::setDefaultBackgroundColor( const LLColor4& color )
-{
- sDefaultBackgroundColor = color;
-}
-
-void LLMenuGL::setBackgroundColor( const LLColor4& color )
-{
- mBackgroundColor = color;
-}
-
-LLColor4 LLMenuGL::getBackgroundColor()
-{
- return mBackgroundColor;
-}
-
// rearrange the child rects so they fit the shape of the menu.
void LLMenuGL::arrange( void )
{
// calculate the height & width, and set our rect based on that
// information.
- LLRect initial_rect = mRect;
+ const LLRect& initial_rect = getRect();
U32 width = 0, height = MENU_ITEM_PADDING;
@@ -2349,8 +2203,9 @@ void LLMenuGL::arrange( void )
{
const LLRect menu_region_rect = LLMenuGL::sMenuContainer ? LLMenuGL::sMenuContainer->getMenuRect() : LLRect(0, S32_MAX, S32_MAX, 0);
- U32 max_width = menu_region_rect.getWidth();
- U32 max_height = menu_region_rect.getHeight();
+ // torn off menus are not constrained to the size of the screen
+ U32 max_width = getTornOff() ? U32_MAX : menu_region_rect.getWidth();
+ U32 max_height = getTornOff() ? U32_MAX : menu_region_rect.getHeight();
// *FIX: create the item first and then ask for its dimensions?
S32 spillover_item_width = PLAIN_PAD_PIXELS + LLFontGL::sSansSerif->getWidth( "More" );
S32 spillover_item_height = llround(LLFontGL::sSansSerif->getLineHeight()) + MENU_ITEM_PADDING;
@@ -2429,8 +2284,7 @@ void LLMenuGL::arrange( void )
}
}
- mRect.mRight = mRect.mLeft + width;
- mRect.mTop = mRect.mBottom + height;
+ setRect(LLRect(getRect().mLeft, getRect().mBottom + height, getRect().mLeft + width, getRect().mBottom));
S32 cur_height = (S32)llmin(max_height, height);
S32 cur_width = 0;
@@ -2622,8 +2476,7 @@ void LLMenuGL::empty( void )
// Adjust rectangle of the menu
void LLMenuGL::setLeftAndBottom(S32 left, S32 bottom)
{
- mRect.mLeft = left;
- mRect.mBottom = bottom;
+ setRect(LLRect(left, getRect().mTop, getRect().mRight, bottom));
arrange();
}
@@ -2953,7 +2806,7 @@ BOOL LLMenuGL::handleKey( KEY key, MASK mask, BOOL called_from_parent )
BOOL handled = FALSE;
// Pass down even if not visible
- if( mEnabled && called_from_parent )
+ if( getEnabled() && called_from_parent )
{
for ( child_list_const_iter_t child_it = getChildList()->begin(); child_it != getChildList()->end(); ++child_it)
{
@@ -2981,7 +2834,7 @@ BOOL LLMenuGL::handleKey( KEY key, MASK mask, BOOL called_from_parent )
BOOL LLMenuGL::handleAcceleratorKey(KEY key, MASK mask)
{
// don't handle if not enabled
- if(!mEnabled)
+ if(!getEnabled())
{
return FALSE;
}
@@ -3080,7 +2933,7 @@ void LLMenuGL::draw( void )
{
if (mDropShadowed && !mTornOff)
{
- gl_drop_shadow(0, mRect.getHeight(), mRect.getWidth(), 0,
+ gl_drop_shadow(0, getRect().getHeight(), getRect().getWidth(), 0,
LLUI::sColorsGroup->getColor("ColorDropShadow"),
LLUI::sConfigGroup->getS32("DropShadowFloater") );
}
@@ -3089,7 +2942,7 @@ void LLMenuGL::draw( void )
if( mBgVisible )
{
- gl_rect_2d( 0, mRect.getHeight(), mRect.getWidth(), 0, mBackgroundColor );
+ gl_rect_2d( 0, getRect().getHeight(), getRect().getWidth(), 0, mBackgroundColor );
}
LLView::draw();
}
@@ -3139,7 +2992,7 @@ LLMenuGL* LLMenuGL::getChildMenuByName(const LLString& name, BOOL recurse) const
return (LLMenuGL*)view;
}
}
- llwarns << "Child Menu " << name << " not found in menu " << mName << llendl;
+ llwarns << "Child Menu " << name << " not found in menu " << getName() << llendl;
return NULL;
}
@@ -3254,7 +3107,7 @@ void LLPieMenuBranch::buildDrawLabel( void )
if(mEnabledCallback)
{
setEnabled(mEnabledCallback(mUserData));
- mDrawTextDisabled = FALSE;
+ setDrawTextDisabled(FALSE);
}
else
{
@@ -3273,7 +3126,7 @@ void LLPieMenuBranch::buildDrawLabel( void )
break;
}
}
- mDrawTextDisabled = !any_enabled;
+ setDrawTextDisabled(!any_enabled);
setEnabled(TRUE);
}
@@ -3334,20 +3187,6 @@ LLPieMenu::LLPieMenu(const LLString& name)
setCanTearOff(FALSE);
}
-// virtual
-LLPieMenu::~LLPieMenu()
-{ }
-
-
-EWidgetType LLPieMenu::getWidgetType() const
-{
- return WIDGET_TYPE_PIE_MENU;
-}
-
-LLString LLPieMenu::getWidgetTag() const
-{
- return LL_PIE_MENU_TAG;
-}
void LLPieMenu::initXML(LLXMLNodePtr node, LLView *context, LLUICtrlFactory *factory)
{
@@ -3621,8 +3460,8 @@ void LLPieMenu::draw()
mHoverItem = NULL;
}
- F32 width = (F32) mRect.getWidth();
- F32 height = (F32) mRect.getHeight();
+ F32 width = (F32) getRect().getWidth();
+ F32 height = (F32) getRect().getHeight();
mCurRadius = PIE_SCALE_FACTOR * llmax( width/2, height/2 );
mOuterRingAlpha = mUseInfiniteRadius ? 0.f : 1.f;
@@ -3696,8 +3535,8 @@ void LLPieMenu::draw()
void LLPieMenu::drawBackground(LLMenuItemGL* itemp, LLColor4& color)
{
- F32 width = (F32) mRect.getWidth();
- F32 height = (F32) mRect.getHeight();
+ F32 width = (F32) getRect().getWidth();
+ F32 height = (F32) getRect().getHeight();
F32 center_x = width/2;
F32 center_y = height/2;
S32 steps = 100;
@@ -3790,7 +3629,8 @@ void LLPieMenu::arrange()
// TODO: Compute actual bounding rect for menu
- mRect.setOriginAndSize(mRect.mLeft, mRect.mBottom, rect_width, rect_height );
+ // HACK: casting away const. Should use setRect or some helper function instead.
+ const_cast<LLRect&>(getRect()).setOriginAndSize(getRect().mLeft, getRect().mBottom, rect_width, rect_height );
// place items around a circle, with item 0 at positive X,
// rotating counter-clockwise
@@ -3827,8 +3667,8 @@ LLMenuItemGL *LLPieMenu::pieItemFromXY(S32 x, S32 y)
// An arc of the pie menu is 45 degrees
const F32 ARC_DEG = 45.f;
- S32 delta_x = x - mRect.getWidth() / 2;
- S32 delta_y = y - mRect.getHeight() / 2;
+ S32 delta_x = x - getRect().getWidth() / 2;
+ S32 delta_y = y - getRect().getHeight() / 2;
// circle safe zone in the center
S32 dist_squared = delta_x*delta_x + delta_y*delta_y;
@@ -3838,7 +3678,7 @@ LLMenuItemGL *LLPieMenu::pieItemFromXY(S32 x, S32 y)
}
// infinite radius is only used with right clicks
- S32 radius = llmax( mRect.getWidth()/2, mRect.getHeight()/2 );
+ S32 radius = llmax( getRect().getWidth()/2, getRect().getHeight()/2 );
if (!(mUseInfiniteRadius && mRightMouseDown) && dist_squared > radius * radius)
{
return NULL;
@@ -3876,8 +3716,8 @@ S32 LLPieMenu::pieItemIndexFromXY(S32 x, S32 y)
// An arc of the pie menu is 45 degrees
const F32 ARC_DEG = 45.f;
// correct for non-square pixels
- S32 delta_x = x - mRect.getWidth() / 2;
- S32 delta_y = y - mRect.getHeight() / 2;
+ S32 delta_x = x - getRect().getWidth() / 2;
+ S32 delta_y = y - getRect().getHeight() / 2;
// circle safe zone in the center
if (delta_x*delta_x + delta_y*delta_y < PIE_CENTER_SIZE*PIE_CENTER_SIZE)
@@ -3900,8 +3740,8 @@ S32 LLPieMenu::pieItemIndexFromXY(S32 x, S32 y)
void LLPieMenu::show(S32 x, S32 y, BOOL mouse_down)
{
- S32 width = mRect.getWidth();
- S32 height = mRect.getHeight();
+ S32 width = getRect().getWidth();
+ S32 height = getRect().getHeight();
const LLRect menu_region_rect = LLMenuGL::sMenuContainer->getMenuRect();
@@ -3911,40 +3751,45 @@ void LLPieMenu::show(S32 x, S32 y, BOOL mouse_down)
S32 local_x, local_y;
parent_view->screenPointToLocal(x, y, &local_x, &local_y);
- mRect.setCenterAndSize(local_x, local_y, width, height);
+ // HACK: casting away const. Should use setRect or some helper function instead.
+ const_cast<LLRect&>(getRect()).setCenterAndSize(local_x, local_y, width, height);
arrange();
// Adjust the pie rectangle to keep it on screen
- if (mRect.mLeft < menu_region_rect.mLeft)
+ if (getRect().mLeft < menu_region_rect.mLeft)
{
- //mShiftHoriz = menu_region_rect.mLeft - mRect.mLeft;
- //mRect.translate( mShiftHoriz, 0 );
- mRect.translate( menu_region_rect.mLeft - mRect.mLeft, 0 );
+ //mShiftHoriz = menu_region_rect.mLeft - getRect().mLeft;
+ //getRect().translate( mShiftHoriz, 0 );
+ // HACK: casting away const. Should use setRect or some helper function instead.
+ const_cast<LLRect&>(getRect()).translate( menu_region_rect.mLeft - getRect().mLeft, 0 );
moved = TRUE;
}
- if (mRect.mRight > menu_region_rect.mRight)
+ if (getRect().mRight > menu_region_rect.mRight)
{
- //mShiftHoriz = menu_region_rect.mRight - mRect.mRight;
- //mRect.translate( mShiftHoriz, 0);
- mRect.translate( menu_region_rect.mRight - mRect.mRight, 0 );
+ //mShiftHoriz = menu_region_rect.mRight - getRect().mRight;
+ //getRect().translate( mShiftHoriz, 0);
+ // HACK: casting away const. Should use setRect or some helper function instead.
+ const_cast<LLRect&>(getRect()).translate( menu_region_rect.mRight - getRect().mRight, 0 );
moved = TRUE;
}
- if (mRect.mBottom < menu_region_rect.mBottom)
+ if (getRect().mBottom < menu_region_rect.mBottom)
{
- //mShiftVert = menu_region_rect.mBottom - mRect.mBottom;
- //mRect.translate( 0, mShiftVert );
- mRect.translate( 0, menu_region_rect.mBottom - mRect.mBottom );
+ //mShiftVert = menu_region_rect.mBottom - getRect().mBottom;
+ //getRect().translate( 0, mShiftVert );
+ // HACK: casting away const. Should use setRect or some helper function instead.
+ const_cast<LLRect&>(getRect()).translate( 0, menu_region_rect.mBottom - getRect().mBottom );
moved = TRUE;
}
- if (mRect.mTop > menu_region_rect.mTop)
+ if (getRect().mTop > menu_region_rect.mTop)
{
- //mShiftVert = menu_region_rect.mTop - mRect.mTop;
- //mRect.translate( 0, mShiftVert );
- mRect.translate( 0, menu_region_rect.mTop - mRect.mTop );
+ //mShiftVert = menu_region_rect.mTop - getRect().mTop;
+ //getRect().translate( 0, mShiftVert );
+ // HACK: casting away const. Should use setRect or some helper function instead.
+ const_cast<LLRect&>(getRect()).translate( 0, menu_region_rect.mTop - getRect().mTop );
moved = TRUE;
}
@@ -3953,8 +3798,8 @@ void LLPieMenu::show(S32 x, S32 y, BOOL mouse_down)
if (moved)
{
LLCoordGL center;
- center.mX = (mRect.mLeft + mRect.mRight) / 2;
- center.mY = (mRect.mTop + mRect.mBottom) / 2;
+ center.mX = (getRect().mLeft + getRect().mRight) / 2;
+ center.mY = (getRect().mTop + getRect().mBottom) / 2;
LLUI::setCursorPositionLocal(getParent(), center.mX, center.mY);
}
@@ -4066,7 +3911,7 @@ LLView* LLMenuBarGL::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory
LLMenuBarGL *menubar = new LLMenuBarGL(name);
- LLViewHandle parent_handle = LLViewHandle::sDeadHandle;
+ LLHandle<LLFloater> parent_handle;
if (parent->getWidgetType() == WIDGET_TYPE_FLOATER)
{
parent_handle = ((LLFloater*)parent)->getHandle();
@@ -4246,7 +4091,7 @@ BOOL LLMenuBarGL::jumpKeysActive()
void LLMenuBarGL::arrange( void )
{
U32 pos = 0;
- LLRect rect( 0, mRect.getHeight(), 0, 0 );
+ LLRect rect( 0, getRect().getHeight(), 0, 0 );
item_list_t::const_iterator item_iter;
for (item_iter = mItems.begin(); item_iter != mItems.end(); ++item_iter)
{
@@ -4398,25 +4243,12 @@ LLMenuHolderGL::LLMenuHolderGL(const LLString& name, const LLRect& rect, BOOL mo
mCanHide = TRUE;
}
-LLMenuHolderGL::~LLMenuHolderGL()
-{
-}
-
-EWidgetType LLMenuHolderGL::getWidgetType() const
-{
- return WIDGET_TYPE_MENU_HOLDER;
-}
-
-LLString LLMenuHolderGL::getWidgetTag() const
-{
- return LL_MENU_HOLDER_GL_TAG;
-}
void LLMenuHolderGL::draw()
{
LLView::draw();
// now draw last selected item as overlay
- LLMenuItemGL* selecteditem = (LLMenuItemGL*)LLView::getViewByHandle(sItemLastSelectedHandle);
+ LLMenuItemGL* selecteditem = (LLMenuItemGL*)sItemLastSelectedHandle.get();
if (selecteditem && sItemActivationTimer.getStarted() && sItemActivationTimer.getElapsedTimeF32() < ACTIVATE_HIGHLIGHT_TIME)
{
// make sure toggle items, for example, show the proper state when fading out
@@ -4426,10 +4258,10 @@ void LLMenuHolderGL::draw()
selecteditem->localRectToOtherView(selecteditem->getLocalRect(), &item_rect, this);
F32 interpolant = sItemActivationTimer.getElapsedTimeF32() / ACTIVATE_HIGHLIGHT_TIME;
- F32 alpha = lerp(LLMenuItemGL::sHighlightBackground.mV[VALPHA], 0.f, interpolant);
- LLColor4 bg_color(LLMenuItemGL::sHighlightBackground.mV[VRED],
- LLMenuItemGL::sHighlightBackground.mV[VGREEN],
- LLMenuItemGL::sHighlightBackground.mV[VBLUE],
+ F32 alpha = lerp(LLMenuItemGL::getHighlightBGColor().mV[VALPHA], 0.f, interpolant);
+ LLColor4 bg_color(LLMenuItemGL::getHighlightBGColor().mV[VRED],
+ LLMenuItemGL::getHighlightBGColor().mV[VGREEN],
+ LLMenuItemGL::getHighlightBGColor().mV[VBLUE],
alpha);
LLUI::pushMatrix();
@@ -4466,7 +4298,7 @@ BOOL LLMenuHolderGL::handleRightMouseDown( S32 x, S32 y, MASK mask )
void LLMenuHolderGL::reshape(S32 width, S32 height, BOOL called_from_parent)
{
- if (width != mRect.getWidth() || height != mRect.getHeight())
+ if (width != getRect().getWidth() || height != getRect().getHeight())
{
hideMenus();
}
@@ -4486,10 +4318,6 @@ BOOL LLMenuHolderGL::hasVisibleMenu() const
return FALSE;
}
-const LLRect LLMenuHolderGL::getMenuRect() const
-{
- return getLocalRect();
-}
BOOL LLMenuHolderGL::hideMenus()
{
@@ -4522,7 +4350,7 @@ BOOL LLMenuHolderGL::hideMenus()
void LLMenuHolderGL::setActivatedItem(LLMenuItemGL* item)
{
- sItemLastSelectedHandle = item->mViewHandle;
+ sItemLastSelectedHandle = item->getHandle();
sItemActivationTimer.start();
}
@@ -4532,20 +4360,24 @@ void LLMenuHolderGL::setActivatedItem(LLMenuItemGL* item)
LLTearOffMenu::LLTearOffMenu(LLMenuGL* menup) :
LLFloater(menup->getName(), LLRect(0, 100, 100, 0), menup->getLabel(), FALSE, DEFAULT_MIN_WIDTH, DEFAULT_MIN_HEIGHT, FALSE, FALSE)
{
+ // flag menu as being torn off
+ menup->setTornOff(TRUE);
+ // update menu layout as torn off menu (no spillover menus)
+ menup->arrange();
+
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() + LLFLOATER_HEADER_SIZE + 5);
reshape(rect.getWidth(), rect.getHeight());
setRect(rect);
- mOldParent = menup->getParent();
- mOldParent->removeChild(menup);
+ // attach menu to floater
menup->setFollowsAll();
+ mOldParent = menup->getParent();
addChild(menup);
menup->setVisible(TRUE);
menup->translate(-menup->getRect().mLeft + 1, -menup->getRect().mBottom + 1);
-
- menup->setTornOff(TRUE);
menup->setDropShadowed(FALSE);
mMenu = menup;
@@ -4554,19 +4386,16 @@ LLTearOffMenu::LLTearOffMenu(LLMenuGL* menup) :
mMenu->highlightNextItem(NULL);
}
-LLTearOffMenu::~LLTearOffMenu()
-{
-}
void LLTearOffMenu::draw()
{
- mMenu->setBackgroundVisible(mBgOpaque);
+ mMenu->setBackgroundVisible(isBackgroundOpaque());
mMenu->arrange();
- if (mRect.getHeight() != mTargetHeight)
+ if (getRect().getHeight() != mTargetHeight)
{
// animate towards target height
- reshape(mRect.getWidth(), llceil(lerp((F32)mRect.getHeight(), mTargetHeight, LLCriticalDamp::getInterpolant(0.05f))));
+ reshape(getRect().getWidth(), llceil(lerp((F32)getRect().getHeight(), mTargetHeight, LLCriticalDamp::getInterpolant(0.05f))));
}
else
{
@@ -4667,23 +4496,3 @@ void LLTearOffMenu::onClose(bool app_quitting)
destroy();
}
-///============================================================================
-/// Class LLEditMenuHandlerMgr
-///============================================================================
-LLEditMenuHandlerMgr& LLEditMenuHandlerMgr::getInstance()
-{
- static LLEditMenuHandlerMgr instance;
- return instance;
-}
-
-LLEditMenuHandlerMgr::LLEditMenuHandlerMgr()
-{
-}
-
-LLEditMenuHandlerMgr::~LLEditMenuHandlerMgr()
-{
-}
-
-///============================================================================
-/// Local function definitions
-///============================================================================