diff options
author | nyamatongwe <devnull@localhost> | 2007-07-26 07:28:36 +0000 |
---|---|---|
committer | nyamatongwe <devnull@localhost> | 2007-07-26 07:28:36 +0000 |
commit | ca93cd78c042364a4ccef5b9a60702dc4082574d (patch) | |
tree | dab4414ba658b2148c4ebd76ffb52abaac4a0fd3 /src | |
parent | 6edcf7418b8777ff542502bde920dc7c80e12347 (diff) | |
download | scintilla-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.cxx | 20 | ||||
-rw-r--r-- | src/Document.h | 2 | ||||
-rw-r--r-- | src/Editor.cxx | 9 |
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(); |