CHUI-347 FIXED drawing selected conversation item background.
Moved some duplicating pieces of code from LLFolderViewFolder::draw() and LLFolderViewItem::draw() to separate methods to reduce code duplication in LLConversationViewSession::draw(). Changed some static variables in LLFolderViewItem to static members for using them in derived LLConversationViewSession.master
parent
7ac4d71c43
commit
a62a4b60e8
|
|
@ -44,6 +44,18 @@ static LLDefaultChildRegistry::Register<LLFolderViewItem> r("folder_view_item");
|
|||
// statics
|
||||
std::map<U8, LLFontGL*> LLFolderViewItem::sFonts; // map of styles to fonts
|
||||
|
||||
LLUIColor LLFolderViewItem::sFgColor;
|
||||
LLUIColor LLFolderViewItem::sHighlightBgColor;
|
||||
LLUIColor LLFolderViewItem::sHighlightFgColor;
|
||||
LLUIColor LLFolderViewItem::sFocusOutlineColor;
|
||||
LLUIColor LLFolderViewItem::sMouseOverColor;
|
||||
LLUIColor LLFolderViewItem::sFilterBGColor;
|
||||
LLUIColor LLFolderViewItem::sFilterTextColor;
|
||||
LLUIColor LLFolderViewItem::sSuffixColor;
|
||||
LLUIColor LLFolderViewItem::sLibraryColor;
|
||||
LLUIColor LLFolderViewItem::sLinkColor;
|
||||
LLUIColor LLFolderViewItem::sSearchStatusColor;
|
||||
|
||||
// only integers can be initialized in header
|
||||
const F32 LLFolderViewItem::FOLDER_CLOSE_TIME_CONSTANT = 0.02f;
|
||||
const F32 LLFolderViewItem::FOLDER_OPEN_TIME_CONSTANT = 0.03f;
|
||||
|
|
@ -130,10 +142,22 @@ LLFolderViewItem::LLFolderViewItem(const LLFolderViewItem::Params& p)
|
|||
mArrowSize(p.arrow_size),
|
||||
mMaxFolderItemOverlap(p.max_folder_item_overlap)
|
||||
{
|
||||
sFgColor = LLUIColorTable::instance().getColor("MenuItemEnabledColor", DEFAULT_WHITE);
|
||||
sHighlightBgColor = LLUIColorTable::instance().getColor("MenuItemHighlightBgColor", DEFAULT_WHITE);
|
||||
sHighlightFgColor = LLUIColorTable::instance().getColor("MenuItemHighlightFgColor", DEFAULT_WHITE);
|
||||
sFocusOutlineColor = LLUIColorTable::instance().getColor("InventoryFocusOutlineColor", DEFAULT_WHITE);
|
||||
sMouseOverColor = LLUIColorTable::instance().getColor("InventoryMouseOverColor", DEFAULT_WHITE);
|
||||
sFilterBGColor = LLUIColorTable::instance().getColor("FilterBackgroundColor", DEFAULT_WHITE);
|
||||
sFilterTextColor = LLUIColorTable::instance().getColor("FilterTextColor", DEFAULT_WHITE);
|
||||
sSuffixColor = LLUIColorTable::instance().getColor("InventoryItemColor", DEFAULT_WHITE);
|
||||
sLibraryColor = LLUIColorTable::instance().getColor("InventoryItemLibraryColor", DEFAULT_WHITE);
|
||||
sLinkColor = LLUIColorTable::instance().getColor("InventoryItemLinkColor", DEFAULT_WHITE);
|
||||
sSearchStatusColor = LLUIColorTable::instance().getColor("InventorySearchStatusColor", DEFAULT_WHITE);
|
||||
|
||||
if (mViewModelItem)
|
||||
{
|
||||
mViewModelItem->setFolderViewItem(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
BOOL LLFolderViewItem::postBuild()
|
||||
|
|
@ -624,6 +648,22 @@ BOOL LLFolderViewItem::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
|
|||
return handled;
|
||||
}
|
||||
|
||||
void LLFolderViewItem::drawOpenFolderArrow(const Params& default_params, const LLUIColor& fg_color)
|
||||
{
|
||||
//--------------------------------------------------------------------------------//
|
||||
// Draw open folder arrow
|
||||
//
|
||||
const S32 TOP_PAD = default_params.item_top_pad;
|
||||
|
||||
if (hasVisibleChildren() || getViewModelItem()->hasChildren())
|
||||
{
|
||||
LLUIImage* arrow_image = default_params.folder_arrow_image;
|
||||
gl_draw_scaled_rotated_image(
|
||||
mIndentation, getRect().getHeight() - mArrowSize - mTextPad - TOP_PAD,
|
||||
mArrowSize, mArrowSize, mControlLabelRotation, arrow_image->getImage(), fg_color);
|
||||
}
|
||||
}
|
||||
|
||||
void LLFolderViewItem::drawHighlight(const BOOL showContent, const BOOL hasKeyboardFocus, const LLUIColor &bgColor,
|
||||
const LLUIColor &focusOutlineColor, const LLUIColor &mouseOverColor)
|
||||
{
|
||||
|
|
@ -734,18 +774,6 @@ void LLFolderViewItem::drawLabel(const LLFontGL * font, const F32 x, const F32 y
|
|||
|
||||
void LLFolderViewItem::draw()
|
||||
{
|
||||
static LLUIColor sFgColor = LLUIColorTable::instance().getColor("MenuItemEnabledColor", DEFAULT_WHITE);
|
||||
static LLUIColor sHighlightBgColor = LLUIColorTable::instance().getColor("MenuItemHighlightBgColor", DEFAULT_WHITE);
|
||||
static LLUIColor sHighlightFgColor = LLUIColorTable::instance().getColor("MenuItemHighlightFgColor", DEFAULT_WHITE);
|
||||
static LLUIColor sFocusOutlineColor = LLUIColorTable::instance().getColor("InventoryFocusOutlineColor", DEFAULT_WHITE);
|
||||
static LLUIColor sMouseOverColor = LLUIColorTable::instance().getColor("InventoryMouseOverColor", DEFAULT_WHITE);
|
||||
static LLUIColor sFilterBGColor = LLUIColorTable::instance().getColor("FilterBackgroundColor", DEFAULT_WHITE);
|
||||
static LLUIColor sFilterTextColor = LLUIColorTable::instance().getColor("FilterTextColor", DEFAULT_WHITE);
|
||||
static LLUIColor sSuffixColor = LLUIColorTable::instance().getColor("InventoryItemColor", DEFAULT_WHITE);
|
||||
static LLUIColor sLibraryColor = LLUIColorTable::instance().getColor("InventoryItemLibraryColor", DEFAULT_WHITE);
|
||||
static LLUIColor sLinkColor = LLUIColorTable::instance().getColor("InventoryItemLinkColor", DEFAULT_WHITE);
|
||||
static LLUIColor sSearchStatusColor = LLUIColorTable::instance().getColor("InventorySearchStatusColor", DEFAULT_WHITE);
|
||||
|
||||
const BOOL show_context = (getRoot() ? getRoot()->getShowSelectionContext() : FALSE);
|
||||
const BOOL filled = show_context || (getRoot() ? getRoot()->getParentPanel()->hasFocus() : FALSE); // If we have keyboard focus, draw selection filled
|
||||
|
||||
|
|
@ -756,17 +784,7 @@ void LLFolderViewItem::draw()
|
|||
|
||||
getViewModelItem()->update();
|
||||
|
||||
//--------------------------------------------------------------------------------//
|
||||
// Draw open folder arrow
|
||||
//
|
||||
if (hasVisibleChildren() || getViewModelItem()->hasChildren())
|
||||
{
|
||||
LLUIImage* arrow_image = default_params.folder_arrow_image;
|
||||
gl_draw_scaled_rotated_image(
|
||||
mIndentation, getRect().getHeight() - mArrowSize - mTextPad - TOP_PAD,
|
||||
mArrowSize, mArrowSize, mControlLabelRotation, arrow_image->getImage(), sFgColor);
|
||||
}
|
||||
|
||||
drawOpenFolderArrow(default_params, sFgColor);
|
||||
|
||||
drawHighlight(show_context, filled, sHighlightBgColor, sFocusOutlineColor, sMouseOverColor);
|
||||
|
||||
|
|
@ -877,6 +895,22 @@ LLFolderViewFolder::LLFolderViewFolder( const LLFolderViewItem::Params& p ):
|
|||
{
|
||||
}
|
||||
|
||||
void LLFolderViewFolder::updateLabelRotation()
|
||||
{
|
||||
if (mAutoOpenCountdown != 0.f)
|
||||
{
|
||||
mControlLabelRotation = mAutoOpenCountdown * -90.f;
|
||||
}
|
||||
else if (isOpen())
|
||||
{
|
||||
mControlLabelRotation = lerp(mControlLabelRotation, -90.f, LLCriticalDamp::getInterpolant(0.04f));
|
||||
}
|
||||
else
|
||||
{
|
||||
mControlLabelRotation = lerp(mControlLabelRotation, 0.f, LLCriticalDamp::getInterpolant(0.025f));
|
||||
}
|
||||
}
|
||||
|
||||
// Destroys the object
|
||||
LLFolderViewFolder::~LLFolderViewFolder( void )
|
||||
{
|
||||
|
|
@ -1832,18 +1866,7 @@ BOOL LLFolderViewFolder::handleDoubleClick( S32 x, S32 y, MASK mask )
|
|||
|
||||
void LLFolderViewFolder::draw()
|
||||
{
|
||||
if (mAutoOpenCountdown != 0.f)
|
||||
{
|
||||
mControlLabelRotation = mAutoOpenCountdown * -90.f;
|
||||
}
|
||||
else if (isOpen())
|
||||
{
|
||||
mControlLabelRotation = lerp(mControlLabelRotation, -90.f, LLCriticalDamp::getInterpolant(0.04f));
|
||||
}
|
||||
else
|
||||
{
|
||||
mControlLabelRotation = lerp(mControlLabelRotation, 0.f, LLCriticalDamp::getInterpolant(0.025f));
|
||||
}
|
||||
updateLabelRotation();
|
||||
|
||||
LLFolderViewItem::draw();
|
||||
|
||||
|
|
|
|||
|
|
@ -116,6 +116,19 @@ protected:
|
|||
mAllowOpen,
|
||||
mSelectPending;
|
||||
|
||||
// For now assuming all colors are the same in derived classes.
|
||||
static LLUIColor sFgColor;
|
||||
static LLUIColor sHighlightBgColor;
|
||||
static LLUIColor sHighlightFgColor;
|
||||
static LLUIColor sFocusOutlineColor;
|
||||
static LLUIColor sMouseOverColor;
|
||||
static LLUIColor sFilterBGColor;
|
||||
static LLUIColor sFilterTextColor;
|
||||
static LLUIColor sSuffixColor;
|
||||
static LLUIColor sLibraryColor;
|
||||
static LLUIColor sLinkColor;
|
||||
static LLUIColor sSearchStatusColor;
|
||||
|
||||
// this is an internal method used for adding items to folders. A
|
||||
// no-op at this level, but reimplemented in derived classes.
|
||||
virtual void addItem(LLFolderViewItem*) { }
|
||||
|
|
@ -247,6 +260,7 @@ public:
|
|||
|
||||
// virtual void handleDropped();
|
||||
virtual void draw();
|
||||
void drawOpenFolderArrow(const Params& default_params, const LLUIColor& fg_color);
|
||||
void drawHighlight(const BOOL showContent, const BOOL hasKeyboardFocus, const LLUIColor &bgColor, const LLUIColor &outlineColor, const LLUIColor &mouseOverColor);
|
||||
void drawLabel(const LLFontGL * font, const F32 x, const F32 y, const LLColor4& color, F32 &right_x);
|
||||
virtual BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
|
||||
|
|
@ -274,6 +288,8 @@ protected:
|
|||
LLFolderViewFolder( const LLFolderViewItem::Params& );
|
||||
friend class LLUICtrlFactory;
|
||||
|
||||
void updateLabelRotation();
|
||||
|
||||
public:
|
||||
typedef std::list<LLFolderViewItem*> items_t;
|
||||
typedef std::list<LLFolderViewFolder*> folders_t;
|
||||
|
|
|
|||
|
|
@ -72,136 +72,19 @@ BOOL LLConversationViewSession::postBuild()
|
|||
|
||||
void LLConversationViewSession::draw()
|
||||
{
|
||||
// *TODO Seth PE: remove the code duplicated from LLFolderViewFolder::draw()
|
||||
// ***** LLFolderViewFolder::draw() code begin *****
|
||||
if (mAutoOpenCountdown != 0.f)
|
||||
{
|
||||
mControlLabelRotation = mAutoOpenCountdown * -90.f;
|
||||
}
|
||||
else if (isOpen())
|
||||
{
|
||||
mControlLabelRotation = lerp(mControlLabelRotation, -90.f, LLCriticalDamp::getInterpolant(0.04f));
|
||||
}
|
||||
else
|
||||
{
|
||||
mControlLabelRotation = lerp(mControlLabelRotation, 0.f, LLCriticalDamp::getInterpolant(0.025f));
|
||||
}
|
||||
// ***** LLFolderViewFolder::draw() code end *****
|
||||
|
||||
// *TODO Seth PE: remove the code duplicated from LLFolderViewItem::draw()
|
||||
// ***** LLFolderViewItem::draw() code begin *****
|
||||
|
||||
static LLUIColor sFgColor = LLUIColorTable::instance().getColor("MenuItemEnabledColor", DEFAULT_WHITE);
|
||||
static LLUIColor sHighlightBgColor = LLUIColorTable::instance().getColor("MenuItemHighlightBgColor", DEFAULT_WHITE);
|
||||
static LLUIColor sFocusOutlineColor = LLUIColorTable::instance().getColor("InventoryFocusOutlineColor", DEFAULT_WHITE);
|
||||
static LLUIColor sMouseOverColor = LLUIColorTable::instance().getColor("InventoryMouseOverColor", DEFAULT_WHITE);
|
||||
|
||||
const LLFolderViewItem::Params& default_params = LLUICtrlFactory::getDefaultParams<LLFolderViewItem>();
|
||||
const S32 TOP_PAD = default_params.item_top_pad;
|
||||
const S32 FOCUS_LEFT = 1;
|
||||
|
||||
getViewModelItem()->update();
|
||||
|
||||
//--------------------------------------------------------------------------------//
|
||||
// Draw open folder arrow
|
||||
//
|
||||
if (hasVisibleChildren() || getViewModelItem()->hasChildren())
|
||||
{
|
||||
LLUIImage* arrow_image = default_params.folder_arrow_image;
|
||||
gl_draw_scaled_rotated_image(
|
||||
mIndentation, getRect().getHeight() - mArrowSize - mTextPad - TOP_PAD,
|
||||
mArrowSize, mArrowSize, mControlLabelRotation, arrow_image->getImage(), sFgColor);
|
||||
}
|
||||
|
||||
|
||||
//--------------------------------------------------------------------------------//
|
||||
// Draw highlight for selected items
|
||||
//
|
||||
const LLFolderViewItem::Params& default_params = LLUICtrlFactory::getDefaultParams<LLFolderViewItem>();
|
||||
const BOOL show_context = (getRoot() ? getRoot()->getShowSelectionContext() : FALSE);
|
||||
const BOOL filled = show_context || (getRoot() ? getRoot()->getParentPanel()->hasFocus() : FALSE); // If we have keyboard focus, draw selection filled
|
||||
const S32 focus_top = getRect().getHeight();
|
||||
const S32 focus_bottom = getRect().getHeight() - mItemHeight;
|
||||
const bool folder_open = (getRect().getHeight() > mItemHeight + 4);
|
||||
if (mIsSelected) // always render "current" item. Only render other selected items if mShowSingleSelection is FALSE
|
||||
{
|
||||
gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
|
||||
LLColor4 bg_color = sHighlightBgColor;
|
||||
if (!mIsCurSelection)
|
||||
{
|
||||
// do time-based fade of extra objects
|
||||
F32 fade_time = (getRoot() ? getRoot()->getSelectionFadeElapsedTime() : 0.0f);
|
||||
if (getRoot() && getRoot()->getShowSingleSelection())
|
||||
{
|
||||
// fading out
|
||||
bg_color.mV[VALPHA] = clamp_rescale(fade_time, 0.f, 0.4f, bg_color.mV[VALPHA], 0.f);
|
||||
}
|
||||
else
|
||||
{
|
||||
// fading in
|
||||
bg_color.mV[VALPHA] = clamp_rescale(fade_time, 0.f, 0.4f, 0.f, bg_color.mV[VALPHA]);
|
||||
}
|
||||
}
|
||||
gl_rect_2d(FOCUS_LEFT,
|
||||
focus_top,
|
||||
getRect().getWidth() - 2,
|
||||
focus_bottom,
|
||||
bg_color, filled);
|
||||
if (mIsCurSelection)
|
||||
{
|
||||
gl_rect_2d(FOCUS_LEFT,
|
||||
focus_top,
|
||||
getRect().getWidth() - 2,
|
||||
focus_bottom,
|
||||
sFocusOutlineColor, FALSE);
|
||||
}
|
||||
if (folder_open)
|
||||
{
|
||||
gl_rect_2d(FOCUS_LEFT,
|
||||
focus_bottom + 1, // overlap with bottom edge of above rect
|
||||
getRect().getWidth() - 2,
|
||||
0,
|
||||
sFocusOutlineColor, FALSE);
|
||||
if (show_context)
|
||||
{
|
||||
gl_rect_2d(FOCUS_LEFT,
|
||||
focus_bottom + 1,
|
||||
getRect().getWidth() - 2,
|
||||
0,
|
||||
sHighlightBgColor, TRUE);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (mIsMouseOverTitle)
|
||||
{
|
||||
gl_rect_2d(FOCUS_LEFT,
|
||||
focus_top,
|
||||
getRect().getWidth() - 2,
|
||||
focus_bottom,
|
||||
sMouseOverColor, FALSE);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------//
|
||||
// Draw DragNDrop highlight
|
||||
//
|
||||
if (mDragAndDropTarget)
|
||||
{
|
||||
gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
|
||||
gl_rect_2d(FOCUS_LEFT,
|
||||
focus_top,
|
||||
getRect().getWidth() - 2,
|
||||
focus_bottom,
|
||||
sHighlightBgColor, FALSE);
|
||||
if (folder_open)
|
||||
{
|
||||
gl_rect_2d(FOCUS_LEFT,
|
||||
focus_bottom + 1, // overlap with bottom edge of above rect
|
||||
getRect().getWidth() - 2,
|
||||
0,
|
||||
sHighlightBgColor, FALSE);
|
||||
}
|
||||
mDragAndDropTarget = FALSE;
|
||||
}
|
||||
// ***** LLFolderViewItem::draw() code end *****
|
||||
// update the rotation angle of open folder arrow
|
||||
updateLabelRotation();
|
||||
|
||||
drawOpenFolderArrow(default_params, sFgColor);
|
||||
|
||||
// draw highlight for selected items
|
||||
drawHighlight(show_context, true, sHighlightBgColor, sFocusOutlineColor, sMouseOverColor);
|
||||
|
||||
|
||||
// draw children if root folder, or any other folder that is open or animating to closed state
|
||||
bool draw_children = getRoot() == static_cast<LLFolderViewFolder*>(this)
|
||||
|
|
|
|||
Loading…
Reference in New Issue