diff options
author | Alexander Gavriliuk <alexandrgproductengine@lindenlab.com> | 2024-03-08 13:25:43 +0100 |
---|---|---|
committer | Guru <alexandrgproductengine@lindenlab.com> | 2024-03-10 00:10:16 +0100 |
commit | 1781e2d17b777e32e9b51e5a901c1295db80a4d8 (patch) | |
tree | 720c3d9e2808b65fe58378022090bffbea91bbff /indra/llui | |
parent | 636bf6cadec903d894c36db992f1ab17fb8e6796 (diff) |
viewer#944 Make 'Debug Unicode' feature available for all LLViews
Diffstat (limited to 'indra/llui')
-rw-r--r-- | indra/llui/llbutton.h | 2 | ||||
-rw-r--r-- | indra/llui/llcheckboxctrl.h | 2 | ||||
-rw-r--r-- | indra/llui/lllineeditor.cpp | 13 | ||||
-rw-r--r-- | indra/llui/lllineeditor.h | 5 | ||||
-rw-r--r-- | indra/llui/lltextbase.cpp | 19 | ||||
-rw-r--r-- | indra/llui/lltextbase.h | 5 | ||||
-rw-r--r-- | indra/llui/llview.cpp | 28 | ||||
-rw-r--r-- | indra/llui/llview.h | 6 | ||||
-rw-r--r-- | indra/llui/llviewmodel.cpp | 35 | ||||
-rw-r--r-- | indra/llui/llviewmodel.h | 6 |
10 files changed, 70 insertions, 51 deletions
diff --git a/indra/llui/llbutton.h b/indra/llui/llbutton.h index 5ab7f07ab8..ecb08d1f23 100644 --- a/indra/llui/llbutton.h +++ b/indra/llui/llbutton.h @@ -251,7 +251,7 @@ public: void setFont(const LLFontGL *font) { mGLFont = ( font ? font : LLFontGL::getFontSansSerif()); } const LLFontGL* getFont() const { return mGLFont; } - + const std::string& getText() const { return getCurrentLabel().getString(); } S32 getLastDrawCharsCount() const { return mLastDrawCharsCount; } bool labelIsTruncated() const; diff --git a/indra/llui/llcheckboxctrl.h b/indra/llui/llcheckboxctrl.h index eb5bd5b6da..ba3c723fcb 100644 --- a/indra/llui/llcheckboxctrl.h +++ b/indra/llui/llcheckboxctrl.h @@ -117,7 +117,7 @@ public: std::string getLabel() const; void setFont( const LLFontGL* font ) { mFont = font; } - const LLFontGL* getFont() { return mFont; } + const LLFontGL* getFont() const { return mFont; } virtual void setControlName(const std::string& control_name, LLView* context); diff --git a/indra/llui/lllineeditor.cpp b/indra/llui/lllineeditor.cpp index 0643680277..3bf77cdb1c 100644 --- a/indra/llui/lllineeditor.cpp +++ b/indra/llui/lllineeditor.cpp @@ -1762,19 +1762,6 @@ 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 40de9e155e..87afa9a1d5 100644 --- a/indra/llui/lllineeditor.h +++ b/indra/llui/lllineeditor.h @@ -176,7 +176,6 @@ public: void onSpellCheckSettingsChange(); // view overrides - /*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; @@ -204,7 +203,7 @@ public: void setText(const LLStringExplicit &new_text); - const std::string& getText() const { return mText.getString(); } + const std::string& getText() const override { return mText.getString(); } LLWString getWText() const { return mText.getWString(); } LLWString getConvertedText() const; // trimmed text with paragraphs converted to newlines @@ -236,7 +235,7 @@ public: const LLColor4& getReadOnlyFgColor() const { return mReadOnlyFgColor.get(); } const LLColor4& getTentativeFgColor() const { return mTentativeFgColor.get(); } - const LLFontGL* getFont() const { return mGLFont; } + const LLFontGL* getFont() const override { return mGLFont; } void setFont(const LLFontGL* font); void setIgnoreArrowKeys(BOOL b) { mIgnoreArrowKeys = b; } diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp index 7b57c7e5b8..feac3400c7 100644 --- a/indra/llui/lltextbase.cpp +++ b/indra/llui/lltextbase.cpp @@ -1287,19 +1287,6 @@ BOOL LLTextBase::handleToolTip(S32 x, S32 y, MASK 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) @@ -2182,10 +2169,10 @@ void LLTextBase::setText(const LLStringExplicit &utf8str, const LLStyle::Params& onValueChange(0, getLength()); } -//virtual -std::string LLTextBase::getText() const +// virtual +const std::string& LLTextBase::getText() const { - return getViewModel()->getValue().asString(); + return getViewModel()->getStringValue(); } // IDEVO - icons can be UI image names or UUID sent from diff --git a/indra/llui/lltextbase.h b/indra/llui/lltextbase.h index 9d3c54fbee..d65e3bfd7c 100644 --- a/indra/llui/lltextbase.h +++ b/indra/llui/lltextbase.h @@ -366,7 +366,6 @@ public: /*virtual*/ BOOL handleToolTip(S32 x, S32 y, MASK mask) override; // LLView interface - /*virtual*/ const std::string getToolTip() const override; /*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE) override; /*virtual*/ void draw() override; @@ -422,7 +421,7 @@ public: // Text accessors // TODO: add optional style parameter virtual void setText(const LLStringExplicit &utf8str , const LLStyle::Params& input_params = LLStyle::Params()); // uses default style - virtual std::string getText() const; + /*virtual*/ const std::string& getText() const override; void setMaxTextLength(S32 length) { mMaxTextByteLength = length; } S32 getMaxTextLength() { return mMaxTextByteLength; } @@ -495,7 +494,7 @@ public: bool scrolledToStart(); bool scrolledToEnd(); - const LLFontGL* getFont() const { return mFont; } + const LLFontGL* getFont() const override { return mFont; } virtual void appendLineBreakSegment(const LLStyle::Params& style_params); virtual void appendImageSegment(const LLStyle::Params& style_params); diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp index 139eb17efa..1a80a69293 100644 --- a/indra/llui/llview.cpp +++ b/indra/llui/llview.cpp @@ -898,6 +898,34 @@ F32 LLView::getTooltipTimeout() : tooltip_delay); } +// virtual +const std::string LLView::getToolTip() const +{ + if (sDebugUnicode) + { + std::string text = getText(); + if (!text.empty()) + { + const std::string& name = getName(); + std::string tooltip = llformat("Name: \"%s\"", name.c_str()); + + if (const LLFontGL* font = getFont()) + { + tooltip += llformat("\nFont: %s (%s)", + font->getFontDesc().getName().c_str(), + font->getFontDesc().getSize().c_str() + ); + } + + tooltip += "\n\n" + utf8str_showBytesUTF8(text); + + return tooltip; + } + } + + return mToolTipMsg.getString(); +} + BOOL LLView::handleToolTip(S32 x, S32 y, MASK mask) { BOOL handled = FALSE; diff --git a/indra/llui/llview.h b/indra/llui/llview.h index 6e16d41cba..c023cc95b7 100644 --- a/indra/llui/llview.h +++ b/indra/llui/llview.h @@ -243,8 +243,10 @@ public: ECursorType getHoverCursor() { return mHoverCursor; } - static F32 getTooltipTimeout(); - virtual const std::string getToolTip() const { return mToolTipMsg.getString(); } + static F32 getTooltipTimeout(); + virtual const std::string getToolTip() const; + virtual const std::string& getText() const { return LLStringUtil::null; } + virtual const LLFontGL* getFont() const { return nullptr; } void sendChildToFront(LLView* child); void sendChildToBack(LLView* child); diff --git a/indra/llui/llviewmodel.cpp b/indra/llui/llviewmodel.cpp index a400eb70c0..41082a2848 100644 --- a/indra/llui/llviewmodel.cpp +++ b/indra/llui/llviewmodel.cpp @@ -81,7 +81,7 @@ void LLTextViewModel::setValue(const LLSD& value) { // approximate LLSD storage usage LLViewModel::setValue(value); - mDisplay = utf8str_to_wstring(value.asString()); + mDisplay = utf8str_to_wstring(mStringValue = value.asString()); // mDisplay and mValue agree mUpdateFromDisplay = false; @@ -101,23 +101,34 @@ void LLTextViewModel::setDisplay(const LLWString& value) mUpdateFromDisplay = true; } -LLSD LLTextViewModel::getValue() const +inline void updateFromDisplayIfNeeded(const LLTextViewModel* model) { - // Has anyone called setDisplay() since the last setValue()? If so, have - // to convert mDisplay back to UTF8. - if (mUpdateFromDisplay) + // Has anyone called setDisplay() since the last setValue()? + // If so, have to convert mDisplay back to UTF8. + if (model->mUpdateFromDisplay) { - // The fact that we're lazily updating fields in this object should be - // transparent to clients, which is why this method is left - // conventionally const. Nor do we particularly want to make these - // members mutable. Just cast away constness in this one place. - LLTextViewModel* nthis = const_cast<LLTextViewModel*>(this); + // The fact that we're lazily updating fields + // in this object should be transparent to clients, + // which is why this method is left conventionally const. + // Nor do we particularly want to make these members mutable. + // Just cast away constness in this one place. + LLTextViewModel* nthis = const_cast<LLTextViewModel*>(model); nthis->mUpdateFromDisplay = false; - nthis->mValue = wstring_to_utf8str(mDisplay); + nthis->mValue = nthis->mStringValue = wstring_to_utf8str(model->mDisplay); } - return LLViewModel::getValue(); } +LLSD LLTextViewModel::getValue() const +{ + updateFromDisplayIfNeeded(this); + return mValue; +} + +const std::string& LLTextViewModel::getStringValue() const +{ + updateFromDisplayIfNeeded(this); + return mStringValue; +} //////////////////////////////////////////////////////////////////////////// diff --git a/indra/llui/llviewmodel.h b/indra/llui/llviewmodel.h index e7dceb6c31..ffd67f455d 100644 --- a/indra/llui/llviewmodel.h +++ b/indra/llui/llviewmodel.h @@ -100,6 +100,7 @@ public: // LLViewModel functions virtual void setValue(const LLSD& value); virtual LLSD getValue() const; + const std::string& getStringValue() const; // New functions /// Get the stored value in string form @@ -114,12 +115,17 @@ public: void setDisplay(const LLWString& value); private: + std::string mStringValue; + /// To avoid converting every widget's stored value from LLSD to LLWString /// every frame, cache the converted value LLWString mDisplay; + /// As the user edits individual characters (setDisplay()), defer /// LLWString-to-UTF8 conversions until s/he's done. bool mUpdateFromDisplay; + + friend void updateFromDisplayIfNeeded(const LLTextViewModel* model); }; /** |