merge with ssh://hg.lindenlab.com/richard/viewer-chui
commit
997812c7b0
|
|
@ -106,8 +106,6 @@ LLFolderViewItem::LLFolderViewItem(const LLFolderViewItem::Params& p)
|
|||
mHasVisibleChildren(FALSE),
|
||||
mIndentation(0),
|
||||
mItemHeight(p.item_height),
|
||||
//TODO RN: create interface for string highlighting
|
||||
//mStringMatchOffset(std::string::npos),
|
||||
mControlLabelRotation(0.f),
|
||||
mDragAndDropTarget(FALSE),
|
||||
mLabel(p.name),
|
||||
|
|
@ -778,29 +776,28 @@ void LLFolderViewItem::draw()
|
|||
//--------------------------------------------------------------------------------//
|
||||
// Highlight string match
|
||||
//
|
||||
//TODO RN: expose interface for highlighting
|
||||
//if (mStringMatchOffset != std::string::npos)
|
||||
//{
|
||||
// // don't draw backgrounds for zero-length strings
|
||||
// S32 filter_string_length = getRoot()->getFilterSubString().size();
|
||||
// if (filter_string_length > 0)
|
||||
// {
|
||||
// std::string combined_string = mLabel + mLabelSuffix;
|
||||
// S32 left = llround(text_left) + font->getWidth(combined_string, 0, mStringMatchOffset) - 1;
|
||||
// S32 right = left + font->getWidth(combined_string, mStringMatchOffset, filter_string_length) + 2;
|
||||
// S32 bottom = llfloor(getRect().getHeight() - font->getLineHeight() - 3 - TOP_PAD);
|
||||
// S32 top = getRect().getHeight() - TOP_PAD;
|
||||
//
|
||||
// LLUIImage* box_image = default_params.selection_image;
|
||||
// LLRect box_rect(left, top, right, bottom);
|
||||
// box_image->draw(box_rect, sFilterBGColor);
|
||||
// F32 match_string_left = text_left + font->getWidthF32(combined_string, 0, mStringMatchOffset);
|
||||
// F32 yy = (F32)getRect().getHeight() - font->getLineHeight() - (F32)TEXT_PAD - (F32)TOP_PAD;
|
||||
// font->renderUTF8( combined_string, mStringMatchOffset, match_string_left, yy,
|
||||
// sFilterTextColor, LLFontGL::LEFT, LLFontGL::BOTTOM, LLFontGL::NORMAL, LLFontGL::NO_SHADOW,
|
||||
// filter_string_length, S32_MAX, &right_x, FALSE );
|
||||
// }
|
||||
//}
|
||||
if (mViewModelItem->hasFilterStringMatch())
|
||||
{
|
||||
// don't draw backgrounds for zero-length strings
|
||||
std::string::size_type filter_string_length = mViewModelItem->getFilterStringSize();
|
||||
if (filter_string_length > 0)
|
||||
{
|
||||
std::string combined_string = mLabel + mLabelSuffix;
|
||||
S32 left = llround(text_left) + font->getWidth(combined_string, 0, mViewModelItem->getFilterStringOffset()) - 1;
|
||||
S32 right = left + font->getWidth(combined_string, mViewModelItem->getFilterStringOffset(), filter_string_length) + 2;
|
||||
S32 bottom = llfloor(getRect().getHeight() - font->getLineHeight() - 3 - TOP_PAD);
|
||||
S32 top = getRect().getHeight() - TOP_PAD;
|
||||
|
||||
LLUIImage* box_image = default_params.selection_image;
|
||||
LLRect box_rect(left, top, right, bottom);
|
||||
box_image->draw(box_rect, sFilterBGColor);
|
||||
F32 match_string_left = text_left + font->getWidthF32(combined_string, 0, mViewModelItem->getFilterStringOffset());
|
||||
F32 yy = (F32)getRect().getHeight() - font->getLineHeight() - (F32)TEXT_PAD - (F32)TOP_PAD;
|
||||
font->renderUTF8( combined_string, mViewModelItem->getFilterStringOffset(), match_string_left, yy,
|
||||
sFilterTextColor, LLFontGL::LEFT, LLFontGL::BOTTOM, LLFontGL::NORMAL, LLFontGL::NO_SHADOW,
|
||||
filter_string_length, S32_MAX, &right_x, FALSE );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const LLFolderViewModelInterface* LLFolderViewItem::getFolderViewModel( void ) const
|
||||
|
|
|
|||
|
|
@ -103,8 +103,6 @@ protected:
|
|||
S32 mDragStartX,
|
||||
mDragStartY;
|
||||
|
||||
//TODO RN: create interface for string highlighting
|
||||
//std::string::size_type mStringMatchOffset;
|
||||
F32 mControlLabelRotation;
|
||||
LLFolderView* mRoot;
|
||||
bool mHasVisibleChildren;
|
||||
|
|
|
|||
|
|
@ -73,6 +73,8 @@ public:
|
|||
|
||||
virtual bool showAllResults() const = 0;
|
||||
|
||||
virtual std::string::size_type getStringMatchOffset(LLFolderViewModelItem* item) const = 0;
|
||||
virtual std::string::size_type getFilterStringSize() const = 0;
|
||||
// +-------------------------------------------------------------------+
|
||||
// + Status
|
||||
// +-------------------------------------------------------------------+
|
||||
|
|
@ -173,8 +175,11 @@ public:
|
|||
virtual void filter( LLFolderViewFilter& filter) = 0;
|
||||
virtual bool passedFilter(S32 filter_generation = -1) = 0;
|
||||
virtual bool descendantsPassedFilter(S32 filter_generation = -1) = 0;
|
||||
virtual void setPassedFilter(bool passed, bool passed_folder, S32 filter_generation) = 0;
|
||||
virtual void setPassedFilter(bool passed, bool passed_folder, S32 filter_generation, std::string::size_type string_offset = std::string::npos, std::string::size_type string_size = 0) = 0;
|
||||
virtual void dirtyFilter() = 0;
|
||||
virtual bool hasFilterStringMatch() = 0;
|
||||
virtual std::string::size_type getFilterStringOffset() = 0;
|
||||
virtual std::string::size_type getFilterStringSize() = 0;
|
||||
|
||||
virtual S32 getLastFilterGeneration() const = 0;
|
||||
|
||||
|
|
@ -210,6 +215,8 @@ public:
|
|||
: mSortVersion(-1),
|
||||
mPassedFilter(true),
|
||||
mPassedFolderFilter(true),
|
||||
mStringMatchOffsetFilter(std::string::npos),
|
||||
mStringFilterSize(0),
|
||||
mFolderViewItem(NULL),
|
||||
mLastFilterGeneration(-1),
|
||||
mMostFilteredDescendantGeneration(-1),
|
||||
|
|
@ -234,6 +241,10 @@ public:
|
|||
mParent->dirtyFilter();
|
||||
}
|
||||
}
|
||||
bool hasFilterStringMatch() { return mStringMatchOffsetFilter != std::string::npos; }
|
||||
std::string::size_type getFilterStringOffset() { return mStringMatchOffsetFilter; }
|
||||
std::string::size_type getFilterStringSize() { return mStringFilterSize; }
|
||||
|
||||
virtual void addChild(LLFolderViewModelItem* child)
|
||||
{
|
||||
mChildren.push_back(child);
|
||||
|
|
@ -248,11 +259,13 @@ public:
|
|||
dirtyFilter();
|
||||
}
|
||||
|
||||
void setPassedFilter(bool passed, bool passed_folder, S32 filter_generation)
|
||||
void setPassedFilter(bool passed, bool passed_folder, S32 filter_generation, std::string::size_type string_offset, std::string::size_type string_size)
|
||||
{
|
||||
mPassedFilter = passed;
|
||||
mPassedFolderFilter = passed_folder;
|
||||
mLastFilterGeneration = filter_generation;
|
||||
mStringMatchOffsetFilter = string_offset;
|
||||
mStringFilterSize = string_size;
|
||||
}
|
||||
|
||||
virtual bool potentiallyVisible()
|
||||
|
|
@ -287,6 +300,8 @@ protected:
|
|||
S32 mSortVersion;
|
||||
bool mPassedFilter;
|
||||
bool mPassedFolderFilter;
|
||||
std::string::size_type mStringMatchOffsetFilter;
|
||||
std::string::size_type mStringFilterSize;
|
||||
|
||||
S32 mLastFilterGeneration;
|
||||
S32 mMostFilteredDescendantGeneration;
|
||||
|
|
|
|||
|
|
@ -125,9 +125,9 @@ void LLFolderViewModelItemInventory::requestSort()
|
|||
}
|
||||
}
|
||||
|
||||
void LLFolderViewModelItemInventory::setPassedFilter(bool passed, bool passed_folder, S32 filter_generation)
|
||||
void LLFolderViewModelItemInventory::setPassedFilter(bool passed, bool passed_folder, S32 filter_generation, std::string::size_type string_offset, std::string::size_type string_size)
|
||||
{
|
||||
LLFolderViewModelItemCommon::setPassedFilter(passed, passed_folder, filter_generation);
|
||||
LLFolderViewModelItemCommon::setPassedFilter(passed, passed_folder, filter_generation, string_offset, string_size);
|
||||
|
||||
bool passed_filter_before = mPrevPassedAllFilters;
|
||||
mPrevPassedAllFilters = passedFilter(filter_generation);
|
||||
|
|
@ -205,9 +205,7 @@ void LLFolderViewModelItemInventory::filter( LLFolderViewFilter& filter)
|
|||
? filter.checkFolder(this)
|
||||
: true;
|
||||
|
||||
setPassedFilter(passed_filter, passed_filter_folder, filter_generation);
|
||||
//TODO RN: create interface for string highlighting
|
||||
//mStringMatchOffset = filter.getStringMatchOffset(this);
|
||||
setPassedFilter(passed_filter, passed_filter_folder, filter_generation, filter.getStringMatchOffset(this), filter.getFilterStringSize());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ public:
|
|||
virtual EInventorySortGroup getSortGroup() const = 0;
|
||||
virtual LLInventoryObject* getInventoryObject() const = 0;
|
||||
virtual void requestSort();
|
||||
virtual void setPassedFilter(bool filtered, bool filtered_folder, S32 filter_generation);
|
||||
virtual void setPassedFilter(bool filtered, bool filtered_folder, S32 filter_generation, std::string::size_type string_offset = std::string::npos, std::string::size_type string_size = 0);
|
||||
virtual void filter( LLFolderViewFilter& filter);
|
||||
virtual void filterChildItem( LLFolderViewModelItem* item, LLFolderViewFilter& filter);
|
||||
|
||||
|
|
|
|||
|
|
@ -91,7 +91,7 @@ public:
|
|||
virtual bool potentiallyVisible() { return true; }
|
||||
virtual void filter( LLFolderViewFilter& filter) { }
|
||||
virtual bool descendantsPassedFilter(S32 filter_generation = -1) { return true; }
|
||||
virtual void setPassedFilter(bool passed, bool passed_folder, S32 filter_generation) { }
|
||||
virtual void setPassedFilter(bool passed, bool passed_folder, S32 filter_generation, std::string::size_type string_offset = std::string::npos, std::string::size_type string_size = 0) { }
|
||||
virtual bool passedFilter(S32 filter_generation = -1) { return true; }
|
||||
|
||||
// The action callbacks
|
||||
|
|
@ -142,6 +142,8 @@ public:
|
|||
void setEmptyLookupMessage(const std::string& message) { }
|
||||
std::string getEmptyLookupMessage() const { return mEmpty; }
|
||||
bool showAllResults() const { return true; }
|
||||
std::string::size_type getStringMatchOffset(LLFolderViewModelItem* item) const { return std::string::npos; }
|
||||
std::string::size_type getFilterStringSize() const { return 0; }
|
||||
|
||||
bool isActive() const { return false; }
|
||||
bool isModified() const { return false; }
|
||||
|
|
|
|||
|
|
@ -94,9 +94,9 @@ bool LLInventoryFilter::check(const LLFolderViewModelItem* item)
|
|||
return passed_clipboard;
|
||||
}
|
||||
|
||||
std::string::size_type string_offset = mFilterSubString.size() ? listener->getSearchableName().find(mFilterSubString) : 0;
|
||||
std::string::size_type string_offset = mFilterSubString.size() ? listener->getSearchableName().find(mFilterSubString) : std::string::npos;
|
||||
|
||||
BOOL passed = string_offset != std::string::npos;
|
||||
BOOL passed = (mFilterSubString.size() == 0 || string_offset != std::string::npos);
|
||||
passed = passed && checkAgainstFilterType(listener);
|
||||
passed = passed && checkAgainstPermissions(listener);
|
||||
passed = passed && checkAgainstFilterLinks(listener);
|
||||
|
|
@ -107,7 +107,7 @@ bool LLInventoryFilter::check(const LLFolderViewModelItem* item)
|
|||
|
||||
bool LLInventoryFilter::check(const LLInventoryItem* item)
|
||||
{
|
||||
std::string::size_type string_offset = mFilterSubString.size() ? item->getName().find(mFilterSubString) : std::string::npos;
|
||||
std::string::size_type string_offset = mFilterSubString.size() ? item->getName().find(mFilterSubString) : std::string::npos;
|
||||
|
||||
const bool passed_filtertype = checkAgainstFilterType(item);
|
||||
const bool passed_permissions = checkAgainstPermissions(item);
|
||||
|
|
@ -115,7 +115,7 @@ bool LLInventoryFilter::check(const LLInventoryItem* item)
|
|||
const bool passed = (passed_filtertype
|
||||
&& passed_permissions
|
||||
&& passed_clipboard
|
||||
&& (mFilterSubString.size() == 0 || string_offset != std::string::npos));
|
||||
&& (mFilterSubString.size() == 0 || string_offset != std::string::npos));
|
||||
|
||||
return passed;
|
||||
}
|
||||
|
|
@ -382,9 +382,10 @@ const std::string& LLInventoryFilter::getFilterSubString(BOOL trim) const
|
|||
return mFilterSubString;
|
||||
}
|
||||
|
||||
std::string::size_type LLInventoryFilter::getStringMatchOffset(LLFolderViewItem* item) const
|
||||
std::string::size_type LLInventoryFilter::getStringMatchOffset(LLFolderViewModelItem* item) const
|
||||
{
|
||||
return mFilterSubString.size() ? item->getName().find(mFilterSubString) : std::string::npos;
|
||||
const LLFolderViewModelItemInventory* listener = static_cast<const LLFolderViewModelItemInventory*>(item);
|
||||
return mFilterSubString.size() ? listener->getSearchableName().find(mFilterSubString) : std::string::npos;
|
||||
}
|
||||
|
||||
bool LLInventoryFilter::isDefault() const
|
||||
|
|
@ -991,6 +992,11 @@ bool LLInventoryFilter::hasFilterString() const
|
|||
return mFilterSubString.size() > 0;
|
||||
}
|
||||
|
||||
std::string::size_type LLInventoryFilter::getFilterStringSize() const
|
||||
{
|
||||
return mFilterSubString.size();
|
||||
}
|
||||
|
||||
PermissionMask LLInventoryFilter::getFilterPermissions() const
|
||||
{
|
||||
return mFilterOps.mPermissions;
|
||||
|
|
|
|||
|
|
@ -191,10 +191,8 @@ public:
|
|||
|
||||
bool showAllResults() const;
|
||||
|
||||
|
||||
std::string::size_type getStringMatchOffset() const;
|
||||
|
||||
std::string::size_type getStringMatchOffset(LLFolderViewItem* item) const;
|
||||
std::string::size_type getStringMatchOffset(LLFolderViewModelItem* item) const;
|
||||
std::string::size_type getFilterStringSize() const;
|
||||
// +-------------------------------------------------------------------+
|
||||
// + Presentation
|
||||
// +-------------------------------------------------------------------+
|
||||
|
|
|
|||
|
|
@ -3124,191 +3124,191 @@ void LLVOAvatar::idleUpdateNameTagText(BOOL new_name)
|
|||
{
|
||||
debugAvatarRezTime("AvatarRezLeftAppearanceNotification","left appearance mode");
|
||||
}
|
||||
}
|
||||
|
||||
// Rebuild name tag if state change detected
|
||||
if (mNameString.empty()
|
||||
|| new_name
|
||||
|| (!title && !mTitle.empty())
|
||||
|| (title && mTitle != title->getString())
|
||||
|| is_away != mNameAway
|
||||
|| is_busy != mNameBusy
|
||||
|| is_muted != mNameMute
|
||||
|| is_appearance != mNameAppearance
|
||||
|| is_friend != mNameFriend
|
||||
|| is_cloud != mNameCloud)
|
||||
// Rebuild name tag if state change detected
|
||||
if (mNameString.empty()
|
||||
|| new_name
|
||||
|| (!title && !mTitle.empty())
|
||||
|| (title && mTitle != title->getString())
|
||||
|| is_away != mNameAway
|
||||
|| is_busy != mNameBusy
|
||||
|| is_muted != mNameMute
|
||||
|| is_appearance != mNameAppearance
|
||||
|| is_friend != mNameFriend
|
||||
|| is_cloud != mNameCloud)
|
||||
{
|
||||
LLColor4 name_tag_color = getNameTagColor(is_friend);
|
||||
|
||||
clearNameTag();
|
||||
|
||||
if (is_away || is_muted || is_busy || is_appearance)
|
||||
{
|
||||
LLColor4 name_tag_color = getNameTagColor(is_friend);
|
||||
|
||||
clearNameTag();
|
||||
|
||||
if (is_away || is_muted || is_busy || is_appearance)
|
||||
std::string line;
|
||||
if (is_away)
|
||||
{
|
||||
std::string line;
|
||||
if (is_away)
|
||||
{
|
||||
line += LLTrans::getString("AvatarAway");
|
||||
line += ", ";
|
||||
}
|
||||
if (is_busy)
|
||||
{
|
||||
line += LLTrans::getString("AvatarBusy");
|
||||
line += ", ";
|
||||
}
|
||||
if (is_muted)
|
||||
{
|
||||
line += LLTrans::getString("AvatarMuted");
|
||||
line += ", ";
|
||||
}
|
||||
if (is_appearance)
|
||||
{
|
||||
line += LLTrans::getString("AvatarEditingAppearance");
|
||||
line += ", ";
|
||||
}
|
||||
if (is_cloud)
|
||||
{
|
||||
line += LLTrans::getString("LoadingData");
|
||||
line += ", ";
|
||||
}
|
||||
// trim last ", "
|
||||
line.resize( line.length() - 2 );
|
||||
addNameTagLine(line, name_tag_color, LLFontGL::NORMAL,
|
||||
LLFontGL::getFontSansSerifSmall());
|
||||
line += LLTrans::getString("AvatarAway");
|
||||
line += ", ";
|
||||
}
|
||||
|
||||
if (sRenderGroupTitles
|
||||
&& title && title->getString() && title->getString()[0] != '\0')
|
||||
if (is_busy)
|
||||
{
|
||||
std::string title_str = title->getString();
|
||||
LLStringFn::replace_ascii_controlchars(title_str,LL_UNKNOWN_CHAR);
|
||||
addNameTagLine(title_str, name_tag_color, LLFontGL::NORMAL,
|
||||
LLFontGL::getFontSansSerifSmall());
|
||||
line += LLTrans::getString("AvatarBusy");
|
||||
line += ", ";
|
||||
}
|
||||
|
||||
static LLUICachedControl<bool> show_display_names("NameTagShowDisplayNames");
|
||||
static LLUICachedControl<bool> show_usernames("NameTagShowUsernames");
|
||||
|
||||
if (LLAvatarNameCache::useDisplayNames())
|
||||
if (is_muted)
|
||||
{
|
||||
LLAvatarName av_name;
|
||||
if (!LLAvatarNameCache::get(getID(), &av_name))
|
||||
{
|
||||
// ...call this function back when the name arrives
|
||||
// and force a rebuild
|
||||
LLAvatarNameCache::get(getID(),
|
||||
boost::bind(&LLVOAvatar::clearNameTag, this));
|
||||
}
|
||||
|
||||
// Might be blank if name not available yet, that's OK
|
||||
if (show_display_names)
|
||||
{
|
||||
addNameTagLine(av_name.mDisplayName, name_tag_color, LLFontGL::NORMAL,
|
||||
LLFontGL::getFontSansSerif());
|
||||
}
|
||||
// Suppress SLID display if display name matches exactly (ugh)
|
||||
if (show_usernames && !av_name.mIsDisplayNameDefault)
|
||||
{
|
||||
// *HACK: Desaturate the color
|
||||
LLColor4 username_color = name_tag_color * 0.83f;
|
||||
addNameTagLine(av_name.mUsername, username_color, LLFontGL::NORMAL,
|
||||
LLFontGL::getFontSansSerifSmall());
|
||||
}
|
||||
line += LLTrans::getString("AvatarMuted");
|
||||
line += ", ";
|
||||
}
|
||||
else
|
||||
if (is_appearance)
|
||||
{
|
||||
const LLFontGL* font = LLFontGL::getFontSansSerif();
|
||||
std::string full_name = LLCacheName::buildFullName( firstname->getString(), lastname->getString() );
|
||||
addNameTagLine(full_name, name_tag_color, LLFontGL::NORMAL, font);
|
||||
line += LLTrans::getString("AvatarEditingAppearance");
|
||||
line += ", ";
|
||||
}
|
||||
|
||||
mNameAway = is_away;
|
||||
mNameBusy = is_busy;
|
||||
mNameMute = is_muted;
|
||||
mNameAppearance = is_appearance;
|
||||
mNameFriend = is_friend;
|
||||
mNameCloud = is_cloud;
|
||||
mTitle = title ? title->getString() : "";
|
||||
LLStringFn::replace_ascii_controlchars(mTitle,LL_UNKNOWN_CHAR);
|
||||
new_name = TRUE;
|
||||
if (is_cloud)
|
||||
{
|
||||
line += LLTrans::getString("LoadingData");
|
||||
line += ", ";
|
||||
}
|
||||
// trim last ", "
|
||||
line.resize( line.length() - 2 );
|
||||
addNameTagLine(line, name_tag_color, LLFontGL::NORMAL,
|
||||
LLFontGL::getFontSansSerifSmall());
|
||||
}
|
||||
|
||||
if (mVisibleChat)
|
||||
if (sRenderGroupTitles
|
||||
&& title && title->getString() && title->getString()[0] != '\0')
|
||||
{
|
||||
mNameText->setFont(LLFontGL::getFontSansSerif());
|
||||
mNameText->setTextAlignment(LLHUDNameTag::ALIGN_TEXT_LEFT);
|
||||
mNameText->setFadeDistance(CHAT_NORMAL_RADIUS * 2.f, 5.f);
|
||||
std::string title_str = title->getString();
|
||||
LLStringFn::replace_ascii_controlchars(title_str,LL_UNKNOWN_CHAR);
|
||||
addNameTagLine(title_str, name_tag_color, LLFontGL::NORMAL,
|
||||
LLFontGL::getFontSansSerifSmall());
|
||||
}
|
||||
|
||||
char line[MAX_STRING]; /* Flawfinder: ignore */
|
||||
line[0] = '\0';
|
||||
std::deque<LLChat>::iterator chat_iter = mChats.begin();
|
||||
mNameText->clearString();
|
||||
static LLUICachedControl<bool> show_display_names("NameTagShowDisplayNames");
|
||||
static LLUICachedControl<bool> show_usernames("NameTagShowUsernames");
|
||||
|
||||
LLColor4 new_chat = LLUIColorTable::instance().getColor( isSelf() ? "UserChatColor" : "AgentChatColor" );
|
||||
LLColor4 normal_chat = lerp(new_chat, LLColor4(0.8f, 0.8f, 0.8f, 1.f), 0.7f);
|
||||
LLColor4 old_chat = lerp(normal_chat, LLColor4(0.6f, 0.6f, 0.6f, 1.f), 0.7f);
|
||||
if (mTyping && mChats.size() >= MAX_BUBBLE_CHAT_UTTERANCES)
|
||||
if (LLAvatarNameCache::useDisplayNames())
|
||||
{
|
||||
LLAvatarName av_name;
|
||||
if (!LLAvatarNameCache::get(getID(), &av_name))
|
||||
{
|
||||
++chat_iter;
|
||||
// ...call this function back when the name arrives
|
||||
// and force a rebuild
|
||||
LLAvatarNameCache::get(getID(),
|
||||
boost::bind(&LLVOAvatar::clearNameTag, this));
|
||||
}
|
||||
|
||||
for(; chat_iter != mChats.end(); ++chat_iter)
|
||||
// Might be blank if name not available yet, that's OK
|
||||
if (show_display_names)
|
||||
{
|
||||
F32 chat_fade_amt = llclamp((F32)((LLFrameTimer::getElapsedSeconds() - chat_iter->mTime) / CHAT_FADE_TIME), 0.f, 4.f);
|
||||
LLFontGL::StyleFlags style;
|
||||
switch(chat_iter->mChatType)
|
||||
{
|
||||
case CHAT_TYPE_WHISPER:
|
||||
style = LLFontGL::ITALIC;
|
||||
break;
|
||||
case CHAT_TYPE_SHOUT:
|
||||
style = LLFontGL::BOLD;
|
||||
break;
|
||||
default:
|
||||
style = LLFontGL::NORMAL;
|
||||
break;
|
||||
}
|
||||
if (chat_fade_amt < 1.f)
|
||||
{
|
||||
F32 u = clamp_rescale(chat_fade_amt, 0.9f, 1.f, 0.f, 1.f);
|
||||
mNameText->addLine(chat_iter->mText, lerp(new_chat, normal_chat, u), style);
|
||||
}
|
||||
else if (chat_fade_amt < 2.f)
|
||||
{
|
||||
F32 u = clamp_rescale(chat_fade_amt, 1.9f, 2.f, 0.f, 1.f);
|
||||
mNameText->addLine(chat_iter->mText, lerp(normal_chat, old_chat, u), style);
|
||||
}
|
||||
else if (chat_fade_amt < 3.f)
|
||||
{
|
||||
// *NOTE: only remove lines down to minimum number
|
||||
mNameText->addLine(chat_iter->mText, old_chat, style);
|
||||
}
|
||||
addNameTagLine(av_name.mDisplayName, name_tag_color, LLFontGL::NORMAL,
|
||||
LLFontGL::getFontSansSerif());
|
||||
}
|
||||
mNameText->setVisibleOffScreen(TRUE);
|
||||
|
||||
if (mTyping)
|
||||
// Suppress SLID display if display name matches exactly (ugh)
|
||||
if (show_usernames && !av_name.mIsDisplayNameDefault)
|
||||
{
|
||||
S32 dot_count = (llfloor(mTypingTimer.getElapsedTimeF32() * 3.f) + 2) % 3 + 1;
|
||||
switch(dot_count)
|
||||
{
|
||||
case 1:
|
||||
mNameText->addLine(".", new_chat);
|
||||
break;
|
||||
case 2:
|
||||
mNameText->addLine("..", new_chat);
|
||||
break;
|
||||
case 3:
|
||||
mNameText->addLine("...", new_chat);
|
||||
break;
|
||||
}
|
||||
|
||||
// *HACK: Desaturate the color
|
||||
LLColor4 username_color = name_tag_color * 0.83f;
|
||||
addNameTagLine(av_name.mUsername, username_color, LLFontGL::NORMAL,
|
||||
LLFontGL::getFontSansSerifSmall());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// ...not using chat bubbles, just names
|
||||
mNameText->setTextAlignment(LLHUDNameTag::ALIGN_TEXT_CENTER);
|
||||
mNameText->setFadeDistance(CHAT_NORMAL_RADIUS, 5.f);
|
||||
mNameText->setVisibleOffScreen(FALSE);
|
||||
const LLFontGL* font = LLFontGL::getFontSansSerif();
|
||||
std::string full_name = LLCacheName::buildFullName( firstname->getString(), lastname->getString() );
|
||||
addNameTagLine(full_name, name_tag_color, LLFontGL::NORMAL, font);
|
||||
}
|
||||
|
||||
mNameAway = is_away;
|
||||
mNameBusy = is_busy;
|
||||
mNameMute = is_muted;
|
||||
mNameAppearance = is_appearance;
|
||||
mNameFriend = is_friend;
|
||||
mNameCloud = is_cloud;
|
||||
mTitle = title ? title->getString() : "";
|
||||
LLStringFn::replace_ascii_controlchars(mTitle,LL_UNKNOWN_CHAR);
|
||||
new_name = TRUE;
|
||||
}
|
||||
|
||||
if (mVisibleChat)
|
||||
{
|
||||
mNameText->setFont(LLFontGL::getFontSansSerif());
|
||||
mNameText->setTextAlignment(LLHUDNameTag::ALIGN_TEXT_LEFT);
|
||||
mNameText->setFadeDistance(CHAT_NORMAL_RADIUS * 2.f, 5.f);
|
||||
|
||||
char line[MAX_STRING]; /* Flawfinder: ignore */
|
||||
line[0] = '\0';
|
||||
std::deque<LLChat>::iterator chat_iter = mChats.begin();
|
||||
mNameText->clearString();
|
||||
|
||||
LLColor4 new_chat = LLUIColorTable::instance().getColor( isSelf() ? "UserChatColor" : "AgentChatColor" );
|
||||
LLColor4 normal_chat = lerp(new_chat, LLColor4(0.8f, 0.8f, 0.8f, 1.f), 0.7f);
|
||||
LLColor4 old_chat = lerp(normal_chat, LLColor4(0.6f, 0.6f, 0.6f, 1.f), 0.7f);
|
||||
if (mTyping && mChats.size() >= MAX_BUBBLE_CHAT_UTTERANCES)
|
||||
{
|
||||
++chat_iter;
|
||||
}
|
||||
|
||||
for(; chat_iter != mChats.end(); ++chat_iter)
|
||||
{
|
||||
F32 chat_fade_amt = llclamp((F32)((LLFrameTimer::getElapsedSeconds() - chat_iter->mTime) / CHAT_FADE_TIME), 0.f, 4.f);
|
||||
LLFontGL::StyleFlags style;
|
||||
switch(chat_iter->mChatType)
|
||||
{
|
||||
case CHAT_TYPE_WHISPER:
|
||||
style = LLFontGL::ITALIC;
|
||||
break;
|
||||
case CHAT_TYPE_SHOUT:
|
||||
style = LLFontGL::BOLD;
|
||||
break;
|
||||
default:
|
||||
style = LLFontGL::NORMAL;
|
||||
break;
|
||||
}
|
||||
if (chat_fade_amt < 1.f)
|
||||
{
|
||||
F32 u = clamp_rescale(chat_fade_amt, 0.9f, 1.f, 0.f, 1.f);
|
||||
mNameText->addLine(chat_iter->mText, lerp(new_chat, normal_chat, u), style);
|
||||
}
|
||||
else if (chat_fade_amt < 2.f)
|
||||
{
|
||||
F32 u = clamp_rescale(chat_fade_amt, 1.9f, 2.f, 0.f, 1.f);
|
||||
mNameText->addLine(chat_iter->mText, lerp(normal_chat, old_chat, u), style);
|
||||
}
|
||||
else if (chat_fade_amt < 3.f)
|
||||
{
|
||||
// *NOTE: only remove lines down to minimum number
|
||||
mNameText->addLine(chat_iter->mText, old_chat, style);
|
||||
}
|
||||
}
|
||||
mNameText->setVisibleOffScreen(TRUE);
|
||||
|
||||
if (mTyping)
|
||||
{
|
||||
S32 dot_count = (llfloor(mTypingTimer.getElapsedTimeF32() * 3.f) + 2) % 3 + 1;
|
||||
switch(dot_count)
|
||||
{
|
||||
case 1:
|
||||
mNameText->addLine(".", new_chat);
|
||||
break;
|
||||
case 2:
|
||||
mNameText->addLine("..", new_chat);
|
||||
break;
|
||||
case 3:
|
||||
mNameText->addLine("...", new_chat);
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// ...not using chat bubbles, just names
|
||||
mNameText->setTextAlignment(LLHUDNameTag::ALIGN_TEXT_CENTER);
|
||||
mNameText->setFadeDistance(CHAT_NORMAL_RADIUS, 5.f);
|
||||
mNameText->setVisibleOffScreen(FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -6413,6 +6413,7 @@ Your object named <nolink>[OBJECTFROMNAME]</nolink> has given you th
|
|||
icon="notify.tga"
|
||||
name="TeleportOffered"
|
||||
log_to_im="true"
|
||||
log_to_chat="false"
|
||||
type="offer">
|
||||
[NAME_SLURL] has offered to teleport you to their location:
|
||||
|
||||
|
|
@ -6434,6 +6435,8 @@ Your object named <nolink>[OBJECTFROMNAME]</nolink> has given you th
|
|||
<notification
|
||||
icon="notify.tga"
|
||||
name="TeleportOffered_MaturityExceeded"
|
||||
log_to_im="true"
|
||||
log_to_chat="false"
|
||||
type="offer">
|
||||
[NAME_SLURL] has offered to teleport you to their location:
|
||||
|
||||
|
|
@ -6457,6 +6460,8 @@ This region contains [REGION_CONTENT_MATURITY] content, but your current prefere
|
|||
<notification
|
||||
icon="notify.tga"
|
||||
name="TeleportOffered_MaturityBlocked"
|
||||
log_to_im="true"
|
||||
log_to_chat="false"
|
||||
type="notifytip">
|
||||
[NAME_SLURL] has offered to teleport you to their location:
|
||||
|
||||
|
|
@ -6471,6 +6476,7 @@ However, this region contains content accessible to adults only.
|
|||
icon="notify.tga"
|
||||
name="TeleportOfferSent"
|
||||
log_to_im="true"
|
||||
log_to_chat="false"
|
||||
show_toast="false"
|
||||
type="offer">
|
||||
Teleport offer sent to [TO_NAME]
|
||||
|
|
|
|||
Loading…
Reference in New Issue