+ add: Preps for word marker

This commit is contained in:
RaiKoHoff 2020-08-18 17:04:12 +02:00
parent 98f3360d42
commit 456b0affbb
4 changed files with 92 additions and 40 deletions

View File

@ -53,6 +53,18 @@
#define RELAUNCH_ELEVATED_BUF_ARG L"tmpfbuf="
WORDBOOKMARK_T WordBookMarks[MARKER_NP3_BOOKMARK] = {
/*0*/ {false, SC_MARK_SMALLRECT, RGB(0xFF, 0x00, 0x00), RGB(0xFF, 0x00, 0x00), SC_ALPHA_OPAQUE},
/*1*/ {false, SC_MARK_SMALLRECT, RGB(0xFF, 0x00, 0x00), RGB(0xFF, 0x00, 0x00), SC_ALPHA_OPAQUE},
/*2*/ {false, SC_MARK_SMALLRECT, RGB(0xFF, 0x00, 0x00), RGB(0xFF, 0x00, 0x00), SC_ALPHA_OPAQUE},
/*3*/ {false, SC_MARK_SMALLRECT, RGB(0xFF, 0x00, 0x00), RGB(0xFF, 0x00, 0x00), SC_ALPHA_OPAQUE},
/*4*/ {false, SC_MARK_SMALLRECT, RGB(0xFF, 0x00, 0x00), RGB(0xFF, 0x00, 0x00), SC_ALPHA_OPAQUE},
/*5*/ {false, SC_MARK_SMALLRECT, RGB(0xFF, 0x00, 0x00), RGB(0xFF, 0x00, 0x00), SC_ALPHA_OPAQUE},
/*6*/ {false, SC_MARK_SMALLRECT, RGB(0xFF, 0x00, 0x00), RGB(0xFF, 0x00, 0x00), SC_ALPHA_OPAQUE},
/*7*/ {false, SC_MARK_SMALLRECT, RGB(0xFF, 0x00, 0x00), RGB(0xFF, 0x00, 0x00), SC_ALPHA_OPAQUE}
};
CONSTANTS_T const Constants = {
2 // StdDefaultLexerID
, L"minipath.exe" // FileBrowserMiniPath
@ -1932,8 +1944,8 @@ static void _InitializeSciEditCtrl(HWND hwndEditCtrl)
SendMessage(hwndEditCtrl, SCI_INDICSETSTYLE, INDIC_NP3_COLOR_DEF, INDIC_COMPOSITIONTHIN /*INDIC_HIDDEN*/); // MARKER only
SendMessage(hwndEditCtrl, SCI_INDICSETUNDER, INDIC_NP3_COLOR_DEF, true);
SendMessage(hwndEditCtrl, SCI_INDICSETALPHA, INDIC_NP3_COLOR_DEF, 0x00); // reset on hover
SendMessage(hwndEditCtrl, SCI_INDICSETOUTLINEALPHA, INDIC_NP3_COLOR_DEF, 0xFF);
SendMessage(hwndEditCtrl, SCI_INDICSETALPHA, INDIC_NP3_COLOR_DEF, SC_ALPHA_TRANSPARENT); // reset on hover
SendMessage(hwndEditCtrl, SCI_INDICSETOUTLINEALPHA, INDIC_NP3_COLOR_DEF, SC_ALPHA_OPAQUE);
SendMessage(hwndEditCtrl, SCI_INDICSETHOVERSTYLE, INDIC_NP3_COLOR_DEF, INDIC_ROUNDBOX); // HOVER
SendMessage(hwndEditCtrl, SCI_INDICSETHOVERFORE, INDIC_NP3_COLOR_DEF, RGB(0x00, 0x00, 0x00)); // recalc on hover
@ -1943,8 +1955,8 @@ static void _InitializeSciEditCtrl(HWND hwndEditCtrl)
SendMessage(hwndEditCtrl, SCI_INDICSETSTYLE, INDIC_NP3_UNICODE_POINT, INDIC_COMPOSITIONTHIN /*INDIC_HIDDEN*/); // MARKER only
//SendMessage(hwndEditCtrl, SCI_INDICSETUNDER, INDIC_NP3_UNICODE_POINT, false);
SendMessage(hwndEditCtrl, SCI_INDICSETALPHA, INDIC_NP3_UNICODE_POINT, 0x00);
SendMessage(hwndEditCtrl, SCI_INDICSETOUTLINEALPHA, INDIC_NP3_UNICODE_POINT, 0xFF);
SendMessage(hwndEditCtrl, SCI_INDICSETALPHA, INDIC_NP3_UNICODE_POINT, SC_ALPHA_TRANSPARENT);
SendMessage(hwndEditCtrl, SCI_INDICSETOUTLINEALPHA, INDIC_NP3_UNICODE_POINT, SC_ALPHA_NOALPHA);
SendMessage(hwndEditCtrl, SCI_INDICSETHOVERSTYLE, INDIC_NP3_UNICODE_POINT, INDIC_ROUNDBOX); // HOVER
//SendMessage(hwndEditCtrl, SCI_INDICSETHOVERFORE, INDIC_NP3_UNICODE_POINT, RGB(0xE0, 0xE0, 0xE0));
@ -6524,23 +6536,23 @@ static DocPos prevCursorPosition = -1;
#define RGB_TOLERANCE 0x20
#define RGB_SUB(X, Y) (((X) > (Y)) ? ((X) - (Y)) : ((Y) - (X)))
inline COLORREF _CalcContrastColor(COLORREF rgb, BYTE alpha)
inline COLORREF _CalcContrastColor(COLORREF rgb, int alpha)
{
bool const mask = RGB_SUB(MulDiv(rgb >> 0, alpha, 0xFF) & 0xFF, 0x80) <= RGB_TOLERANCE &&
RGB_SUB(MulDiv(rgb >> 8, alpha, 0xFF) & 0xFF, 0x80) <= RGB_TOLERANCE &&
RGB_SUB(MulDiv(rgb >> 16, alpha, 0xFF) & 0xFF, 0x80) <= RGB_TOLERANCE;
bool const mask = RGB_SUB(MulDiv(rgb >> 0, alpha, SC_ALPHA_OPAQUE) & SC_ALPHA_OPAQUE, 0x80) <= RGB_TOLERANCE &&
RGB_SUB(MulDiv(rgb >> 8, alpha, SC_ALPHA_OPAQUE) & SC_ALPHA_OPAQUE, 0x80) <= RGB_TOLERANCE &&
RGB_SUB(MulDiv(rgb >> 16, alpha, SC_ALPHA_OPAQUE) & SC_ALPHA_OPAQUE, 0x80) <= RGB_TOLERANCE;
return mask ? (0x7F7F7F + rgb) & 0xFFFFFF : rgb ^ 0xFFFFFF;
return mask ? ((0x7F7F7F + rgb)) & 0xFFFFFF : (rgb ^ 0xFFFFFF);
}
// ----------------------------------------------------------------------------
#define ARGB_TO_COLREF(X) (RGB(((X) >> 16) & 0xFF, ((X) >> 8) & 0xFF, (X)&0xFF))
#define RGBA_TO_COLREF(X) (RGB(((X) >> 24) & 0xFF, ((X) >> 16) & 0xFF, ((X) >> 8) & 0xFF))
#define BGRA_TO_COLREF(X) (RGB(((X) >> 8) & 0xFF, ((X) >> 16) & 0xFF, ((X) >> 24) & 0xFF))
#define ARGB_GET_ALPHA(A) (((A) >> 24) & 0xFF)
#define RGBA_GET_ALPHA(A) ((A) & 0xFF)
#define ARGB_TO_COLREF(X) (RGB(((X) >> 16) & SC_ALPHA_OPAQUE, ((X) >> 8) & SC_ALPHA_OPAQUE, (X) & SC_ALPHA_OPAQUE))
#define RGBA_TO_COLREF(X) (RGB(((X) >> 24) & SC_ALPHA_OPAQUE, ((X) >> 16) & SC_ALPHA_OPAQUE, ((X) >> 8) & SC_ALPHA_OPAQUE))
#define BGRA_TO_COLREF(X) (RGB(((X) >> 8) & SC_ALPHA_OPAQUE, ((X) >> 16) & SC_ALPHA_OPAQUE, ((X) >> 24) & SC_ALPHA_OPAQUE))
#define ARGB_GET_ALPHA(A) (((A) >> 24) & SC_ALPHA_OPAQUE)
#define RGBA_GET_ALPHA(A) ((A) & SC_ALPHA_OPAQUE)
#define BGRA_GET_ALPHA(A) RGBA_GET_ALPHA(A)
// ----------------------------------------------------------------------------
@ -6652,7 +6664,7 @@ void HandleDWellStartEnd(const DocPos position, const UINT uid)
if (sscanf_s(&chText[1], "%x", &iValue) == 1)
{
COLORREF rgb = 0x000000;
BYTE alpha = 0xFF;
int alpha = SC_ALPHA_OPAQUE;
if (length >= 8) // ARGB, RGBA, BGRA
{
switch (Settings.ColorDefHotspot) {
@ -6676,7 +6688,7 @@ void HandleDWellStartEnd(const DocPos position, const UINT uid)
else // RGB
{
rgb = RGB((iValue >> 16) & 0xFF, (iValue >> 8) & 0xFF, iValue & 0xFF);
alpha = 0xFF;
alpha = SC_ALPHA_OPAQUE;
}
COLORREF const fgr = _CalcContrastColor(rgb, alpha);
@ -6684,7 +6696,7 @@ void HandleDWellStartEnd(const DocPos position, const UINT uid)
SciCall_IndicatorFillRange(firstPos, length);
SciCall_IndicSetHoverFore(INDIC_NP3_COLOR_DEF_T, fgr);
SciCall_IndicSetAlpha(INDIC_NP3_COLOR_DEF, alpha);
SciCall_IndicSetAlpha(INDIC_NP3_COLOR_DEF, Sci_ClampAlpha(alpha));
SciCall_IndicSetHoverFore(INDIC_NP3_COLOR_DEF, rgb);
}
}
@ -6727,7 +6739,7 @@ void HandleDWellStartEnd(const DocPos position, const UINT uid)
SciCall_SetIndicatorCurrent(INDIC_NP3_COLOR_DEF_T);
SciCall_IndicatorClearRange(0, Sci_GetDocEndPosition());
SciCall_IndicSetAlpha(INDIC_NP3_COLOR_DEF, 0);
SciCall_IndicSetAlpha(INDIC_NP3_COLOR_DEF, SC_ALPHA_TRANSPARENT);
SciCall_IndicSetFore(INDIC_NP3_COLOR_DEF, 0);
HandlePosChange();

View File

@ -322,7 +322,7 @@ DeclareSciCallR2(GetLine, GETLINE, DocPos, DocLn, line, const char*, text)
DeclareSciCallR2(GetCurLine, GETCURLINE, DocPos, unsigned int, length, const char*, text)
inline DocPos SciCall_GetLine_Safe(DocLn iLine, char* pTxtBuf) {
DocPos const iLen = SciCall_GetLine(iLine, pTxtBuf); if (pTxtBuf) pTxtBuf[iLen] = '\0'; return iLen;
DocPos const iLen = SciCall_GetLine(iLine, pTxtBuf); if (pTxtBuf) pTxtBuf[iLen] = '\0'; return (iLen + 1);
}
@ -611,6 +611,8 @@ DeclareSciCallR0(IsSelectionRectangle, SELECTIONISRECTANGLE, bool)
//~#define Sci_GetDocEndPosition() (SciCall_GetTextLength() - 1)
#define Sci_GetDocEndPosition() SciCall_GetLineEndPosition(SciCall_GetLineCount())
#define Sci_ClampAlpha(alpha) clampi((alpha), SC_ALPHA_TRANSPARENT, /*SC_ALPHA_OPAQUE*/SC_ALPHA_NOALPHA)
// max. line length in range (incl. line-breaks)
inline DocPos Sci_GetRangeMaxLineLength(DocLn iBeginLine, DocLn iEndLine) {
DocPos iMaxLineLen = 0;

View File

@ -430,10 +430,12 @@ float Style_GetBaseFontSize()
//
int Style_RgbAlpha(int rgbFore, int rgbBack, int alpha)
{
alpha = clampi(alpha, SC_ALPHA_TRANSPARENT, SC_ALPHA_OPAQUE);
return (int)RGB(\
(0xFF - alpha) * (int)GetRValue(rgbBack) / 0xFF + alpha * (int)GetRValue(rgbFore) / 0xFF, \
(0xFF - alpha) * (int)GetGValue(rgbBack) / 0xFF + alpha * (int)GetGValue(rgbFore) / 0xFF, \
(0xFF - alpha) * (int)GetBValue(rgbBack) / 0xFF + alpha * (int)GetBValue(rgbFore) / 0xFF);
(0xFF - alpha) * (int)GetGValue(rgbBack) / 0xFF + alpha * (int)GetGValue(rgbFore) / 0xFF, \
(0xFF - alpha) * (int)GetBValue(rgbBack) / 0xFF + alpha * (int)GetBValue(rgbFore) / 0xFF);
}
@ -1274,7 +1276,7 @@ void Style_SetLexer(HWND hwnd, PEDITLEXER pLexNew)
}
else {
SendMessage(hwnd, SCI_SETSELALPHA, SC_ALPHA_NOALPHA, 0);
SendMessage(hwnd, SCI_SETADDITIONALSELALPHA, SC_ALPHA_NOALPHA*2/3, 0);
SendMessage(hwnd, SCI_SETADDITIONALSELALPHA, SC_ALPHA_OPAQUE*2/3, 0);
}
if (Style_StrGetAttrEOLFilled(pCurrentStandard->Styles[STY_SEL_TXT].szValue)) // selection eolfilled
@ -1733,7 +1735,7 @@ void Style_HighlightCurrentLine(HWND hwnd, int iHiLitCurLn)
rgb = (backgrColor ? RGB(0xFF, 0xFF, 0x00) : RGB(0xC2, 0xC0, 0xC3));
}
int alpha = 0;
int alpha = SC_ALPHA_TRANSPARENT;
if (!Style_StrGetAlpha(GetCurrentStdLexer()->Styles[STY_CUR_LN].szValue, &alpha, true)) {
alpha = SC_ALPHA_NOALPHA;
}
@ -1825,11 +1827,9 @@ void Style_SetMargin(HWND hwnd, int iStyle, LPCWSTR lpszStyle)
COLORREF bckgrnd = clrBack;
Style_StrGetColor(lpszStyle, BACKGROUND_LAYER, &bckgrnd);
bmkBack = Style_RgbAlpha(bmkBack, bckgrnd, min_i(0xFF, alpha));
bmkBack = Style_RgbAlpha(bmkBack, bckgrnd, alpha);
//SciCall_MarkerDefine(MARKER_NP3_BOOKMARK, SC_MARK_BOOKMARK);
//SciCall_MarkerDefine(MARKER_NP3_BOOKMARK, SC_MARK_SHORTARROW);
SciCall_MarkerDefine(MARKER_NP3_BOOKMARK, SC_MARK_VERTICALBOOKMARK);
SciCall_MarkerDefine(MARKER_NP3_BOOKMARK, SC_MARK_VERTICALBOOKMARK); // SC_MARK_BOOKMARK/SC_MARK_SHORTARROW
SciCall_MarkerSetFore(MARKER_NP3_BOOKMARK, bmkFore);
SciCall_MarkerSetBack(MARKER_NP3_BOOKMARK, bmkBack);
SciCall_MarkerSetAlpha(MARKER_NP3_BOOKMARK, alpha);
@ -2849,7 +2849,7 @@ bool Style_StrGetAlpha(LPCWSTR lpszStyle, int* iOutValue, bool bAlpha1st)
TrimSpcW(tch);
int iValue = 0;
if (StrToIntEx(tch, STIF_DEFAULT, &iValue)) {
*iOutValue = clampi(iValue, SC_ALPHA_TRANSPARENT, SC_ALPHA_OPAQUE);
*iOutValue = Sci_ClampAlpha(iValue);
return true;
}
}

