From 9ac94d52b9b8d0abb34c2c387da9167a8d4d34d8 Mon Sep 17 00:00:00 2001 From: "METANEOCORTEX\\Kotti" Date: Wed, 28 Aug 2024 00:26:14 +0200 Subject: [PATCH] +chg: Highlight current line: change meaning of forground color: if set, forground layer is activated using defined color --- res/StdDarkModeScheme.ini | 4 +- src/StyleLexers/styleLexStandard.c | 4 +- src/Styles.c | 110 ++++++++++++++++++----------- src/TypeDefs.h | 2 +- 4 files changed, 75 insertions(+), 45 deletions(-) diff --git a/res/StdDarkModeScheme.ini b/res/StdDarkModeScheme.ini index 774943793..5731018b9 100644 --- a/res/StdDarkModeScheme.ini +++ b/res/StdDarkModeScheme.ini @@ -27,7 +27,7 @@ Control Characters (Font)=size:-1 Indentation Guide (Color)=fore:#606060 Selected Text (Colors)=fore:#F2460D; back:#4F51E0; eolfilled; alpha:80 Whitespace (Colors, Size 0-12)=fore:#F2460D -Current Line Background (Color)=size:2; fore:#606060; back:#F2F20D; alpha:50; alpha2:50 +Current Line Background (Color)=size:2; back:#F2F20D; alpha:50; alpha2:50 Long Line Marker (Colors)=fore:#F2B50D Extra Line Spacing (Size)=size:2 Bookmarks and Folding (Colors, Size)=size:+2; fore:#0CE50B; alpha:100 @@ -49,7 +49,7 @@ Inline-IME Color=fore:#4EF64D 2nd Indentation Guide (Color)=fore:#606060 2nd Selected Text (Colors)=fore:#F2460D; eolfilled 2nd Whitespace (Colors, Size 0-12)=fore:#F2460D -2nd Current Line Background (Color)=size:2; fore:#A1B7F2; back:#F2F20D; alpha:50; alpha2:50 +2nd Current Line Background (Color)=size:2; back:#F2F20D; alpha:50; alpha2:50 2nd Long Line Marker (Colors)=fore:#F2B50D 2nd Bookmarks and Folding (Colors, Size)=size:+2; charset:2; fore:#0CE50B; case:U; alpha:100 2nd Mark Occurrences (Indicator)=fore:#7B83E9; alpha:60; alpha2:60; indic_box diff --git a/src/StyleLexers/styleLexStandard.c b/src/StyleLexers/styleLexStandard.c index 10a1b554e..89476ce55 100644 --- a/src/StyleLexers/styleLexStandard.c +++ b/src/StyleLexers/styleLexStandard.c @@ -16,7 +16,7 @@ EDITLEXER lexStandard = /* 5 */ { {STYLE_INDENTGUIDE}, IDS_LEX_STD_INDENT, L"Indentation Guide (Color)", L"fore:#A0A0A0", L"" }, /* 6 */ { {_STYLE_GETSTYLEID(STY_SEL_TXT)}, IDS_LEX_STD_SEL, L"Selected Text (Colors)", L"fore:#FF4000; back:#4040FF; eolfilled; alpha:80", L"" }, /* 7 */ { {_STYLE_GETSTYLEID(STY_WHITESPACE)}, IDS_LEX_STD_WSPC, L"Whitespace (Colors, Size 0-12)", L"size:2; fore:#FF4000; alpha:255", L"" }, - /* 8 */ { {_STYLE_GETSTYLEID(STY_CUR_LN)}, IDS_LEX_STD_LN_BACKGR, L"Current Line Background (Color)", L"size:2; fore:#A0A0A0; back:#FFFF00; alpha:50; alpha2:50", L"" }, + /* 8 */ { {_STYLE_GETSTYLEID(STY_CUR_LN)}, IDS_LEX_STD_LN_BACKGR, L"Current Line Background (Color)", L"size:2; back:#FFFF00; alpha:50; alpha2:50", L"" }, /* 9 */ { {_STYLE_GETSTYLEID(STY_CARET)}, IDS_LEX_STD_CARET, L"Caret (Color, Size 1-3)", L"", L"" }, /* 10 */ { {_STYLE_GETSTYLEID(STY_LONG_LN_MRK)}, IDS_LEX_STD_LONG_LN, L"Long Line Marker (Colors)", L"fore:#FFC000", L"" }, /* 11 */ { {_STYLE_GETSTYLEID(STY_X_LN_SPACE)}, IDS_LEX_STD_X_SPC, L"Extra Line Spacing (Size)", L"size:2", L"" }, @@ -46,7 +46,7 @@ EDITLEXER lexStandard2nd = /* 5 */ { {STYLE_INDENTGUIDE}, IDS_LEX_2ND_INDENT, L"2nd Indentation Guide (Color)", L"fore:#A0A0A0", L"" }, /* 6 */ { {_STYLE_GETSTYLEID(STY_SEL_TXT)}, IDS_LEX_2ND_SEL, L"2nd Selected Text (Colors)", L"fore:#FF4000; eolfilled", L"" }, /* 7 */ { {_STYLE_GETSTYLEID(STY_WHITESPACE)}, IDS_LEX_2ND_WSPC, L"2nd Whitespace (Colors, Size 0-12)", L"size:2; fore:#FF4000; alpha:255", L"" }, - /* 8 */ { {_STYLE_GETSTYLEID(STY_CUR_LN)}, IDS_LEX_2ND_LN_BACKGR, L"2nd Current Line Background (Color)", L"size:2; fore:#0000B0; back:#FFFF00; alpha:50; alpha2:50", L"" }, + /* 8 */ { {_STYLE_GETSTYLEID(STY_CUR_LN)}, IDS_LEX_2ND_LN_BACKGR, L"2nd Current Line Background (Color)", L"size:2; back:#FFFF00; alpha:50; alpha2:50", L"" }, /* 9 */ { {_STYLE_GETSTYLEID(STY_CARET)}, IDS_LEX_2ND_CARET, L"2nd Caret (Color, Size 1-3)", L"", L"" }, /* 10 */ { {_STYLE_GETSTYLEID(STY_LONG_LN_MRK)}, IDS_LEX_2ND_LONG_LN, L"2nd Long Line Marker (Colors)", L"fore:#FFC000", L"" }, /* 11 */ { {_STYLE_GETSTYLEID(STY_X_LN_SPACE)}, IDS_LEX_2ND_X_SPC, L"2nd Extra Line Spacing (Size)", L"size:2", L"" }, diff --git a/src/Styles.c b/src/Styles.c index 6510506ae..986f90a99 100644 --- a/src/Styles.c +++ b/src/Styles.c @@ -327,6 +327,15 @@ static inline bool HasIndicStyleStrokeWidth(const int indicStyle) { return false; } +static const int FoldMarkerID[] = { + SC_MARKNUM_FOLDEROPEN, + SC_MARKNUM_FOLDER, + SC_MARKNUM_FOLDERSUB, + SC_MARKNUM_FOLDERTAIL, + SC_MARKNUM_FOLDEREND, + SC_MARKNUM_FOLDEROPENMID, + SC_MARKNUM_FOLDERMIDTAIL +}; //============================================================================= @@ -2033,36 +2042,57 @@ void Style_SetMultiEdgeLine(const int colVec[], const size_t count) // void Style_HighlightCurrentLine(HWND hwnd, int iHiLitCurLn) { - SciCall_SetCaretLineFrame(0); - SciCall_SetCaretLineVisibleAlways(false); - //SciCall_SetCaretLineHighlightSubline(false); + bool const bHiLitAsBckgr = (iHiLitCurLn == 1); + bool const bHiLitAsFrame = (iHiLitCurLn == 2); + + if (!(bHiLitAsBckgr || bHiLitAsFrame)) { + // clear all + SciCall_SetCaretLineFrame(0); + SciCall_SetCaretLineLayer(SC_LAYER_UNDER_TEXT); + SciCall_SetElementColour(SC_ELEMENT_CARET_LINE_BACK, AxRGB(SC_ALPHA_TRANSPARENT, RGB(0x00, 0x00, 0x00))); + //~SciCall_SetCaretLineHighlightSubline(false); + return; + } - bool const backgrColor = (iHiLitCurLn == 1); LPCWSTR szValue = GetCurrentStdLexer()->Styles[STY_CUR_LN].szValue; - COLORREF rgb; - if (!Style_StrGetColor(szValue, (backgrColor ? BACKGROUND_LAYER : FOREGROUND_LAYER), &rgb, NULL, false)) { - rgb = (backgrColor ? RGB(0xFF, 0xFF, 0x00) : RGB(0xC2, 0xC0, 0xC3)); + int alpha = SC_ALPHA_NOALPHA; + Style_StrGetAlpha(szValue, &alpha, 50, true); + + int alpha2 = SC_ALPHA_NOALPHA; + Style_StrGetAlpha(szValue, &alpha2, 50, false); + + COLORREF const rgbDefault = (bHiLitAsBckgr ? RGB(0xFF, 0xFF, 0x00) : RGB(0xA0, 0xA0, 0xA0)); + + COLORREF foreRGB = rgbDefault; + bool const hasFGDef = Style_StrGetColor(szValue, FOREGROUND_LAYER, &foreRGB, NULL, false); + + COLORREF backgrRGB = rgbDefault; + Style_StrGetColor(szValue, BACKGROUND_LAYER, &backgrRGB, NULL, false); + + if (hasFGDef && (alpha != SC_ALPHA_TRANSPARENT)) { // visible foreground layer + SciCall_SetCaretLineLayer(SC_LAYER_OVER_TEXT); + SciCall_SetElementColour(SC_ELEMENT_CARET_LINE_BACK, AxRGB(alpha, foreRGB)); + } + else { + SciCall_SetCaretLineLayer(SC_LAYER_UNDER_TEXT); + SciCall_SetElementColour(SC_ELEMENT_CARET_LINE_BACK, AxRGB(alpha2, backgrRGB)); } - int alpha = SC_ALPHA_TRANSPARENT; // full translucent - if (iHiLitCurLn > 0) { - Style_StrGetAlpha(GetCurrentStdLexer()->Styles[STY_CUR_LN].szValue, &alpha, 80, backgrColor); - if (!backgrColor) { - int iFrameSize = 0; - if (!Style_StrGetSizeInt(szValue, &iFrameSize)) { - iFrameSize = 2; - } - iFrameSize = max_i(1, ScaleIntToDPI(hwnd, iFrameSize)); - Globals.iCaretOutLineFrameSize = iFrameSize; - //SciCall_SetCaretLineFrame(iFrameSize); - SciCall_SetCaretLineFrame(MulDiv(Globals.iCaretOutLineFrameSize, SciCall_GetZoom(), 100)); // needs update on zoom + if (bHiLitAsFrame) { + int iFrameSize = 0; + if (!Style_StrGetSizeInt(szValue, &iFrameSize)) { + iFrameSize = 2; } + iFrameSize = max_i(1, ScaleIntToDPI(hwnd, iFrameSize)); + Globals.iCaretOutLineFrameSize = iFrameSize; + // SciCall_SetCaretLineFrame(iFrameSize); + SciCall_SetCaretLineFrame(MulDiv(Globals.iCaretOutLineFrameSize, SciCall_GetZoom(), 100)); // needs update on zoom + } + else { + SciCall_SetCaretLineFrame(0); } - SciCall_SetCaretLineLayer(SC_LAYER_UNDER_TEXT); // SC_LAYER_BASE, SC_LAYER_UNDER_TEXT, SC_LAYER_OVER_TEXT - SciCall_SetElementColour(SC_ELEMENT_CARET_LINE_BACK, AxRGB(alpha, rgb)); - SciCall_SetCaretLineVisibleAlways(iHiLitCurLn > 0); } @@ -2222,27 +2252,28 @@ void Style_SetMargin(HWND hwnd, LPCWSTR lpszStyle) /// iStyle == STYLE_LINENUMBE Style_StrGetColor(wchBookMarkStyleStrg, BACKGROUND_LAYER, &colorRead, NULL, false); COLORREF const clrFoldMarginBack = colorRead; - int strokeWidth = FW_DONTCARE; + int strokeWidth = FW_THIN; if (!Style_StrGetWeightValue(lpszStyle, &strokeWidth)) { strokeWidth = FontWeights[FW_IDX_REGULAR].weight; } - strokeWidth >>= 2; + strokeWidth = max_i(FW_THIN, strokeWidth >> 2); // 1/4 + // standard bookmark SciCall_MarkerDefine(MARKER_NP3_BOOKMARK, SC_MARK_VERTICALBOOKMARK); // SC_MARK_BOOKMARK/SC_MARK_SHORTARROW - SciCall_MarkerSetStrokeWidth(MARKER_NP3_BOOKMARK, strokeWidth); - SciCall_MarkerSetAlpha(MARKER_NP3_BOOKMARK, bookmarkAlpha); // if drawn in content area + SciCall_MarkerSetAlpha(MARKER_NP3_BOOKMARK, bookmarkAlpha); SciCall_MarkerSetForeTranslucent(MARKER_NP3_BOOKMARK, AxRGB(bookmarkAlpha, clrLineNumFore)); //~clrBookMarkFore //~SciCall_MarkerSetBack(MARKER_NP3_BOOKMARK, Style_RgbAlpha(clrBookMarkFore, clrMarginBack, bookmarkAlpha)); SciCall_MarkerSetBackTranslucent(MARKER_NP3_BOOKMARK, AxRGB(bookmarkAlpha, clrBookMarkFore)); + SciCall_MarkerSetStrokeWidth(MARKER_NP3_BOOKMARK, strokeWidth); // occurrence bookmarker bool const visible = Settings.MarkOccurrencesBookmark; //SciCall_MarkerDefine(MARKER_NP3_OCCURRENCE, visible ? SC_MARK_ARROWS : SC_MARK_BACKGROUND); SciCall_MarkerDefine(MARKER_NP3_OCCURRENCE, visible ? SC_MARK_ARROWS : SC_MARK_EMPTY); - SciCall_MarkerSetStrokeWidth(MARKER_NP3_OCCURRENCE, strokeWidth); SciCall_MarkerSetForeTranslucent(MARKER_NP3_OCCURRENCE, RGB2RGBAREF(CalcContrastColor(clrMarginBack, 100))); SciCall_MarkerSetBackTranslucent(MARKER_NP3_OCCURRENCE, AxRGB(SC_ALPHA_TRANSPARENT, clrMarginBack)); //~SciCall_MarkerSetForeSelected(MARKER_NP3_OCCURRENCE, RGB(0,0,220)); + SciCall_MarkerSetStrokeWidth(MARKER_NP3_OCCURRENCE, strokeWidth); // --- WordBookMarks --- COLORREF color; @@ -2334,15 +2365,6 @@ void Style_SetMargin(HWND hwnd, LPCWSTR lpszStyle) /// iStyle == STYLE_LINENUMBE SciCall_MarkerDefine(SC_MARKNUM_FOLDEROPENMID, SC_MARK_BOXMINUSCONNECTED); SciCall_MarkerDefine(SC_MARKNUM_FOLDERMIDTAIL, SC_MARK_TCORNER); } - static const int FoldMarkerID[] = { - SC_MARKNUM_FOLDEROPEN, - SC_MARKNUM_FOLDER, - SC_MARKNUM_FOLDERSUB, - SC_MARKNUM_FOLDERTAIL, - SC_MARKNUM_FOLDEREND, - SC_MARKNUM_FOLDEROPENMID, - SC_MARKNUM_FOLDERMIDTAIL - }; colorRead = clrLineNumFore; const WCHAR* wchHighlightStyleStrg = GetCurrentStdLexer()->Styles[STY_SEL_TXT].szValue; @@ -2353,7 +2375,7 @@ void Style_SetMargin(HWND hwnd, LPCWSTR lpszStyle) /// iStyle == STYLE_LINENUMBE SciCall_MarkerSetForeTranslucent(FoldMarkerID[i], RGB2RGBAREF(clrFoldMarginBack)); // (!) SciCall_MarkerSetBackTranslucent(FoldMarkerID[i], RGB2RGBAREF(clrLineNumFore)); // (!) //~clrBookMarkForeAlpha SciCall_MarkerSetBackSelected(FoldMarkerID[i], fldHiLight); - SciCall_MarkerSetStrokeWidth(FoldMarkerID[i], strokeWidth); + SciCall_MarkerSetStrokeWidth(FoldMarkerID[i], strokeWidth<<1); } SciCall_SetElementColour(SC_ELEMENT_FOLD_LINE, AxRGB(255, clrLineNumFore)); @@ -2392,6 +2414,8 @@ void Style_SetMargin(HWND hwnd, LPCWSTR lpszStyle) /// iStyle == STYLE_LINENUMBE } + + //============================================================================= // // Style_SniffShebang() @@ -3439,7 +3463,9 @@ bool Style_StrGetAlpha(LPCWSTR lpszStyle, int* iOutValue, const int defAlpha, co return true; } } - *iOutValue = Sci_ClampAlpha(defAlpha); + if (defAlpha >= 0) { + *iOutValue = Sci_ClampAlpha(defAlpha); + } return false; } @@ -4535,6 +4561,10 @@ INT_PTR CALLBACK Style_CustomizeSchemesDlgProc(HWND hwnd, UINT umsg, WPARAM wPar MakeBitmapButton(hwnd, IDC_PREVSTYLE, IDB_PREV, -1, -1); MakeBitmapButton(hwnd, IDC_NEXTSTYLE, IDB_NEXT, -1, -1); + COLORREF cr = COLORREF_MAX; // SciCall_StyleGetFore(STYLE_DEFAULT); + MakeColorPickButton(hwnd, IDC_STYLEFORE, Globals.hInstance, cr); + MakeColorPickButton(hwnd, IDC_STYLEBACK, Globals.hInstance, cr); + if (Settings.CustomSchemesDlgPosX == CW_USEDEFAULT || Settings.CustomSchemesDlgPosY == CW_USEDEFAULT) { CenterDlgInParent(hwnd, false); } else { @@ -4994,11 +5024,11 @@ CASE_WM_CTLCOLOR_SET: GetDlgItemText(hwnd, IDC_STYLEEDIT, tch, COUNTOF(tch)); COLORREF cr = COLORREF_MAX; // SciCall_StyleGetFore(STYLE_DEFAULT); - Style_StrGetColor(tch, FOREGROUND_LAYER, &cr, NULL, true); + Style_StrGetColor(tch, FOREGROUND_LAYER, &cr, NULL, false); MakeColorPickButton(hwnd, IDC_STYLEFORE, Globals.hInstance, cr); cr = COLORREF_MAX; // SciCall_StyleGetBack(STYLE_DEFAULT); - Style_StrGetColor(tch, BACKGROUND_LAYER, &cr, NULL, true); + Style_StrGetColor(tch, BACKGROUND_LAYER, &cr, NULL, false); MakeColorPickButton(hwnd, IDC_STYLEBACK, Globals.hInstance, cr); } } diff --git a/src/TypeDefs.h b/src/TypeDefs.h index 9ad9b4504..841753dd5 100644 --- a/src/TypeDefs.h +++ b/src/TypeDefs.h @@ -191,7 +191,7 @@ typedef enum CFG_VERSION { CFG_VER_0004 = 4, /// Text Files lexer vs. Default Text => (2nd) Common Style CFG_VER_0005 = 5, /// FileWatchingMode numbering changed - CFG_VER_CURRENT = CFG_VER_0005 + CFG_VER_CURRENT = CFG_VER_0005 /// Globals.iCfgVersionRead } CFG_VERSION;