From 456b0affbb09400e5a3d9a2d119f956456500d2e Mon Sep 17 00:00:00 2001 From: RaiKoHoff Date: Tue, 18 Aug 2020 17:04:12 +0200 Subject: [PATCH] + add: Preps for word marker --- src/Notepad3.c | 48 +++++++++++++++++++++++--------------- src/SciCall.h | 4 +++- src/Styles.c | 18 +++++++-------- src/TypeDefs.h | 62 ++++++++++++++++++++++++++++++++++++++++---------- 4 files changed, 92 insertions(+), 40 deletions(-) diff --git a/src/Notepad3.c b/src/Notepad3.c index d957ccf31..7f3a538d9 100644 --- a/src/Notepad3.c +++ b/src/Notepad3.c @@ -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(); diff --git a/src/SciCall.h b/src/SciCall.h index cdc4d0c71..61ad1bb9f 100644 --- a/src/SciCall.h +++ b/src/SciCall.h @@ -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; diff --git a/src/Styles.c b/src/Styles.c index a2d495fa8..45c1fff41 100644 --- a/src/Styles.c +++ b/src/Styles.c @@ -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; } } diff --git a/src/TypeDefs.h b/src/TypeDefs.h index 65dca554f..9e6a32f2d 100644 --- a/src/TypeDefs.h +++ b/src/TypeDefs.h @@ -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 ) // --------------------------------------------------------------------------