aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--include/Scintilla.h4
-rw-r--r--include/Scintilla.iface8
-rw-r--r--src/Editor.cxx25
-rw-r--r--src/Editor.h1
-rw-r--r--src/ViewStyle.cxx2
-rw-r--r--src/ViewStyle.h1
-rw-r--r--win32/ScintillaWin.cxx2
7 files changed, 39 insertions, 4 deletions
diff --git a/include/Scintilla.h b/include/Scintilla.h
index c0bb32332..ed1102010 100644
--- a/include/Scintilla.h
+++ b/include/Scintilla.h
@@ -159,6 +159,8 @@ typedef sptr_t (*SciFnDirect)(sptr_t ptr, unsigned int iMessage, uptr_t wParam,
#define SCI_GETMARGINMASKN 2245
#define SCI_SETMARGINSENSITIVEN 2246
#define SCI_GETMARGINSENSITIVEN 2247
+#define SCI_SETMARGINCURSORN 2248
+#define SCI_GETMARGINCURSORN 2249
#define STYLE_DEFAULT 32
#define STYLE_LINENUMBER 33
#define STYLE_BRACELIGHT 34
@@ -590,7 +592,9 @@ typedef sptr_t (*SciFnDirect)(sptr_t ptr, unsigned int iMessage, uptr_t wParam,
#define SCI_SETMOUSEDOWNCAPTURES 2384
#define SCI_GETMOUSEDOWNCAPTURES 2385
#define SC_CURSORNORMAL -1
+#define SC_CURSORARROW 2
#define SC_CURSORWAIT 4
+#define SC_CURSORREVERSEARROW 7
#define SCI_SETCURSOR 2386
#define SCI_GETCURSOR 2387
#define SCI_SETCONTROLCHARSYMBOL 2388
diff --git a/include/Scintilla.iface b/include/Scintilla.iface
index b3c10ea6a..8d5db4941 100644
--- a/include/Scintilla.iface
+++ b/include/Scintilla.iface
@@ -352,6 +352,12 @@ set void SetMarginSensitiveN=2246(int margin, bool sensitive)
# Retrieve the mouse click sensitivity of a margin.
get bool GetMarginSensitiveN=2247(int margin,)
+# Set the cursor shown when the mouse is inside a margin.
+set void SetMarginCursorN=2248(int margin, int cursor)
+
+# Retrieve the cursor shown in a margin.
+get int GetMarginCursorN=2249(int margin,)
+
# Styles in range 32..38 are predefined for parts of the UI and are not used as normal styles.
# Style 39 is for future use.
enu StylesCommon=STYLE_
@@ -1540,7 +1546,9 @@ get bool GetMouseDownCaptures=2385(,)
enu CursorShape=SC_CURSOR
val SC_CURSORNORMAL=-1
+val SC_CURSORARROW=2
val SC_CURSORWAIT=4
+val SC_CURSORREVERSEARROW=7
# Sets the cursor to one of the SC_CURSOR* values.
set void SetCursor=2386(int cursorType,)
# Get cursor type.
diff --git a/src/Editor.cxx b/src/Editor.cxx
index 5b908ac6f..865633be3 100644
--- a/src/Editor.cxx
+++ b/src/Editor.cxx
@@ -5844,6 +5844,16 @@ bool Editor::PointInSelMargin(Point pt) {
}
}
+Window::Cursor Editor::GetMarginCursor(Point pt) {
+ int x = 0;
+ for (int margin = 0; margin < ViewStyle::margins; margin++) {
+ if ((pt.x >= x) && (pt.x < x + vs.ms[margin].width))
+ return static_cast<Window::Cursor>(vs.ms[margin].cursor);
+ x += vs.ms[margin].width;
+ }
+ return Window::cursorReverseArrow;
+}
+
void Editor::LineSelection(int lineCurrent_, int lineAnchor_) {
if (lineAnchor_ < lineCurrent_) {
SetSelection(pdoc->LineStart(lineCurrent_ + 1),
@@ -6201,7 +6211,7 @@ void Editor::ButtonMove(Point pt) {
} else {
if (vs.fixedColumnWidth > 0) { // There is a margin
if (PointInSelMargin(pt)) {
- DisplayCursor(Window::cursorReverseArrow);
+ DisplayCursor(GetMarginCursor(pt));
SetHotSpotRange(NULL);
return; // No need to test for selection
}
@@ -6236,7 +6246,7 @@ void Editor::ButtonUp(Point pt, unsigned int curTime, bool ctrl) {
}
if (HaveMouseCapture()) {
if (PointInSelMargin(pt)) {
- DisplayCursor(Window::cursorReverseArrow);
+ DisplayCursor(GetMarginCursor(pt));
} else {
DisplayCursor(Window::cursorText);
SetHotSpotRange(NULL);
@@ -7839,6 +7849,17 @@ sptr_t Editor::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {
else
return 0;
+ case SCI_SETMARGINCURSORN:
+ if (ValidMargin(wParam))
+ vs.ms[wParam].cursor = lParam;
+ break;
+
+ case SCI_GETMARGINCURSORN:
+ if (ValidMargin(wParam))
+ return vs.ms[wParam].cursor;
+ else
+ return 0;
+
case SCI_STYLECLEARALL:
vs.ClearStyles();
InvalidateStyleRedraw();
diff --git a/src/Editor.h b/src/Editor.h
index 97af7b089..db8a36aa1 100644
--- a/src/Editor.h
+++ b/src/Editor.h
@@ -483,6 +483,7 @@ protected: // ScintillaBase subclass needs access to much of Editor
bool PositionInSelection(int pos);
bool PointInSelection(Point pt);
bool PointInSelMargin(Point pt);
+ Window::Cursor GetMarginCursor(Point pt);
void LineSelection(int lineCurrent_, int lineAnchor_);
void WordSelection(int pos);
void DwellEnd(bool mouseMoved);
diff --git a/src/ViewStyle.cxx b/src/ViewStyle.cxx
index 1b315d17e..78ba1f78c 100644
--- a/src/ViewStyle.cxx
+++ b/src/ViewStyle.cxx
@@ -24,7 +24,7 @@ using namespace Scintilla;
#endif
MarginStyle::MarginStyle() :
- style(SC_MARGIN_SYMBOL), width(0), mask(0), sensitive(false) {
+ style(SC_MARGIN_SYMBOL), width(0), mask(0), sensitive(false), cursor(SC_CURSORREVERSEARROW) {
}
// A list of the fontnames - avoids wasting space in each style
diff --git a/src/ViewStyle.h b/src/ViewStyle.h
index cd6dc1a28..6ca488dff 100644
--- a/src/ViewStyle.h
+++ b/src/ViewStyle.h
@@ -20,6 +20,7 @@ public:
int width;
int mask;
bool sensitive;
+ int cursor;
MarginStyle();
};
diff --git a/win32/ScintillaWin.cxx b/win32/ScintillaWin.cxx
index 603e9b6f8..d4d3b24da 100644
--- a/win32/ScintillaWin.cxx
+++ b/win32/ScintillaWin.cxx
@@ -785,7 +785,7 @@ sptr_t ScintillaWin::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam
::GetCursorPos(&pt);
::ScreenToClient(MainHWND(), &pt);
if (PointInSelMargin(Point(pt.x, pt.y))) {
- DisplayCursor(Window::cursorReverseArrow);
+ DisplayCursor(GetMarginCursor(Point(pt.x, pt.y)));
} else if (PointInSelection(Point(pt.x, pt.y)) && !SelectionEmpty()) {
DisplayCursor(Window::cursorArrow);
} else if (PointIsHotspot(Point(pt.x, pt.y))) {