diff options
| -rwxr-xr-x | indra/llui/lltexteditor.cpp | 77 | ||||
| -rwxr-xr-x | indra/llui/lltexteditor.h | 7 | ||||
| -rw-r--r-- | indra/newview/llfloaterscriptedprefs.h | 4 | ||||
| -rw-r--r-- | indra/newview/llscripteditor.cpp | 96 | ||||
| -rw-r--r-- | indra/newview/llscripteditor.h | 8 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/floater_script_ed_prefs.xml | 1 | ||||
| -rwxr-xr-x | indra/newview/skins/default/xui/en/panel_script_ed.xml | 3 | 
7 files changed, 106 insertions, 90 deletions
| diff --git a/indra/llui/lltexteditor.cpp b/indra/llui/lltexteditor.cpp index 7818f6e285..268c830a75 100755 --- a/indra/llui/lltexteditor.cpp +++ b/indra/llui/lltexteditor.cpp @@ -75,8 +75,6 @@ template class LLTextEditor* LLView::getChild<class LLTextEditor>(  //  // Constants  // -const S32	UI_TEXTEDITOR_LINE_NUMBER_MARGIN = 32; -const S32	UI_TEXTEDITOR_LINE_NUMBER_DIGITS = 4;  const S32	SPACES_PER_TAB = 4;  const F32	SPELLCHECK_DELAY = 0.5f;	// delay between the last keypress and spell checking the word the cursor is on @@ -236,7 +234,6 @@ LLTextEditor::Params::Params()  	prevalidate_callback("prevalidate_callback"),  	embedded_items("embedded_items", false),  	ignore_tab("ignore_tab", true), -	show_line_numbers("show_line_numbers", false),  	auto_indent("auto_indent", true),  	default_color("default_color"),      commit_on_focus_lost("commit_on_focus_lost", false), @@ -252,8 +249,7 @@ LLTextEditor::LLTextEditor(const LLTextEditor::Params& p) :  	mBaseDocIsPristine(TRUE),  	mPristineCmd( NULL ),  	mLastCmd( NULL ), -	mDefaultColor(		p.default_color() ), -	mShowLineNumbers ( p.show_line_numbers ), +	mDefaultColor( p.default_color() ),  	mAutoIndent(p.auto_indent),  	mCommitOnFocusLost( p.commit_on_focus_lost),  	mAllowEmbeddedItems( p.embedded_items ), @@ -277,14 +273,7 @@ LLTextEditor::LLTextEditor(const LLTextEditor::Params& p) :  	params.visible = p.border_visible;  	mBorder = LLUICtrlFactory::create<LLViewBorder> (params);  	addChild( mBorder ); -  	setText(p.default_text()); - -	if (mShowLineNumbers) -	{ -		mHPad += UI_TEXTEDITOR_LINE_NUMBER_MARGIN; -		updateRects(); -	}  	mParseOnTheFly = TRUE;  } @@ -2196,69 +2185,6 @@ void LLTextEditor::drawPreeditMarker()  	}  } - -void LLTextEditor::drawLineNumbers() -{ -	LLGLSUIDefault gls_ui; -	LLRect scrolled_view_rect = getVisibleDocumentRect(); -	LLRect content_rect = getVisibleTextRect();	 -	LLLocalClipRect clip(content_rect); -	S32 first_line = getFirstVisibleLine(); -	S32 num_lines = getLineCount(); -	if (first_line >= num_lines) -	{ -		return; -	} -	 -	S32 cursor_line = mLineInfoList[getLineNumFromDocIndex(mCursorPos)].mLineNum; - -	if (mShowLineNumbers) -	{ -		S32 left = 0; -		S32 top = getRect().getHeight(); -		S32 bottom = 0; - -		gl_rect_2d(left, top, UI_TEXTEDITOR_LINE_NUMBER_MARGIN, bottom, mReadOnlyBgColor.get() ); // line number area always read-only -		gl_rect_2d(UI_TEXTEDITOR_LINE_NUMBER_MARGIN, top, UI_TEXTEDITOR_LINE_NUMBER_MARGIN-1, bottom, LLColor4::grey3); // separator - -		S32 last_line_num = -1; - -		for (S32 cur_line = first_line; cur_line < num_lines; cur_line++) -		{ -			line_info& line = mLineInfoList[cur_line]; - -			if ((line.mRect.mTop - scrolled_view_rect.mBottom) < mVisibleTextRect.mBottom)  -			{ -				break; -			} - -			S32 line_bottom = line.mRect.mBottom - scrolled_view_rect.mBottom + mVisibleTextRect.mBottom; -			// draw the line numbers -			if(line.mLineNum != last_line_num && line.mRect.mTop <= scrolled_view_rect.mTop)  -			{ -				const LLFontGL *num_font = LLFontGL::getFontMonospace(); -				const LLWString ltext = utf8str_to_wstring(llformat("%d", line.mLineNum )); -				BOOL is_cur_line = cursor_line == line.mLineNum; -				const U8 style = is_cur_line ? LLFontGL::BOLD : LLFontGL::NORMAL; -				const LLColor4 fg_color = is_cur_line ? mCursorColor : mReadOnlyFgColor; -				num_font->render(  -					ltext, // string to draw -					0, // begin offset -					UI_TEXTEDITOR_LINE_NUMBER_MARGIN - 2, // x -					line_bottom, // y -					fg_color,  -					LLFontGL::RIGHT, // horizontal alignment -					LLFontGL::BOTTOM, // vertical alignment -					style, -					LLFontGL::NO_SHADOW, -					S32_MAX, // max chars -					UI_TEXTEDITOR_LINE_NUMBER_MARGIN - 2); // max pixels -				last_line_num = line.mLineNum; -			} -		} -	} -} -  void LLTextEditor::draw()  {  	{ @@ -2270,7 +2196,6 @@ void LLTextEditor::draw()  	}  	LLTextBase::draw(); -	drawLineNumbers();      drawPreeditMarker(); diff --git a/indra/llui/lltexteditor.h b/indra/llui/lltexteditor.h index 404275026c..2408613824 100755 --- a/indra/llui/lltexteditor.h +++ b/indra/llui/lltexteditor.h @@ -58,7 +58,6 @@ public:  		Optional<bool>			embedded_items,  								ignore_tab, -								show_line_numbers,  								commit_on_focus_lost,  								show_context_menu,  								enable_tooltip_paste, @@ -279,11 +278,11 @@ protected:  protected:  	LLUIColor			mDefaultColor; -	BOOL				mShowLineNumbers;  	bool				mAutoIndent;  	bool				mParseOnTheFly;  	void				updateLinkSegments(); +	class LLViewBorder*	mBorder;  private:  	// @@ -293,8 +292,6 @@ private:  	void			cleanStringForPaste(LLWString & clean_string);  	void			pasteTextWithLinebreaks(LLWString & clean_string); -	void			drawLineNumbers(); -  	void			onKeyStroke();  	// Concrete TextCmd sub-classes used by the LLTextEditor base class @@ -303,8 +300,6 @@ private:  	class TextCmdOverwriteChar;  	class TextCmdRemove; -	class LLViewBorder*	mBorder; -  	BOOL			mBaseDocIsPristine;  	TextCmd*		mPristineCmd; diff --git a/indra/newview/llfloaterscriptedprefs.h b/indra/newview/llfloaterscriptedprefs.h index 360c9adc92..765db75abc 100644 --- a/indra/newview/llfloaterscriptedprefs.h +++ b/indra/newview/llfloaterscriptedprefs.h @@ -25,8 +25,8 @@   * $/LicenseInfo$   */ -#ifndef LLFLOATERSCRIPTEDPREFS_H -#define LLFLOATERSCRIPTEDPREFS_H +#ifndef LL_FLOATERSCRIPTEDPREFS_H +#define LL_FLOATERSCRIPTEDPREFS_H  #include "llfloater.h" diff --git a/indra/newview/llscripteditor.cpp b/indra/newview/llscripteditor.cpp index 31d3c29af4..df46380130 100644 --- a/indra/newview/llscripteditor.cpp +++ b/indra/newview/llscripteditor.cpp @@ -29,19 +29,109 @@  #include "llscripteditor.h"  #include "llsyntaxid.h" +#include "lllocalcliprect.h" + +const S32	UI_TEXTEDITOR_LINE_NUMBER_MARGIN = 32; +const S32	UI_TEXTEDITOR_LINE_NUMBER_DIGITS = 4;  static LLDefaultChildRegistry::Register<LLScriptEditor> r("script_editor");  LLScriptEditor::Params::Params() -{ - -} +:	show_line_numbers("show_line_numbers", true) +{}  LLScriptEditor::LLScriptEditor(const Params& p)  :	LLTextEditor(p) +,	mShowLineNumbers(p.show_line_numbers) +{ +	if (mShowLineNumbers) +	{ +		mHPad += UI_TEXTEDITOR_LINE_NUMBER_MARGIN; +		updateRects(); +	} +} + +void LLScriptEditor::draw()  { +	{ +		// pad clipping rectangle so that cursor can draw at full width +		// when at left edge of mVisibleTextRect +		LLRect clip_rect(mVisibleTextRect); +		clip_rect.stretch(1); +		LLLocalClipRect clip(clip_rect); +	} +	LLTextBase::draw(); +	drawLineNumbers(); +	 +    drawPreeditMarker(); +	 +	//RN: the decision was made to always show the orange border for keyboard focus but do not put an insertion caret +	// when in readonly mode +	mBorder->setKeyboardFocusHighlight( hasFocus() );// && !mReadOnly); +} + +void LLScriptEditor::drawLineNumbers() +{ +	LLGLSUIDefault gls_ui; +	LLRect scrolled_view_rect = getVisibleDocumentRect(); +	LLRect content_rect = getVisibleTextRect(); +	LLLocalClipRect clip(content_rect); +	S32 first_line = getFirstVisibleLine(); +	S32 num_lines = getLineCount(); +	if (first_line >= num_lines) +	{ +		return; +	} +	 +	S32 cursor_line = mLineInfoList[getLineNumFromDocIndex(mCursorPos)].mLineNum; +	 +	if (mShowLineNumbers) +	{ +		S32 left = 0; +		S32 top = getRect().getHeight(); +		S32 bottom = 0; +		 +		gl_rect_2d(left, top, UI_TEXTEDITOR_LINE_NUMBER_MARGIN, bottom, mReadOnlyBgColor.get() ); // line number area always read-only +		gl_rect_2d(UI_TEXTEDITOR_LINE_NUMBER_MARGIN, top, UI_TEXTEDITOR_LINE_NUMBER_MARGIN-1, bottom, LLColor4::grey3); // separator +		 +		S32 last_line_num = -1; +		 +		for (S32 cur_line = first_line; cur_line < num_lines; cur_line++) +		{ +			line_info& line = mLineInfoList[cur_line]; +			 +			if ((line.mRect.mTop - scrolled_view_rect.mBottom) < mVisibleTextRect.mBottom) +			{ +				break; +			} +			 +			S32 line_bottom = line.mRect.mBottom - scrolled_view_rect.mBottom + mVisibleTextRect.mBottom; +			// draw the line numbers +			if(line.mLineNum != last_line_num && line.mRect.mTop <= scrolled_view_rect.mTop) +			{ +				const LLFontGL *num_font = LLFontGL::getFontMonospace(); +				const LLWString ltext = utf8str_to_wstring(llformat("%d", line.mLineNum )); +				BOOL is_cur_line = cursor_line == line.mLineNum; +				const U8 style = is_cur_line ? LLFontGL::BOLD : LLFontGL::NORMAL; +				const LLColor4 fg_color = is_cur_line ? mCursorColor : mReadOnlyFgColor; +				num_font->render( +								 ltext, // string to draw +								 0, // begin offset +								 UI_TEXTEDITOR_LINE_NUMBER_MARGIN - 2, // x +								 line_bottom, // y +								 fg_color, +								 LLFontGL::RIGHT, // horizontal alignment +								 LLFontGL::BOTTOM, // vertical alignment +								 style, +								 LLFontGL::NO_SHADOW, +								 S32_MAX, // max chars +								 UI_TEXTEDITOR_LINE_NUMBER_MARGIN - 2); // max pixels +				last_line_num = line.mLineNum; +			} +		} +	}  }  void LLScriptEditor::initKeywords() diff --git a/indra/newview/llscripteditor.h b/indra/newview/llscripteditor.h index d3e18021f9..8c5ab362a3 100644 --- a/indra/newview/llscripteditor.h +++ b/indra/newview/llscripteditor.h @@ -36,10 +36,16 @@ public:  	struct Params : public LLInitParam::Block<Params, LLTextEditor::Params>  	{ +		Optional<bool>		show_line_numbers; +		  		Params();  	};  	virtual ~LLScriptEditor() {}; +	 +	// LLView override +	virtual void	draw(); +	  	void	initKeywords();  	void	loadKeywords();  	void	clearSegments(); @@ -51,11 +57,13 @@ protected:  	LLScriptEditor(const Params& p);  private: +	void	drawLineNumbers();  	void	updateSegments();  	void	loadKeywords(const std::string& filename_keywords,  						 const std::string& filename_colors);  	LLKeywords	mKeywords; +	bool		mShowLineNumbers;  };  #endif // LL_SCRIPTEDITOR_H diff --git a/indra/newview/skins/default/xui/en/floater_script_ed_prefs.xml b/indra/newview/skins/default/xui/en/floater_script_ed_prefs.xml index 838ed031d6..ee996ee27c 100644 --- a/indra/newview/skins/default/xui/en/floater_script_ed_prefs.xml +++ b/indra/newview/skins/default/xui/en/floater_script_ed_prefs.xml @@ -464,7 +464,6 @@       bg_readonly_color="ScriptBackground"       bg_selected_color="ScriptSelectedColor"       cursor_color="ScriptCursorColor" -     show_line_numbers="true"       enable_tooltip_paste="true"       word_wrap="true">  default diff --git a/indra/newview/skins/default/xui/en/panel_script_ed.xml b/indra/newview/skins/default/xui/en/panel_script_ed.xml index 755d9eaf39..76677d6e95 100755 --- a/indra/newview/skins/default/xui/en/panel_script_ed.xml +++ b/indra/newview/skins/default/xui/en/panel_script_ed.xml @@ -172,8 +172,7 @@       width="487"       enable_tooltip_paste="true"       word_wrap="true" -     show_context_menu="true" -     show_line_numbers="true"> +     show_context_menu="true">          Loading...      </script_editor>      <scroll_list | 
