diff options
author | nyamatongwe <unknown> | 2007-07-25 02:45:37 +0000 |
---|---|---|
committer | nyamatongwe <unknown> | 2007-07-25 02:45:37 +0000 |
commit | 5ae581a400e6c410f5e611672fc3bbcc1df9a198 (patch) | |
tree | 8bfbeda92365295ea35c52ca32bf6ceb3df8f00a | |
parent | 45fddf64aa6d4cdfb403f21c7627a29d94f6b39f (diff) | |
download | scintilla-mirror-5ae581a400e6c410f5e611672fc3bbcc1df9a198.tar.gz |
Fixed bugs where caret was not shown at start of wrapped lines or was shown
at both the start of one line and the end of the previous line.
-rw-r--r-- | src/Editor.cxx | 5 | ||||
-rw-r--r-- | src/PositionCache.cxx | 5 | ||||
-rw-r--r-- | src/PositionCache.h | 1 |
3 files changed, 8 insertions, 3 deletions
diff --git a/src/Editor.cxx b/src/Editor.cxx index 3373424da..b27775750 100644 --- a/src/Editor.cxx +++ b/src/Editor.cxx @@ -2915,8 +2915,7 @@ void Editor::Paint(Surface *surfaceWindow, PRectangle rcArea) { // Draw the Caret if (lineDoc == lineCaret) { int offset = Platform::Minimum(posCaret - rangeLine.start, ll->maxLineLength); - if ((offset >= ll->LineStart(subLine)) && - ((offset < ll->LineStart(subLine + 1)) || offset == ll->numCharsInLine)) { + if (ll->InLine(offset, subLine)) { int xposCaret = ll->positions[offset] - ll->positions[ll->LineStart(subLine)] + xStart; if (actualWrapVisualStartIndent != 0) { @@ -2945,7 +2944,7 @@ void Editor::Paint(Surface *surfaceWindow, PRectangle rcArea) { if (widthOverstrikeCaret < 3) // Make sure its visible widthOverstrikeCaret = 3; - if (offset > 0) + if (offset > ll->LineStart(subLine)) caretWidthOffset = 1; // Move back so overlaps both character cells. if (posDrag >= 0) { /* Dragging text, use a line caret */ diff --git a/src/PositionCache.cxx b/src/PositionCache.cxx index 13140b779..354dddd1a 100644 --- a/src/PositionCache.cxx +++ b/src/PositionCache.cxx @@ -126,6 +126,11 @@ int LineLayout::LineLastVisible(int line) const { } } +bool LineLayout::InLine(int offset, int line) const { + return ((offset >= LineStart(line)) && (offset < LineStart(line + 1)) || + ((offset == numCharsInLine) && (line == (lines-1)))); +} + void LineLayout::SetLineStart(int line, int start) { if ((line >= lenLineStarts) && (line != 0)) { int newMaxLines = line + 20; diff --git a/src/PositionCache.h b/src/PositionCache.h index ec1014c96..764702fce 100644 --- a/src/PositionCache.h +++ b/src/PositionCache.h @@ -59,6 +59,7 @@ public: void Invalidate(validLevel validity_); int LineStart(int line) const; int LineLastVisible(int line) const; + bool InLine(int offset, int line) const; void SetLineStart(int line, int start); void SetBracesHighlight(Range rangeLine, Position braces[], char bracesMatchStyle, int xHighlight); |