Feature Request: Allow use of a separate color for linked usernames.
The setting is HTMLAgentColor, I will not add this to preferences for now. Note that usernames before the colon in the chat are cached, set before login to change it for everyone or relog. Also hook up getStyle() for the registered urls, cleans up some code in lltexteditor.
This commit is contained in:
@@ -4268,7 +4268,7 @@ void LLTextEditor::appendTextImpl(const std::string &new_text, const LLStyleSP s
|
||||
{
|
||||
std::string text = new_text;
|
||||
static LLUICachedControl<bool> replace_links("SinguReplaceLinks");
|
||||
bool is_link = style && !style->getLinkHREF().empty(); // Don't search for URLs inside a link segment (STORM-358).
|
||||
bool is_link = style && !style->isLink(); // Don't search for URLs inside a link segment (STORM-358).
|
||||
|
||||
S32 part = (S32)LLTextParser::WHOLE;
|
||||
if (mReadOnly && mParseHTML && !is_link) // Singu Note: Do not replace html if the user is going to edit it. (Like in profiles)
|
||||
@@ -4276,16 +4276,21 @@ void LLTextEditor::appendTextImpl(const std::string &new_text, const LLStyleSP s
|
||||
LL_RECORD_BLOCK_TIME(FTM_PARSE_HTML);
|
||||
S32 start=0,end=0;
|
||||
LLUrlMatch match;
|
||||
const auto& link_color = mLinkColor ? *mLinkColor : LLUI::sConfigGroup->getColor4("HTMLLinkColor");
|
||||
auto append_substr = [&](const size_t& pos, const size_t& count)
|
||||
{
|
||||
appendAndHighlightText(text.substr(pos, count), part, style);
|
||||
};
|
||||
auto append_link = [&](const std::string& link)
|
||||
auto append_link = [&](const std::string& link, LLStyleSP link_style)
|
||||
{
|
||||
LLStyleSP link_style(style ? new LLStyle(*style) : new LLStyle);
|
||||
link_style->setColor(link_color);
|
||||
link_style->setLinkHREF(match.getUrl());
|
||||
if (style) // Respect styling
|
||||
{
|
||||
const auto& text_style = *style;
|
||||
link_style->mItalic = text_style.mItalic;
|
||||
link_style->mBold = text_style.mBold;
|
||||
link_style->mUnderline = text_style.mUnderline;
|
||||
}
|
||||
// Hack around colors looking bad on some backgrounds by allowing setting link color for this editor
|
||||
if (mLinkColor) link_style->setColor(*mLinkColor);
|
||||
appendAndHighlightText(link, part, link_style, true/*match.underlineOnHoverOnly()*/);
|
||||
};
|
||||
while (!text.empty() && LLUrlRegistry::instance().findUrl(text, match,
|
||||
@@ -4323,7 +4328,7 @@ void LLTextEditor::appendTextImpl(const std::string &new_text, const LLStyleSP s
|
||||
}*/
|
||||
|
||||
// output the styled url
|
||||
append_link(label + match.getQuery());
|
||||
append_link(label + match.getQuery(), match.getStyle());
|
||||
bool tooltip_required = !match.getTooltip().empty();
|
||||
|
||||
// set the tooltip for the Url label
|
||||
@@ -4359,7 +4364,7 @@ void LLTextEditor::appendTextImpl(const std::string &new_text, const LLStyleSP s
|
||||
append_substr(start, brackets ? 1 : pos-start);
|
||||
// In the special cases, only link exactly the url, this might not have a protocol so calculate the exact string
|
||||
if (fallback) url = brackets ? text.substr(start+1, text.find(' ', start+2)-start) : text.substr(start, end-start);
|
||||
append_link(url); // Append the link
|
||||
append_link(url, match.getStyle()); // Append the link
|
||||
const auto url_end = pos + url.size();
|
||||
if (fallback == brackets && end > url_end) // Ending text, only in special case if brackets present
|
||||
append_substr(url_end, end-url_end);
|
||||
|
||||
@@ -69,14 +69,13 @@ std::string LLUrlEntryBase::getIcon(const std::string &url)
|
||||
return mIcon;
|
||||
}
|
||||
|
||||
/*LLStyle::Params LLUrlEntryBase::getStyle() const
|
||||
LLStyleSP LLUrlEntryBase::getStyle() const
|
||||
{
|
||||
LLStyle::Params style_params;
|
||||
style_params.color = LLUIColorTable::instance().getColor("HTMLLinkColor");
|
||||
style_params.readonly_color = LLUIColorTable::instance().getColor("HTMLLinkColor");
|
||||
style_params.font.style = "UNDERLINE";
|
||||
static LLUICachedControl<LLColor4> color("HTMLLinkColor");
|
||||
LLStyleSP style_params(new LLStyle(true, color, LLStringUtil::null));
|
||||
//style_params->mUnderline = true; // Singu Note: We're not gonna bother here, underlining on hover
|
||||
return style_params;
|
||||
}*/
|
||||
}
|
||||
|
||||
|
||||
std::string LLUrlEntryBase::getIDStringFromUrl(const std::string &url) const
|
||||
@@ -677,13 +676,12 @@ std::string LLUrlEntryAgent::getLabel(const std::string &url, const LLUrlLabelCa
|
||||
}
|
||||
}
|
||||
|
||||
/*LLStyle::Params LLUrlEntryAgent::getStyle() const
|
||||
LLStyleSP LLUrlEntryAgent::getStyle() const
|
||||
{
|
||||
LLStyle::Params style_params = LLUrlEntryBase::getStyle();
|
||||
style_params.color = LLUIColorTable::instance().getColor("HTMLLinkColor");
|
||||
style_params.readonly_color = LLUIColorTable::instance().getColor("HTMLLinkColor");
|
||||
static LLUICachedControl<LLColor4> color("HTMLAgentColor");
|
||||
LLStyleSP style_params(new LLStyle(true, color, LLStringUtil::null));
|
||||
return style_params;
|
||||
}*/
|
||||
}
|
||||
|
||||
std::string localize_slapp_label(const std::string& url, const std::string& full_name)
|
||||
{
|
||||
@@ -788,11 +786,12 @@ std::string LLUrlEntryAgentName::getLabel(const std::string &url, const LLUrlLab
|
||||
}
|
||||
}
|
||||
|
||||
/*LLStyle::Params LLUrlEntryAgentName::getStyle() const
|
||||
LLStyleSP LLUrlEntryAgentName::getStyle() const
|
||||
{
|
||||
// don't override default colors
|
||||
return LLStyle::Params().is_link(false);
|
||||
}*/
|
||||
static LLUICachedControl<LLColor4> color("HTMLAgentColor");
|
||||
LLStyleSP style_params(new LLStyle(true, color, LLStringUtil::null));
|
||||
return style_params;
|
||||
}
|
||||
|
||||
//
|
||||
// LLUrlEntryAgentCompleteName describes a Second Life agent complete name Url, e.g.,
|
||||
@@ -924,13 +923,12 @@ std::string LLUrlEntryGroup::getLabel(const std::string &url, const LLUrlLabelCa
|
||||
}
|
||||
}
|
||||
|
||||
/*LLStyle::Params LLUrlEntryGroup::getStyle() const
|
||||
LLStyleSP LLUrlEntryGroup::getStyle() const
|
||||
{
|
||||
LLStyle::Params style_params = LLUrlEntryBase::getStyle();
|
||||
style_params.color = LLUIColorTable::instance().getColor("HTMLLinkColor");
|
||||
style_params.readonly_color = LLUIColorTable::instance().getColor("HTMLLinkColor");
|
||||
LLStyleSP style_params = LLUrlEntryBase::getStyle();
|
||||
//style_params->mUnderline = false; // Singu Note: We're not gonna bother here, underlining on hover
|
||||
return style_params;
|
||||
}*/
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
@@ -1392,11 +1390,12 @@ std::string LLUrlEntryNoLink::getLabel(const std::string &url, const LLUrlLabelC
|
||||
return getUrl(url);
|
||||
}
|
||||
|
||||
/*LLStyle::Params LLUrlEntryNoLink::getStyle() const
|
||||
LLStyleSP LLUrlEntryNoLink::getStyle() const
|
||||
{
|
||||
// Don't render as URL (i.e. no context menu or hand cursor).
|
||||
return LLStyle::Params().is_link(false);
|
||||
}*/
|
||||
// Singu Note: What the heck? No, that's misleading!!
|
||||
return LLUrlEntryBase::getStyle();
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
|
||||
@@ -82,7 +82,7 @@ public:
|
||||
virtual std::string getIcon(const std::string &url);
|
||||
|
||||
/// Return the style to render the displayed text
|
||||
//virtual LLStyle::Params getStyle() const;
|
||||
virtual LLStyleSP getStyle() const;
|
||||
|
||||
/// Given a matched Url, return a tooltip string for the hyperlink
|
||||
virtual std::string getTooltip(const std::string &string) const { return mTooltip; }
|
||||
@@ -232,7 +232,7 @@ public:
|
||||
/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb) override;
|
||||
/*virtual*/ std::string getIcon(const std::string &url) override;
|
||||
/*virtual*/ std::string getTooltip(const std::string &string) const override;
|
||||
///*virtual*/ LLStyle::Params getStyle() const override;
|
||||
/*virtual*/ LLStyleSP getStyle() const override;
|
||||
/*virtual*/ LLUUID getID(const std::string &string) const override;
|
||||
/*virtual*/ bool underlineOnHoverOnly(const std::string &string) const override;
|
||||
protected:
|
||||
@@ -265,7 +265,7 @@ public:
|
||||
|
||||
}
|
||||
/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb) override;
|
||||
///*virtual*/ LLStyle::Params getStyle() const override;
|
||||
/*virtual*/ LLStyleSP getStyle() const override;
|
||||
protected:
|
||||
// override this to pull out relevant name fields
|
||||
virtual std::string getName(const LLAvatarName& avatar_name) = 0;
|
||||
@@ -332,7 +332,7 @@ class LLUrlEntryGroup : public LLUrlEntryBase
|
||||
public:
|
||||
LLUrlEntryGroup();
|
||||
/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb) override;
|
||||
///*virtual*/ LLStyle::Params getStyle() const override;
|
||||
/*virtual*/ LLStyleSP getStyle() const override;
|
||||
/*virtual*/ LLUUID getID(const std::string &string) const override;
|
||||
private:
|
||||
void onGroupNameReceived(const LLUUID& id, const std::string& name, bool is_group);
|
||||
@@ -492,7 +492,7 @@ public:
|
||||
LLUrlEntryNoLink();
|
||||
/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb) override;
|
||||
/*virtual*/ std::string getUrl(const std::string &string) const override;
|
||||
///*virtual*/ LLStyle::Params getStyle() const override;
|
||||
/*virtual*/ LLStyleSP getStyle() const override;
|
||||
};
|
||||
|
||||
///
|
||||
|
||||
@@ -46,7 +46,7 @@ LLUrlMatch::LLUrlMatch() :
|
||||
|
||||
void LLUrlMatch::setValues(U32 start, U32 end, const std::string &url, const std::string &label,
|
||||
const std::string& query, const std::string &tooltip,
|
||||
const std::string &icon, /*const LLStyle::Params& style,*/
|
||||
const std::string &icon, const LLStyleSP& style,
|
||||
const std::string &menu, const std::string &location,
|
||||
const LLUUID& id, bool underline_on_hover_only, bool trusted)
|
||||
{
|
||||
@@ -57,8 +57,8 @@ void LLUrlMatch::setValues(U32 start, U32 end, const std::string &url, const std
|
||||
mQuery = query;
|
||||
mTooltip = tooltip;
|
||||
mIcon = icon;
|
||||
//mStyle = style;
|
||||
//mStyle.link_href = url;
|
||||
mStyle = style;
|
||||
mStyle->setLinkHREF(url);
|
||||
mMenuName = menu;
|
||||
mLocation = location;
|
||||
mID = id;
|
||||
|
||||
@@ -70,7 +70,7 @@ public:
|
||||
std::string getIcon() const { return mIcon; }
|
||||
|
||||
/// Return the color to render the displayed text
|
||||
//LLStyle::Params getStyle() const { return mStyle; }
|
||||
LLStyleSP getStyle() const { return mStyle; }
|
||||
|
||||
/// Return the name of a XUI file containing the context menu items
|
||||
std::string getMenuName() const { return mMenuName; }
|
||||
@@ -87,7 +87,7 @@ public:
|
||||
/// Change the contents of this match object (used by LLUrlRegistry)
|
||||
void setValues(U32 start, U32 end, const std::string &url, const std::string &label,
|
||||
const std::string& query, const std::string &tooltip, const std::string &icon,
|
||||
/*const LLStyle::Params& style,*/ const std::string &menu,
|
||||
const LLStyleSP& style, const std::string &menu,
|
||||
const std::string &location, const LLUUID& id,
|
||||
bool underline_on_hover_only = false, bool trusted = false);
|
||||
|
||||
@@ -103,7 +103,7 @@ private:
|
||||
std::string mMenuName;
|
||||
std::string mLocation;
|
||||
LLUUID mID;
|
||||
//LLStyle::Params mStyle;
|
||||
LLStyleSP mStyle;
|
||||
bool mUnderlineOnHoverOnly;
|
||||
bool mTrusted;
|
||||
};
|
||||
|
||||
@@ -265,7 +265,7 @@ bool LLUrlRegistry::findUrl(const std::string &text, LLUrlMatch &match, const LL
|
||||
match_entry->getQuery(url),
|
||||
match_entry->getTooltip(url),
|
||||
match_entry->getIcon(url),
|
||||
//match_entry->getStyle(),
|
||||
match_entry->getStyle(),
|
||||
match_entry->getMenuName(),
|
||||
match_entry->getLocation(url),
|
||||
match_entry->getID(url),
|
||||
@@ -302,7 +302,7 @@ bool LLUrlRegistry::findUrl(const LLWString &text, LLUrlMatch &match, const LLUr
|
||||
match.getQuery(),
|
||||
match.getTooltip(),
|
||||
match.getIcon(),
|
||||
//match.getStyle(),
|
||||
match.getStyle(),
|
||||
match.getMenuName(),
|
||||
match.getLocation(),
|
||||
match.getID(),
|
||||
|
||||
@@ -9072,6 +9072,22 @@ This should be as low as possible, but too low may break functionality</string>
|
||||
<key>Value</key>
|
||||
<integer>400</integer>
|
||||
</map>
|
||||
<key>HTMLAgentColor</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Color of hyperlinked usernames</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Color4</string>
|
||||
<key>Value</key>
|
||||
<array>
|
||||
<real>0.600000023842</real>
|
||||
<real>0.600000023842</real>
|
||||
<real>1.0</real>
|
||||
<real>1.0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>HTMLLinkColor</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
||||
@@ -58,7 +58,7 @@ const LLStyleSP &LLStyleMap::lookupAgent(const LLUUID &source)
|
||||
LLStyleSP style(new LLStyle);
|
||||
if (source.notNull())
|
||||
{
|
||||
style->setColor(gSavedSettings.getColor4("HTMLLinkColor"));
|
||||
style->setColor(gSavedSettings.getColor4("HTMLAgentColor"));
|
||||
std::string link = llformat("secondlife:///app/agent/%s/about",source.asString().c_str());
|
||||
style->setLinkHREF(link);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user