diff options
| author | Alexander Gavriliuk <alexandrgproductengine@lindenlab.com> | 2024-02-07 21:26:57 +0100 | 
|---|---|---|
| committer | Guru <alexandrgproductengine@lindenlab.com> | 2024-02-08 13:17:18 +0300 | 
| commit | 7075717b7c4a57d6bef60697ee506096a7c1b1ab (patch) | |
| tree | 4fd55eb13166128aefa4a835a1a7922742922ca9 | |
| parent | b348366d107a03fcc01397c1b2e9e2a22de48034 (diff) | |
SL-20363 Add Advanced option 'Debug Unicode'
| -rw-r--r-- | indra/llcommon/llstring.cpp | 49 | ||||
| -rw-r--r-- | indra/llcommon/llstring.h | 1 | ||||
| -rw-r--r-- | indra/llui/lllineeditor.cpp | 14 | ||||
| -rw-r--r-- | indra/llui/lllineeditor.h | 112 | ||||
| -rw-r--r-- | indra/llui/lltextbase.cpp | 24 | ||||
| -rw-r--r-- | indra/llui/lltextbase.h | 66 | ||||
| -rw-r--r-- | indra/llui/llview.cpp | 1 | ||||
| -rw-r--r-- | indra/llui/llview.h | 3 | ||||
| -rw-r--r-- | indra/newview/llviewermenu.cpp | 26 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/floater_im_session.xml | 2 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/menu_viewer.xml | 8 | 
11 files changed, 218 insertions, 88 deletions
| diff --git a/indra/llcommon/llstring.cpp b/indra/llcommon/llstring.cpp index 17d69351ec..ab34262515 100644 --- a/indra/llcommon/llstring.cpp +++ b/indra/llcommon/llstring.cpp @@ -623,6 +623,7 @@ std::string mbcsstring_makeASCII(const std::string& wstr)  	}  	return out_str;  } +  std::string utf8str_removeCRLF(const std::string& utf8str)  {  	if (0 == utf8str.length()) @@ -644,6 +645,54 @@ std::string utf8str_removeCRLF(const std::string& utf8str)  	return out;  } +std::string utf8str_showBytesUTF8(const std::string& utf8str) +{ +    std::string result; + +    bool in_sequence = false; +    for (U8 byte : utf8str) +    { +        if (byte >= 0x80) // Part of an UTF-8 sequence +        { +            if (!in_sequence) // Start new UTF-8 sequence +            { +                if (!result.empty() && result.back() != ' ') +                    result += ' '; // Use space as separator between ASCII and UTF-8 +                result += '['; +            } +            else if (byte >= 0xC0) // Start another UTF-8 sequence +            { +                result += "] ["; // Use space as separator between UTF-8 and UTF-8 +            } +            else // Continue the same UTF-8 sequence +            { +                result += '.'; +            } +            result += llformat("%02X", byte); // The byte is represented in hexadecimal form +            in_sequence = true; +        } +        else // ASCII symbol is represented as a character +        { +            if (in_sequence) // End of UTF-8 sequence +            { +                result += ']'; +                if (byte != ' ') +                { +                    result += ' '; // Use space as separator between UTF-8 and ASCII +                } +            } +            result += byte; +            in_sequence = false; +        } +    } +    if (in_sequence) // End of UTF-8 sequence +    { +        result += ']'; +    } + +    return result; +} +  #if LL_WINDOWS  unsigned int ll_wstring_default_code_page()  { diff --git a/indra/llcommon/llstring.h b/indra/llcommon/llstring.h index 8def59ed7f..38b9c3e23c 100644 --- a/indra/llcommon/llstring.h +++ b/indra/llcommon/llstring.h @@ -743,6 +743,7 @@ LL_COMMON_API std::string mbcsstring_makeASCII(const std::string& str);  LL_COMMON_API std::string utf8str_removeCRLF(const std::string& utf8str); +LL_COMMON_API std::string utf8str_showBytesUTF8(const std::string& utf8str);  #if LL_WINDOWS  /* @name Windows string helpers diff --git a/indra/llui/lllineeditor.cpp b/indra/llui/lllineeditor.cpp index e032b4b8c2..453fa29e7c 100644 --- a/indra/llui/lllineeditor.cpp +++ b/indra/llui/lllineeditor.cpp @@ -1739,6 +1739,20 @@ void LLLineEditor::drawBackground()  	}  } +//virtual  +const std::string LLLineEditor::getToolTip() const +{ +    if (sDebugUnicode) +    { +        std::string text = getText(); +        std::string tooltip = utf8str_showBytesUTF8(text); +        return tooltip; +    } + +    return LLUICtrl::getToolTip(); +} + +//virtual   void LLLineEditor::draw()  {  	F32 alpha = getDrawContext().mAlpha; diff --git a/indra/llui/lllineeditor.h b/indra/llui/lllineeditor.h index 69eb0792e1..5794b3c35a 100644 --- a/indra/llui/lllineeditor.h +++ b/indra/llui/lllineeditor.h @@ -119,54 +119,55 @@ protected:  	friend class LLUICtrlFactory;  	friend class LLFloaterEditUI;  	void showContextMenu(S32 x, S32 y); +  public:  	virtual ~LLLineEditor();  	// mousehandler overrides -	/*virtual*/ BOOL	handleMouseDown(S32 x, S32 y, MASK mask); -	/*virtual*/ BOOL	handleMouseUp(S32 x, S32 y, MASK mask); -	/*virtual*/ BOOL	handleHover(S32 x, S32 y, MASK mask); -	/*virtual*/ BOOL	handleDoubleClick(S32 x,S32 y,MASK mask); -	/*virtual*/ BOOL	handleMiddleMouseDown(S32 x,S32 y,MASK mask); -	/*virtual*/ BOOL	handleRightMouseDown(S32 x, S32 y, MASK mask); -	/*virtual*/ BOOL	handleKeyHere(KEY key, MASK mask ); -	/*virtual*/ BOOL	handleUnicodeCharHere(llwchar uni_char); -	/*virtual*/ void	onMouseCaptureLost(); +	/*virtual*/ BOOL	handleMouseDown(S32 x, S32 y, MASK mask) override; +	/*virtual*/ BOOL	handleMouseUp(S32 x, S32 y, MASK mask) override; +	/*virtual*/ BOOL	handleHover(S32 x, S32 y, MASK mask) override; +	/*virtual*/ BOOL	handleDoubleClick(S32 x,S32 y,MASK mask) override; +	/*virtual*/ BOOL	handleMiddleMouseDown(S32 x,S32 y,MASK mask) override; +	/*virtual*/ BOOL	handleRightMouseDown(S32 x, S32 y, MASK mask) override; +	/*virtual*/ BOOL	handleKeyHere(KEY key, MASK mask) override; +	/*virtual*/ BOOL	handleUnicodeCharHere(llwchar uni_char) override; +	/*virtual*/ void	onMouseCaptureLost() override;  	// LLEditMenuHandler overrides -	virtual void	cut(); -	virtual BOOL	canCut() const; -	virtual void	copy(); -	virtual BOOL	canCopy() const; -	virtual void	paste(); -	virtual BOOL	canPaste() const; +	/*virtual*/ void	cut() override; +	/*virtual*/ BOOL	canCut() const override; +	/*virtual*/ void	copy() override; +	/*virtual*/ BOOL	canCopy() const override; +	/*virtual*/ void	paste() override; +	/*virtual*/ BOOL	canPaste() const override;  	virtual void	updatePrimary();  	virtual void	copyPrimary();   	virtual void	pastePrimary();  	virtual BOOL	canPastePrimary() const; -	virtual void	doDelete(); -	virtual BOOL	canDoDelete() const; +	/*virtual*/ void	doDelete() override; +	/*virtual*/ BOOL	canDoDelete() const override; -	virtual void	selectAll(); -	virtual BOOL	canSelectAll() const; +	/*virtual*/ void	selectAll() override; +	/*virtual*/ BOOL	canSelectAll() const override; -	virtual void	deselect(); -	virtual BOOL	canDeselect() const; +	/*virtual*/ void	deselect() override; +	/*virtual*/ BOOL	canDeselect() const override;  	// LLSpellCheckMenuHandler overrides -	/*virtual*/ bool	getSpellCheck() const; +	/*virtual*/ bool	getSpellCheck() const override; -	/*virtual*/ const std::string& getSuggestion(U32 index) const; -	/*virtual*/ U32		getSuggestionCount() const; -	/*virtual*/ void	replaceWithSuggestion(U32 index); +	/*virtual*/ const std::string& getSuggestion(U32 index) const override; +	/*virtual*/ U32		getSuggestionCount() const override; +	/*virtual*/ void	replaceWithSuggestion(U32 index) override; -	/*virtual*/ void	addToDictionary(); -	/*virtual*/ bool	canAddToDictionary() const; +	/*virtual*/ void	addToDictionary() override; +	/*virtual*/ bool	canAddToDictionary() const override; -	/*virtual*/ void	addToIgnore(); -	/*virtual*/ bool	canAddToIgnore() const; +	/*virtual*/ void	addToIgnore() override; +	/*virtual*/ bool	canAddToIgnore() const override;  	// Spell checking helper functions  	std::string			getMisspelledWord(U32 pos) const; @@ -174,27 +175,28 @@ public:  	void				onSpellCheckSettingsChange();  	// view overrides -	virtual void	draw(); -	virtual void	reshape(S32 width,S32 height,BOOL called_from_parent=TRUE); -	virtual void	onFocusReceived(); -	virtual void	onFocusLost(); -	virtual void	setEnabled(BOOL enabled); +	/*virtual*/ const std::string getToolTip() const override; +	/*virtual*/ void	draw() override; +	/*virtual*/ void	reshape(S32 width, S32 height, BOOL called_from_parent = TRUE) override; +	/*virtual*/ void	onFocusReceived() override; +	/*virtual*/ void	onFocusLost() override; +	/*virtual*/ void	setEnabled(BOOL enabled) override;  	// UI control overrides -	virtual void	clear(); -	virtual void	onTabInto(); -	virtual void	setFocus( BOOL b ); -	virtual void 	setRect(const LLRect& rect); -	virtual BOOL	acceptsTextInput() const; -	virtual void	onCommit(); -	virtual BOOL	isDirty() const;	// Returns TRUE if user changed value at all -	virtual void	resetDirty();		// Clear dirty state +	/*virtual*/ void	clear() override; +	/*virtual*/ void	onTabInto() override; +	/*virtual*/ void	setFocus(BOOL b) override; +	/*virtual*/ void 	setRect(const LLRect& rect) override; +	/*virtual*/ BOOL	acceptsTextInput() const override; +	/*virtual*/ void	onCommit() override; +	/*virtual*/ BOOL	isDirty() const override;	// Returns TRUE if user changed value at all +	/*virtual*/ void	resetDirty() override;		// Clear dirty state  	// assumes UTF8 text -	virtual void	setValue(const LLSD& value ); -	virtual LLSD	getValue() const; -	virtual BOOL	setTextArg( const std::string& key, const LLStringExplicit& text ); -	virtual BOOL	setLabelArg( const std::string& key, const LLStringExplicit& text ); +	/*virtual*/ void	setValue(const LLSD& value) override; +	/*virtual*/ LLSD	getValue() const override; +	/*virtual*/ BOOL	setTextArg(const std::string& key, const LLStringExplicit& text) override; +	/*virtual*/ BOOL	setLabelArg(const std::string& key, const LLStringExplicit& text) override;  	void			setLabel(const LLStringExplicit &new_label) { mLabel = new_label; }  	const std::string& 	getLabel()	{ return mLabel.getString(); } @@ -216,7 +218,7 @@ public:  	// Selects characters 'start' to 'end'.  	void			setSelection(S32 start, S32 end); -	virtual void	getSelectionRange(S32 *position, S32 *length) const; +	/*virtual*/ void	getSelectionRange(S32 *position, S32 *length) const override;  	void			setCommitOnFocusLost( BOOL b )	{ mCommitOnFocusLost = b; }  	void			setRevertOnEsc( BOOL b )		{ mRevertOnEsc = b; } @@ -315,14 +317,14 @@ public:  	void			updateAllowingLanguageInput();  	BOOL			hasPreeditString() const;  	// Implementation (overrides) of LLPreeditor -	virtual void	resetPreedit(); -	virtual void	updatePreedit(const LLWString &preedit_string, -						const segment_lengths_t &preedit_segment_lengths, const standouts_t &preedit_standouts, S32 caret_position); -	virtual void	markAsPreedit(S32 position, S32 length); -	virtual void	getPreeditRange(S32 *position, S32 *length) const; -	virtual BOOL	getPreeditLocation(S32 query_position, LLCoordGL *coord, LLRect *bounds, LLRect *control) const; -	virtual S32		getPreeditFontSize() const; -	virtual LLWString getPreeditString() const { return getWText(); } +	/*virtual*/ void	resetPreedit() override; +	/*virtual*/ void	updatePreedit(const LLWString &preedit_string, +						const segment_lengths_t &preedit_segment_lengths, const standouts_t &preedit_standouts, S32 caret_position) override; +	/*virtual*/ void	markAsPreedit(S32 position, S32 length) override; +	/*virtual*/ void	getPreeditRange(S32 *position, S32 *length) const override; +	/*virtual*/ BOOL	getPreeditLocation(S32 query_position, LLCoordGL *coord, LLRect *bounds, LLRect *control) const override; +	/*virtual*/ S32		getPreeditFontSize() const override; +	/*virtual*/ LLWString getPreeditString() const override { return getWText(); }      void			setText(const LLStringExplicit &new_text, bool use_size_limit); diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp index 8f628b4818..7ccf025a19 100644 --- a/indra/llui/lltextbase.cpp +++ b/indra/llui/lltextbase.cpp @@ -1107,6 +1107,7 @@ void LLTextBase::insertSegment(LLTextSegmentPtr segment_to_insert)  	needsReflow(reflow_start_index);  } +//virtual   BOOL LLTextBase::handleMouseDown(S32 x, S32 y, MASK mask)  {  	// handle triple click @@ -1161,6 +1162,7 @@ BOOL LLTextBase::handleMouseDown(S32 x, S32 y, MASK mask)  	return LLUICtrl::handleMouseDown(x, y, mask);  } +//virtual   BOOL LLTextBase::handleMouseUp(S32 x, S32 y, MASK mask)  {  	LLTextSegmentPtr cur_segment = getSegmentAtLocalPos(x, y); @@ -1180,6 +1182,7 @@ BOOL LLTextBase::handleMouseUp(S32 x, S32 y, MASK mask)  	return LLUICtrl::handleMouseUp(x, y, mask);  } +//virtual   BOOL LLTextBase::handleMiddleMouseDown(S32 x, S32 y, MASK mask)  {  	LLTextSegmentPtr cur_segment = getSegmentAtLocalPos(x, y); @@ -1191,6 +1194,7 @@ BOOL LLTextBase::handleMiddleMouseDown(S32 x, S32 y, MASK mask)  	return LLUICtrl::handleMiddleMouseDown(x, y, mask);  } +//virtual   BOOL LLTextBase::handleMiddleMouseUp(S32 x, S32 y, MASK mask)  {  	LLTextSegmentPtr cur_segment = getSegmentAtLocalPos(x, y); @@ -1202,6 +1206,7 @@ BOOL LLTextBase::handleMiddleMouseUp(S32 x, S32 y, MASK mask)  	return LLUICtrl::handleMiddleMouseUp(x, y, mask);  } +//virtual   BOOL LLTextBase::handleRightMouseDown(S32 x, S32 y, MASK mask)  {  	LLTextSegmentPtr cur_segment = getSegmentAtLocalPos(x, y); @@ -1213,6 +1218,7 @@ BOOL LLTextBase::handleRightMouseDown(S32 x, S32 y, MASK mask)  	return LLUICtrl::handleRightMouseDown(x, y, mask);  } +//virtual   BOOL LLTextBase::handleRightMouseUp(S32 x, S32 y, MASK mask)  {  	LLTextSegmentPtr cur_segment = getSegmentAtLocalPos(x, y); @@ -1224,6 +1230,7 @@ BOOL LLTextBase::handleRightMouseUp(S32 x, S32 y, MASK mask)  	return LLUICtrl::handleRightMouseUp(x, y, mask);  } +//virtual   BOOL LLTextBase::handleDoubleClick(S32 x, S32 y, MASK mask)  {  	//Don't start triple click timer if user have clicked on scrollbar @@ -1243,6 +1250,7 @@ BOOL LLTextBase::handleDoubleClick(S32 x, S32 y, MASK mask)  	return LLUICtrl::handleDoubleClick(x, y, mask);  } +//virtual   BOOL LLTextBase::handleHover(S32 x, S32 y, MASK mask)  {  	LLTextSegmentPtr cur_segment = getSegmentAtLocalPos(x, y); @@ -1254,6 +1262,7 @@ BOOL LLTextBase::handleHover(S32 x, S32 y, MASK mask)  	return LLUICtrl::handleHover(x, y, mask);  } +//virtual   BOOL LLTextBase::handleScrollWheel(S32 x, S32 y, S32 clicks)  {  	LLTextSegmentPtr cur_segment = getSegmentAtLocalPos(x, y); @@ -1265,6 +1274,7 @@ BOOL LLTextBase::handleScrollWheel(S32 x, S32 y, S32 clicks)  	return LLUICtrl::handleScrollWheel(x, y, clicks);  } +//virtual   BOOL LLTextBase::handleToolTip(S32 x, S32 y, MASK mask)  {  	LLTextSegmentPtr cur_segment = getSegmentAtLocalPos(x, y); @@ -1276,7 +1286,20 @@ BOOL LLTextBase::handleToolTip(S32 x, S32 y, MASK mask)  	return LLUICtrl::handleToolTip(x, y, mask);  } +//virtual  +const std::string LLTextBase::getToolTip() const +{ +    if (sDebugUnicode) +    { +        std::string text = getText(); +        std::string tooltip = utf8str_showBytesUTF8(text); +        return tooltip; +    } +    return LLUICtrl::getToolTip(); +} + +//virtual   void LLTextBase::reshape(S32 width, S32 height, BOOL called_from_parent)  {  	if (width != getRect().getWidth() || height != getRect().getHeight() || LLView::sForceReshape) @@ -1303,6 +1326,7 @@ void LLTextBase::reshape(S32 width, S32 height, BOOL called_from_parent)  	}  } +//virtual   void LLTextBase::draw()  {  	// reflow if needed, on demand diff --git a/indra/llui/lltextbase.h b/indra/llui/lltextbase.h index 37ab798a1d..9d3c54fbee 100644 --- a/indra/llui/lltextbase.h +++ b/indra/llui/lltextbase.h @@ -285,7 +285,7 @@ typedef LLPointer<LLTextSegment> LLTextSegmentPtr;  /// as LLTextEditor and LLTextBox. It implements shared functionality  /// such as Url highlighting and opening.  /// -class LLTextBase  +class LLTextBase  :	public LLUICtrl,  	protected LLEditMenuHandler,  	public LLSpellCheckMenuHandler, @@ -354,51 +354,52 @@ public:  	};  	// LLMouseHandler interface -	/*virtual*/ BOOL		handleMouseDown(S32 x, S32 y, MASK mask); -	/*virtual*/ BOOL		handleMouseUp(S32 x, S32 y, MASK mask); -	/*virtual*/ BOOL		handleMiddleMouseDown(S32 x, S32 y, MASK mask); -	/*virtual*/ BOOL		handleMiddleMouseUp(S32 x, S32 y, MASK mask); -	/*virtual*/ BOOL		handleRightMouseDown(S32 x, S32 y, MASK mask); -	/*virtual*/ BOOL		handleRightMouseUp(S32 x, S32 y, MASK mask); -	/*virtual*/ BOOL		handleDoubleClick(S32 x, S32 y, MASK mask); -	/*virtual*/ BOOL		handleHover(S32 x, S32 y, MASK mask); -	/*virtual*/ BOOL		handleScrollWheel(S32 x, S32 y, S32 clicks); -	/*virtual*/ BOOL		handleToolTip(S32 x, S32 y, MASK mask); +	/*virtual*/ BOOL		handleMouseDown(S32 x, S32 y, MASK mask) override; +	/*virtual*/ BOOL		handleMouseUp(S32 x, S32 y, MASK mask) override; +	/*virtual*/ BOOL		handleMiddleMouseDown(S32 x, S32 y, MASK mask) override; +	/*virtual*/ BOOL		handleMiddleMouseUp(S32 x, S32 y, MASK mask) override; +	/*virtual*/ BOOL		handleRightMouseDown(S32 x, S32 y, MASK mask) override; +	/*virtual*/ BOOL		handleRightMouseUp(S32 x, S32 y, MASK mask) override; +	/*virtual*/ BOOL		handleDoubleClick(S32 x, S32 y, MASK mask) override; +	/*virtual*/ BOOL		handleHover(S32 x, S32 y, MASK mask) override; +	/*virtual*/ BOOL		handleScrollWheel(S32 x, S32 y, S32 clicks) override; +	/*virtual*/ BOOL		handleToolTip(S32 x, S32 y, MASK mask) override;  	// LLView interface -	/*virtual*/ void		reshape(S32 width, S32 height, BOOL called_from_parent = TRUE); -	/*virtual*/ void		draw(); +	/*virtual*/ const std::string getToolTip() const override; +	/*virtual*/ void		reshape(S32 width, S32 height, BOOL called_from_parent = TRUE) override; +	/*virtual*/ void		draw() override;  	// LLUICtrl interface -	/*virtual*/ BOOL		acceptsTextInput() const { return !mReadOnly; } -	/*virtual*/ void		setColor( const LLColor4& c ); +	/*virtual*/ BOOL		acceptsTextInput() const override { return !mReadOnly; } +	/*virtual*/ void		setColor(const LLColor4& c) override;  	virtual     void 		setReadOnlyColor(const LLColor4 &c); -	virtual	    void		onVisibilityChange( BOOL new_visibility ); +	/*virtual*/ void		onVisibilityChange(BOOL new_visibility) override; -	/*virtual*/ void		setValue(const LLSD& value ); -	/*virtual*/ LLTextViewModel* getViewModel() const; +	/*virtual*/ void		setValue(const LLSD& value) override; +	/*virtual*/ LLTextViewModel* getViewModel() const override;  	// LLEditMenuHandler interface -	/*virtual*/ BOOL		canDeselect() const; -	/*virtual*/ void		deselect(); +	/*virtual*/ BOOL		canDeselect() const override; +	/*virtual*/ void		deselect() override; -	virtual void	onFocusReceived(); -	virtual void	onFocusLost(); +	virtual void	onFocusReceived() override; +	virtual void	onFocusLost() override;      void        setParseHTML(bool parse_html) { mParseHTML = parse_html; }  	// LLSpellCheckMenuHandler overrides -	/*virtual*/ bool		getSpellCheck() const; +	/*virtual*/ bool		getSpellCheck() const override; -	/*virtual*/ const std::string& getSuggestion(U32 index) const; -	/*virtual*/ U32			getSuggestionCount() const; -	/*virtual*/ void		replaceWithSuggestion(U32 index); +	/*virtual*/ const std::string& getSuggestion(U32 index) const override; +	/*virtual*/ U32			getSuggestionCount() const override; +	/*virtual*/ void		replaceWithSuggestion(U32 index) override; -	/*virtual*/ void		addToDictionary(); -	/*virtual*/ bool		canAddToDictionary() const; +	/*virtual*/ void		addToDictionary() override; +	/*virtual*/ bool		canAddToDictionary() const override; -	/*virtual*/ void		addToIgnore(); -	/*virtual*/ bool		canAddToIgnore() const; +	/*virtual*/ void		addToIgnore() override; +	/*virtual*/ bool		canAddToIgnore() const override;  	// Spell checking helper functions  	std::string				getMisspelledWord(U32 pos) const; @@ -432,7 +433,7 @@ public:  	void					appendText(const std::string &new_text, bool prepend_newline, const LLStyle::Params& input_params = LLStyle::Params());  	void					setLabel(const LLStringExplicit& label); -	virtual BOOL			setLabelArg(const std::string& key, const LLStringExplicit& text ); +	/*virtual*/ BOOL		setLabelArg(const std::string& key, const LLStringExplicit& text) override;  	const	std::string& 	getLabel()	{ return mLabel.getString(); }  	const	LLWString&		getWlabel() { return mLabel.getWString();} @@ -649,7 +650,8 @@ protected:  	S32 normalizeUri(std::string& uri);  protected: -	virtual std::string _getSearchText() const +	// virtual +	std::string _getSearchText() const override  	{  		return mLabel.getString() + getToolTip();  	} diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp index 0afccef735..139eb17efa 100644 --- a/indra/llui/llview.cpp +++ b/indra/llui/llview.cpp @@ -60,6 +60,7 @@ static const S32 LINE_HEIGHT = 15;  S32		LLView::sDepth = 0;  bool	LLView::sDebugRects = false; +bool	LLView::sDebugUnicode = false;  bool	LLView::sIsRectDirty = false;  LLRect	LLView::sDirtyRect;  bool	LLView::sDebugRectsShowNames = true; diff --git a/indra/llui/llview.h b/indra/llui/llview.h index b498451dce..6e16d41cba 100644 --- a/indra/llui/llview.h +++ b/indra/llui/llview.h @@ -659,6 +659,9 @@ public:  	// Draw debug rectangles around widgets to help with alignment and spacing  	static bool	sDebugRects; +	// Show hexadecimal byte values of unicode symbols in a tooltip +	static bool	sDebugUnicode; +  	static bool sIsRectDirty;  	static LLRect sDirtyRect; diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 8419555445..2cf341f87f 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -1437,6 +1437,30 @@ class LLAdvancedCheckDebugViews : public view_listener_t +/////////////////// +// DEBUG UNICODE // +/////////////////// + + +class LLAdvancedToggleDebugUnicode : public view_listener_t +{ +	bool handleEvent(const LLSD& userdata) +	{ +		LLView::sDebugUnicode = !(LLView::sDebugUnicode); +		return true; +	} +}; + +class LLAdvancedCheckDebugUnicode : public view_listener_t +{ +	bool handleEvent(const LLSD& userdata) +	{ +		return LLView::sDebugUnicode; +	} +}; + + +  ///////////////////////  // XUI NAME TOOLTIPS //  /////////////////////// @@ -9509,6 +9533,8 @@ void initialize_menus()  	view_listener_t::addMenu(new LLAdvancedCheckDebugClicks(), "Advanced.CheckDebugClicks");  	view_listener_t::addMenu(new LLAdvancedCheckDebugViews(), "Advanced.CheckDebugViews");  	view_listener_t::addMenu(new LLAdvancedToggleDebugViews(), "Advanced.ToggleDebugViews"); +	view_listener_t::addMenu(new LLAdvancedCheckDebugUnicode(), "Advanced.CheckDebugUnicode"); +	view_listener_t::addMenu(new LLAdvancedToggleDebugUnicode(), "Advanced.ToggleDebugUnicode");  	view_listener_t::addMenu(new LLAdvancedToggleXUINameTooltips(), "Advanced.ToggleXUINameTooltips");  	view_listener_t::addMenu(new LLAdvancedCheckXUINameTooltips(), "Advanced.CheckXUINameTooltips");  	view_listener_t::addMenu(new LLAdvancedToggleDebugMouseEvents(), "Advanced.ToggleDebugMouseEvents"); diff --git a/indra/newview/skins/default/xui/en/floater_im_session.xml b/indra/newview/skins/default/xui/en/floater_im_session.xml index c3e002e97d..1b6bc7025a 100644 --- a/indra/newview/skins/default/xui/en/floater_im_session.xml +++ b/indra/newview/skins/default/xui/en/floater_im_session.xml @@ -288,7 +288,7 @@                           expand_lines_count="5"                           follows="left|right|bottom"                           font="SansSerifSmall" -                         height="20"     +                         height="20"                           is_expandable="true"                           text_tentative_color="TextFgTentativeColor"                           bg_writeable_color="ScriptBackground" diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index 171c0f4f6d..38763cd9a8 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -3611,6 +3611,14 @@ function="World.EnvPreset"                   function="Advanced.ToggleDebugViews" />              </menu_item_check>              <menu_item_check +             label="Debug Unicode" +             name="Debug Unicode"> +                <menu_item_check.on_check +                 function="Advanced.CheckDebugUnicode" /> +                <menu_item_check.on_click +                 function="Advanced.ToggleDebugUnicode" /> +            </menu_item_check> +            <menu_item_check               label="Debug Name Tooltips"               name="Debug Name Tooltips">                  <menu_item_check.on_check | 
