aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authornyamatongwe <devnull@localhost>2007-07-26 07:28:36 +0000
committernyamatongwe <devnull@localhost>2007-07-26 07:28:36 +0000
commitca93cd78c042364a4ccef5b9a60702dc4082574d (patch)
treedab4414ba658b2148c4ebd76ffb52abaac4a0fd3 /src
parent6edcf7418b8777ff542502bde920dc7c80e12347 (diff)
downloadscintilla-mirror-ca93cd78c042364a4ccef5b9a60702dc4082574d.tar.gz
Added notification for changing line state and use it to redraw if a line
state change overruns the end of painting.
Diffstat (limited to 'src')
-rw-r--r--src/Document.cxx20
-rw-r--r--src/Document.h2
-rw-r--r--src/Editor.cxx9
3 files changed, 21 insertions, 10 deletions
diff --git a/src/Document.cxx b/src/Document.cxx
index 686758d92..db9949edc 100644
--- a/src/Document.cxx
+++ b/src/Document.cxx
@@ -113,7 +113,6 @@ void Document::SetSavePoint() {
int Document::AddMark(int line, int markerNum) {
int prev = cb.AddMark(line, markerNum);
DocModification mh(SC_MOD_CHANGEMARKER, LineStart(line), 0, 0, 0, line);
- mh.line = line;
NotifyModified(mh);
return prev;
}
@@ -124,14 +123,12 @@ void Document::AddMarkSet(int line, int valueSet) {
if (m & 1)
cb.AddMark(line, i);
DocModification mh(SC_MOD_CHANGEMARKER, LineStart(line), 0, 0, 0, line);
- mh.line = line;
NotifyModified(mh);
}
void Document::DeleteMark(int line, int markerNum) {
cb.DeleteMark(line, markerNum);
DocModification mh(SC_MOD_CHANGEMARKER, LineStart(line), 0, 0, 0, line);
- mh.line = line;
NotifyModified(mh);
}
@@ -191,8 +188,7 @@ int Document::SetLevel(int line, int level) {
int prev = cb.SetLevel(line, level);
if (prev != level) {
DocModification mh(SC_MOD_CHANGEFOLD | SC_MOD_CHANGEMARKER,
- LineStart(line), 0, 0, 0);
- mh.line = line;
+ LineStart(line), 0, 0, 0, line);
mh.foldLevelNow = level;
mh.foldLevelPrev = prev;
NotifyModified(mh);
@@ -1335,11 +1331,17 @@ void Document::EnsureStyledTo(int pos) {
}
}
-void Document::IncrementStyleClock() {
- styleClock++;
- if (styleClock > 0x100000) {
- styleClock = 0;
+int Document::SetLineState(int line, int state) {
+ int statePrevious = cb.SetLineState(line, state);
+ if (state != statePrevious) {
+ DocModification mh(SC_MOD_CHANGELINESTATE, 0, 0, 0, 0, line);
+ NotifyModified(mh);
}
+ return statePrevious;
+}
+
+void Document::IncrementStyleClock() {
+ styleClock = (styleClock + 1) % 0x100000;
}
void Document::DecorationFillRange(int position, int value, int fillLength) {
diff --git a/src/Document.h b/src/Document.h
index 4b13da060..c13114b75 100644
--- a/src/Document.h
+++ b/src/Document.h
@@ -224,7 +224,7 @@ public:
void IncrementStyleClock();
void DecorationFillRange(int position, int value, int fillLength);
- int SetLineState(int line, int state) { return cb.SetLineState(line, state); }
+ int SetLineState(int line, int state);
int GetLineState(int line) { return cb.GetLineState(line); }
int GetMaxLineState() { return cb.GetMaxLineState(); }
diff --git a/src/Editor.cxx b/src/Editor.cxx
index 9d9b4b4f2..187503256 100644
--- a/src/Editor.cxx
+++ b/src/Editor.cxx
@@ -3731,6 +3731,15 @@ void Editor::NotifyModified(Document*, DocModification mh, void *) {
if (paintState == painting) {
CheckForChangeOutsidePaint(Range(mh.position, mh.position + mh.length));
}
+ if (mh.modificationType & SC_MOD_CHANGELINESTATE) {
+ if (paintState == painting) {
+ CheckForChangeOutsidePaint(
+ Range(pdoc->LineStart(mh.line), pdoc->LineStart(mh.line+1)));
+ } else {
+ // Could check that change is before last visible line.
+ Redraw();
+ }
+ }
if (mh.modificationType & (SC_MOD_CHANGESTYLE|SC_MOD_CHANGEINDICATOR)) {
if (mh.modificationType & SC_MOD_CHANGESTYLE) {
pdoc->IncrementStyleClock();