aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorNeil <nyamatongwe@gmail.com>2017-04-01 13:16:24 +1100
committerNeil <nyamatongwe@gmail.com>2017-04-01 13:16:24 +1100
commit01a6a4f0f58ccf38384132ea3083b28f140e0e30 (patch)
tree386800ce302d6490f2a7f5b5015f9ba07a1dcea9 /src
parent0c9d87b081f9dd3856194f71f1643c99994d0b95 (diff)
downloadscintilla-mirror-01a6a4f0f58ccf38384132ea3083b28f140e0e30.tar.gz
More encapsulation for Decoration and DecorationList.
Diffstat (limited to 'src')
-rw-r--r--src/Decoration.cxx40
-rw-r--r--src/Decoration.h21
-rw-r--r--src/EditView.cxx12
-rw-r--r--src/Editor.cxx18
-rw-r--r--src/PositionCache.cxx4
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);