diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/Decoration.cxx | 40 | ||||
| -rw-r--r-- | src/Decoration.h | 21 | ||||
| -rw-r--r-- | src/EditView.cxx | 12 | ||||
| -rw-r--r-- | src/Editor.cxx | 18 | ||||
| -rw-r--r-- | src/PositionCache.cxx | 4 | 
5 files changed, 56 insertions, 39 deletions
| diff --git a/src/Decoration.cxx b/src/Decoration.cxx index ed8b91ddc..4817af304 100644 --- a/src/Decoration.cxx +++ b/src/Decoration.cxx @@ -26,7 +26,7 @@  using namespace Scintilla;  #endif -Decoration::Decoration(int indicator_) : next(0), indicator(indicator_) { +Decoration::Decoration(int indicator_) : indicator(indicator_), next(0) {  }  Decoration::~Decoration() { @@ -43,7 +43,7 @@ DecorationList::DecorationList() : currentIndicator(0), currentValue(1), current  DecorationList::~DecorationList() {  	Decoration *deco = root;  	while (deco) { -		Decoration *decoNext = deco->next; +		Decoration *decoNext = deco->Next();  		delete deco;  		deco = decoNext;  	} @@ -52,8 +52,8 @@ DecorationList::~DecorationList() {  }  Decoration *DecorationList::DecorationFromIndicator(int indicator) { -	for (Decoration *deco=root; deco; deco = deco->next) { -		if (deco->indicator == indicator) { +	for (Decoration *deco=root; deco; deco = deco->Next()) { +		if (deco->Indicator() == indicator) {  			return deco;  		}  	} @@ -68,9 +68,9 @@ Decoration *DecorationList::Create(int indicator, int length) {  	Decoration *decoPrev = 0;  	Decoration *deco = root; -	while (deco && (deco->indicator < indicator)) { +	while (deco && (deco->Indicator() < indicator)) {  		decoPrev = deco; -		deco = deco->next; +		deco = deco->Next();  	}  	if (decoPrev == 0) {  		decoNew->next = root; @@ -85,17 +85,17 @@ Decoration *DecorationList::Create(int indicator, int length) {  void DecorationList::Delete(int indicator) {  	Decoration *decoToDelete = 0;  	if (root) { -		if (root->indicator == indicator) { +		if (root->Indicator() == indicator) {  			decoToDelete = root; -			root = root->next; +			root = root->Next();  		} else {  			Decoration *deco=root; -			while (deco->next && !decoToDelete) { -				if (deco->next && deco->next->indicator == indicator) { -					decoToDelete = deco->next; -					deco->next = decoToDelete->next; +			while (deco->Next() && !decoToDelete) { +				if (deco->Next() && deco->Next()->Indicator() == indicator) { +					decoToDelete = deco->Next(); +					deco->next = decoToDelete->Next();  				} else { -					deco = deco->next; +					deco = deco->Next();  				}  			}  		} @@ -133,7 +133,7 @@ bool DecorationList::FillRange(int &position, int value, int &fillLength) {  void DecorationList::InsertSpace(int position, int insertLength) {  	const bool atEnd = position == lengthDocument;  	lengthDocument += insertLength; -	for (Decoration *deco=root; deco; deco = deco->next) { +	for (Decoration *deco=root; deco; deco = deco->Next()) {  		deco->rs.InsertSpace(position, insertLength);  		if (atEnd) {  			deco->rs.FillRange(position, 0, insertLength); @@ -144,7 +144,7 @@ void DecorationList::InsertSpace(int position, int insertLength) {  void DecorationList::DeleteRange(int position, int deleteLength) {  	lengthDocument -= deleteLength;  	Decoration *deco; -	for (deco=root; deco; deco = deco->next) { +	for (deco=root; deco; deco = deco->Next()) {  		deco->rs.DeleteRange(position, deleteLength);  	}  	DeleteAnyEmpty(); @@ -154,20 +154,20 @@ void DecorationList::DeleteAnyEmpty() {  	Decoration *deco = root;  	while (deco) {  		if ((lengthDocument == 0) || deco->Empty()) { -			Delete(deco->indicator); +			Delete(deco->Indicator());  			deco = root;  		} else { -			deco = deco->next; +			deco = deco->Next();  		}  	}  }  int DecorationList::AllOnFor(int position) const {  	int mask = 0; -	for (Decoration *deco=root; deco; deco = deco->next) { +	for (Decoration *deco=root; deco; deco = deco->Next()) {  		if (deco->rs.ValueAt(position)) { -			if (deco->indicator < INDIC_IME) { -				mask |= 1 << deco->indicator; +			if (deco->Indicator() < INDIC_IME) { +				mask |= 1 << deco->Indicator();  			}  		}  	} diff --git a/src/Decoration.h b/src/Decoration.h index a0c434af8..6f5fe6283 100644 --- a/src/Decoration.h +++ b/src/Decoration.h @@ -12,15 +12,21 @@ namespace Scintilla {  #endif  class Decoration { +	int indicator;  public:  	Decoration *next;  	RunStyles rs; -	int indicator;  	explicit Decoration(int indicator_);  	~Decoration();  	bool Empty() const; +	Decoration *Next() const { +		return next; +	} +	int Indicator() const { +		return indicator; +	}  };  class DecorationList { @@ -32,13 +38,17 @@ class DecorationList {  	Decoration *Create(int indicator, int length);  	void Delete(int indicator);  	void DeleteAnyEmpty(); -public:  	Decoration *root;  	bool clickNotified; +public:  	DecorationList();  	~DecorationList(); +	Decoration *Root() const { +		return root; +	} +  	void SetCurrentIndicator(int indicator);  	int GetCurrentIndicator() const { return currentIndicator; } @@ -55,6 +65,13 @@ public:  	int ValueAt(int indicator, int position);  	int Start(int indicator, int position);  	int End(int indicator, int position); + +	virtual bool ClickNotified() const { +		return clickNotified; +	} +	virtual void SetClickNotified(bool notified) { +		clickNotified = notified; +	}  };  #ifdef SCI_NAMESPACE diff --git a/src/EditView.cxx b/src/EditView.cxx index 90fa991ab..98db39985 100644 --- a/src/EditView.cxx +++ b/src/EditView.cxx @@ -1015,8 +1015,8 @@ static void DrawIndicators(Surface *surface, const EditModel &model, const ViewS  	const Sci::Position lineStart = ll->LineStart(subLine);  	const Sci::Position posLineEnd = posLineStart + lineEnd; -	for (Decoration *deco = model.pdoc->decorations.root; deco; deco = deco->next) { -		if (under == vsDraw.indicators[deco->indicator].under) { +	for (Decoration *deco = model.pdoc->decorations.Root(); deco; deco = deco->Next()) { +		if (under == vsDraw.indicators[deco->Indicator()].under) {  			Sci::Position startPos = posLineStart + lineStart;  			if (!deco->rs.ValueAt(startPos)) {  				startPos = deco->rs.EndRun(startPos); @@ -1024,12 +1024,12 @@ static void DrawIndicators(Surface *surface, const EditModel &model, const ViewS  			while ((startPos < posLineEnd) && (deco->rs.ValueAt(startPos))) {  				const Range rangeRun(deco->rs.StartRun(startPos), deco->rs.EndRun(startPos));  				const Sci::Position endPos = std::min(rangeRun.end, posLineEnd); -				const bool hover = vsDraw.indicators[deco->indicator].IsDynamic() && +				const bool hover = vsDraw.indicators[deco->Indicator()].IsDynamic() &&  					rangeRun.ContainsCharacter(hoverIndicatorPos);  				const int value = deco->rs.ValueAt(startPos);  				Indicator::DrawState drawState = hover ? Indicator::drawHover : Indicator::drawNormal;  				const Sci::Position posSecond = model.pdoc->MovePositionOutsideChar(rangeRun.First() + 1, 1); -				DrawIndicator(deco->indicator, startPos - posLineStart, endPos - posLineStart, +				DrawIndicator(deco->Indicator(), startPos - posLineStart, endPos - posLineStart,  					surface, vsDraw, ll, xStart, rcLine, posSecond - posLineStart, subLine, drawState, value);  				startPos = endPos;  				if (!deco->rs.ValueAt(startPos)) { @@ -1619,10 +1619,10 @@ void EditView::DrawForeground(Surface *surface, const EditModel &model, const Vi  			}  			if (vsDraw.indicatorsSetFore > 0) {  				// At least one indicator sets the text colour so see if it applies to this segment -				for (Decoration *deco = model.pdoc->decorations.root; deco; deco = deco->next) { +				for (Decoration *deco = model.pdoc->decorations.Root(); deco; deco = deco->Next()) {  					const int indicatorValue = deco->rs.ValueAt(ts.start + posLineStart);  					if (indicatorValue) { -						const Indicator &indicator = vsDraw.indicators[deco->indicator]; +						const Indicator &indicator = vsDraw.indicators[deco->Indicator()];  						const bool hover = indicator.IsDynamic() &&  							((model.hoverIndicatorPos >= ts.start + posLineStart) &&  							(model.hoverIndicatorPos <= ts.end() + posLineStart)); diff --git a/src/Editor.cxx b/src/Editor.cxx index e7e494a6c..5b690058d 100644 --- a/src/Editor.cxx +++ b/src/Editor.cxx @@ -2097,12 +2097,12 @@ void Editor::ClearAll() {  }  void Editor::ClearDocumentStyle() { -	Decoration *deco = pdoc->decorations.root; +	Decoration *deco = pdoc->decorations.Root();  	while (deco) {  		// Save next in case deco deleted -		Decoration *decoNext = deco->next; -		if (deco->indicator < INDIC_CONTAINER) { -			pdoc->DecorationSetCurrentIndicator(deco->indicator); +		Decoration *decoNext = deco->Next(); +		if (deco->Indicator() < INDIC_CONTAINER) { +			pdoc->DecorationSetCurrentIndicator(deco->Indicator());  			pdoc->DecorationFillRange(0, 0, pdoc->Length());  		}  		deco = decoNext; @@ -2407,9 +2407,9 @@ void Editor::NotifyPainted() {  void Editor::NotifyIndicatorClick(bool click, Sci::Position position, int modifiers) {  	int mask = pdoc->decorations.AllOnFor(position); -	if ((click && mask) || pdoc->decorations.clickNotified) { +	if ((click && mask) || pdoc->decorations.ClickNotified()) {  		SCNotification scn = {}; -		pdoc->decorations.clickNotified = click; +		pdoc->decorations.SetClickNotified(click);  		scn.nmhdr.code = click ? SCN_INDICATORCLICK : SCN_INDICATORRELEASE;  		scn.modifiers = modifiers;  		scn.position = position; @@ -4622,9 +4622,9 @@ void Editor::SetHoverIndicatorPosition(Sci::Position position) {  	if (vs.indicatorsDynamic == 0)  		return;  	if (position != INVALID_POSITION) { -		for (Decoration *deco = pdoc->decorations.root; deco; deco = deco->next) { -			if (vs.indicators[deco->indicator].IsDynamic()) { -				if (pdoc->decorations.ValueAt(deco->indicator, position)) { +		for (Decoration *deco = pdoc->decorations.Root(); deco; deco = deco->Next()) { +			if (vs.indicators[deco->Indicator()].IsDynamic()) { +				if (pdoc->decorations.ValueAt(deco->Indicator(), position)) {  					hoverIndicatorPos = position;  				}  			} diff --git a/src/PositionCache.cxx b/src/PositionCache.cxx index 66d944d26..2850e4fbd 100644 --- a/src/PositionCache.cxx +++ b/src/PositionCache.cxx @@ -483,8 +483,8 @@ BreakFinder::BreakFinder(const LineLayout *ll_, const Selection *psel, Range lin  		}  	}  	if (pvsDraw && pvsDraw->indicatorsSetFore > 0) { -		for (Decoration *deco = pdoc->decorations.root; deco; deco = deco->next) { -			if (pvsDraw->indicators[deco->indicator].OverridesTextFore()) { +		for (Decoration *deco = pdoc->decorations.Root(); deco; deco = deco->Next()) { +			if (pvsDraw->indicators[deco->Indicator()].OverridesTextFore()) {  				Sci::Position startPos = deco->rs.EndRun(posLineStart);  				while (startPos < (posLineStart + lineRange.end)) {  					Insert(startPos - posLineStart); | 
