+chg: Highlight current line: change meaning of forground color: if set, forground layer is activated using defined color

This commit is contained in:
METANEOCORTEX\Kotti 2024-08-28 00:26:14 +02:00
parent c459ce8884
commit 9ac94d52b9
4 changed files with 75 additions and 45 deletions

View File

@ -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

View File

@ -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"" },

View File

@ -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);
}
}

View File

@ -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;