Skip to content

Commit

Permalink
Highlight current line with a light gray outline frame / box by defau…
Browse files Browse the repository at this point in the history
…lt (like VS and VSCode, see https://sourceforge.net/p/scintilla/feature-requests/1240/).

Make "always highlight current line" configurable.
  • Loading branch information
zufuliu committed Nov 26, 2018
1 parent da010ca commit d99c04d
Show file tree
Hide file tree
Showing 6 changed files with 66 additions and 27 deletions.
4 changes: 2 additions & 2 deletions src/EditLexers/stlDefault.c
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ EDITLEXER lexDefault = { SCLEX_NULL, NP2LEX_DEFAULT, EDITLEXER_HOLE(L"Default Te
{ STYLE_INDENTGUIDE, 63105, EDITSTYLE_HOLE(L"Indentation Guide (Color)"), L"fore:#FF8000" },
{ SCI_SETSELFORE + SCI_SETSELBACK, 63106, EDITSTYLE_HOLE(L"Selected Text (Color)"), L"back:#0A246A; eolfilled; alpha:95" },
{ SCI_SETWHITESPACEFORE + SCI_SETWHITESPACEBACK + SCI_SETWHITESPACESIZE, 63107, EDITSTYLE_HOLE(L"Whitespace (Color, Size 0-5)"), L"fore:#FF4000" },
{ SCI_SETCARETLINEBACK, 63108, EDITSTYLE_HOLE(L"Current Line Background (Color)"), L"back:#FFFF00; alpha:50" },
{ SCI_SETCARETLINEBACK, 63108, EDITSTYLE_HOLE(L"Current Line"), L"size:2; fore:#C2C0C3; back:#FFFF00; alpha:90" },
{ SCI_SETCARETFORE + SCI_SETCARETWIDTH, 63109, EDITSTYLE_HOLE(L"Caret (Color)"), L"" },
{ SCI_SETEDGECOLOUR, 63110, EDITSTYLE_HOLE(L"Long Line Marker (Color)"), L"fore:#FFC000" },
{ SCI_SETEXTRAASCENT + SCI_SETEXTRADESCENT, 63111, EDITSTYLE_HOLE(L"Extra Line Spacing (Size)"), L"size:2" },
Expand All @@ -32,7 +32,7 @@ EDITLEXER lexDefault = { SCLEX_NULL, NP2LEX_DEFAULT, EDITLEXER_HOLE(L"Default Te
{ STYLE_INDENTGUIDE, 63117, EDITSTYLE_HOLE(L"2nd Indentation Guide (Color)"), L"fore:#FF8000" },
{ SCI_SETSELFORE + SCI_SETSELBACK, 63118, EDITSTYLE_HOLE(L"2nd Selected Text (Color)"), L"eolfilled" },
{ SCI_SETWHITESPACEFORE + SCI_SETWHITESPACEBACK + SCI_SETWHITESPACESIZE, 63119, EDITSTYLE_HOLE(L"2nd Whitespace (Color, Size 0-5)"), L"fore:#FF4000" },
{ SCI_SETCARETLINEBACK, 63120, EDITSTYLE_HOLE(L"2nd Current Line Background (Color)"), L"back:#FFFF00; alpha:50" },
{ SCI_SETCARETLINEBACK, 63120, EDITSTYLE_HOLE(L"2nd Current Line"), L"size:2; fore:#C2C0C3; back:#FFFF00; alpha:90" },
{ SCI_SETCARETFORE + SCI_SETCARETWIDTH, 63121, EDITSTYLE_HOLE(L"2nd Caret (Color)"), L"" },
{ SCI_SETEDGECOLOUR, 63122, EDITSTYLE_HOLE(L"2nd Long Line Marker (Color)"), L"fore:#FFC000" },
{ SCI_SETEXTRAASCENT + SCI_SETEXTRADESCENT, 63123, EDITSTYLE_HOLE(L"2nd Extra Line Spacing (Size)"), L"" },
Expand Down
26 changes: 19 additions & 7 deletions src/Notepad2.c
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,8 @@ static BOOL bMatchBraces;
static BOOL bAutoIndent;
static BOOL bAutoCloseTags;
static BOOL bShowIndentGuides;
BOOL bHighlightCurrentLine;
BOOL bHighlightCurrentLineAlways;
INT iHighlightCurrentLine;
BOOL bTabsAsSpaces;
BOOL bTabsAsSpacesG;
BOOL bTabIndents;
Expand Down Expand Up @@ -2385,7 +2386,9 @@ void MsgInitMenu(HWND hwnd, WPARAM wParam, LPARAM lParam) {
CheckCmd(hmenu, IDM_VIEW_FULLSCREEN_HIDE_STATUS, bFullScreenHideStatusbar);

CheckCmd(hmenu, IDM_VIEW_AUTOCLOSETAGS, bAutoCloseTags);
CheckCmd(hmenu, IDM_VIEW_HIGHLIGHTCURRENTLINE, bHighlightCurrentLine);
i = IDM_VIEW_HIGHLIGHTCURRENTLINE_NONE + iHighlightCurrentLine;
CheckMenuRadioItem(hmenu, IDM_VIEW_HIGHLIGHTCURRENTLINE_NONE, IDM_VIEW_HIGHLIGHTCURRENTLINE_FRAME, i, MF_BYCOMMAND);
CheckCmd(hmenu, IDM_VIEW_HIGHLIGHTCURRENTLINE_ALWAYS, bHighlightCurrentLineAlways);

CheckCmd(hmenu, IDM_VIEW_REUSEWINDOW, bReuseWindow);
CheckCmd(hmenu, IDM_VIEW_SINGLEFILEINSTANCE, bSingleFileInstance);
Expand Down Expand Up @@ -3992,9 +3995,16 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam) {
bAutoCloseTags = !bAutoCloseTags;
break;

case IDM_VIEW_HIGHLIGHTCURRENTLINE:
bHighlightCurrentLine = !bHighlightCurrentLine;
Style_SetCurrentLineBackground(hwndEdit);
case IDM_VIEW_HIGHLIGHTCURRENTLINE_NONE:
case IDM_VIEW_HIGHLIGHTCURRENTLINE_BACK:
case IDM_VIEW_HIGHLIGHTCURRENTLINE_FRAME:
iHighlightCurrentLine = LOWORD(wParam) - IDM_VIEW_HIGHLIGHTCURRENTLINE_NONE;
Style_HighlightCurrentLine(hwndEdit);
break;

case IDM_VIEW_HIGHLIGHTCURRENTLINE_ALWAYS:
bHighlightCurrentLineAlways = !bHighlightCurrentLineAlways;
SendMessage(hwndEdit, SCI_SETCARETLINEVISIBLEALWAYS, bHighlightCurrentLineAlways, 0);
break;

case IDM_VIEW_ZOOMIN:
Expand Down Expand Up @@ -5259,7 +5269,9 @@ void LoadSettings(void) {
bShowUnicodeControlCharacter = IniSectionGetBool(pIniSection, L"ShowUnicodeControlCharacter", 0);

bMatchBraces = IniSectionGetBool(pIniSection, L"MatchBraces", 1);
bHighlightCurrentLine = IniSectionGetBool(pIniSection, L"HighlightCurrentLine", 0);
iHighlightCurrentLine = IniSectionGetInt(pIniSection, L"HighlightCurrentLine", 12);
bHighlightCurrentLineAlways = iHighlightCurrentLine > 10;
iHighlightCurrentLine = clamp_i(iHighlightCurrentLine % 10, 0, 2);
bShowIndentGuides = IniSectionGetBool(pIniSection, L"ShowIndentGuides", 0);

bAutoIndent = IniSectionGetBool(pIniSection, L"AutoIndent", 1);
Expand Down Expand Up @@ -5573,7 +5585,7 @@ void SaveSettings(BOOL bSaveSettingsNow) {
IniSectionSetBoolEx(pIniSection, L"ShowWordWrapSymbols", bShowWordWrapSymbols, 0);
IniSectionSetBoolEx(pIniSection, L"ShowUnicodeControlCharacter", bShowUnicodeControlCharacter, 0);
IniSectionSetBoolEx(pIniSection, L"MatchBraces", bMatchBraces, 1);
IniSectionSetBoolEx(pIniSection, L"HighlightCurrentLine", bHighlightCurrentLine, 0);
IniSectionSetIntEx(pIniSection, L"HighlightCurrentLine", iHighlightCurrentLine + (bHighlightCurrentLineAlways ? 10 : 0), 12);
IniSectionSetBoolEx(pIniSection, L"ShowIndentGuides", bShowIndentGuides, 0);
IniSectionSetBoolEx(pIniSection, L"AutoIndent", bAutoIndent, 1);
IniSectionSetBoolEx(pIniSection, L"AutoCloseTags", bAutoCloseTags, 1);
Expand Down
12 changes: 10 additions & 2 deletions src/Notepad2.rc
Original file line number Diff line number Diff line change
Expand Up @@ -388,7 +388,14 @@ BEGIN
//MENUITEM "Show Call Tips", IDM_VIEW_SHOWCALLTIPS
MENUITEM SEPARATOR
MENUITEM "Visual &Brace Matching\tCtrl+Shift+V", IDM_VIEW_MATCHBRACES
MENUITEM "Highlight C&urrent Line\tCtrl+Shift+I", IDM_VIEW_HIGHLIGHTCURRENTLINE
POPUP "Highlight C&urrent Line"
BEGIN
MENUITEM "&No Highlight", IDM_VIEW_HIGHLIGHTCURRENTLINE_NONE
MENUITEM "Background &Color\tCtrl+Shift+I", IDM_VIEW_HIGHLIGHTCURRENTLINE_BACK
MENUITEM "Outline &Frame\tCtrl+Shift+F", IDM_VIEW_HIGHLIGHTCURRENTLINE_FRAME
MENUITEM SEPARATOR
MENUITEM "&Always Highlight", IDM_VIEW_HIGHLIGHTCURRENTLINE_ALWAYS
END
MENUITEM SEPARATOR
MENUITEM "Line &Numbers\tCtrl+Shift+N", IDM_VIEW_LINENUMBERS
MENUITEM "Selection &Margin\tCtrl+Shift+M", IDM_VIEW_MARGIN
Expand Down Expand Up @@ -717,6 +724,7 @@ BEGIN
"F", IDM_EDIT_FIND, VIRTKEY, CONTROL, NOINVERT
"F", CMD_RECODEDEFAULT, VIRTKEY, CONTROL, ALT, NOINVERT
"F", IDM_VIEW_FOLDING, VIRTKEY, SHIFT, CONTROL, ALT, NOINVERT
"F", IDM_VIEW_HIGHLIGHTCURRENTLINE_FRAME, VIRTKEY, SHIFT, CONTROL, NOINVERT
"G", IDM_EDIT_GOTOLINE, VIRTKEY, CONTROL, NOINVERT
"G", IDM_VIEW_SHOWINDENTGUIDES, VIRTKEY, SHIFT, CONTROL, NOINVERT
"H", IDM_EDIT_REPLACE, VIRTKEY, CONTROL, NOINVERT
Expand All @@ -726,7 +734,7 @@ BEGIN
"I", IDM_EDIT_SPLITLINES, VIRTKEY, CONTROL, NOINVERT
"I", IDM_FILE_OPENFAV, VIRTKEY, ALT, NOINVERT
"I", IDM_EDIT_TITLECASE, VIRTKEY, CONTROL, ALT, NOINVERT
"I", IDM_VIEW_HIGHLIGHTCURRENTLINE, VIRTKEY, SHIFT, CONTROL, NOINVERT
"I", IDM_VIEW_HIGHLIGHTCURRENTLINE_BACK, VIRTKEY, SHIFT, CONTROL, NOINVERT
"J", IDM_EDIT_JOINLINES, VIRTKEY, CONTROL, NOINVERT
"J", IDM_EDIT_ALIGN, VIRTKEY, ALT, NOINVERT
"J", IDM_EDIT_JOINLINESEX, VIRTKEY, SHIFT, CONTROL, NOINVERT
Expand Down
43 changes: 29 additions & 14 deletions src/Styles.c
Original file line number Diff line number Diff line change
Expand Up @@ -272,7 +272,8 @@ extern int iEncoding;
extern int g_DOSEncoding;
extern int iDefaultCodePage;
extern int iDefaultCharSet;
extern BOOL bHighlightCurrentLine;
extern BOOL bHighlightCurrentLineAlways;
extern INT iHighlightCurrentLine;

#define STYLE_MASK_FONT_FACE (1 << 0)
#define STYLE_MASK_FONT_SIZE (1 << 1)
Expand Down Expand Up @@ -926,7 +927,6 @@ void Style_SetLexer(HWND hwnd, PEDITLEXER pLexNew) {
}
}

// Use 2nd default style
const int iIdx = GetDefaultStyleStartIndex();
// Font quality setup
SendMessage(hwnd, SCI_SETFONTQUALITY, iFontQuality, 0);
Expand Down Expand Up @@ -1006,7 +1006,7 @@ void Style_SetLexer(HWND hwnd, PEDITLEXER pLexNew) {
iValue = clamp_i(iValue, 0, 5);
SendMessage(hwnd, SCI_SETWHITESPACESIZE, iValue, 0);

Style_SetCurrentLineBackground(hwnd);
Style_HighlightCurrentLine(hwnd);
Style_UpdateCaret(hwnd);
// caret fore
if (!Style_StrGetColor(TRUE, lexDefault.Styles[Style_Caret + iIdx].szValue, &iValue)) {
Expand Down Expand Up @@ -2187,8 +2187,6 @@ void Style_ToggleUse2ndDefault(HWND hwnd) {
//
void Style_SetLongLineColors(HWND hwnd) {
int rgb;

// Use 2nd default style
const int iIdx = GetDefaultStyleStartIndex();

if (SendMessage(hwnd, SCI_GETEDGEMODE, 0, 0) == EDGE_LINE) {
Expand All @@ -2208,28 +2206,35 @@ void Style_SetLongLineColors(HWND hwnd) {

//=============================================================================
//
// Style_SetCurrentLineBackground()
// Style_HighlightCurrentLine()
//
void Style_SetCurrentLineBackground(HWND hwnd) {
if (bHighlightCurrentLine) {
// Use 2nd default style
void Style_HighlightCurrentLine(HWND hwnd) {
SendMessage(hwnd, SCI_SETCARETLINEVISIBLEALWAYS, bHighlightCurrentLineAlways, 0);
if (iHighlightCurrentLine != 0) {
const int iIdx = GetDefaultStyleStartIndex();
const BOOL backColor = iHighlightCurrentLine == 1;
int iValue;
if (Style_StrGetColor(FALSE, lexDefault.Styles[Style_CurrentLine + iIdx].szValue, &iValue)) { // caret line back
if (Style_StrGetColor(!backColor, lexDefault.Styles[Style_CurrentLine + iIdx].szValue, &iValue)) {
int size = 0;
if (!backColor) {
Style_StrGetRawSize(lexDefault.Styles[Style_CurrentLine + iIdx].szValue, &size);
size = max_i(1, RoundToCurrentDPI(size));
}

SendMessage(hwnd, SCI_SETCARETLINEVISIBLE, TRUE, 0);
SendMessage(hwnd, SCI_SETCARETLINEFRAME, size, 0);
SendMessage(hwnd, SCI_SETCARETLINEBACK, iValue, 0);

if (Style_StrGetAlpha(lexDefault.Styles[Style_CurrentLine + iIdx].szValue, &iValue)) {
SendMessage(hwnd, SCI_SETCARETLINEBACKALPHA, iValue, 0);
} else {
SendMessage(hwnd, SCI_SETCARETLINEBACKALPHA, SC_ALPHA_NOALPHA, 0);
}
} else {
SendMessage(hwnd, SCI_SETCARETLINEVISIBLE, FALSE, 0);
return;
}
} else {
SendMessage(hwnd, SCI_SETCARETLINEVISIBLE, FALSE, 0);
}

SendMessage(hwnd, SCI_SETCARETLINEVISIBLE, FALSE, 0);
}

//=============================================================================
Expand Down Expand Up @@ -2333,6 +2338,16 @@ BOOL Style_StrGetSizeEx(LPCWSTR lpszStyle, int *i) {
return FALSE;
}

BOOL Style_StrGetRawSize(LPCWSTR lpszStyle, int *i) {
WCHAR *p;

if ((p = StrStr(lpszStyle, L"size:")) != NULL) {
p += CSTRLEN(L"size:");
return CRTStrToInt(p, i);
}
return FALSE;
}

BOOL Style_StrGetSize(LPCWSTR lpszStyle, int *i) {
if (Style_StrGetSizeEx(lpszStyle, i)) {
*i /= SC_FONT_SIZE_MULTIPLIER;
Expand Down
3 changes: 2 additions & 1 deletion src/Styles.h
Original file line number Diff line number Diff line change
Expand Up @@ -78,13 +78,14 @@ void Style_SetDefaultFont(HWND hwnd);
void Style_SetIndentGuides(HWND hwnd, BOOL bShow);
void Style_UpdateCaret(HWND hwnd);
void Style_SetLongLineColors(HWND hwnd);
void Style_SetCurrentLineBackground(HWND hwnd);
void Style_HighlightCurrentLine(HWND hwnd);
void Style_ToggleUse2ndDefault(HWND hwnd);
BOOL Style_GetOpenDlgFilterStr(LPWSTR lpszFilter, int cchFilter);

BOOL Style_StrGetFont(LPCWSTR lpszStyle, LPWSTR lpszFont, int cchFont);
BOOL Style_StrGetCharSet(LPCWSTR lpszStyle, int *i);
BOOL Style_StrGetSizeEx(LPCWSTR lpszStyle, int *i);
BOOL Style_StrGetRawSize(LPCWSTR lpszStyle, int *i);
BOOL Style_StrGetSize(LPCWSTR lpszStyle, int *i);
BOOL Style_StrGetSizeStr(LPCWSTR lpszStyle, LPWSTR lpszSize, int cchSize);
BOOL Style_StrGetColor(BOOL bFore, LPCWSTR lpszStyle, int *rgb);
Expand Down
5 changes: 4 additions & 1 deletion src/resource.h
Original file line number Diff line number Diff line change
Expand Up @@ -496,7 +496,7 @@
#define IDM_VIEW_SHOWEOLS 40408 // Ctrl+Shift+9
#define IDM_VIEW_WORDWRAPSYMBOLS 40409 // Ctrl+Shift+0
#define IDM_VIEW_MATCHBRACES 40410 // Ctrl+Shift+V
#define IDM_VIEW_HIGHLIGHTCURRENTLINE 40411 // Ctrl+Shift+I
#define IDM_VIEW_HIGHLIGHTCURRENTLINE_ALWAYS 40411
#define IDM_VIEW_LINENUMBERS 40412 // Ctrl+Shift+N
#define IDM_VIEW_MARGIN 40413 // Ctrl+Shift+M
#define IDM_VIEW_ZOOMIN 40414 // Ctrl++
Expand Down Expand Up @@ -559,6 +559,9 @@
#define IDM_VIEW_FULLSCREEN_HIDE_TOOL 40471
#define IDM_VIEW_FULLSCREEN_HIDE_STATUS 40472
#define IDM_VIEW_ZOOM_LEVEL 40473
#define IDM_VIEW_HIGHLIGHTCURRENTLINE_NONE 40474
#define IDM_VIEW_HIGHLIGHTCURRENTLINE_BACK 40475 // Ctrl+Shift+I
#define IDM_VIEW_HIGHLIGHTCURRENTLINE_FRAME 40476 // Ctrl+Shift+F
#define IDM_SET_OPEN_FOLDER_METAPATH 40044
#define IDM_VIEW_CLEARWINPOS 40045
#define IDM_VIEW_AUTOC_ENGLISH_ONLY 40046
Expand Down

0 comments on commit d99c04d

Please sign in to comment.