Skip to content

Commit

Permalink
Make caret style more easy to configure, as some users don't known wh…
Browse files Browse the repository at this point in the history
…ere to configure it. See XhmikosR/notepad2-mod#196.
  • Loading branch information
zufuliu committed Sep 2, 2018
1 parent 2e16516 commit 3f9a956
Show file tree
Hide file tree
Showing 7 changed files with 59 additions and 38 deletions.
Binary file modified Notepad2.ini
Binary file not shown.
4 changes: 2 additions & 2 deletions src/EditLexers/stlDefault.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ EDITLEXER lexDefault = { SCLEX_NULL, NP2LEX_DEFAULT, L"Default Text", L"txt; tex
{ SCI_SETSELFORE + SCI_SETSELBACK, 63106, L"Selected Text (Colors)", L"back:#0A246A; eolfilled; alpha:95", L"" },
{ SCI_SETWHITESPACEFORE + SCI_SETWHITESPACEBACK + SCI_SETWHITESPACESIZE, 63107, L"Whitespace (Colors, Size 0-5)", L"fore:#FF4000", L"" },
{ SCI_SETCARETLINEBACK, 63108, L"Current Line Background (Color)", L"back:#FFFF00; alpha:50", L"" },
{ SCI_SETCARETFORE + SCI_SETCARETWIDTH, 63109, L"Caret (Color, Size 1-3)", L"", L"" },
{ SCI_SETCARETFORE + SCI_SETCARETWIDTH, 63109, L"Caret (Color)", L"", L"" },
{ SCI_SETEDGECOLOUR, 63110, L"Long Line Marker (Colors)", L"fore:#FFC000", L"" },
{ SCI_SETEXTRAASCENT + SCI_SETEXTRADESCENT, 63111, L"Extra Line Spacing (Size)", L"size:2", L"" },

Expand All @@ -34,7 +34,7 @@ EDITLEXER lexDefault = { SCLEX_NULL, NP2LEX_DEFAULT, L"Default Text", L"txt; tex
{ SCI_SETSELFORE + SCI_SETSELBACK, 63118, L"2nd Selected Text (Colors)", L"eolfilled", L"" },
{ SCI_SETWHITESPACEFORE + SCI_SETWHITESPACEBACK + SCI_SETWHITESPACESIZE, 63119, L"2nd Whitespace (Colors, Size 0-5)", L"fore:#FF4000", L"" },
{ SCI_SETCARETLINEBACK, 63120, L"2nd Current Line Background (Color)", L"back:#FFFF00; alpha:50", L"" },
{ SCI_SETCARETFORE + SCI_SETCARETWIDTH, 63121, L"2nd Caret (Color, Size 1-3)", L"", L"" },
{ SCI_SETCARETFORE + SCI_SETCARETWIDTH, 63121, L"2nd Caret (Color)", L"", L"" },
{ SCI_SETEDGECOLOUR, 63122, L"2nd Long Line Marker (Colors)", L"fore:#FFC000", L"" },
{ SCI_SETEXTRAASCENT + SCI_SETEXTRADESCENT, 63123, L"2nd Extra Line Spacing (Size)", L"", L"" },
{ -1, 00000, L"", L"", L"" }
Expand Down
23 changes: 23 additions & 0 deletions src/Notepad2.c
Original file line number Diff line number Diff line change
Expand Up @@ -287,6 +287,8 @@ int iAlignMode = 0;
int iMatchesCount = 0;
int iAutoCItemCount = 0;
extern int iFontQuality;
extern int iCaretStyle;
extern int iCaretBlinkPeriod;

BOOL fIsElevated = FALSE;
WCHAR wchWndClass[16] = WC_NOTEPAD2;
Expand Down Expand Up @@ -2237,6 +2239,9 @@ void MsgInitMenu(HWND hwnd, WPARAM wParam, LPARAM lParam) {
CheckCmd(hmenu, IDM_VIEW_WORDWRAP, fWordWrap);
i = IDM_VIEW_FONTQUALITY_DEFAULT + iFontQuality;
CheckMenuRadioItem(hmenu, IDM_VIEW_FONTQUALITY_DEFAULT, IDM_VIEW_FONTQUALITY_CLEARTYPE, i, MF_BYCOMMAND);
i = IDM_VIEW_CARET_STYLE_BLOCK + iCaretStyle;
CheckMenuRadioItem(hmenu, IDM_VIEW_CARET_STYLE_BLOCK, IDM_VIEW_CARET_STYLE_WIDTH3, i, MF_BYCOMMAND);
CheckCmd(hmenu, IDM_VIEW_CARET_STYLE_NOBLINK, iCaretBlinkPeriod == 0);
CheckCmd(hmenu, IDM_VIEW_LONGLINEMARKER, bMarkLongLines);
CheckCmd(hmenu, IDM_VIEW_TABSASSPACES, bTabsAsSpaces);
CheckCmd(hmenu, IDM_VIEW_SHOWINDENTGUIDES, bShowIndentGuides);
Expand Down Expand Up @@ -4107,6 +4112,19 @@ LRESULT MsgCommand(HWND hwnd, WPARAM wParam, LPARAM lParam) {
SendMessage(hwndEdit, SCI_SETFONTQUALITY, iFontQuality, 0);
break;

case IDM_VIEW_CARET_STYLE_BLOCK:
case IDM_VIEW_CARET_STYLE_WIDTH1:
case IDM_VIEW_CARET_STYLE_WIDTH2:
case IDM_VIEW_CARET_STYLE_WIDTH3:
iCaretStyle = LOWORD(wParam) - IDM_VIEW_CARET_STYLE_BLOCK;
Style_UpdateCaret(hwndEdit);
break;

case IDM_VIEW_CARET_STYLE_NOBLINK:
iCaretBlinkPeriod = (iCaretBlinkPeriod == 0)? -1 : 0;
Style_UpdateCaret(hwndEdit);
break;

case IDM_VIEW_SHOWFILENAMEONLY:
iPathNameFormat = 0;
lstrcpy(szTitleExcerpt, L"");
Expand Down Expand Up @@ -5347,6 +5365,9 @@ void LoadSettings(void) {
iBidirectional = clamp_i(iBidirectional, SC_BIDIRECTIONAL_DISABLED, SC_BIDIRECTIONAL_R2L);
iFontQuality = IniSectionGetInt(pIniSection, L"FontQuality", SC_EFF_QUALITY_LCD_OPTIMIZED);
iFontQuality = clamp_i(iFontQuality, SC_EFF_QUALITY_DEFAULT, SC_EFF_QUALITY_LCD_OPTIMIZED);
iCaretStyle = IniSectionGetInt(pIniSection, L"CaretStyle", 1);
iCaretStyle = clamp_i(iCaretStyle, 0, 3);
iCaretBlinkPeriod = IniSectionGetInt(pIniSection, L"CaretBlinkPeriod", -1);
// Korean IME use inline mode (and block caret in inline mode) by default
bUseInlineIME = IniSectionGetBool(pIniSection, L"UseInlineIME", -1);
if (bUseInlineIME == -1) {
Expand Down Expand Up @@ -5589,6 +5610,8 @@ void SaveSettings(BOOL bSaveSettingsNow) {
IniSectionSetInt(pIniSection, L"RenderingTechnology", iRenderingTechnology);
IniSectionSetInt(pIniSection, L"Bidirectional", iBidirectional);
IniSectionSetInt(pIniSection, L"FontQuality", iFontQuality);
IniSectionSetInt(pIniSection, L"CaretStyle", iCaretStyle);
IniSectionSetInt(pIniSection, L"CaretBlinkPeriod", iCaretBlinkPeriod);
IniSectionSetBool(pIniSection, L"UseInlineIME", bUseInlineIME);
Toolbar_GetButtons(hwndToolbar, IDT_FILE_NEW, tchToolbarButtons, COUNTOF(tchToolbarButtons));
IniSectionSetString(pIniSection, L"ToolbarButtons", tchToolbarButtons);
Expand Down
12 changes: 11 additions & 1 deletion src/Notepad2.rc
Original file line number Diff line number Diff line change
Expand Up @@ -334,6 +334,16 @@ BEGIN
MENUITEM "&Standard", IDM_VIEW_FONTQUALITY_STANDARD
MENUITEM "&ClearType", IDM_VIEW_FONTQUALITY_CLEARTYPE
END
POPUP "Caret Style"
BEGIN
MENUITEM "Block", IDM_VIEW_CARET_STYLE_BLOCK
MENUITEM SEPARATOR
MENUITEM "Width 1", IDM_VIEW_CARET_STYLE_WIDTH1
MENUITEM "Width 2", IDM_VIEW_CARET_STYLE_WIDTH2
MENUITEM "Width 3", IDM_VIEW_CARET_STYLE_WIDTH3
MENUITEM SEPARATOR
MENUITEM "No Blink", IDM_VIEW_CARET_STYLE_NOBLINK
END
MENUITEM SEPARATOR
MENUITEM "Word W&rap\tCtrl+W", IDM_VIEW_WORDWRAP
MENUITEM "&Long Line Marker\tCtrl+Shift+L", IDM_VIEW_LONGLINEMARKER
Expand Down Expand Up @@ -985,7 +995,7 @@ BEGIN
ICON IDI_STYLES,IDC_STATIC,189,19,20,20
LTEXT "Customize Schemes",IDC_TITLE,220,25,200,12
LTEXT "Filename extensions must be separated by semicolon (;)",IDC_STATIC,191,44,247,13
LTEXT "Style format:\n\tfont:Name; size:[+|-]nn.mm; bold; italic; underline; strike;\n\tcharset:dd; case:[U|L];\n\tfore:#ffffff; back:#bbbbbb; alpha:aa; eolfilled; block; noblink;",IDC_STATIC,191,60,260,34
LTEXT "Style format:\n\tfont:Name; size:[+|-]nn.mm; bold; italic; underline; strike;\n\tcharset:dd; case:[U|L];\n\tfore:#ffffff; back:#bbbbbb; alpha:aa; eolfilled;",IDC_STATIC,191,60,260,34
LTEXT "Style properties can be copied using copy and paste or drag and drop.\n\nThe ""Preview"" button will not apply any changes.",IDC_STATIC,191,100,247,30
LTEXT "Associated file&name extensions:|Style &settings:",IDC_STYLELABELS,315,230,152,8,NOT WS_VISIBLE
END
Expand Down
52 changes: 17 additions & 35 deletions src/Styles.c
Original file line number Diff line number Diff line change
Expand Up @@ -215,6 +215,8 @@ BOOL fStylesModified = FALSE;
BOOL fWarnedNoIniFile = FALSE;
int iBaseFontSize = 10*SC_FONT_SIZE_MULTIPLIER + SC_FONT_SIZE_MULTIPLIER/2; // 10.5pt
int iFontQuality = SC_EFF_QUALITY_LCD_OPTIMIZED;
int iCaretStyle = 1; // width 1, 0 for block
int iCaretBlinkPeriod = -1; // system default, 0 for noblink
int iDefaultLexer;
BOOL bAutoSelect;
int cxStyleSelectDlg;
Expand Down Expand Up @@ -482,6 +484,19 @@ void Style_OnDPIChanged(HWND hwnd) {
Style_SetLexer(hwnd, pLexCurrent);
}

void Style_UpdateCaret(HWND hwnd) {
// caret style and width
if (iCaretStyle == 0) {
SendMessage(hwnd, SCI_SETCARETSTYLE, CARETSTYLE_BLOCK, 0);
} else {
SendMessage(hwnd, SCI_SETCARETSTYLE, CARETSTYLE_LINE, 0);
SendMessage(hwnd, SCI_SETCARETWIDTH, iCaretStyle, 0);
}

const int iValue = (iCaretBlinkPeriod < 0)? GetCaretBlinkTime() : iCaretBlinkPeriod;
SendMessage(hwnd, SCI_SETCARETPERIOD, iValue, 0);
}

// set folding style; braces are for scoping only
static const int iMarkerIDs[] = {
SC_MARKNUM_FOLDEROPEN,
Expand Down Expand Up @@ -587,7 +602,7 @@ void Style_SetLexer(HWND hwnd, PEDITLEXER pLexNew) {
//WCHAR *p;
int rgb;
int iValue;
WCHAR wchCaretStyle[64] = L"";
WCHAR wchCaretStyle[32] = L"";
char msg[10];

// Select default if NULL is specified
Expand Down Expand Up @@ -780,32 +795,7 @@ void Style_SetLexer(HWND hwnd, PEDITLEXER pLexNew) {
SendMessage(hwnd, SCI_SETCARETLINEVISIBLE, FALSE, 0);
}

// caret style and width
if (StrStr(lexDefault.Styles[9 + iIdx].szValue, L"block")) {
SendMessage(hwnd, SCI_SETCARETSTYLE, CARETSTYLE_BLOCK, 0);
lstrcpy(wchCaretStyle, L"block");
} else {
iValue = 1;
if (Style_StrGetSize(lexDefault.Styles[9 + iIdx].szValue, &iValue)) {
WCHAR wch[32];
iValue = clamp_i(iValue, 1, 3);
wsprintf(wch, L"size:%i", iValue);
lstrcat(wchCaretStyle, wch);
}
SendMessage(hwnd, SCI_SETCARETSTYLE, CARETSTYLE_LINE, 0);
SendMessage(hwnd, SCI_SETCARETWIDTH, iValue, 0);
}

if (StrStr(lexDefault.Styles[9 + iIdx].szValue, L"noblink")) {
SendMessage(hwnd, SCI_SETCARETPERIOD, (WPARAM)0, 0);
if (StrNotEmpty(wchCaretStyle)) {
lstrcat(wchCaretStyle, L"; ");
}
lstrcat(wchCaretStyle, L"noblink");
} else {
SendMessage(hwnd, SCI_SETCARETPERIOD, (WPARAM)GetCaretBlinkTime(), 0);
}

Style_UpdateCaret(hwnd);
// caret fore
if (!Style_StrGetColor(TRUE, lexDefault.Styles[9 + iIdx].szValue, &rgb)) {
rgb = GetSysColor(COLOR_WINDOWTEXT);
Expand Down Expand Up @@ -2513,14 +2503,6 @@ BOOL Style_SelectColor(HWND hwnd, BOOL bFore, LPWSTR lpszStyle, int cchStyle) {
lstrcat(szNewStyle, tch);
}

if (StrStrI(lpszStyle, L"block")) {
lstrcat(szNewStyle, L"; block");
}

if (StrStrI(lpszStyle, L"noblink")) {
lstrcat(szNewStyle, L"; noblink");
}

lstrcpyn(lpszStyle, szNewStyle, cchStyle);
return TRUE;
}
Expand Down
1 change: 1 addition & 0 deletions src/Styles.h
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ void Style_SetXMLLexer(HWND hwnd);

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_ToggleUse2ndDefault(HWND hwnd);
Expand Down
5 changes: 5 additions & 0 deletions src/resource.h
Original file line number Diff line number Diff line change
Expand Up @@ -418,6 +418,11 @@
#define IDM_VIEW_FONTQUALITY_NONE 40066
#define IDM_VIEW_FONTQUALITY_STANDARD 40067
#define IDM_VIEW_FONTQUALITY_CLEARTYPE 40068
#define IDM_VIEW_CARET_STYLE_BLOCK 40070
#define IDM_VIEW_CARET_STYLE_WIDTH1 40071
#define IDM_VIEW_CARET_STYLE_WIDTH2 40072
#define IDM_VIEW_CARET_STYLE_WIDTH3 40073
#define IDM_VIEW_CARET_STYLE_NOBLINK 40074

#define IDM_LANG_DEFAULT 41000
#define IDM_LANG_NULL 41060
Expand Down

0 comments on commit 3f9a956

Please sign in to comment.