+ cln: code cleanup for Font and Style Selection

This commit is contained in:
Rainer Kottenhoff 2021-04-21 21:51:09 +02:00
parent 851cbc4793
commit b1e48139b8
4 changed files with 275 additions and 235 deletions

View File

@ -2259,7 +2259,7 @@ LRESULT MsgCreate(HWND hwnd, WPARAM wParam,LPARAM lParam)
return -1LL;
}
Style_SetDefaultLexer(Globals.hwndEdit);
//~ Style_SetDefaultLexer(Globals.hwndEdit); -- done by WM_THEMECHANGED
Encoding_Current(Settings.DefaultEncoding);
@ -5533,15 +5533,15 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam)
SendWMSize(hwnd, NULL);
break;
case IDM_VIEW_CUSTOMIZETB:
SendMessage(Globals.hwndToolbar,TB_CUSTOMIZE,0,0);
break;
case IDM_VIEW_TOGGLETB:
Settings.ToolBarTheme = (Settings.ToolBarTheme + 1) % 3;
SendMessage(hwnd, WM_THEMECHANGED, 0, 0);
break;
case IDM_VIEW_CUSTOMIZETB:
SendMessage(Globals.hwndToolbar,TB_CUSTOMIZE,0,0);
break;
case IDM_VIEW_LOADTHEMETB:
if (SelectExternalToolBar(hwnd)) {
SendMessage(hwnd, WM_THEMECHANGED, 0, 0);

View File

@ -530,7 +530,9 @@ DeclareSciCallV1(SetViewWS, SETVIEWWS, int, wspc);
DeclareSciCallV1(SetViewEOL, SETVIEWEOL, bool, eols);
DeclareSciCallV2(StyleSetFont, STYLESETFONT, int, style, const char *, fontname);
DeclareSciCallV2(StyleSetWeight, STYLESETWEIGHT, int, style, int, weight);
DeclareSciCallV2(StyleSetItalic, STYLESETITALIC, int, style, bool, oblique);
DeclareSciCallV1(SetFontQuality, SETFONTQUALITY, int, qual);
//=============================================================================
//

View File

@ -879,12 +879,12 @@ void Style_ToIniSection(bool bForceAll)
while (g_pLexArray[iLexer]->Styles[i].iStyle != -1) {
// normalize defaults
szTmpStyle[0] = L'\0'; // clear
Style_CopyStyles_IfNotDefined(g_pLexArray[iLexer]->Styles[i].pszDefault, szTmpStyle, COUNTOF(szTmpStyle), true);
Style_CopyStyles_IfNotDefined(g_pLexArray[iLexer]->Styles[i].pszDefault, szTmpStyle, COUNTOF(szTmpStyle));
if (bForceAll || (StringCchCompareX(g_pLexArray[iLexer]->Styles[i].szValue, szTmpStyle) != 0)) {
// normalize value
szTmpStyle[0] = L'\0'; // clear
Style_CopyStyles_IfNotDefined(g_pLexArray[iLexer]->Styles[i].szValue, szTmpStyle, COUNTOF(szTmpStyle), true);
Style_CopyStyles_IfNotDefined(g_pLexArray[iLexer]->Styles[i].szValue, szTmpStyle, COUNTOF(szTmpStyle));
IniSectionSetString(Lexer_Section, g_pLexArray[iLexer]->Styles[i].pszName, szTmpStyle);
} else {
IniSectionDelete(Lexer_Section, g_pLexArray[iLexer]->Styles[i].pszName, false);
@ -1055,26 +1055,25 @@ void Style_SetLexer(HWND hwnd, PEDITLEXER pLexNew)
_SetBaseFontSize(GLOBAL_INITIAL_FONTSIZE);
_SetCurrentFontSize(GLOBAL_INITIAL_FONTSIZE);
const WCHAR* const wchStandardStyleStrg = pCurrentStandard->Styles[STY_DEFAULT].szValue;
Style_SetStyles(hwnd, STYLE_DEFAULT, wchStandardStyleStrg, true); // (!) true for init
// --- apply current scheme specific settings to default style ---
WCHAR mergedDefaultStyles[BUFSIZE_STYLE_VALUE] = { L'\0' };
// set common defaults
StringCchCopy(mergedDefaultStyles, COUNTOF(mergedDefaultStyles), pLexNew->Styles[STY_DEFAULT].szValue);
// merge lexer default styles
Style_CopyStyles_IfNotDefined(pCurrentStandard->Styles[STY_DEFAULT].szValue, mergedDefaultStyles, COUNTOF(mergedDefaultStyles));
const WCHAR* const wchNewLexerStyleStrg = pLexNew->Styles[STY_DEFAULT].szValue;
if (IsLexerStandard(pLexNew)) {
// styles are already set
EnableCmd(GetMenu(Globals.hwndMain), IDM_VIEW_CURRENTSCHEME, true);
} else {
// merge lexer default styles
Style_SetStyles(hwnd, STYLE_DEFAULT, wchNewLexerStyleStrg, false);
EnableCmd(GetMenu(Globals.hwndMain), IDM_VIEW_CURRENTSCHEME, !IsWindow(Globals.hwndDlgCustomizeSchemes));
}
// apply settings
Style_SetStyles(hwnd, STYLE_DEFAULT, mergedDefaultStyles);
// Broadcast STYLE_DEFAULT as base style to all other styles
SciCall_StyleClearAll();
if (IsLexerStandard(pLexNew)) {
EnableCmd(GetMenu(Globals.hwndMain), IDM_VIEW_CURRENTSCHEME, true);
} else {
EnableCmd(GetMenu(Globals.hwndMain), IDM_VIEW_CURRENTSCHEME, !IsWindow(Globals.hwndDlgCustomizeSchemes));
}
// --------------------------------------------------------------------------
// margin (line number, bookmarks, folding) style
@ -1086,7 +1085,7 @@ void Style_SetLexer(HWND hwnd, PEDITLEXER pLexNew)
if (Settings2.UseOldStyleBraceMatching) {
Style_SetStyles(hwnd, pCurrentStandard->Styles[STY_BRACE_OK].iStyle,
pCurrentStandard->Styles[STY_BRACE_OK].szValue, false); // brace light
pCurrentStandard->Styles[STY_BRACE_OK].szValue); // brace light
} else {
if (Style_StrGetColor(pCurrentStandard->Styles[STY_BRACE_OK].szValue, FOREGROUND_LAYER, &dColor, false)) {
SciCall_IndicSetFore(INDIC_NP3_MATCH_BRACE, dColor);
@ -1109,7 +1108,7 @@ void Style_SetLexer(HWND hwnd, PEDITLEXER pLexNew)
}
if (Settings2.UseOldStyleBraceMatching) {
Style_SetStyles(hwnd, pCurrentStandard->Styles[STY_BRACE_BAD].iStyle,
pCurrentStandard->Styles[STY_BRACE_BAD].szValue, false); // brace bad
pCurrentStandard->Styles[STY_BRACE_BAD].szValue); // brace bad
} else {
if (Style_StrGetColor(pCurrentStandard->Styles[STY_BRACE_BAD].szValue, FOREGROUND_LAYER, &dColor, false)) {
SciCall_IndicSetFore(INDIC_NP3_BAD_BRACE, dColor);
@ -1223,9 +1222,9 @@ void Style_SetLexer(HWND hwnd, PEDITLEXER pLexNew)
SciCall_IndicSetFore(_SC_INDIC_IME_UNKNOWN, rgb);
if (pLexNew != &lexANSI) {
Style_SetStyles(hwnd, pCurrentStandard->Styles[STY_CTRL_CHR].iStyle, pCurrentStandard->Styles[STY_CTRL_CHR].szValue, false); // control char
Style_SetStyles(hwnd, pCurrentStandard->Styles[STY_CTRL_CHR].iStyle, pCurrentStandard->Styles[STY_CTRL_CHR].szValue); // control char
}
Style_SetStyles(hwnd, pCurrentStandard->Styles[STY_INDENT_GUIDE].iStyle, pCurrentStandard->Styles[STY_INDENT_GUIDE].szValue, false); // indent guide
Style_SetStyles(hwnd, pCurrentStandard->Styles[STY_INDENT_GUIDE].iStyle, pCurrentStandard->Styles[STY_INDENT_GUIDE].szValue); // indent guide
// TODO: @@@ DirectFunction instead of SendMsg
@ -1381,10 +1380,10 @@ void Style_SetLexer(HWND hwnd, PEDITLEXER pLexNew)
if (Settings2.UseOldStyleBraceMatching) {
Style_SetStyles(hwnd, pCurrentStandard->Styles[STY_BRACE_OK].iStyle,
pCurrentStandard->Styles[STY_BRACE_OK].szValue, false);
pCurrentStandard->Styles[STY_BRACE_OK].szValue);
Style_SetStyles(hwnd, pCurrentStandard->Styles[STY_BRACE_BAD].iStyle,
pCurrentStandard->Styles[STY_BRACE_BAD].szValue, false);
pCurrentStandard->Styles[STY_BRACE_BAD].szValue);
}
// (SCI_SETEXTRAASCENT + SCI_SETEXTRADESCENT) at pos STY_CTRL_CHR(4) )
@ -1457,7 +1456,7 @@ void Style_FillRelatedStyles(HWND hwnd, const PEDITLEXER pLexer) {
// apply MULTI_STYLE() MACRO
for (int j = 0; j < 4 && (pLexer->Styles[i].iStyle8[j] != 0 || j == 0); ++j) {
Style_SetStyles(hwnd, pLexer->Styles[i].iStyle8[j], pLexer->Styles[i].szValue, false);
Style_SetStyles(hwnd, pLexer->Styles[i].iStyle8[j], pLexer->Styles[i].szValue);
}
@ -1465,7 +1464,7 @@ void Style_FillRelatedStyles(HWND hwnd, const PEDITLEXER pLexer) {
int iRelated[] = { SCE_HPHP_COMMENT, SCE_HPHP_COMMENTLINE, SCE_HPHP_WORD, SCE_HPHP_HSTRING, SCE_HPHP_SIMPLESTRING, SCE_HPHP_NUMBER,
SCE_HPHP_OPERATOR, SCE_HPHP_VARIABLE, SCE_HPHP_HSTRING_VARIABLE, SCE_HPHP_COMPLEX_VARIABLE };
for (int j = 0; j < COUNTOF(iRelated); j++) {
Style_SetStyles(hwnd, iRelated[j], pLexer->Styles[i].szValue, false);
Style_SetStyles(hwnd, iRelated[j], pLexer->Styles[i].szValue);
}
}
@ -1473,7 +1472,7 @@ void Style_FillRelatedStyles(HWND hwnd, const PEDITLEXER pLexer) {
int iRelated[] = { SCE_HJ_COMMENT, SCE_HJ_COMMENTLINE, SCE_HJ_COMMENTDOC, SCE_HJ_KEYWORD, SCE_HJ_WORD, SCE_HJ_DOUBLESTRING,
SCE_HJ_SINGLESTRING, SCE_HJ_STRINGEOL, SCE_HJ_REGEX, SCE_HJ_NUMBER, SCE_HJ_SYMBOLS };
for (int j = 0; j < COUNTOF(iRelated); j++) {
Style_SetStyles(hwnd, iRelated[j], pLexer->Styles[i].szValue, false);
Style_SetStyles(hwnd, iRelated[j], pLexer->Styles[i].szValue);
}
}
@ -1481,21 +1480,21 @@ void Style_FillRelatedStyles(HWND hwnd, const PEDITLEXER pLexer) {
int iRelated[] = { SCE_HJA_COMMENT, SCE_HJA_COMMENTLINE, SCE_HJA_COMMENTDOC, SCE_HJA_KEYWORD, SCE_HJA_WORD, SCE_HJA_DOUBLESTRING,
SCE_HJA_SINGLESTRING, SCE_HJA_STRINGEOL, SCE_HJA_REGEX, SCE_HJA_NUMBER, SCE_HJA_SYMBOLS };
for (int j = 0; j < COUNTOF(iRelated); j++) {
Style_SetStyles(hwnd, iRelated[j], pLexer->Styles[i].szValue, false);
Style_SetStyles(hwnd, iRelated[j], pLexer->Styles[i].szValue);
}
}
if (pLexer->lexerID == SCLEX_HTML && pLexer->Styles[i].iStyle8[0] == SCE_HB_DEFAULT) {
int iRelated[] = { SCE_HB_COMMENTLINE, SCE_HB_WORD, SCE_HB_IDENTIFIER, SCE_HB_STRING, SCE_HB_STRINGEOL, SCE_HB_NUMBER };
for (int j = 0; j < COUNTOF(iRelated); j++) {
Style_SetStyles(hwnd, iRelated[j], pLexer->Styles[i].szValue, false);
Style_SetStyles(hwnd, iRelated[j], pLexer->Styles[i].szValue);
}
}
if (pLexer->lexerID == SCLEX_HTML && pLexer->Styles[i].iStyle8[0] == SCE_HBA_DEFAULT) {
int iRelated[] = { SCE_HBA_COMMENTLINE, SCE_HBA_WORD, SCE_HBA_IDENTIFIER, SCE_HBA_STRING, SCE_HBA_STRINGEOL, SCE_HBA_NUMBER };
for (int j = 0; j < COUNTOF(iRelated); j++) {
Style_SetStyles(hwnd, iRelated[j], pLexer->Styles[i].szValue, false);
Style_SetStyles(hwnd, iRelated[j], pLexer->Styles[i].szValue);
}
}
@ -1503,7 +1502,7 @@ void Style_FillRelatedStyles(HWND hwnd, const PEDITLEXER pLexer) {
int iRelated[] = { SCE_H_SGML_COMMAND, SCE_H_SGML_1ST_PARAM, SCE_H_SGML_DOUBLESTRING, SCE_H_SGML_SIMPLESTRING, SCE_H_SGML_ERROR,
SCE_H_SGML_SPECIAL, SCE_H_SGML_ENTITY, SCE_H_SGML_COMMENT, SCE_H_SGML_1ST_PARAM_COMMENT, SCE_H_SGML_BLOCK_DEFAULT };
for (int j = 0; j < COUNTOF(iRelated); j++) {
Style_SetStyles(hwnd, iRelated[j], pLexer->Styles[i].szValue, false);
Style_SetStyles(hwnd, iRelated[j], pLexer->Styles[i].szValue);
}
}
@ -1515,7 +1514,7 @@ void Style_FillRelatedStyles(HWND hwnd, const PEDITLEXER pLexer) {
SCE_HPA_TRIPLE, SCE_HPA_TRIPLEDOUBLE, SCE_HPA_CLASSNAME, SCE_HPA_DEFNAME, SCE_HPA_OPERATOR,
SCE_HPA_IDENTIFIER };
for (int j = 0; j < COUNTOF(iRelated); j++) {
Style_SetStyles(hwnd, iRelated[j], pLexer->Styles[i].szValue, false);
Style_SetStyles(hwnd, iRelated[j], pLexer->Styles[i].szValue);
}
}
@ -1539,21 +1538,21 @@ void Style_FillRelatedStyles(HWND hwnd, const PEDITLEXER pLexer) {
SCE_HPA_CLASSNAME, SCE_HPA_DEFNAME, SCE_HPA_OPERATOR, SCE_HPA_IDENTIFIER };
for (int j = 0; j < COUNTOF(iRelated); j++) {
Style_SetStyles(hwnd, iRelated[j], pLexer->Styles[i].szValue, false);
Style_SetStyles(hwnd, iRelated[j], pLexer->Styles[i].szValue);
}
}
if (pLexer->lexerID == SCLEX_CPP && pLexer->Styles[i].iStyle8[0] == SCE_C_STRING) {
int iRelated[] = { SCE_C_CHARACTER, SCE_C_STRINGEOL, SCE_C_VERBATIM, SCE_C_STRINGRAW, SCE_C_HASHQUOTEDSTRING };
for (int j = 0; j < COUNTOF(iRelated); j++) {
Style_SetStyles(hwnd, iRelated[j], pLexer->Styles[i].szValue, false);
Style_SetStyles(hwnd, iRelated[j], pLexer->Styles[i].szValue);
}
}
if (pLexer->lexerID == SCLEX_SQL && pLexer->Styles[i].iStyle8[0] == SCE_SQL_COMMENT) {
int iRelated[] = { SCE_SQL_COMMENTLINE, SCE_SQL_COMMENTDOC, SCE_SQL_COMMENTLINEDOC, SCE_SQL_COMMENTDOCKEYWORD, SCE_SQL_COMMENTDOCKEYWORDERROR };
for (int j = 0; j < COUNTOF(iRelated); j++) {
Style_SetStyles(hwnd, iRelated[j], pLexer->Styles[i].szValue, false);
Style_SetStyles(hwnd, iRelated[j], pLexer->Styles[i].szValue);
}
}
++i;
@ -1768,7 +1767,7 @@ void Style_SetBookmark(HWND hwnd, bool bShowMargin)
//
void Style_SetMargin(HWND hwnd, LPCWSTR lpszStyle) // iStyle = STYLE_LINENUMBER
{
Style_SetStyles(hwnd, STYLE_LINENUMBER, lpszStyle, false); // line numbers
Style_SetStyles(hwnd, STYLE_LINENUMBER, lpszStyle); // line numbers
COLORREF clrFore;
if (!Style_StrGetColor(lpszStyle, FOREGROUND_LAYER, &clrFore, true)) {
@ -2921,90 +2920,118 @@ bool Style_GetIndicatorType(LPWSTR lpszStyle, int cchSize, int* idx)
//
// Style_CopyStyles_IfNotDefined()
//
void Style_CopyStyles_IfNotDefined(LPCWSTR lpszStyleSrc, LPWSTR lpszStyleDest, int cchSizeDest, bool bCopyFont)
{
int iValue;
static inline void AppendStyle(LPWSTR lpszStyleDest, size_t cchSizeDest, LPCWSTR lpszStyleSrc) {
StringCchCat(lpszStyleDest, cchSizeDest, L"; ");
StringCchCat(lpszStyleDest, cchSizeDest, lpszStyleSrc);
}
void Style_CopyStyles_IfNotDefined(LPCWSTR lpszStyleSrc, LPWSTR lpszStyleDest, int cchSizeDest) {
int iValue;
COLORREF dColor;
WCHAR tch[BUFSIZE_STYLE_VALUE] = { L'\0' };
WCHAR szTmpStyle[BUFSIZE_STYLE_VALUE] = { L'\0' };
// --------- Font settings ---------
if (bCopyFont) {
if (!StrStr(lpszStyleDest, L"font:")) {
if (Style_StrGetFontName(lpszStyleSrc, tch, COUNTOF(tch))) {
WCHAR wchDefFontName[BUFSIZE_STYLE_VALUE] = { L'\0' };
Style_StrGetFontName(L"font:Default", wchDefFontName, COUNTOF(wchDefFontName));
if ((StringCchCompareXI(tch, L"Default") == 0) || (StringCchCompareXI(tch, wchDefFontName) == 0)) {
StringCchCat(szTmpStyle, COUNTOF(szTmpStyle), L"; font:Default");
} else {
StringCchCat(szTmpStyle, COUNTOF(szTmpStyle), L"; font:");
StringCchCat(szTmpStyle, COUNTOF(szTmpStyle), tch);
}
}
}
// --------- Font Style ---------
if (!StrStr(lpszStyleDest, L"fstyle:")) {
if (Style_StrGetFontStyle(lpszStyleSrc, tch, COUNTOF(tch))) {
StringCchCat(szTmpStyle, COUNTOF(szTmpStyle), L"; fstyle:");
StringCchCat(szTmpStyle, COUNTOF(szTmpStyle), tch);
}
bool bIsFontInDestDef = false;
WCHAR wchDefFontName[LF_FULLFACESIZE] = { L'\0' };
Style_StrGetFontName(L"font:Default", wchDefFontName, COUNTOF(wchDefFontName));
if (Style_StrGetFontName(lpszStyleDest, tch, COUNTOF(tch))) {
bIsFontInDestDef = true;
if ((StringCchCompareXI(tch, L"Default") == 0) || (StringCchCompareXI(tch, wchDefFontName) == 0)) {
AppendStyle(szTmpStyle, COUNTOF(szTmpStyle), L"font:Default");
} else {
AppendStyle(szTmpStyle, COUNTOF(szTmpStyle), L"font:");
StringCchCat(szTmpStyle, COUNTOF(szTmpStyle), tch);
}
// --------- Size ---------
if (!StrStr(lpszStyleDest, L"size:")) {
if (Style_StrGetSizeStr(lpszStyleSrc, tch, COUNTOF(tch))) {
StringCchCat(szTmpStyle, COUNTOF(szTmpStyle), L"; size:");
StringCchCat(szTmpStyle, COUNTOF(szTmpStyle), tch);
}
} else if (Style_StrGetFontName(lpszStyleSrc, tch, COUNTOF(tch))) {
if ((StringCchCompareXI(tch, L"Default") == 0) || (StringCchCompareXI(tch, wchDefFontName) == 0)) {
AppendStyle(szTmpStyle, COUNTOF(szTmpStyle), L"font:Default");
} else {
AppendStyle(szTmpStyle, COUNTOF(szTmpStyle), L"font:");
StringCchCat(szTmpStyle, COUNTOF(szTmpStyle), tch);
}
}
const WCHAR *pFontWeight = NULL;
int idx;
for (idx = FW_IDX_THIN; idx <= FW_IDX_ULTRADARK; ++idx) {
if (Style_StrHasAttribute(lpszStyleSrc, FontWeights[idx].wname) &&
!Style_StrHasAttribute(lpszStyleDest, FontWeights[idx].wname)) {
// --------- Font Style ---------
//~if (!StrStr(lpszStyleDest, L"fstyle:")) {
//~ if (Style_StrGetFontStyle(lpszStyleSrc, tch, COUNTOF(tch))) {
//~ StringCchCat(szTmpStyle, COUNTOF(szTmpStyle), L"; fstyle:");
//~ StringCchCat(szTmpStyle, COUNTOF(szTmpStyle), tch);
//~ }
//~}
const WCHAR *pFontWeight = NULL;
for (int idx = FW_IDX_THIN; idx <= FW_IDX_ULTRADARK; ++idx) {
if (Style_StrHasAttribute(lpszStyleDest, FontWeights[idx].wname)) {
pFontWeight = FontWeights[idx].wname;
break;
}
}
if (!pFontWeight && !bIsFontInDestDef) {
for (int idx = FW_IDX_THIN; idx <= FW_IDX_ULTRADARK; ++idx) {
if (Style_StrHasAttribute(lpszStyleSrc, FontWeights[idx].wname)) {
pFontWeight = FontWeights[idx].wname;
break;
}
}
if (pFontWeight && (idx != FW_IDX_REGULAR)) {
StringCchCat(szTmpStyle, COUNTOF(szTmpStyle), L"; ");
StringCchCat(szTmpStyle, COUNTOF(szTmpStyle), pFontWeight);
}
}
if (pFontWeight) {
AppendStyle(szTmpStyle, COUNTOF(szTmpStyle), pFontWeight);
}
if (Style_StrHasAttribute(lpszStyleSrc, FontEffects[FE_ITALIC]) &&
!Style_StrHasAttribute(lpszStyleDest, FontEffects[FE_ITALIC])) {
StringCchCat(szTmpStyle, COUNTOF(szTmpStyle), L"; ");
StringCchCat(szTmpStyle, COUNTOF(szTmpStyle), FontEffects[FE_ITALIC]);
}
if (Style_StrHasAttribute(lpszStyleDest, FontEffects[FE_ITALIC])) {
AppendStyle(szTmpStyle, COUNTOF(szTmpStyle), FontEffects[FE_ITALIC]);
} else if (!bIsFontInDestDef && Style_StrHasAttribute(lpszStyleSrc, FontEffects[FE_ITALIC])) {
AppendStyle(szTmpStyle, COUNTOF(szTmpStyle), FontEffects[FE_ITALIC]);
}
if (Style_StrHasAttribute(lpszStyleSrc, FontEffects[FE_UNDERLINE]) &&
!Style_StrHasAttribute(lpszStyleDest, FontEffects[FE_UNDERLINE])) {
StringCchCat(szTmpStyle, COUNTOF(szTmpStyle), L"; ");
StringCchCat(szTmpStyle, COUNTOF(szTmpStyle), FontEffects[FE_UNDERLINE]);
}
// --------- Size ---------
if (Style_StrHasAttribute(lpszStyleSrc, FontEffects[FE_STRIKEOUT]) &&
!Style_StrHasAttribute(lpszStyleDest, FontEffects[FE_STRIKEOUT])) {
StringCchCat(szTmpStyle, COUNTOF(szTmpStyle), L"; ");
StringCchCat(szTmpStyle, COUNTOF(szTmpStyle), FontEffects[FE_STRIKEOUT]);
}
if (Style_StrGetSizeStr(lpszStyleDest, tch, COUNTOF(tch))) {
AppendStyle(szTmpStyle, COUNTOF(szTmpStyle), L"size:");
StringCchCat(szTmpStyle, COUNTOF(szTmpStyle), tch);
} else if (Style_StrGetSizeStr(lpszStyleSrc, tch, COUNTOF(tch))) {
AppendStyle(szTmpStyle, COUNTOF(szTmpStyle), L"size:");
StringCchCat(szTmpStyle, COUNTOF(szTmpStyle), tch);
}
if (StrStr(lpszStyleSrc, L"fore:") && !StrStr(lpszStyleDest, L"fore:")) { // foreground
if (Style_StrGetColor(lpszStyleSrc, FOREGROUND_LAYER, &dColor, false)) {
Style_PrintfCchColor(tch, COUNTOF(tch), L"; ", FOREGROUND_LAYER, dColor);
StringCchCat(szTmpStyle, COUNTOF(szTmpStyle), tch);
}
}
if (Style_StrHasAttribute(lpszStyleDest, FontEffects[FE_UNDERLINE])) {
AppendStyle(szTmpStyle, COUNTOF(szTmpStyle), FontEffects[FE_UNDERLINE]);
} else if (!bIsFontInDestDef && Style_StrHasAttribute(lpszStyleSrc, FontEffects[FE_UNDERLINE])) {
AppendStyle(szTmpStyle, COUNTOF(szTmpStyle), FontEffects[FE_UNDERLINE]);
}
if (StrStr(lpszStyleSrc, L"back:") && !StrStr(lpszStyleDest, L"back:")) { // background
if (Style_StrGetColor(lpszStyleSrc, BACKGROUND_LAYER, &dColor, false)) {
Style_PrintfCchColor(tch, COUNTOF(tch), L"; ", BACKGROUND_LAYER, dColor);
StringCchCat(szTmpStyle, COUNTOF(szTmpStyle), tch);
}
}
if (Style_StrHasAttribute(lpszStyleDest, FontEffects[FE_STRIKEOUT])) {
AppendStyle(szTmpStyle, COUNTOF(szTmpStyle), FontEffects[FE_STRIKEOUT]);
} else if (!bIsFontInDestDef && Style_StrHasAttribute(lpszStyleSrc, FontEffects[FE_STRIKEOUT])) {
AppendStyle(szTmpStyle, COUNTOF(szTmpStyle), FontEffects[FE_STRIKEOUT]);
}
if (Style_StrGetCharSet(lpszStyleDest, &iValue)) {
StringCchPrintf(tch, COUNTOF(tch), L"charset:%i", iValue);
AppendStyle(szTmpStyle, COUNTOF(szTmpStyle), tch);
} else if (!bIsFontInDestDef && Style_StrGetCharSet(lpszStyleSrc, &iValue)) {
StringCchPrintf(tch, COUNTOF(tch), L"charset:%i", iValue);
AppendStyle(szTmpStyle, COUNTOF(szTmpStyle), tch);
}
// foreground color
if (Style_StrGetColor(lpszStyleDest, FOREGROUND_LAYER, &dColor, false)) {
Style_PrintfCchColor(tch, COUNTOF(tch), L"; ", FOREGROUND_LAYER, dColor);
StringCchCat(szTmpStyle, COUNTOF(szTmpStyle), tch);
} else if (!bIsFontInDestDef && Style_StrGetColor(lpszStyleSrc, FOREGROUND_LAYER, &dColor, false)) {
Style_PrintfCchColor(tch, COUNTOF(tch), L"; ", FOREGROUND_LAYER, dColor);
StringCchCat(szTmpStyle, COUNTOF(szTmpStyle), tch);
}
// background color
if (Style_StrGetColor(lpszStyleDest, BACKGROUND_LAYER, &dColor, false)) {
Style_PrintfCchColor(tch, COUNTOF(tch), L"; ", BACKGROUND_LAYER, dColor);
StringCchCat(szTmpStyle, COUNTOF(szTmpStyle), tch);
} else if (Style_StrGetColor(lpszStyleSrc, BACKGROUND_LAYER, &dColor, false)) {
Style_PrintfCchColor(tch, COUNTOF(tch), L"; ", BACKGROUND_LAYER, dColor);
StringCchCat(szTmpStyle, COUNTOF(szTmpStyle), tch);
}
#if 0
@ -3034,42 +3061,42 @@ void Style_CopyStyles_IfNotDefined(LPCWSTR lpszStyleSrc, LPWSTR lpszStyleDest, i
// --------- Special Styles ---------
if (!StrStr(lpszStyleDest, L"charset:")) {
if (Style_StrGetCharSet(lpszStyleSrc, &iValue)) {
StringCchPrintf(tch, COUNTOF(tch), L"; charset:%i", iValue);
StringCchCat(szTmpStyle, COUNTOF(szTmpStyle), tch);
}
if (Style_StrGetFontQuality(lpszStyleDest, tch, COUNTOF(tch))) {
AppendStyle(szTmpStyle, COUNTOF(szTmpStyle), L"smoothing:");
StringCchCat(szTmpStyle, COUNTOF(szTmpStyle), tch);
} else if (Style_StrGetFontQuality(lpszStyleSrc, tch, COUNTOF(tch))) {
AppendStyle(szTmpStyle, COUNTOF(szTmpStyle), L"smoothing:");
StringCchCat(szTmpStyle, COUNTOF(szTmpStyle), tch);
}
if (!StrStr(lpszStyleDest, L"smoothing:")) {
if (Style_StrGetFontQuality(lpszStyleSrc, tch, COUNTOF(tch))) {
StringCchCat(szTmpStyle, COUNTOF(szTmpStyle), L"; smoothing:");
StringCchCat(szTmpStyle, COUNTOF(szTmpStyle), tch);
}
if (Style_StrHasAttribute(lpszStyleDest, FontEffects[FE_EOLFILLED])) {
AppendStyle(szTmpStyle, COUNTOF(szTmpStyle), FontEffects[FE_EOLFILLED]);
} else if (Style_StrHasAttribute(lpszStyleSrc, FontEffects[FE_EOLFILLED])) {
AppendStyle(szTmpStyle, COUNTOF(szTmpStyle), FontEffects[FE_EOLFILLED]);
}
if (Style_StrHasAttribute(lpszStyleSrc, FontEffects[FE_EOLFILLED]) &&
!Style_StrHasAttribute(lpszStyleDest, FontEffects[FE_EOLFILLED])) {
StringCchCat(szTmpStyle, COUNTOF(szTmpStyle), L"; ");
StringCchCat(szTmpStyle, COUNTOF(szTmpStyle), FontEffects[FE_EOLFILLED]);
}
if (Style_StrGetCase(lpszStyleSrc, &iValue) && !StrStr(lpszStyleDest, L"case:")) {
StringCchCat(szTmpStyle, COUNTOF(szTmpStyle), L"; case:");
if (Style_StrGetCase(lpszStyleDest, &iValue)) {
AppendStyle(szTmpStyle, COUNTOF(szTmpStyle), L"case:");
StringCchCat(szTmpStyle, COUNTOF(szTmpStyle), (iValue == SC_CASE_UPPER) ? L"U" : L"L");
} else if (Style_StrGetCase(lpszStyleSrc, &iValue)) {
AppendStyle(szTmpStyle, COUNTOF(szTmpStyle), L"case:");
StringCchCat(szTmpStyle, COUNTOF(szTmpStyle), (iValue == SC_CASE_UPPER) ? L"U" : L"L");
}
if (!StrStr(lpszStyleDest, L"alpha:")) {
if (Style_StrGetAlpha(lpszStyleSrc, &iValue, true)) {
StringCchPrintf(tch, COUNTOF(tch), L"; alpha:%i", iValue);
StringCchCat(szTmpStyle, COUNTOF(szTmpStyle), tch);
}
if (Style_StrGetAlpha(lpszStyleDest, &iValue, true)) {
StringCchPrintf(tch, COUNTOF(tch), L"alpha:%i", iValue);
AppendStyle(szTmpStyle, COUNTOF(szTmpStyle), tch);
} else if (Style_StrGetAlpha(lpszStyleSrc, &iValue, true)) {
StringCchPrintf(tch, COUNTOF(tch), L"alpha:%i", iValue);
AppendStyle(szTmpStyle, COUNTOF(szTmpStyle), tch);
}
if (!StrStr(lpszStyleDest, L"alpha2:")) {
if (Style_StrGetAlpha(lpszStyleSrc, &iValue, false)) {
StringCchPrintf(tch, COUNTOF(tch), L"; alpha2:%i", iValue);
StringCchCat(szTmpStyle, COUNTOF(szTmpStyle), tch);
}
if (Style_StrGetAlpha(lpszStyleDest, &iValue, false)) {
StringCchPrintf(tch, COUNTOF(tch), L"alpha2:%i", iValue);
AppendStyle(szTmpStyle, COUNTOF(szTmpStyle), tch);
} else if (Style_StrGetAlpha(lpszStyleSrc, &iValue, false)) {
StringCchPrintf(tch, COUNTOF(tch), L"alpha2:%i", iValue);
AppendStyle(szTmpStyle, COUNTOF(szTmpStyle), tch);
}
//const WCHAR* wchProperty = L"property:";
@ -3081,37 +3108,45 @@ void Style_CopyStyles_IfNotDefined(LPCWSTR lpszStyleSrc, LPWSTR lpszStyleDest, i
//}
// -------- indicator type --------
if (!StrStr(lpszStyleDest, L"indic_")) {
bool indic_found = false;
iValue = -1;
StringCchCopy(tch, COUNTOF(tch), lpszStyleDest);
if (Style_GetIndicatorType(tch, 0, &iValue)) {
Style_GetIndicatorType(tch, COUNTOF(tch), &iValue);
AppendStyle(szTmpStyle, COUNTOF(szTmpStyle), tch);
indic_found = true;
}
if (!indic_found) {
iValue = -1;
StringCchCopy(tch, COUNTOF(tch), lpszStyleSrc);
if (Style_GetIndicatorType(tch, 0, &iValue)) {
StringCchCat(szTmpStyle, COUNTOF(szTmpStyle), L"; ");
Style_GetIndicatorType(tch, COUNTOF(tch), &iValue);
StringCchCat(szTmpStyle, COUNTOF(szTmpStyle), tch);
AppendStyle(szTmpStyle, COUNTOF(szTmpStyle), tch);
}
}
// -------- other style settings --------
if (Style_StrHasAttribute(lpszStyleSrc, CaretStyle[CS_OVRBLCK]) &&
!Style_StrHasAttribute(lpszStyleDest, CaretStyle[CS_OVRBLCK])) {
StringCchCat(szTmpStyle, COUNTOF(szTmpStyle), L"; ");
StringCchCat(szTmpStyle, COUNTOF(szTmpStyle), CaretStyle[CS_OVRBLCK]);
if (Style_StrHasAttribute(lpszStyleDest, CaretStyle[CS_OVRBLCK])) {
AppendStyle(szTmpStyle, COUNTOF(szTmpStyle), CaretStyle[CS_OVRBLCK]);
} else if (Style_StrHasAttribute(lpszStyleSrc, CaretStyle[CS_OVRBLCK])) {
AppendStyle(szTmpStyle, COUNTOF(szTmpStyle), CaretStyle[CS_OVRBLCK]);
}
if (Style_StrHasAttribute(lpszStyleSrc, CaretStyle[CS_BLOCK]) &&
!Style_StrHasAttribute(lpszStyleDest, CaretStyle[CS_BLOCK])) {
StringCchCat(szTmpStyle, COUNTOF(szTmpStyle), L"; ");
StringCchCat(szTmpStyle, COUNTOF(szTmpStyle), CaretStyle[CS_BLOCK]);
if (Style_StrHasAttribute(lpszStyleDest, CaretStyle[CS_BLOCK])) {
AppendStyle(szTmpStyle, COUNTOF(szTmpStyle), CaretStyle[CS_BLOCK]);
} else if (Style_StrHasAttribute(lpszStyleSrc, CaretStyle[CS_BLOCK])) {
AppendStyle(szTmpStyle, COUNTOF(szTmpStyle), CaretStyle[CS_BLOCK]);
}
if (Style_StrHasAttribute(lpszStyleSrc, CaretStyle[CS_NOBLINK]) &&
!Style_StrHasAttribute(lpszStyleDest, CaretStyle[CS_NOBLINK])) {
StringCchCat(szTmpStyle, COUNTOF(szTmpStyle), L"; ");
StringCchCat(szTmpStyle, COUNTOF(szTmpStyle), CaretStyle[CS_NOBLINK]);
if (Style_StrHasAttribute(lpszStyleDest, CaretStyle[CS_NOBLINK])) {
AppendStyle(szTmpStyle, COUNTOF(szTmpStyle), CaretStyle[CS_NOBLINK]);
} else if (Style_StrHasAttribute(lpszStyleSrc, CaretStyle[CS_NOBLINK])) {
AppendStyle(szTmpStyle, COUNTOF(szTmpStyle), CaretStyle[CS_NOBLINK]);
}
StrTrim(szTmpStyle, L" ;");
StringCchCat(lpszStyleDest, cchSizeDest, szTmpStyle);
StringCchCopy(lpszStyleDest, cchSizeDest, szTmpStyle);
}
//=============================================================================
@ -3224,12 +3259,14 @@ bool Style_SelectFont(HWND hwnd, LPWSTR lpszStyle, int cchStyle, LPCWSTR sLexerN
WCHAR wchDefaultFontName[LF_FULLFACESIZE] = { L'\0' };
Style_StrGetFontName(defaultFontTemplate, wchDefaultFontName, COUNTOF(wchDefaultFontName));
// current base style
const WCHAR *const lpszBaseStyleDefinition = GetCurrentStdLexer()->Styles[STY_DEFAULT].szValue;
// current common default font name setting
WCHAR wchCurrCommonFontName[LF_FULLFACESIZE] = { L'\0' };
if (!Style_StrGetFontName(GetCurrentStdLexer()->Styles[STY_DEFAULT].szValue, wchCurrCommonFontName, COUNTOF(wchCurrCommonFontName))) {
if (!Style_StrGetFontName(lpszBaseStyleDefinition, wchCurrCommonFontName, COUNTOF(wchCurrCommonFontName))) {
StringCchCopy(wchCurrCommonFontName, COUNTOF(wchCurrCommonFontName), wchDefaultFontName);
}
// specified font name
WCHAR wchFontName[LF_FULLFACESIZE] = { L'\0' };
if (!Style_StrGetFontName(lpszStyle, wchFontName, COUNTOF(wchFontName))) {
@ -3246,6 +3283,17 @@ bool Style_SelectFont(HWND hwnd, LPWSTR lpszStyle, int cchStyle, LPCWSTR sLexerN
//~ Style_StrGetFontStyle(lpszStyle, szStyleStrg, COUNTOF(szStyleStrg));
//~}
// Font Weight
int iFontWeight = FontWeights[FW_IDX_REGULAR].weight;
Style_StrGetWeightValue(lpszBaseStyleDefinition, &iFontWeight);
int const iBaseFontWeight = iFontWeight;
Style_StrGetWeightValue(lpszStyle, &iFontWeight);
// Italic / Oblique
bool const bIsItalic = Style_StrHasAttribute(lpszStyle, FontEffects[FE_ITALIC]);
// ------------------------------------------------------------------------
int iCharSet = SC_CHARSET_DEFAULT;
Style_StrGetCharSet(lpszStyle, &iCharSet);
@ -3262,14 +3310,9 @@ bool Style_SelectFont(HWND hwnd, LPWSTR lpszStyle, int cchStyle, LPCWSTR sLexerN
int const iFontHeight = PointSizeToFontHeight(fFontSize, hdc);
ReleaseDC(hwnd, hdc);
// Font Weight
int iFontWeight = FontWeights[FW_IDX_REGULAR].weight;
Style_StrGetWeightValue(lpszStyle, &iFontWeight);
int const iFontStretch = 0; // with calculated autom.
bool bIsItalic = Style_StrHasAttribute(lpszStyle, FontEffects[FE_ITALIC]);
bool bIsUnderline = Style_StrHasAttribute(lpszStyle, FontEffects[FE_UNDERLINE]);
bool bIsStrikeout = Style_StrHasAttribute(lpszStyle, FontEffects[FE_STRIKEOUT]);
bool const bIsUnderline = Style_StrHasAttribute(lpszStyle, FontEffects[FE_UNDERLINE]);
bool const bIsStrikeout = Style_StrHasAttribute(lpszStyle, FontEffects[FE_STRIKEOUT]);
int iQuality = Settings2.SciFontQuality;
switch (iQuality) {
@ -3305,7 +3348,7 @@ bool Style_SelectFont(HWND hwnd, LPWSTR lpszStyle, int cchStyle, LPCWSTR sLexerN
//~lf.lfClipPrecision = (BYTE)CLIP_DEFAULT_PRECIS;
//~lf.lfPitchAndFamily = FIXED_PITCH | FF_MODERN;
StringCchCopy(lf.lfFaceName, LF_FACESIZE, wchFontName);
StringCchCopy(lf.lfFaceName, LF_FACESIZE, wchFontName); // (!) not LF_FULLFACESIZE
// --------------------------------------------------------------------------
@ -3318,24 +3361,20 @@ bool Style_SelectFont(HWND hwnd, LPWSTR lpszStyle, int cchStyle, LPCWSTR sLexerN
cf.rgbColors = fgColor;
// --- FLAGS ---
cf.Flags = 0LL; // | CF_NOSCRIPTSEL
cf.Flags = CF_SCREENFONTS | CF_FORCEFONTEXIST; // | CF_NOSCRIPTSEL
// use logfont struct
cf.Flags |= CF_INITTOLOGFONTSTRUCT;
cf.lpLogFont = (LPLOGFONT)&lf;
cf.Flags |= bWithEffects ? CF_EFFECTS : 0;
cf.Flags |= (SciCall_GetTechnology() != SC_TECHNOLOGY_DEFAULT) ? CF_SCALABLEONLY : 0;
cf.Flags |= IsKeyDown(VK_SHIFT) ? CF_FIXEDPITCHONLY : 0;
// screen fonts
cf.Flags |= CF_SCREENFONTS;
cf.nFontType = SCREEN_FONTTYPE;
// font style (
cf.Flags |= flagUseStyle; //~ CF_USESTYLE
cf.lpszStyle = NULL; //~flagUseStyle ? szStyleStrg : NULL;
// use logfont struct
cf.Flags |= CF_INITTOLOGFONTSTRUCT;
cf.lpLogFont = (LPLOGFONT)&lf;
// Font size limits
cf.Flags |= CF_LIMITSIZE;
cf.nSizeMin = 4;
@ -3445,20 +3484,25 @@ bool Style_SelectFont(HWND hwnd, LPWSTR lpszStyle, int cchStyle, LPCWSTR sLexerN
//~ }
//~}
if (lf.lfWeight == iFontWeight) {
WCHAR check[64] = { L'\0' };
Style_AppendWeightStr(check, COUNTOF(check), lf.lfWeight);
StrTrim(check, L" ;");
if (Style_StrHasAttribute(lpszStyle, check)) {
if (bGlobalDefaultStyle) {
if (lf.lfWeight != FontWeights[FW_IDX_REGULAR].weight) {
Style_AppendWeightStr(szNewStyle, COUNTOF(szNewStyle), lf.lfWeight);
}
} else if (bCurrentDefaultStyle) {
if (lf.lfWeight != iBaseFontWeight) {
Style_AppendWeightStr(szNewStyle, COUNTOF(szNewStyle), lf.lfWeight);
}
} else {
Style_AppendWeightStr(szNewStyle, COUNTOF(szNewStyle), lf.lfWeight);
}
float fNewFontSize = (float)(cf.iPointSize < 10 ? 10 : cf.iPointSize) / 10.0f;
if (lf.lfItalic) {
StringCchCat(szNewStyle, COUNTOF(szNewStyle), L"; ");
StringCchCat(szNewStyle, COUNTOF(szNewStyle), FontEffects[FE_ITALIC]);
}
WCHAR newSize[64] = { L'\0' };
float fNewFontSize = ((float)(cf.iPointSize < 10 ? 10 : cf.iPointSize)) / 10.0f;
if (bRelFontSize) {
float fNewRelSize = Round10th(fNewFontSize - fBaseFontSize);
@ -3482,7 +3526,9 @@ bool Style_SelectFont(HWND hwnd, LPWSTR lpszStyle, int cchStyle, LPCWSTR sLexerN
}
}
}
} else {
} else { // absolute size
fFontSize = Round10th(fFontSize);
fNewFontSize = Round10th(fNewFontSize);
@ -3518,17 +3564,6 @@ bool Style_SelectFont(HWND hwnd, LPWSTR lpszStyle, int cchStyle, LPCWSTR sLexerN
}
}
if (lf.lfItalic) {
if (bIsItalic) {
if (Style_StrHasAttribute(lpszStyle, FontEffects[FE_ITALIC])) {
StringCchCat(szNewStyle, COUNTOF(szNewStyle), L"; ");
StringCchCat(szNewStyle, COUNTOF(szNewStyle), FontEffects[FE_ITALIC]);
}
} else {
StringCchCat(szNewStyle, COUNTOF(szNewStyle), L"; italic");
}
}
if (bWithEffects) {
if (lf.lfUnderline) {
if (bIsUnderline) {
@ -3576,7 +3611,7 @@ bool Style_SelectFont(HWND hwnd, LPWSTR lpszStyle, int cchStyle, LPCWSTR sLexerN
if (bPreserveStyles) {
// copy all other styles
StringCchCat(szNewStyle, COUNTOF(szNewStyle), L"; ");
Style_CopyStyles_IfNotDefined(lpszStyle, szNewStyle, COUNTOF(szNewStyle), false);
Style_CopyStyles_IfNotDefined(lpszStyle, szNewStyle, COUNTOF(szNewStyle));
}
StrTrim(szNewStyle, L" ;");
@ -3633,7 +3668,7 @@ bool Style_SelectColor(HWND hwnd,bool bForeGround,LPWSTR lpszStyle,int cchStyle,
if (bPreserveStyles) {
// copy all other styles
StringCchCat(szNewStyle, COUNTOF(szNewStyle), L"; ");
Style_CopyStyles_IfNotDefined(lpszStyle, szNewStyle, COUNTOF(szNewStyle), true);
Style_CopyStyles_IfNotDefined(lpszStyle, szNewStyle, COUNTOF(szNewStyle));
}
StrTrim(szNewStyle, L" ;");
@ -3647,9 +3682,11 @@ bool Style_SelectColor(HWND hwnd,bool bForeGround,LPWSTR lpszStyle,int cchStyle,
//
// Style_SetStyles()
//
void Style_SetStyles(HWND hwnd, int iStyle, LPCWSTR lpszStyle, bool bInitDefault)
void Style_SetStyles(HWND hwnd, const int iStyle, LPCWSTR lpszStyle)
{
if (!bInitDefault && StrIsEmpty(lpszStyle)) {
bool const bIsDefaultStyle = (iStyle == STYLE_DEFAULT);
if (!bIsDefaultStyle && StrIsEmpty(lpszStyle)) {
return;
}
@ -3659,23 +3696,38 @@ void Style_SetStyles(HWND hwnd, int iStyle, LPCWSTR lpszStyle, bool bInitDefault
// reset horizontal scrollbar width
SciCall_SetScrollWidth(1);
// Font
char chFontName[80] = { '\0' };
WCHAR wchFontName[80] = { L'\0' };
// === FONT ===
// Font Face Name
WCHAR wchFontName[LF_FACESIZE] = { L'\0' };
if (Style_StrGetFontName(lpszStyle, wchFontName, COUNTOF(wchFontName))) {
assert(lstrlen(wchFontName) < LF_FACESIZE);
if (StrIsNotEmpty(wchFontName)) {
WideCharToMultiByte(Encoding_SciCP, 0, wchFontName, -1, chFontName, (int)COUNTOF(chFontName), NULL, NULL);
char chFontName[LF_FACESIZE * 3] = { '\0' };
WideCharToMultiByte(CP_UTF8, 0, wchFontName, -1, chFontName, (int)COUNTOF(chFontName), NULL, NULL);
SciCall_StyleSetFont(iStyle, chFontName);
}
} else if (bInitDefault) {
} else if (bIsDefaultStyle) {
Style_StrGetFontName(L"font:Default", wchFontName, COUNTOF(wchFontName));
WideCharToMultiByte(Encoding_SciCP, 0, wchFontName, -1, chFontName, (int)COUNTOF(chFontName), NULL, NULL);
assert(lstrlen(wchFontName) < LF_FACESIZE);
char chFontName[LF_FACESIZE] = { '\0' };
WideCharToMultiByte(CP_UTF8, 0, wchFontName, -1, chFontName, (int)COUNTOF(chFontName), NULL, NULL);
SciCall_StyleSetFont(iStyle, chFontName);
}
// Font Weight
if (Style_StrGetWeightValue(lpszStyle, &iValue)) {
SciCall_StyleSetWeight(iStyle, iValue);
} else if (bIsDefaultStyle) {
SciCall_StyleSetWeight(iStyle, SC_WEIGHT_NORMAL);
}
// Italic
SciCall_StyleSetItalic(iStyle, Style_StrHasAttribute(lpszStyle, FontEffects[FE_ITALIC]));
// Font Quality
// default should be SC_EFF_QUALITY_LCD_OPTIMIZED
WPARAM wQuality = (WPARAM)Settings2.SciFontQuality;
int wQuality = Settings2.SciFontQuality;
if (Style_StrGetFontQuality(lpszStyle, tch, COUNTOF(tch))) {
if (StringCchCompareN(tch, COUNTOF(tch), L"none", COUNTOF(L"none")) == 0) {
wQuality = SC_EFF_QUALITY_NON_ANTIALIASED;
@ -3686,22 +3738,22 @@ void Style_SetStyles(HWND hwnd, int iStyle, LPCWSTR lpszStyle, bool bInitDefault
} else if (StringCchCompareN(tch, COUNTOF(tch), L"default", COUNTOF(L"default")) == 0) {
wQuality = SC_EFF_QUALITY_DEFAULT;
}
SendMessage(hwnd, SCI_SETFONTQUALITY, wQuality, 0);
} else if (bInitDefault) {
SendMessage(hwnd, SCI_SETFONTQUALITY, wQuality, 0);
SciCall_SetFontQuality(wQuality);
} else if (bIsDefaultStyle) {
SciCall_SetFontQuality(wQuality);
}
// Size values are relative to BaseFontSize/CurrentFontSize
float fBaseFontSize = Style_GetCurrentFontSize();
if (Style_StrGetSize(lpszStyle, &fBaseFontSize)) {
if (iStyle == STYLE_DEFAULT) {
if (bInitDefault) {
if (bIsDefaultStyle) {
_SetBaseFontSize(fBaseFontSize);
}
_SetCurrentFontSize(fBaseFontSize);
}
SendMessage(hwnd, SCI_STYLESETSIZEFRACTIONAL, iStyle, float2int(fBaseFontSize * SC_FONT_SIZE_MULTIPLIER));
} else if (bInitDefault) {
} else if (bIsDefaultStyle) {
_SetBaseFontSize(fBaseFontSize);
SendMessage(hwnd, SCI_STYLESETSIZEFRACTIONAL, STYLE_DEFAULT, float2int(fBaseFontSize * SC_FONT_SIZE_MULTIPLIER));
}
@ -3709,7 +3761,7 @@ void Style_SetStyles(HWND hwnd, int iStyle, LPCWSTR lpszStyle, bool bInitDefault
// Character Set
if (Style_StrGetCharSet(lpszStyle, &iValue)) {
SendMessage(hwnd, SCI_STYLESETCHARACTERSET, iStyle, (LPARAM)iValue);
} else if (bInitDefault) {
} else if (bIsDefaultStyle) {
SendMessage(hwnd, SCI_STYLESETCHARACTERSET, iStyle, (LPARAM)SC_CHARSET_DEFAULT);
}
@ -3717,7 +3769,7 @@ void Style_SetStyles(HWND hwnd, int iStyle, LPCWSTR lpszStyle, bool bInitDefault
// Foregr
if (Style_StrGetColor(lpszStyle, FOREGROUND_LAYER, &dColor, false)) {
SciCall_StyleSetFore(iStyle, dColor);
} else if (bInitDefault) {
} else if (bIsDefaultStyle) {
SciCall_StyleSetFore(iStyle, GetModeTextColor(UseDarkMode()));
} else { // fallback: SCI default
Style_StrGetColor(lpszStyle, FOREGROUND_LAYER, &dColor, true);
@ -3727,48 +3779,35 @@ void Style_SetStyles(HWND hwnd, int iStyle, LPCWSTR lpszStyle, bool bInitDefault
// Backgr
if (Style_StrGetColor(lpszStyle, BACKGROUND_LAYER, &dColor, false)) {
SciCall_StyleSetBack(iStyle, dColor);
} else if (bInitDefault) {
} else if (bIsDefaultStyle) {
SciCall_StyleSetBack(iStyle, GetModeBkColor(UseDarkMode()));
} else { // fallback: SCI default
Style_StrGetColor(lpszStyle, BACKGROUND_LAYER, &dColor, true);
SciCall_StyleSetBack(iStyle, dColor);
}
// Weight
if (Style_StrGetWeightValue(lpszStyle, &iValue)) {
SendMessage(hwnd, SCI_STYLESETWEIGHT, iStyle, (LPARAM)iValue);
} else if (bInitDefault) {
SendMessage(hwnd, SCI_STYLESETWEIGHT, iStyle, (LPARAM)SC_WEIGHT_NORMAL);
}
// Italic
if (Style_StrHasAttribute(lpszStyle, FontEffects[FE_ITALIC])) {
SendMessage(hwnd, SCI_STYLESETITALIC, iStyle, (LPARAM)true);
} else if (bInitDefault) {
SendMessage(hwnd, SCI_STYLESETITALIC, iStyle, (LPARAM)false);
}
// Underline
if (Style_StrHasAttribute(lpszStyle, FontEffects[FE_UNDERLINE])) {
SendMessage(hwnd, SCI_STYLESETUNDERLINE, iStyle, (LPARAM)true);
} else if (bInitDefault) {
} else if (bIsDefaultStyle) {
SendMessage(hwnd, SCI_STYLESETUNDERLINE, iStyle, (LPARAM)false);
}
// StrikeOut
if (Style_StrHasAttribute(lpszStyle, FontEffects[FE_STRIKEOUT])) {
SendMessage(hwnd, SCI_STYLESETSTRIKE, iStyle, (LPARAM)true);
} else if (bInitDefault) {
} else if (bIsDefaultStyle) {
SendMessage(hwnd, SCI_STYLESETSTRIKE, iStyle, (LPARAM)false);
}
// EOL Filled
if (Style_StrHasAttribute(lpszStyle, FontEffects[FE_EOLFILLED])) {
SendMessage(hwnd, SCI_STYLESETEOLFILLED, iStyle, (LPARAM)true);
} else if (bInitDefault) {
} else if (bIsDefaultStyle) {
SendMessage(hwnd, SCI_STYLESETEOLFILLED, iStyle, (LPARAM)false);
}
// Case
if (Style_StrGetCase(lpszStyle, &iValue)) {
SendMessage(hwnd, SCI_STYLESETCASE, iStyle, (LPARAM)iValue);
} else if (bInitDefault) {
} else if (bIsDefaultStyle) {
SendMessage(hwnd, SCI_STYLESETCASE, iStyle, (LPARAM)SC_CASE_MIXED);
}
}
@ -3935,9 +3974,9 @@ void Style_AddLexerToListView(HWND hwnd,PEDITLEXER plex)
//
static bool _ApplyDialogItemText(HWND hwnd,
PEDITLEXER pCurrentLexer, PEDITSTYLE pCurrentStyle, int iCurStyleIdx, bool bIsStyleSelected)
PEDITLEXER pDlgLexer, PEDITSTYLE pDlgStyle, int iDlgStyleIdx, bool bIsStyleSelected)
{
UNREFERENCED_PARAMETER(iCurStyleIdx);
UNREFERENCED_PARAMETER(iDlgStyleIdx);
bool bChgNfy = false;
@ -3945,22 +3984,22 @@ static bool _ApplyDialogItemText(HWND hwnd,
GetDlgItemText(hwnd, IDC_STYLEEDIT, szBuf, COUNTOF(szBuf));
// normalize
WCHAR szBufNorm[max(BUFSIZE_STYLE_VALUE, BUFZIZE_STYLE_EXTENTIONS)] = { L'\0' };
Style_CopyStyles_IfNotDefined(szBuf, szBufNorm, COUNTOF(szBufNorm), true);
Style_CopyStyles_IfNotDefined(szBuf, szBufNorm, COUNTOF(szBufNorm));
if (StringCchCompareXI(szBufNorm, pCurrentStyle->szValue) != 0) {
StringCchCopy(pCurrentStyle->szValue, COUNTOF(pCurrentStyle->szValue), szBufNorm);
if (StringCchCompareXI(szBufNorm, pDlgStyle->szValue) != 0) {
StringCchCopy(pDlgStyle->szValue, COUNTOF(pDlgStyle->szValue), szBufNorm);
bChgNfy = true;
}
if (!bIsStyleSelected) { // must be file extensions
if (!GetDlgItemText(hwnd, IDC_STYLEEDIT_ROOT, szBuf, COUNTOF(szBuf))) {
StringCchCopy(szBuf, COUNTOF(szBuf), pCurrentLexer->pszDefExt);
StringCchCopy(szBuf, COUNTOF(szBuf), pDlgLexer->pszDefExt);
}
if (StringCchCompareXI(szBuf, pCurrentLexer->szExtensions) != 0) {
StringCchCopy(pCurrentLexer->szExtensions, COUNTOF(pCurrentLexer->szExtensions), szBuf);
if (StringCchCompareXI(szBuf, pDlgLexer->szExtensions) != 0) {
StringCchCopy(pDlgLexer->szExtensions, COUNTOF(pDlgLexer->szExtensions), szBuf);
bChgNfy = true;
}
}
if (bChgNfy && (IsLexerStandard(pCurrentLexer) || (pCurrentLexer == s_pLexCurrent))) {
if (bChgNfy && (IsLexerStandard(pDlgLexer) || (pDlgLexer == s_pLexCurrent))) {
Style_ResetCurrentLexer(Globals.hwndEdit);
}
return bChgNfy;
@ -4220,7 +4259,6 @@ CASE_WM_CTLCOLOR_SET:
SendMessage(hwndTV, WM_THEMECHANGED, 0, 0);
_UpdateTitleText(hwnd);
SendDlgItemMessageW(hwnd, IDC_TITLE, WM_SETTEXT, 0, (LPARAM)s_TitleTxt); // scheme may have changed
Style_ResetCurrentLexer(Globals.hwndEdit);
SendWMCommandEx(hwnd, IDC_STYLEEDIT, EN_CHANGE); // button color inlay
UpdateWindowEx(hwnd);
}
@ -4648,7 +4686,7 @@ CASE_WM_CTLCOLOR_SET:
while (g_pLexArray[iLexer]->Styles[i].iStyle != -1) {
// normalize
tchTmpBuffer[0] = L'\0'; // clear
Style_CopyStyles_IfNotDefined(Style_StylesBackup[cnt], tchTmpBuffer, COUNTOF(tchTmpBuffer), true);
Style_CopyStyles_IfNotDefined(Style_StylesBackup[cnt], tchTmpBuffer, COUNTOF(tchTmpBuffer));
StringCchCopy(g_pLexArray[iLexer]->Styles[i].szValue, COUNTOF(g_pLexArray[iLexer]->Styles[i].szValue), tchTmpBuffer);
++cnt;
++i;

View File

@ -82,10 +82,10 @@ bool Style_StrGetColor(LPCWSTR lpszStyle, COLOR_LAYER layer, COLORREF *rgb, bo
bool Style_StrGetCase(LPCWSTR lpszStyle,int* i);
bool Style_StrGetAlpha(LPCWSTR lpszStyle, int* iOutValue, bool bAlpha1st);
bool Style_GetIndicatorType(LPWSTR lpszStyle,int cchSize,int* idx);
void Style_CopyStyles_IfNotDefined(LPCWSTR lpszStyleSrc,LPWSTR lpszStyleDest,int cchSizeDest,bool);
void Style_CopyStyles_IfNotDefined(LPCWSTR lpszStyleSrc,LPWSTR lpszStyleDest,int cchSizeDest);
bool Style_SelectFont(HWND hwnd,LPWSTR lpszStyle,int cchStyle,LPCWSTR sLexerName,LPCWSTR sStyleName,bool,bool,bool,bool);
bool Style_SelectColor(HWND hwnd,bool,LPWSTR lpszStyle,int cchStyle,bool);
void Style_SetStyles(HWND hwnd,int iStyle,LPCWSTR lpszStyle,bool);
void Style_SetStyles(HWND hwnd,const int iStyle,LPCWSTR lpszStyle);
bool Style_IsCurLexerStandard();
float Style_GetBaseFontSize();
void Style_SetMultiEdgeLine(const int colVec[], const size_t count);