diff --git a/Build/Notepad3.ini b/Build/Notepad3.ini index 83a29f17e..3412392f1 100644 --- a/Build/Notepad3.ini +++ b/Build/Notepad3.ini @@ -59,6 +59,7 @@ SettingsVersion=4 ;ZoomTooltipTimeout=3200 ;LargeIconScalePrecent=150 ;DarkModeBkgColor=0x1F1F1F; +;DarkModeBtnFaceColor=0x333333 ;DarkModeTxtColor=0xEFEFEF; [Statusbar Settings] ;VisibleSections=0 1 12 14 2 4 5 6 7 8 9 10 11 diff --git a/src/Config/Config.cpp b/src/Config/Config.cpp index 6fd6a5aaa..11618ad2b 100644 --- a/src/Config/Config.cpp +++ b/src/Config/Config.cpp @@ -1039,8 +1039,6 @@ extern "C" bool CreateIniFile(LPCWSTR pszIniFilePath, DWORD* pdwFileSize_out) // void LoadSettings() { - WCHAR wchBuffer[MIDSZ_BUFFER] = { L'\0' }; - CFG_VERSION const _ver = StrIsEmpty(Globals.IniFile) ? CFG_VER_CURRENT : CFG_VER_NONE; bool bDirtyFlag = false; // do we have to save the file on done @@ -1310,9 +1308,12 @@ void LoadSettings() #ifdef D_NP3_WIN10_DARK_MODE + unsigned int iValue = 0; WCHAR color[32] = { L'\0' }; - Defaults2.DarkModeBkgColor = rgbDarkColorBkgRef; + WCHAR wchBuffer[MIDSZ_BUFFER] = { L'\0' }; + + Defaults2.DarkModeBkgColor = rgbDarkBkgColorRef; StringCchPrintf(color, COUNTOF(color), L"%#08x", Defaults2.DarkModeBkgColor); IniSectionGetString(IniSecSettings2, L"DarkModeBkgColor", color, wchBuffer, COUNTOF(wchBuffer)); if (swscanf_s(wchBuffer, L"%x", &iValue) == 1) { @@ -1323,9 +1324,22 @@ void LoadSettings() if (Globals.hbrDarkModeBkgBrush) { DeleteObject(Globals.hbrDarkModeBkgBrush); } + if (Globals.hbrDarkModeBtnFcBrush) { + DeleteObject(Globals.hbrDarkModeBtnFcBrush); + } Globals.hbrDarkModeBkgBrush = CreateSolidBrush(Settings2.DarkModeBkgColor); - Defaults2.DarkModeTxtColor = rgbDarkColorTxtRef; + Defaults2.DarkModeBtnFaceColor = rgbDarkBtnFcColorRef; + StringCchPrintf(color, COUNTOF(color), L"%#08x", Defaults2.DarkModeBtnFaceColor); + IniSectionGetString(IniSecSettings2, L"DarkModeBtnFaceColor", color, wchBuffer, COUNTOF(wchBuffer)); + if (swscanf_s(wchBuffer, L"%x", &iValue) == 1) { + Settings2.DarkModeBtnFaceColor = RGB((iValue & 0xFF0000) >> 16, (iValue & 0xFF00) >> 8, iValue & 0xFF); + } else { + Settings2.DarkModeBtnFaceColor = Defaults2.DarkModeBtnFaceColor; + } + Globals.hbrDarkModeBtnFcBrush = CreateSolidBrush(Settings2.DarkModeBtnFaceColor); + + Defaults2.DarkModeTxtColor = rgbDarkTxtColorRef; StringCchPrintf(color, COUNTOF(color), L"%#08x", Defaults2.DarkModeTxtColor); IniSectionGetString(IniSecSettings2, L"DarkModeTxtColor", color, wchBuffer, COUNTOF(wchBuffer)); if (swscanf_s(wchBuffer, L"%x", &iValue) == 1) { @@ -1333,6 +1347,7 @@ void LoadSettings() } else { Settings2.DarkModeTxtColor = Defaults2.DarkModeTxtColor; } + #endif // -------------------------------------------------------------------------- diff --git a/src/DarkMode/DarkMode.cpp b/src/DarkMode/DarkMode.cpp index 56644d3ca..2852074d4 100644 --- a/src/DarkMode/DarkMode.cpp +++ b/src/DarkMode/DarkMode.cpp @@ -20,9 +20,9 @@ #ifdef D_NP3_WIN10_DARK_MODE #include "IatHook.hpp" -#include "ListViewUtil.hpp" #endif +#include "ListViewUtil.hpp" // ============================================================================ diff --git a/src/Helpers.h b/src/Helpers.h index 3fb11a4c7..1cba17dc5 100644 --- a/src/Helpers.h +++ b/src/Helpers.h @@ -192,29 +192,52 @@ inline bool StrIsEmptyW(LPCWSTR s) { return (!s || (*s == L'\0')); } // ---------------------------------------------------------------------------- -inline COLORREF GetBackgroundColor(HWND hwnd) { return GetBkColor(GetDC(hwnd)); } +//inline COLORREF GetBackgroundColor(HWND hwnd) { return GetBkColor(GetDC(hwnd)); } + inline int SetModeBkColor(const HDC hdc, const bool bDarkMode) { #ifdef D_NP3_WIN10_DARK_MODE - return SetBkColor(hdc, bDarkMode ? Settings2.DarkModeBkgColor : GetSysColor(COLOR_BTNFACE)); + return SetBkColor(hdc, bDarkMode ? Settings2.DarkModeBkgColor : GetSysColor(COLOR_WINDOW)); #else + UNUSED(bDarkMode); + return SetBkColor(hdc, GetSysColor(COLOR_WINDOW)); +#endif +} + +inline int SetModeBtnFaceColor(const HDC hdc, const bool bDarkMode) { +#ifdef D_NP3_WIN10_DARK_MODE + return SetBkColor(hdc, bDarkMode ? Settings2.DarkModeBtnFaceColor : GetSysColor(COLOR_BTNFACE)); +#else + UNUSED(bDarkMode); return SetBkColor(hdc, GetSysColor(COLOR_BTNFACE)); #endif } inline COLORREF GetModeBkColor(const bool bDarkMode) { #ifdef D_NP3_WIN10_DARK_MODE - return bDarkMode ? Settings2.DarkModeBkgColor : (COLORREF)( - IsWindows10OrGreater() ? GetSysColor(COLOR_WINDOW) : GetSysColor(COLOR_BTNFACE)); + return bDarkMode ? Settings2.DarkModeBkgColor : (COLORREF)GetSysColor(COLOR_WINDOW); #else + UNUSED(bDarkMode); + return (COLORREF)GetSysColor(COLOR_WINDOW); +#endif +} + +inline COLORREF GetModeBtnfaceColor(const bool bDarkMode) { +#ifdef D_NP3_WIN10_DARK_MODE + return bDarkMode ? Settings2.DarkModeBtnFaceColor : (COLORREF)( + IsWindows10OrGreater() ? GetSysColor(COLOR_WINDOW) : GetSysColor(COLOR_BTNFACE)); // (!) Win10 case +#else + UNUSED(bDarkMode); return (COLORREF)GetSysColor(COLOR_BTNFACE); #endif } + inline int SetModeTextColor(const HDC hdc, const bool bDarkMode) { #ifdef D_NP3_WIN10_DARK_MODE return SetTextColor(hdc, bDarkMode ? Settings2.DarkModeTxtColor : GetSysColor(COLOR_BTNTEXT)); #else + UNUSED(bDarkMode); return SetTextColor(hdc, GetSysColor(COLOR_BTNTEXT)); #endif } @@ -224,6 +247,7 @@ inline COLORREF GetModeTextColor(const bool bDarkMode) { return bDarkMode ? Settings2.DarkModeTxtColor : (COLORREF)( IsWindows10OrGreater() ? GetSysColor(COLOR_WINDOWTEXT) : GetSysColor(COLOR_BTNTEXT)); #else + UNUSED(bDarkMode); return (COLORREF)GetSysColor(COLOR_BTNTEXT); #endif } @@ -232,7 +256,7 @@ inline COLORREF GetModeTextColor(const bool bDarkMode) { #ifdef D_NP3_WIN10_DARK_MODE inline INT_PTR SetDarkModeCtlColors(const HDC hdc) { - SetBkColor(hdc, Settings2.DarkModeBkgColor); + SetBkColor(hdc, Settings2.DarkModeBkgColor); // (!) non-button static controls SetTextColor(hdc, Settings2.DarkModeTxtColor); //~RECT rc; //~GetWindowRect(WindowFromDC(hdc), &rc); @@ -240,13 +264,6 @@ inline INT_PTR SetDarkModeCtlColors(const HDC hdc) { return (INT_PTR)Globals.hbrDarkModeBkgBrush; } -inline void SetModeCtlColors(HWND hwnd, const bool bDarkMode) { - HDC const hdc = GetDC(hwnd); - SetBkColor(hdc, bDarkMode ? Settings2.DarkModeBkgColor : GetSysColor(COLOR_BTNFACE)); - SetTextColor(hdc, bDarkMode ? Settings2.DarkModeTxtColor : GetSysColor(COLOR_BTNTEXT)); - ReleaseDC(hwnd, hdc); -} - #endif // ---------------------------------------------------------------------------- diff --git a/src/Notepad3.c b/src/Notepad3.c index 944bb8e42..327f456f1 100644 --- a/src/Notepad3.c +++ b/src/Notepad3.c @@ -1311,7 +1311,11 @@ bool InitApplication(const HINSTANCE hInstance) wc.hInstance = hInstance; wc.hIcon = Globals.hDlgIcon256; wc.hCursor = LoadCursor(NULL, IDC_ARROW); +#ifdef D_NP3_WIN10_DARK_MODE wc.hbrBackground = UseDarkMode() ? Globals.hbrDarkModeBkgBrush : (HBRUSH)(COLOR_WINDOW + 1); +#else + wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); +#endif wc.lpszMenuName = MAKEINTRESOURCE(IDR_MUI_MAINMENU); wc.lpszClassName = s_wchWndClass; @@ -2699,7 +2703,7 @@ void CreateBars(HWND hwnd, HINSTANCE hInstance) rbBand.hbmBack = NULL; rbBand.lpText = L"Toolbar"; rbBand.clrFore = GetModeTextColor(UseDarkMode()); - rbBand.clrBack = GetModeBkColor(UseDarkMode()); + rbBand.clrBack = GetModeBtnfaceColor(UseDarkMode()); rbBand.hwndChild = Globals.hwndToolbar; rbBand.cxMinChild = (rc.right - rc.left) * COUNTOF(s_tbbMainWnd); rbBand.cyMinChild = (rc.bottom - rc.top) + (2 * rc.top); @@ -2737,7 +2741,6 @@ void CreateBars(HWND hwnd, HINSTANCE hInstance) if (IsDarkModeSupported()) { AllowDarkModeForWindow(Globals.hwndStatus, CheckDarkModeEnabled()); } - //SetModeCtlColors(Globals.hwndStatus, UseDarkMode()); #endif } @@ -2966,11 +2969,12 @@ LRESULT MsgDrawItem(HWND hwnd, WPARAM wParam, LPARAM lParam) //~PAINTSTRUCT ps; //~BeginPaint(hWndItem, &ps); ~ not needed on WM_DRAWITEM -#ifdef D_NP3_WIN10_DARK_MODE - - SetModeBkColor(hdc, UseDarkMode()); + //~SetModeBkColor(hdc, UseDarkMode()); + SetModeBtnFaceColor(hdc, UseDarkMode()); SetModeTextColor(hdc, UseDarkMode()); +#ifdef D_NP3_WIN10_DARK_MODE + if (UseDarkMode()) { // overpaint part frames HWND const hWndItem = pDIS->hwndItem; @@ -2978,7 +2982,7 @@ LRESULT MsgDrawItem(HWND hwnd, WPARAM wParam, LPARAM lParam) HDC const hdcFrm = GetWindowDC(hWndItem); RECT rcf = rc; for (int i = 1; i < bdh; ++i) { - FrameRect(hdcFrm, &rcf, Globals.hbrDarkModeBkgBrush); + FrameRect(hdcFrm, &rcf, Globals.hbrDarkModeBtnFcBrush); rcf.left -= 1; rcf.top -= 1; rcf.bottom += 1; @@ -2995,7 +2999,7 @@ LRESULT MsgDrawItem(HWND hwnd, WPARAM wParam, LPARAM lParam) //~EndPaint(hWndItem, &ps); return TRUE; - } + } return FALSE; } diff --git a/src/Styles.c b/src/Styles.c index bfbca42d7..0ee7bd62c 100644 --- a/src/Styles.c +++ b/src/Styles.c @@ -1817,16 +1817,16 @@ void Style_SetMargin(HWND hwnd, LPCWSTR lpszStyle) // iStyle = STYLE_LINENUMBER { Style_SetStyles(hwnd, STYLE_LINENUMBER, lpszStyle, false); // line numbers - COLORREF clrBack = GetModeBkColor(UseDarkMode()); + COLORREF clrBack; if (!Style_StrGetColor(lpszStyle, BACKGROUND_LAYER, &clrBack, false)) { - clrBack = UseDarkMode() ? (clrBack + RGB(0x10, 0x10, 0x10)) : GetSysColor(COLOR_BTNFACE); + clrBack = GetModeBtnfaceColor(UseDarkMode()); } SciCall_StyleSetBack(STYLE_LINENUMBER, clrBack); SciCall_SetMarginBackN(MARGIN_SCI_LINENUM, clrBack); SciCall_SetMarginSensitiveN(MARGIN_SCI_LINENUM, false); // allow selection drag //~SciCall_SetMarginBackN(MARGIN_SCI_LINENUM, clrBack); - COLORREF clrFore = SciCall_StyleGetFore(STYLE_LINENUMBER); + COLORREF clrFore; Style_StrGetColor(lpszStyle, FOREGROUND_LAYER, &clrFore, true); // CallTips diff --git a/src/TypeDefs.h b/src/TypeDefs.h index 2dd527b0a..6ff1571f3 100644 --- a/src/TypeDefs.h +++ b/src/TypeDefs.h @@ -247,9 +247,9 @@ typedef struct _cmq #define rgbRedColorRef (RGB(255, 170, 170)) #define rgbGreenColorRef (RGB(170, 255, 170)) #define rgbBlueColorRef (RGB(170, 200, 255)) -#define rgbBlueColorRef (RGB(170, 200, 255)) -#define rgbDarkColorBkgRef (RGB(0x1F, 0x1F, 0x1F)) -#define rgbDarkColorTxtRef (RGB(0xEF, 0xEF, 0xEF)) +#define rgbDarkBkgColorRef (RGB(0x1F, 0x1F, 0x1F)) +#define rgbDarkBtnFcColorRef (RGB(0x33, 0x33, 0x33)) +#define rgbDarkTxtColorRef (RGB(0xEF, 0xEF, 0xEF)) // -------------------------------------------------------------------------- @@ -386,6 +386,7 @@ typedef struct _globals_t #ifdef D_NP3_WIN10_DARK_MODE HBRUSH hbrDarkModeBkgBrush; + HBRUSH hbrDarkModeBtnFcBrush; #endif FR_STATES FindReplaceMatchFoundState; @@ -587,6 +588,7 @@ typedef struct _settings2_t #ifdef D_NP3_WIN10_DARK_MODE COLORREF DarkModeBkgColor; + COLORREF DarkModeBtnFaceColor; COLORREF DarkModeTxtColor; #endif