- revert Neil's proposed patch and rely on Scintilla upstream decision for next revision

+ switch to SCI_BRACEHIGHLIGHTINDICATOR API (following Neil's recomendation)
This commit is contained in:
Rainer Kottenhoff 2017-10-20 00:49:20 +02:00
parent 5a34995f96
commit 2c9f47950a
4 changed files with 57 additions and 38 deletions

View File

@ -12,7 +12,7 @@
namespace Scintilla {
#endif
#define NP3_MATCH_BRACE_RECT_SEL_PATCH 1
#undef NP3_MATCH_BRACE_RECT_SEL_PATCH
struct PrintParameters {
int magnification;

View File

@ -172,11 +172,22 @@ HWND EditCreate(HWND hwndParent)
SendMessage(hwnd,SCI_ASSIGNCMDKEY,(SCK_HOME + (SCMOD_SHIFT << 16)),SCI_VCHOMEWRAPEXTEND);
SendMessage(hwnd,SCI_ASSIGNCMDKEY,(SCK_END + (SCMOD_SHIFT << 16)),SCI_LINEENDWRAPEXTEND);
// set style
// set indicator styles
SendMessage(hwnd, SCI_INDICSETOUTLINEALPHA, INDIC_NP3_MARK_OCCURANCE, 220);
SendMessage(hwnd, SCI_INDICSETALPHA, INDIC_NP3_MARK_OCCURANCE, 100);
SendMessage(hwnd, SCI_INDICSETFORE, INDIC_NP3_MARK_OCCURANCE, 0xff << ((iMarkOccurrences - 1) << 3));
SendMessage(hwnd, SCI_INDICSETSTYLE, INDIC_NP3_MARK_OCCURANCE, INDIC_ROUNDBOX);
SendMessage(hwnd, SCI_INDICSETOUTLINEALPHA, INDIC_NP3_BAD_BRACE, 220);
SendMessage(hwnd, SCI_INDICSETALPHA,INDIC_NP3_MATCH_BRACE, 120);
SendMessage(hwnd, SCI_INDICSETFORE,INDIC_NP3_MATCH_BRACE, 0xff << (1 << 3)); // overriden by style
SendMessage(hwnd, SCI_INDICSETSTYLE,INDIC_NP3_MATCH_BRACE, INDIC_FULLBOX);
SendMessage(hwnd, SCI_INDICSETOUTLINEALPHA, INDIC_NP3_BAD_BRACE, 220);
SendMessage(hwnd, SCI_INDICSETALPHA, INDIC_NP3_BAD_BRACE, 120);
SendMessage(hwnd, SCI_INDICSETFORE, INDIC_NP3_BAD_BRACE, 0xff ); // overriden by style
SendMessage(hwnd, SCI_INDICSETSTYLE, INDIC_NP3_BAD_BRACE, INDIC_FULLBOX);
// word delimiter handling
EditInitWordDelimiter(hwnd);
@ -5251,13 +5262,6 @@ void CompleteWord(HWND hwnd, BOOL autoInsert)
//
void EditMatchBrace(HWND hwnd)
{
// set style
//SendMessage(hwnd, SCI_INDICSETALPHA, 1, 100);
//SendMessage(hwnd, SCI_INDICSETFORE, 1, 0xff << ((iMarkOccurrences - 1) << 3));
//SendMessage(hwnd, SCI_INDICSETSTYLE, 1, INDIC_ROUNDBOX);
//SendMessage(hwnd, SCI_BRACEHIGHLIGHTINDICATOR, 1, 0);
//SendMessage(hwnd, SCI_BRACEBADLIGHTINDICATOR, 1, 0);
int iPos;
char c;
@ -5276,10 +5280,12 @@ void EditMatchBrace(HWND hwnd)
int col1 = (int)SendMessage(hwnd, SCI_GETCOLUMN, iPos, 0);
int col2 = (int)SendMessage(hwnd, SCI_GETCOLUMN, iBrace2, 0);
SendMessage(hwnd, SCI_BRACEHIGHLIGHT, iPos, iBrace2);
SendMessage(hwnd, SCI_BRACEHIGHLIGHTINDICATOR, 1, INDIC_NP3_MATCH_BRACE);
SendMessage(hwnd, SCI_SETHIGHLIGHTGUIDE, min(col1, col2), 0);
}
else {
SendMessage(hwnd, SCI_BRACEBADLIGHT, iPos, 0);
SendMessage(hwnd, SCI_BRACEBADLIGHTINDICATOR, 1, INDIC_NP3_BAD_BRACE);
SendMessage(hwnd, SCI_SETHIGHLIGHTGUIDE, 0, 0);
}
}
@ -5293,15 +5299,18 @@ void EditMatchBrace(HWND hwnd)
int col1 = (int)SendMessage(hwnd, SCI_GETCOLUMN, iPos, 0);
int col2 = (int)SendMessage(hwnd, SCI_GETCOLUMN, iBrace2, 0);
SendMessage(hwnd, SCI_BRACEHIGHLIGHT, iPos, iBrace2);
SendMessage(hwnd, SCI_BRACEHIGHLIGHTINDICATOR, 1, INDIC_NP3_MATCH_BRACE);
SendMessage(hwnd, SCI_SETHIGHLIGHTGUIDE, min(col1, col2), 0);
}
else {
SendMessage(hwnd, SCI_BRACEBADLIGHT, iPos, 0);
SendMessage(hwnd, SCI_BRACEBADLIGHTINDICATOR, 1, INDIC_NP3_BAD_BRACE);
SendMessage(hwnd, SCI_SETHIGHLIGHTGUIDE, 0, 0);
}
}
else {
SendMessage(hwnd, SCI_BRACEHIGHLIGHT, (WPARAM)-1, (LPARAM)-1);
SendMessage(hwnd, SCI_BRACEHIGHLIGHTINDICATOR, 1, INDIC_NP3_MATCH_BRACE);
SendMessage(hwnd, SCI_SETHIGHLIGHTGUIDE, 0, 0);
}
}

