From f7686f568cfae1ec39ba1c403ade7c74e1641d76 Mon Sep 17 00:00:00 2001 From: RaiKoHoff Date: Thu, 17 Sep 2020 17:02:35 +0200 Subject: [PATCH 1/2] + chg: need to separate DarkMode window-backgr color from button-face color --- Build/Notepad3.ini | 1 + src/Config/Config.cpp | 19 +++++++++++++++++-- src/Helpers.h | 35 +++++++++++++++++++++++------------ src/Notepad3.c | 10 +++++----- src/Styles.c | 6 +++--- src/TypeDefs.h | 8 +++++--- 6 files changed, 54 insertions(+), 25 deletions(-) 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..2a048202c 100644 --- a/src/Config/Config.cpp +++ b/src/Config/Config.cpp @@ -1310,9 +1310,10 @@ void LoadSettings() #ifdef D_NP3_WIN10_DARK_MODE + unsigned int iValue = 0; WCHAR color[32] = { L'\0' }; - Defaults2.DarkModeBkgColor = rgbDarkColorBkgRef; + 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/Helpers.h b/src/Helpers.h index 3fb11a4c7..264831467 100644 --- a/src/Helpers.h +++ b/src/Helpers.h @@ -192,11 +192,20 @@ 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 + 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 return SetBkColor(hdc, GetSysColor(COLOR_BTNFACE)); #endif @@ -204,13 +213,22 @@ inline int SetModeBkColor(const HDC hdc, const bool bDarkMode) { 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 + 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 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)); @@ -232,7 +250,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 +258,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..fde6dba52 100644 --- a/src/Notepad3.c +++ b/src/Notepad3.c @@ -2699,7 +2699,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 +2737,6 @@ void CreateBars(HWND hwnd, HINSTANCE hInstance) if (IsDarkModeSupported()) { AllowDarkModeForWindow(Globals.hwndStatus, CheckDarkModeEnabled()); } - //SetModeCtlColors(Globals.hwndStatus, UseDarkMode()); #endif } @@ -2968,7 +2967,8 @@ LRESULT MsgDrawItem(HWND hwnd, WPARAM wParam, LPARAM lParam) #ifdef D_NP3_WIN10_DARK_MODE - SetModeBkColor(hdc, UseDarkMode()); + //~SetModeBkColor(hdc, UseDarkMode()); + SetModeBtnFaceColor(hdc, UseDarkMode()); SetModeTextColor(hdc, UseDarkMode()); if (UseDarkMode()) { @@ -2978,7 +2978,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 +2995,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 From 53a589db394e21041bb8fcf79290b938bd8cf008 Mon Sep 17 00:00:00 2001 From: RaiKoHoff Date: Thu, 17 Sep 2020 17:25:41 +0200 Subject: [PATCH 2/2] + fix: allow removing of compile pre-processing switch D_NP3_WIN10_DARK_MODE --- src/Config/Config.cpp | 4 ++-- src/DarkMode/DarkMode.cpp | 2 +- src/Helpers.h | 6 ++++++ src/Notepad3.c | 8 ++++++-- 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/Config/Config.cpp b/src/Config/Config.cpp index 2a048202c..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 @@ -1313,6 +1311,8 @@ void LoadSettings() unsigned int iValue = 0; WCHAR color[32] = { L'\0' }; + 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)); 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 264831467..1cba17dc5 100644 --- a/src/Helpers.h +++ b/src/Helpers.h @@ -199,6 +199,7 @@ inline int SetModeBkColor(const HDC hdc, const bool bDarkMode) { #ifdef D_NP3_WIN10_DARK_MODE return SetBkColor(hdc, bDarkMode ? Settings2.DarkModeBkgColor : GetSysColor(COLOR_WINDOW)); #else + UNUSED(bDarkMode); return SetBkColor(hdc, GetSysColor(COLOR_WINDOW)); #endif } @@ -207,6 +208,7 @@ 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 } @@ -215,6 +217,7 @@ inline COLORREF GetModeBkColor(const bool bDarkMode) { #ifdef D_NP3_WIN10_DARK_MODE return bDarkMode ? Settings2.DarkModeBkgColor : (COLORREF)GetSysColor(COLOR_WINDOW); #else + UNUSED(bDarkMode); return (COLORREF)GetSysColor(COLOR_WINDOW); #endif } @@ -224,6 +227,7 @@ inline COLORREF GetModeBtnfaceColor(const bool bDarkMode) { return bDarkMode ? Settings2.DarkModeBtnFaceColor : (COLORREF)( IsWindows10OrGreater() ? GetSysColor(COLOR_WINDOW) : GetSysColor(COLOR_BTNFACE)); // (!) Win10 case #else + UNUSED(bDarkMode); return (COLORREF)GetSysColor(COLOR_BTNFACE); #endif } @@ -233,6 +237,7 @@ 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 } @@ -242,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 } diff --git a/src/Notepad3.c b/src/Notepad3.c index fde6dba52..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; @@ -2965,12 +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()); SetModeBtnFaceColor(hdc, UseDarkMode()); SetModeTextColor(hdc, UseDarkMode()); +#ifdef D_NP3_WIN10_DARK_MODE + if (UseDarkMode()) { // overpaint part frames HWND const hWndItem = pDIS->hwndItem;