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 /src | |
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.
Diffstat (limited to 'src')
-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); |