View File

@ -47,6 +47,7 @@ typedef struct _editfindreplace
#define INDIC_NP3_MARK_OCCURANCE 1
#define INDIC_NP3_MATCH_BRACE 2
#define INDIC_NP3_BAD_BRACE 3
HWND EditCreate(HWND);
void EditInitWordDelimiter(HWND);

View File

@ -2998,8 +2998,20 @@ void Style_SetLexer(HWND hwnd,PEDITLEXER pLexNew)
SendMessage(hwnd,SCI_STYLECLEARALL,0,0);
Style_SetStyles(hwnd,lexDefault.Styles[1+iIdx].iStyle,lexDefault.Styles[1+iIdx].szValue); // linenumber
Style_SetStyles(hwnd,lexDefault.Styles[2+iIdx].iStyle,lexDefault.Styles[2+iIdx].szValue); // brace light
Style_SetStyles(hwnd,lexDefault.Styles[3+iIdx].iStyle,lexDefault.Styles[3+iIdx].szValue); // brace bad
//~Style_SetStyles(hwnd,lexDefault.Styles[2+iIdx].iStyle,lexDefault.Styles[2+iIdx].szValue); // brace light
if (Style_StrGetColor(TRUE, lexDefault.Styles[2 + iIdx].szValue, &iValue))
SendMessage(hwnd, SCI_INDICSETFORE, INDIC_NP3_MATCH_BRACE, iValue);
if (Style_StrGetAlpha(lexDefault.Styles[2 + iIdx].szValue, &iValue))
SendMessage(hwnd, SCI_INDICSETALPHA, INDIC_NP3_MATCH_BRACE, iValue);
//~Style_SetStyles(hwnd,lexDefault.Styles[3+iIdx].iStyle,lexDefault.Styles[3+iIdx].szValue); // brace bad
if (Style_StrGetColor(TRUE, lexDefault.Styles[3 + iIdx].szValue, &iValue))
SendMessage(hwnd, SCI_INDICSETFORE, INDIC_NP3_BAD_BRACE, iValue);
if (Style_StrGetAlpha(lexDefault.Styles[3 + iIdx].szValue, &iValue))
SendMessage(hwnd, SCI_INDICSETALPHA, INDIC_NP3_BAD_BRACE, iValue);
if (pLexNew != &lexANSI)
Style_SetStyles(hwnd,lexDefault.Styles[4+iIdx].iStyle,lexDefault.Styles[4+iIdx].szValue); // control char
Style_SetStyles(hwnd,lexDefault.Styles[5+iIdx].iStyle,lexDefault.Styles[5+iIdx].szValue); // indent guide
@ -3923,6 +3935,30 @@ BOOL Style_StrGetColor(BOOL bFore,LPCWSTR lpszStyle,int *rgb)
}
//=============================================================================
//
// Style_StrGetAlpha()
//
BOOL Style_StrGetAlpha(LPCWSTR lpszStyle, int *i) {
WCHAR tch[256] = { L'\0' };
WCHAR *p = StrStrI(lpszStyle, L"alpha:");
if (p) {
StringCchCopy(tch, COUNTOF(tch), p + CSTRLEN(L"alpha:"));
p = StrChr(tch, L';');
if (p)
*p = L'\0';
TrimString(tch);
int iValue = 0;
int itok = swscanf_s(tch, L"%i", &iValue);
if (itok == 1) {
*i = min(max(SC_ALPHA_TRANSPARENT, iValue), SC_ALPHA_OPAQUE);
return TRUE;
}
}
return FALSE;
}
//=============================================================================
//
// Style_StrGetCase()
@ -3951,33 +3987,6 @@ BOOL Style_StrGetCase(LPCWSTR lpszStyle,int *i)
}
//=============================================================================
//
// Style_StrGetAlpha()
//
BOOL Style_StrGetAlpha(LPCWSTR lpszStyle,int *i)
{
WCHAR tch[256] = { L'\0' };
WCHAR *p = StrStrI(lpszStyle, L"alpha:");
if (p)
{
StringCchCopy(tch,COUNTOF(tch),p + CSTRLEN(L"alpha:"));
p = StrChr(tch, L';');
if (p)
*p = L'\0';
TrimString(tch);
int iValue = 0;
int itok = swscanf_s(tch,L"%i",&iValue);
if (itok == 1)
{
*i = min(max(SC_ALPHA_TRANSPARENT,iValue),SC_ALPHA_OPAQUE);
return TRUE;
}
}
return FALSE;
}
//=============================================================================
//
// Style_SelectFont()