diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Editor.cxx | 24 | ||||
-rw-r--r-- | src/ViewStyle.cxx | 2 | ||||
-rw-r--r-- | src/ViewStyle.h | 1 |
3 files changed, 23 insertions, 4 deletions
diff --git a/src/Editor.cxx b/src/Editor.cxx index 6d2676ffb..c33c69fd0 100644 --- a/src/Editor.cxx +++ b/src/Editor.cxx @@ -1241,17 +1241,20 @@ void Editor::Paint(Surface *surfaceWindow, PRectangle rcArea) { widthOverstrikeCaret = 3; if (((caret.active && caret.on) || (posDrag >= 0)) && xposCaret >= 0) { PRectangle rcCaret = rcLine; + int caretWidthOffset = 0; + if ((offset > 0) && (vs.caretWidth > 1)) + caretWidthOffset = 1; // Move back so overlaps both character cells. if (posDrag >= 0) { - rcCaret.left = xposCaret; - rcCaret.right = xposCaret + 1; + rcCaret.left = xposCaret - caretWidthOffset; + rcCaret.right = rcCaret.left + vs.caretWidth; } else { if (inOverstrike) { rcCaret.top = rcCaret.bottom - 2; rcCaret.left = xposCaret + 1; rcCaret.right = rcCaret.left + widthOverstrikeCaret - 1; } else { - rcCaret.left = xposCaret; - rcCaret.right = xposCaret + 1; + rcCaret.left = xposCaret - caretWidthOffset; + rcCaret.right = rcCaret.left + vs.caretWidth; } } surface->FillRectangle(rcCaret, vs.caretcolour.allocated); @@ -4066,6 +4069,19 @@ long Editor::WndProc(unsigned int iMessage, unsigned long wParam, long lParam) { case SCI_GETCARETFORE: return vs.caretcolour.desired.AsLong(); + case SCI_SETCARETWIDTH: + if (wParam <= 1) + vs.caretWidth = 1; + else if (wParam >= 3) + vs.caretWidth = 3; + else + vs.caretWidth = wParam; + InvalidateStyleRedraw(); + break; + + case SCI_GETCARETWIDTH: + return vs.caretWidth; + case SCI_ASSIGNCMDKEY: kmap.AssignCmdKey(Platform::LowShortFromLong(wParam), Platform::HighShortFromLong(wParam), lParam); diff --git a/src/ViewStyle.cxx b/src/ViewStyle.cxx index 9b7a8535e..4d6cf20c8 100644 --- a/src/ViewStyle.cxx +++ b/src/ViewStyle.cxx @@ -75,6 +75,7 @@ ViewStyle::ViewStyle(const ViewStyle &source) { caretcolour.desired = source.caretcolour.desired; edgecolour.desired = source.edgecolour.desired; edgeState = source.edgeState; + caretWidth = source.caretWidth; leftMarginWidth = source.leftMarginWidth; rightMarginWidth = source.rightMarginWidth; for (int i=0;i < margins; i++) { @@ -123,6 +124,7 @@ void ViewStyle::Init() { caretcolour.desired = Colour(0, 0, 0); edgecolour.desired = Colour(0xc0, 0xc0, 0xc0); edgeState = EDGE_NONE; + caretWidth = 1; leftMarginWidth = 1; rightMarginWidth = 1; diff --git a/src/ViewStyle.h b/src/ViewStyle.h index 5b0ab1925..79ad82670 100644 --- a/src/ViewStyle.h +++ b/src/ViewStyle.h @@ -61,6 +61,7 @@ public: ColourPair caretcolour; ColourPair edgecolour; int edgeState; + int caretWidth; ViewStyle(); ViewStyle(const ViewStyle &source); |