diff options
author | nyamatongwe <unknown> | 2007-07-25 02:53:19 +0000 |
---|---|---|
committer | nyamatongwe <unknown> | 2007-07-25 02:53:19 +0000 |
commit | 8b609f7f8901b3ae3b8171a21858f35ae9703d15 (patch) | |
tree | 3d764bf555181cb56f3a0a180b60a816a51cdc49 | |
parent | 5ae581a400e6c410f5e611672fc3bbcc1df9a198 (diff) | |
download | scintilla-mirror-8b609f7f8901b3ae3b8171a21858f35ae9703d15.tar.gz |
Fix bug #1404276 by wrapping the line which just had the character added
before ensuring the caret is visible. Also sets scroll bar in case line
added by wrapping.
-rw-r--r-- | src/Editor.cxx | 26 | ||||
-rw-r--r-- | src/Editor.h | 1 |
2 files changed, 20 insertions, 7 deletions
diff --git a/src/Editor.cxx b/src/Editor.cxx index b27775750..a8b6d6509 100644 --- a/src/Editor.cxx +++ b/src/Editor.cxx @@ -1264,6 +1264,16 @@ void Editor::NeedWrapping(int docLineStart, int docLineEnd) { } } +bool Editor::WrapOneLine(Surface *surface, int lineToWrap) { + AutoLineLayout ll(llc, RetrieveLineLayout(lineToWrap)); + int linesWrapped = 1; + if (ll) { + LayoutLine(lineToWrap, surface, vs, ll, wrapWidth); + linesWrapped = ll->lines; + } + return cs.SetHeight(lineToWrap, linesWrapped); +} + // Check if wrapping needed and perform any needed wrapping. // fullwrap: if true, all lines which need wrapping will be done, // in this single call. @@ -1340,13 +1350,7 @@ bool Editor::WrapLines(bool fullWrap, int priorityWrapLineStart) { // Platform::DebugPrintf("Wraplines: full = %d, priorityStart = %d (wrapping: %d to %d)\n", fullWrap, priorityWrapLineStart, lineToWrap, lastLineToWrap); // Platform::DebugPrintf("Pending wraps: %d to %d\n", wrapStart, wrapEnd); while (lineToWrap < lastLineToWrap) { - AutoLineLayout ll(llc, RetrieveLineLayout(lineToWrap)); - int linesWrapped = 1; - if (ll) { - LayoutLine(lineToWrap, surface, vs, ll, wrapWidth); - linesWrapped = ll->lines; - } - if (cs.SetHeight(lineToWrap, linesWrapped)) { + if (WrapOneLine(surface, lineToWrap)) { wrapOccurred = true; } lineToWrap++; @@ -3306,6 +3310,14 @@ void Editor::AddCharUTF(char *s, unsigned int len, bool treatAsDBCS) { if (charReplaceAction) { pdoc->EndUndoAction(); } + // If in wrap mode rewrap current line so EnsureCaretVisible has accurate information + if (wrapState != eWrapNone) { + AutoSurface surface(this); + if (surface) { + WrapOneLine(surface, pdoc->LineFromPosition(currentPos)); + } + SetScrollBars(); + } EnsureCaretVisible(); // Avoid blinking during rapid typing: ShowCaretAtCurrentPosition(); diff --git a/src/Editor.h b/src/Editor.h index 2115af7d9..049cc373f 100644 --- a/src/Editor.h +++ b/src/Editor.h @@ -299,6 +299,7 @@ protected: // ScintillaBase subclass needs access to much of Editor virtual void UpdateSystemCaret(); void NeedWrapping(int docLineStart = 0, int docLineEnd = wrapLineLarge); + bool WrapOneLine(Surface *surface, int lineToWrap); bool WrapLines(bool fullWrap, int priorityWrapLineStart); void LinesJoin(); void LinesSplit(int pixelWidth); |