View File

@ -44,9 +44,10 @@
#endif
#include "Sci_Position.h"
#include "Scintilla.h"
//
// TODO(rkotten):
// TODO:
// SCI_CREATEDOCUMENT (SC_DOCUMENTOPTION_TEXT_LARGE)
//
@ -249,18 +250,55 @@ typedef struct _cmq
// --------------------------------------------------------------------------
#define MARKER_NP3_BOOKMARK 1
typedef enum
{
MARKER_NP3_WORD_0 = 0,
MARKER_NP3_WORD_1,
MARKER_NP3_WORD_2,
MARKER_NP3_WORD_3,
MARKER_NP3_WORD_4,
MARKER_NP3_WORD_5,
MARKER_NP3_WORD_6,
MARKER_NP3_WORD_7,
// std bookmark -> counter is last
MARKER_NP3_BOOKMARK
} MARKER_ID;
#define INDIC_NP3_MARK_OCCURANCE (INDICATOR_CONTAINER + 1)
#define INDIC_NP3_MATCH_BRACE (INDICATOR_CONTAINER + 2)
#define INDIC_NP3_BAD_BRACE (INDICATOR_CONTAINER + 3)
#define INDIC_NP3_FOCUS_VIEW (INDICATOR_CONTAINER + 4)
#define INDIC_NP3_HYPERLINK (INDICATOR_CONTAINER + 5)
#define INDIC_NP3_HYPERLINK_U (INDICATOR_CONTAINER + 6)
#define INDIC_NP3_COLOR_DEF (INDICATOR_CONTAINER + 7)
#define INDIC_NP3_COLOR_DEF_T (INDICATOR_CONTAINER + 8)
#define INDIC_NP3_MULTI_EDIT (INDICATOR_CONTAINER + 9)
#define INDIC_NP3_UNICODE_POINT (INDICATOR_CONTAINER + 10)
// ASSERT( MARKER_NP3_BOOKMARK < SC_MARKNUM_FOLDEREND )
typedef struct _wordbookmark_t
{
bool in_use;
int sci_symbol;
COLORREF fg_color;
COLORREF bg_color;
BYTE alpha;
} WORDBOOKMARK_T, *PWORDBOOKMARK_T;
extern WORDBOOKMARK_T WordBookMarks[];
// --------------------------------------------------------------------------
typedef enum
{
INDIC_NP3_MARK_OCCURANCE = INDICATOR_CONTAINER,
INDIC_NP3_MATCH_BRACE,
INDIC_NP3_BAD_BRACE,
INDIC_NP3_FOCUS_VIEW,
INDIC_NP3_HYPERLINK,
INDIC_NP3_HYPERLINK_U,
INDIC_NP3_COLOR_DEF,
INDIC_NP3_COLOR_DEF_T,
INDIC_NP3_MULTI_EDIT,
INDIC_NP3_UNICODE_POINT,
// counter is last
INDIC_NP3_ID_CNT
} INDIC_ID;
// ASSERT( INDIC_NP3_ID_CNT < INDICATOR_IME )
// --------------------------------------------------------------------------