diff --git a/PowerEditor/installer/nativeLang/english.xml b/PowerEditor/installer/nativeLang/english.xml index bde69c7a6..71ec20868 100644 --- a/PowerEditor/installer/nativeLang/english.xml +++ b/PowerEditor/installer/nativeLang/english.xml @@ -913,6 +913,7 @@ The comments are here for explanation, it's not necessary to translate them. + diff --git a/PowerEditor/src/MISC/PluginsManager/Notepad_plus_msgs.h b/PowerEditor/src/MISC/PluginsManager/Notepad_plus_msgs.h index 98e3e87f0..2cc9357b2 100644 --- a/PowerEditor/src/MISC/PluginsManager/Notepad_plus_msgs.h +++ b/PowerEditor/src/MISC/PluginsManager/Notepad_plus_msgs.h @@ -526,6 +526,7 @@ enum Platform { PF_UNKNOWN, PF_X86, PF_X64, PF_IA64, PF_ARM64 }; // COLORREF linkText = 0; // COLORREF edge = 0; // COLORREF hotEdge = 0; + // COLORREF disabledEdge = 0; // }; // } // diff --git a/PowerEditor/src/MISC/RegExt/regExtDlg.cpp b/PowerEditor/src/MISC/RegExt/regExtDlg.cpp index b6f4fe006..4e3203412 100644 --- a/PowerEditor/src/MISC/RegExt/regExtDlg.cpp +++ b/PowerEditor/src/MISC/RegExt/regExtDlg.cpp @@ -111,7 +111,7 @@ intptr_t CALLBACK RegExtDlg::run_dlgProc(UINT Message, WPARAM wParam, LPARAM lPa { if (NppDarkMode::isEnabled()) { - return NppDarkMode::onCtlColor(reinterpret_cast(wParam)); + return NppDarkMode::onCtlColorListbox(wParam, lParam); } break; } diff --git a/PowerEditor/src/NppBigSwitch.cpp b/PowerEditor/src/NppBigSwitch.cpp index 76210029e..60fd1b250 100644 --- a/PowerEditor/src/NppBigSwitch.cpp +++ b/PowerEditor/src/NppBigSwitch.cpp @@ -2712,6 +2712,7 @@ LRESULT Notepad_plus::process(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa currentColors->linkText = NppDarkMode::getLinkTextColor(); currentColors->edge = NppDarkMode::getEdgeColor(); currentColors->hotEdge = NppDarkMode::getHotEdgeColor(); + currentColors->disabledEdge = NppDarkMode::getDisabledEdgeColor(); return static_cast(true); } diff --git a/PowerEditor/src/NppDarkMode.cpp b/PowerEditor/src/NppDarkMode.cpp index 9d0d73be1..d7a777bea 100644 --- a/PowerEditor/src/NppDarkMode.cpp +++ b/PowerEditor/src/NppDarkMode.cpp @@ -49,6 +49,7 @@ namespace NppDarkMode HBRUSH edgeBrush = nullptr; HBRUSH hotEdgeBrush = nullptr; + HBRUSH disabledEdgeBrush = nullptr; Brushes(const Colors& colors) : background(::CreateSolidBrush(colors.background)) @@ -59,6 +60,7 @@ namespace NppDarkMode , edgeBrush(::CreateSolidBrush(colors.edge)) , hotEdgeBrush(::CreateSolidBrush(colors.hotEdge)) + , disabledEdgeBrush(::CreateSolidBrush(colors.disabledEdge)) {} ~Brushes() @@ -71,6 +73,7 @@ namespace NppDarkMode ::DeleteObject(edgeBrush); edgeBrush = nullptr; ::DeleteObject(hotEdgeBrush); hotEdgeBrush = nullptr; + ::DeleteObject(disabledEdgeBrush); disabledEdgeBrush = nullptr; } void change(const Colors& colors) @@ -83,6 +86,7 @@ namespace NppDarkMode ::DeleteObject(edgeBrush); ::DeleteObject(hotEdgeBrush); + ::DeleteObject(disabledEdgeBrush); background = ::CreateSolidBrush(colors.background); softerBackground = ::CreateSolidBrush(colors.softerBackground); @@ -92,6 +96,7 @@ namespace NppDarkMode edgeBrush = ::CreateSolidBrush(colors.edge); hotEdgeBrush = ::CreateSolidBrush(colors.hotEdge); + disabledEdgeBrush = ::CreateSolidBrush(colors.disabledEdge); } }; @@ -100,18 +105,21 @@ namespace NppDarkMode HPEN darkerTextPen = nullptr; HPEN edgePen = nullptr; HPEN hotEdgePen = nullptr; + HPEN disabledEdgePen = nullptr; Pens(const Colors& colors) : darkerTextPen(::CreatePen(PS_SOLID, 1, colors.darkerText)) , edgePen(::CreatePen(PS_SOLID, 1, colors.edge)) , hotEdgePen(::CreatePen(PS_SOLID, 1, colors.hotEdge)) + , disabledEdgePen(::CreatePen(PS_SOLID, 1, colors.disabledEdge)) {} ~Pens() { - ::DeleteObject(darkerTextPen); darkerTextPen = nullptr; - ::DeleteObject(edgePen); edgePen = nullptr; - ::DeleteObject(hotEdgePen); hotEdgePen = nullptr; + ::DeleteObject(darkerTextPen); darkerTextPen = nullptr; + ::DeleteObject(edgePen); edgePen = nullptr; + ::DeleteObject(hotEdgePen); hotEdgePen = nullptr; + ::DeleteObject(disabledEdgePen); disabledEdgePen = nullptr; } void change(const Colors& colors) @@ -119,10 +127,12 @@ namespace NppDarkMode ::DeleteObject(darkerTextPen); ::DeleteObject(edgePen); ::DeleteObject(hotEdgePen); + ::DeleteObject(disabledEdgePen); darkerTextPen = ::CreatePen(PS_SOLID, 1, colors.darkerText); edgePen = ::CreatePen(PS_SOLID, 1, colors.edge); hotEdgePen = ::CreatePen(PS_SOLID, 1, colors.hotEdge); + disabledEdgePen = ::CreatePen(PS_SOLID, 1, colors.disabledEdge); } }; @@ -139,7 +149,8 @@ namespace NppDarkMode HEXRGB(0x808080), // disabledTextColor HEXRGB(0xFFFF00), // linkTextColor HEXRGB(0x646464), // edgeColor - HEXRGB(0x9B9B9B) // hotEdgeColor + HEXRGB(0x9B9B9B), // hotEdgeColor + HEXRGB(0x484848) // disabledEdgeColor }; // red tone @@ -154,7 +165,8 @@ namespace NppDarkMode HEXRGB(0x808080), // disabledTextColor HEXRGB(0xFFFF00), // linkTextColor HEXRGB(0x908080), // edgeColor - HEXRGB(0xBBABAB) // hotEdgeColor + HEXRGB(0xBBABAB), // hotEdgeColor + HEXRGB(0x584848) // disabledEdgeColor }; // green tone @@ -169,7 +181,8 @@ namespace NppDarkMode HEXRGB(0x808080), // disabledTextColor HEXRGB(0xFFFF00), // linkTextColor HEXRGB(0x809080), // edgeColor - HEXRGB(0xABBBAB) // hotEdgeColor + HEXRGB(0xABBBAB), // hotEdgeColor + HEXRGB(0x485848) // disabledEdgeColor }; // blue tone @@ -184,7 +197,8 @@ namespace NppDarkMode HEXRGB(0x808080), // disabledTextColor HEXRGB(0xFFFF00), // linkTextColor HEXRGB(0x8080A0), // edgeColor - HEXRGB(0xABABCB) // hotEdgeColor + HEXRGB(0xABABCB), // hotEdgeColor + HEXRGB(0x484868) // disabledEdgeColor }; // purple tone @@ -199,7 +213,8 @@ namespace NppDarkMode HEXRGB(0x808080), // disabledTextColor HEXRGB(0xFFFF00), // linkTextColor HEXRGB(0x9080A0), // edgeColor - HEXRGB(0xBBABCB) // hotEdgeColor + HEXRGB(0xBBABCB), // hotEdgeColor + HEXRGB(0x584868) // disabledEdgeColor }; // cyan tone @@ -214,7 +229,8 @@ namespace NppDarkMode HEXRGB(0x808080), // disabledTextColor HEXRGB(0xFFFF00), // linkTextColor HEXRGB(0x8090A0), // edgeColor - HEXRGB(0xBBBBCB) // hotEdgeColor + HEXRGB(0xBBBBCB), // hotEdgeColor + HEXRGB(0x485868) // disabledEdgeColor }; // olive tone @@ -229,7 +245,8 @@ namespace NppDarkMode HEXRGB(0x808080), // disabledTextColor HEXRGB(0xFFFF00), // linkTextColor HEXRGB(0x909080), // edgeColor - HEXRGB(0xBBBBAB) // hotEdgeColor + HEXRGB(0xBBBBAB), // hotEdgeColor + HEXRGB(0x585848) // disabledEdgeColor }; // customized @@ -244,7 +261,8 @@ namespace NppDarkMode HEXRGB(0x808080), // disabledTextColor HEXRGB(0xFFFF00), // linkTextColor HEXRGB(0x646464), // edgeColor - HEXRGB(0x9B9B9B) // hotEdgeColor + HEXRGB(0x9B9B9B), // hotEdgeColor + HEXRGB(0x484848) // disabledEdgeColor }; ColorTone g_colorToneChoice = blackTone; @@ -467,6 +485,7 @@ namespace NppDarkMode COLORREF getLinkTextColor() { return getTheme()._colors.linkText; } COLORREF getEdgeColor() { return getTheme()._colors.edge; } COLORREF getHotEdgeColor() { return getTheme()._colors.hotEdge; } + COLORREF getDisabledEdgeColor() { return getTheme()._colors.disabledEdge; } HBRUSH getBackgroundBrush() { return getTheme()._brushes.background; } HBRUSH getSofterBackgroundBrush() { return getTheme()._brushes.softerBackground; } @@ -476,10 +495,12 @@ namespace NppDarkMode HBRUSH getEdgeBrush() { return getTheme()._brushes.edgeBrush; } HBRUSH getHotEdgeBrush() { return getTheme()._brushes.hotEdgeBrush; } + HBRUSH getDisabledEdgeBrush() { return getTheme()._brushes.disabledEdgeBrush; } HPEN getDarkerTextPen() { return getTheme()._pens.darkerTextPen; } HPEN getEdgePen() { return getTheme()._pens.edgePen; } HPEN getHotEdgePen() { return getTheme()._pens.hotEdgePen; } + HPEN getDisabledEdgePen() { return getTheme()._pens.disabledEdgePen; } void setBackgroundColor(COLORREF c) { @@ -558,6 +579,13 @@ namespace NppDarkMode getTheme().change(clrs); } + void setDisabledEdgeColor(COLORREF c) + { + Colors clrs = getTheme()._colors; + clrs.disabledEdge = c; + getTheme().change(clrs); + } + Colors getDarkModeDefaultColors() { return darkColors; @@ -775,7 +803,7 @@ namespace NppDarkMode ::EnableDarkScrollBarForWindowAndChildren(hwnd); } - inline void paintRoundFrameRect(HDC hdc, const RECT rect, const HPEN hpen, int width, int height) + void paintRoundFrameRect(HDC hdc, const RECT rect, const HPEN hpen, int width, int height) { auto holdBrush = ::SelectObject(hdc, ::GetStockObject(NULL_BRUSH)); auto holdPen = ::SelectObject(hdc, hpen); @@ -1114,7 +1142,7 @@ namespace NppDarkMode //DrawThemeParentBackground(hwnd, hdc, &rcClient); //DrawThemeBackground(buttonData.hTheme, hdc, BP_GROUPBOX, iStateID, &rcBackground, nullptr); - NppDarkMode::paintRoundFrameRect(hdc, rcBackground, NppDarkMode::getEdgePen(), 0, 0); + NppDarkMode::paintRoundFrameRect(hdc, rcBackground, NppDarkMode::getEdgePen()); SelectClipRgn(hdc, nullptr); @@ -1365,6 +1393,167 @@ namespace NppDarkMode SetWindowSubclass(hwnd, TabSubclass, g_tabSubclassID, 0); } + constexpr UINT_PTR g_customBorderSubclassID = 42; + + LRESULT CALLBACK CustomBorderSubclass( + HWND hWnd, + UINT uMsg, + WPARAM wParam, + LPARAM lParam, + UINT_PTR uIdSubclass, + DWORD_PTR dwRefData + ) + { + UNREFERENCED_PARAMETER(dwRefData); + + static bool isHotStatic = false; + + switch (uMsg) + { + case WM_NCPAINT: + { + if (!NppDarkMode::isEnabled()) + { + break; + } + + DefSubclassProc(hWnd, uMsg, wParam, lParam); + + HDC hdc = ::GetWindowDC(hWnd); + RECT rcClient{}; + ::GetClientRect(hWnd, &rcClient); + rcClient.right += (2 * ::GetSystemMetrics(SM_CXEDGE)); + + auto style = ::GetWindowLongPtr(hWnd, GWL_STYLE); + bool hasVerScrollbar = (style & WS_VSCROLL) == WS_VSCROLL; + if (hasVerScrollbar) + { + rcClient.right += ::GetSystemMetrics(SM_CXVSCROLL); + } + + rcClient.bottom += (2 * ::GetSystemMetrics(SM_CYEDGE)); + + bool hasHorScrollbar = (style & WS_HSCROLL) == WS_HSCROLL; + if (hasHorScrollbar) + { + rcClient.bottom += ::GetSystemMetrics(SM_CXHSCROLL); + } + + HPEN hPen = ::CreatePen(PS_SOLID, 1, NppDarkMode::getBackgroundColor()); + RECT rcInner = rcClient; + ::InflateRect(&rcInner, -1, -1); + NppDarkMode::paintRoundFrameRect(hdc, rcInner, hPen); + ::DeleteObject(hPen); + + bool hasFocus = ::GetFocus() == hWnd; + + POINT ptCursor{}; + ::GetCursorPos(&ptCursor); + ::ScreenToClient(hWnd, &ptCursor); + + bool isHot = ::PtInRect(&rcClient, ptCursor); + + bool isWindowEnabled = ::IsWindowEnabled(hWnd) == TRUE; + HPEN hEnabledPen = ((isHotStatic && isHot) || hasFocus ? NppDarkMode::getHotEdgePen() : NppDarkMode::getEdgePen()); + + NppDarkMode::paintRoundFrameRect(hdc, rcClient, isWindowEnabled ? hEnabledPen : NppDarkMode::getDisabledEdgePen()); + + ::ReleaseDC(hWnd, hdc); + + return 0; + } + break; + + case WM_NCCALCSIZE: + { + if (!NppDarkMode::isEnabled()) + { + break; + } + + auto lpRect = reinterpret_cast(lParam); + ::InflateRect(lpRect, -(::GetSystemMetrics(SM_CXEDGE)), -(::GetSystemMetrics(SM_CYEDGE))); + + auto style = ::GetWindowLongPtr(hWnd, GWL_STYLE); + bool hasVerScrollbar = (style & WS_VSCROLL) == WS_VSCROLL; + if (hasVerScrollbar) + { + lpRect->right -= ::GetSystemMetrics(SM_CXVSCROLL); + } + + bool hasHorScrollbar = (style & WS_HSCROLL) == WS_HSCROLL; + if (hasHorScrollbar) + { + lpRect->bottom -= ::GetSystemMetrics(SM_CXHSCROLL); + } + + return 0; + } + break; + + case WM_MOUSEMOVE: + { + if (!NppDarkMode::isEnabled()) + { + break; + } + + if (::GetFocus() == hWnd) + { + break; + } + + TRACKMOUSEEVENT tme{}; + tme.cbSize = sizeof(TRACKMOUSEEVENT); + tme.dwFlags = TME_LEAVE; + tme.hwndTrack = hWnd; + tme.dwHoverTime = HOVER_DEFAULT; + TrackMouseEvent(&tme); + + if (!isHotStatic) + { + isHotStatic = true; + ::SetWindowPos(hWnd, nullptr, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED); + } + } + break; + + case WM_MOUSELEAVE: + { + if (!NppDarkMode::isEnabled()) + { + break; + } + + if (isHotStatic) + { + isHotStatic = false; + ::SetWindowPos(hWnd, nullptr, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED); + } + + TRACKMOUSEEVENT tme{}; + tme.cbSize = sizeof(TRACKMOUSEEVENT); + tme.dwFlags = TME_LEAVE | TME_CANCEL; + tme.hwndTrack = hWnd; + tme.dwHoverTime = HOVER_DEFAULT; + TrackMouseEvent(&tme); + } + break; + + case WM_NCDESTROY: + { + RemoveWindowSubclass(hWnd, CustomBorderSubclass, uIdSubclass); + } + break; + } + return DefSubclassProc(hWnd, uMsg, wParam, lParam); + } + + void subclassCustomBorderForListBoxAndEditControls(HWND hwnd) + { + SetWindowSubclass(hwnd, CustomBorderSubclass, g_customBorderSubclassID, 0); + } + constexpr UINT_PTR g_comboBoxSubclassID = 42; LRESULT CALLBACK ComboBoxSubclass( @@ -1448,7 +1637,10 @@ namespace NppDarkMode bool isHot = ::PtInRect(&rc, ptCursor); - ::SetTextColor(hdc, isHot ? NppDarkMode::getTextColor() : NppDarkMode::getDarkerTextColor()); + bool isWindowEnabled = ::IsWindowEnabled(hWnd) == TRUE; + + auto colorEnabledText = isHot ? NppDarkMode::getTextColor() : NppDarkMode::getDarkerTextColor(); + ::SetTextColor(hdc, isWindowEnabled ? colorEnabledText : NppDarkMode::getDisabledTextColor()); ::SetBkColor(hdc, isHot ? NppDarkMode::getHotBackgroundColor() : NppDarkMode::getBackgroundColor()); ::ExtTextOut(hdc, rcArrow.left + (rcArrow.right - rcArrow.left) / 2 - dpiManager.scaleX(4), @@ -1459,7 +1651,8 @@ namespace NppDarkMode nullptr); ::SetBkColor(hdc, NppDarkMode::getBackgroundColor()); - auto hSelectedPen = isHot || hasFocus ? NppDarkMode::getHotEdgePen() : NppDarkMode::getEdgePen(); + auto hEnabledPen = (isHot || hasFocus) ? NppDarkMode::getHotEdgePen() : NppDarkMode::getEdgePen(); + auto hSelectedPen = isWindowEnabled ? hEnabledPen : NppDarkMode::getDisabledEdgePen(); auto holdPen = static_cast(::SelectObject(hdc, hSelectedPen)); POINT edge[] = { @@ -1489,7 +1682,7 @@ namespace NppDarkMode void subclassComboBoxControl(HWND hwnd) { - DWORD_PTR hwndEditData = NULL; + DWORD_PTR hwndEditData = 0; auto style = ::GetWindowLongPtr(hwnd, GWL_STYLE); if ((style & CBS_DROPDOWN) == CBS_DROPDOWN) { @@ -1617,6 +1810,43 @@ namespace NppDarkMode SetWindowTheme(hwnd, p.themeClassName, nullptr); } + auto style = ::GetWindowLongPtr(hwnd, GWL_STYLE); + bool isComboBox = (style & LBS_COMBOBOX) == LBS_COMBOBOX; + auto exStyle = ::GetWindowLongPtr(hwnd, GWL_EXSTYLE); + bool hasClientEdge = (exStyle & WS_EX_CLIENTEDGE) == WS_EX_CLIENTEDGE; + + if (p.subclass && !isComboBox && hasClientEdge) + { + NppDarkMode::subclassCustomBorderForListBoxAndEditControls(hwnd); + } + +#ifndef __MINGW64__ // mingw build for 64 bit has issue with GetWindowSubclass, it is undefined + + bool changed = false; + if (::GetWindowSubclass(hwnd, CustomBorderSubclass, g_customBorderSubclassID, nullptr) == TRUE) + { + if (NppDarkMode::isEnabled()) + { + if (hasClientEdge) + { + ::SetWindowLongPtr(hwnd, GWL_EXSTYLE, exStyle & ~WS_EX_CLIENTEDGE); + changed = true; + } + } + else if (!hasClientEdge) + { + ::SetWindowLongPtr(hwnd, GWL_EXSTYLE, exStyle | WS_EX_CLIENTEDGE); + changed = true; + } + } + + if (changed) + { + ::SetWindowPos(hwnd, nullptr, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED); + } + +#endif // !__MINGW64__ + return TRUE; } @@ -1630,6 +1860,40 @@ namespace NppDarkMode SetWindowTheme(hwnd, p.themeClassName, nullptr); } + auto exStyle = ::GetWindowLongPtr(hwnd, GWL_EXSTYLE); + bool hasClientEdge = (exStyle & WS_EX_CLIENTEDGE) == WS_EX_CLIENTEDGE; + if (p.subclass && hasClientEdge) + { + NppDarkMode::subclassCustomBorderForListBoxAndEditControls(hwnd); + } + +#ifndef __MINGW64__ // mingw build for 64 bit has issue with GetWindowSubclass, it is undefined + + bool changed = false; + if (::GetWindowSubclass(hwnd, CustomBorderSubclass, g_customBorderSubclassID, nullptr) == TRUE) + { + if (NppDarkMode::isEnabled()) + { + if (hasClientEdge) + { + ::SetWindowLongPtr(hwnd, GWL_EXSTYLE, exStyle & ~WS_EX_CLIENTEDGE); + changed = true; + } + } + else if (!hasClientEdge) + { + ::SetWindowLongPtr(hwnd, GWL_EXSTYLE, exStyle | WS_EX_CLIENTEDGE); + changed = true; + } + } + + if (changed) + { + ::SetWindowPos(hwnd, nullptr, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED); + } + +#endif // !__MINGW64__ + return TRUE; } @@ -2192,13 +2456,8 @@ namespace NppDarkMode if (!hasTheme) { - auto holdPen = static_cast(::SelectObject(hdc, NppDarkMode::getEdgePen())); - auto holdBrush = ::SelectObject(hdc, ::GetStockObject(NULL_BRUSH)); - ::Rectangle(hdc, rcArrowLeft.left, rcArrowLeft.top, rcArrowLeft.right, rcArrowLeft.bottom); - ::Rectangle(hdc, rcArrowRight.left, rcArrowRight.top, rcArrowRight.right, rcArrowRight.bottom); - - ::SelectObject(hdc, holdPen); - ::SelectObject(hdc, holdBrush); + NppDarkMode::paintRoundFrameRect(hdc, rcArrowLeft, NppDarkMode::getEdgePen()); + NppDarkMode::paintRoundFrameRect(hdc, rcArrowRight, NppDarkMode::getEdgePen()); } ::SelectObject(hdc, holdFont); @@ -2526,4 +2785,18 @@ namespace NppDarkMode ::SetBkColor(hdc, NppDarkMode::getDarkerBackgroundColor()); return reinterpret_cast(NppDarkMode::getDarkerBackgroundBrush()); } + + INT_PTR onCtlColorListbox(WPARAM wParam, LPARAM lParam) + { + auto hdc = reinterpret_cast(wParam); + auto hwnd = reinterpret_cast(lParam); + + auto style = ::GetWindowLongPtr(hwnd, GWL_STYLE); + bool isComboBox = (style & LBS_COMBOBOX) == LBS_COMBOBOX; + if (!isComboBox && ::IsWindowEnabled(hwnd)) + { + return static_cast(NppDarkMode::onCtlColorSofter(hdc)); + } + return static_cast(NppDarkMode::onCtlColor(hdc)); + } } diff --git a/PowerEditor/src/NppDarkMode.h b/PowerEditor/src/NppDarkMode.h index 7cd105270..eaf6427bd 100644 --- a/PowerEditor/src/NppDarkMode.h +++ b/PowerEditor/src/NppDarkMode.h @@ -42,6 +42,7 @@ namespace NppDarkMode COLORREF linkText = 0; COLORREF edge = 0; COLORREF hotEdge = 0; + COLORREF disabledEdge = 0; }; struct Options @@ -107,6 +108,7 @@ namespace NppDarkMode COLORREF getEdgeColor(); COLORREF getHotEdgeColor(); + COLORREF getDisabledEdgeColor(); HBRUSH getBackgroundBrush(); HBRUSH getDarkerBackgroundBrush(); @@ -116,10 +118,12 @@ namespace NppDarkMode HBRUSH getEdgeBrush(); HBRUSH getHotEdgeBrush(); + HBRUSH getDisabledEdgeBrush(); HPEN getDarkerTextPen(); HPEN getEdgePen(); HPEN getHotEdgePen(); + HPEN getDisabledEdgePen(); void setBackgroundColor(COLORREF c); void setSofterBackgroundColor(COLORREF c); @@ -132,6 +136,7 @@ namespace NppDarkMode void setLinkTextColor(COLORREF c); void setEdgeColor(COLORREF c); void setHotEdgeColor(COLORREF c); + void setDisabledEdgeColor(COLORREF c); Colors getDarkModeDefaultColors(); void changeCustomTheme(const Colors& colors); @@ -154,6 +159,8 @@ namespace NppDarkMode // enhancements to DarkMode.h void enableDarkScrollBarForWindowAndChildren(HWND hwnd); + inline void paintRoundFrameRect(HDC hdc, const RECT rect, const HPEN hpen, int width = 0, int height = 0); + void subclassButtonControl(HWND hwnd); void subclassGroupboxControl(HWND hwnd); void subclassTabControl(HWND hwnd); @@ -191,4 +198,5 @@ namespace NppDarkMode LRESULT onCtlColorDarker(HDC hdc); LRESULT onCtlColorError(HDC hdc); LRESULT onCtlColorDarkerBGStaticText(HDC hdc, bool isTextEnabled); + INT_PTR onCtlColorListbox(WPARAM wParam, LPARAM lParam); } diff --git a/PowerEditor/src/Parameters.cpp b/PowerEditor/src/Parameters.cpp index 18d77b5af..21d891965 100644 --- a/PowerEditor/src/Parameters.cpp +++ b/PowerEditor/src/Parameters.cpp @@ -5599,6 +5599,10 @@ void NppParameters::feedGUIParameters(TiXmlNode *node) val = element->Attribute(TEXT("customColorHotEdge"), &i); if (val) _nppGUI._darkmode._customColors.hotEdge = i; + + val = element->Attribute(TEXT("customColorDisabledEdge"), &i); + if (val) + _nppGUI._darkmode._customColors.disabledEdge = i; } } } @@ -6698,6 +6702,7 @@ void NppParameters::createXmlTreeFromGUIParams() GUIConfigElement->SetAttribute(TEXT("customColorLinkText"), _nppGUI._darkmode._customColors.linkText); GUIConfigElement->SetAttribute(TEXT("customColorEdge"), _nppGUI._darkmode._customColors.edge); GUIConfigElement->SetAttribute(TEXT("customColorHotEdge"), _nppGUI._darkmode._customColors.hotEdge); + GUIConfigElement->SetAttribute(TEXT("customColorDisabledEdge"), _nppGUI._darkmode._customColors.disabledEdge); } // diff --git a/PowerEditor/src/WinControls/ColourPicker/WordStyleDlg.cpp b/PowerEditor/src/WinControls/ColourPicker/WordStyleDlg.cpp index 466801d1e..cb018e94b 100644 --- a/PowerEditor/src/WinControls/ColourPicker/WordStyleDlg.cpp +++ b/PowerEditor/src/WinControls/ColourPicker/WordStyleDlg.cpp @@ -81,8 +81,6 @@ intptr_t CALLBACK WordStyleDlg::run_dlgProc(UINT Message, WPARAM wParam, LPARAM { NppParameters& nppParamInst = NppParameters::getInstance(); - NppDarkMode::autoSubclassAndThemeChildControls(_hSelf); - _hCheckBold = ::GetDlgItem(_hSelf, IDC_BOLD_CHECK); _hCheckItalic = ::GetDlgItem(_hSelf, IDC_ITALIC_CHECK); _hCheckUnderline = ::GetDlgItem(_hSelf, IDC_UNDERLINE_CHECK); @@ -151,6 +149,9 @@ intptr_t CALLBACK WordStyleDlg::run_dlgProc(UINT Message, WPARAM wParam, LPARAM loadLangListFromNppParam(); updateGlobalOverrideCtrls(); setVisualFromStyleList(); + + NppDarkMode::autoSubclassAndThemeChildControls(_hSelf); + goToCenter(); return TRUE; @@ -177,7 +178,7 @@ intptr_t CALLBACK WordStyleDlg::run_dlgProc(UINT Message, WPARAM wParam, LPARAM { if (NppDarkMode::isEnabled()) { - return NppDarkMode::onCtlColor(reinterpret_cast(wParam)); + return NppDarkMode::onCtlColorListbox(wParam, lParam); } break; } diff --git a/PowerEditor/src/WinControls/Preference/preference.rc b/PowerEditor/src/WinControls/Preference/preference.rc index bfba2341d..a1ae7bf6e 100644 --- a/PowerEditor/src/WinControls/Preference/preference.rc +++ b/PowerEditor/src/WinControls/Preference/preference.rc @@ -128,6 +128,7 @@ BEGIN LTEXT "Link",IDD_CUSTOMIZED_COLOR10_STATIC, 240,115,95,8 LTEXT "Edge",IDD_CUSTOMIZED_COLOR9_STATIC,355,55,94,8 LTEXT "Edge highlight",IDD_CUSTOMIZED_COLOR11_STATIC,355,75,94,8 + LTEXT "Edge disabled",IDD_CUSTOMIZED_COLOR12_STATIC,355,95,94,8 PUSHBUTTON "Reset",IDD_CUSTOMIZED_RESET_BUTTON,252,155,45,14 END diff --git a/PowerEditor/src/WinControls/Preference/preferenceDlg.cpp b/PowerEditor/src/WinControls/Preference/preferenceDlg.cpp index 3989e29d6..c8de72bcf 100644 --- a/PowerEditor/src/WinControls/Preference/preferenceDlg.cpp +++ b/PowerEditor/src/WinControls/Preference/preferenceDlg.cpp @@ -217,7 +217,7 @@ intptr_t CALLBACK PreferenceDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM { if (NppDarkMode::isEnabled()) { - return NppDarkMode::onCtlColor(reinterpret_cast(wParam)); + return NppDarkMode::onCtlColorListbox(wParam, lParam); } break; } @@ -957,6 +957,7 @@ void DarkModeSubDlg::enableCustomizedColorCtrls(bool doEnable) ::EnableWindow(_pEdgeColorPicker->getHSelf(), doEnable); ::EnableWindow(_pLinkColorPicker->getHSelf(), doEnable); ::EnableWindow(_pHotEdgeColorPicker->getHSelf(), doEnable); + ::EnableWindow(_pDisabledEdgeColorPicker->getHSelf(), doEnable); ::EnableWindow(::GetDlgItem(_hSelf, IDD_CUSTOMIZED_RESET_BUTTON), doEnable); @@ -973,6 +974,7 @@ void DarkModeSubDlg::enableCustomizedColorCtrls(bool doEnable) _pEdgeColorPicker->setColour(NppDarkMode::getEdgeColor()); _pLinkColorPicker->setColour(NppDarkMode::getLinkTextColor()); _pHotEdgeColorPicker->setColour(NppDarkMode::getHotEdgeColor()); + _pDisabledEdgeColorPicker->setColour(NppDarkMode::getDisabledEdgeColor()); redraw(); } @@ -1047,6 +1049,7 @@ intptr_t CALLBACK DarkModeSubDlg::run_dlgProc(UINT message, WPARAM wParam, LPARA _pEdgeColorPicker = new ColourPicker; _pLinkColorPicker = new ColourPicker; _pHotEdgeColorPicker = new ColourPicker; + _pDisabledEdgeColorPicker = new ColourPicker; _pBackgroundColorPicker->init(_hInst, _hSelf); _pSofterBackgroundColorPicker->init(_hInst, _hSelf); @@ -1060,6 +1063,7 @@ intptr_t CALLBACK DarkModeSubDlg::run_dlgProc(UINT message, WPARAM wParam, LPARA _pEdgeColorPicker->init(_hInst, _hSelf); _pLinkColorPicker->init(_hInst, _hSelf); _pHotEdgeColorPicker->init(_hInst, _hSelf); + _pDisabledEdgeColorPicker->init(_hInst, _hSelf); int cpDynamicalWidth = NppParameters::getInstance()._dpiManager.scaleX(25); int cpDynamicalHeight = NppParameters::getInstance()._dpiManager.scaleY(25); @@ -1075,6 +1079,7 @@ intptr_t CALLBACK DarkModeSubDlg::run_dlgProc(UINT message, WPARAM wParam, LPARA move2CtrlLeft(IDD_CUSTOMIZED_COLOR9_STATIC, _pEdgeColorPicker->getHSelf(), cpDynamicalWidth, cpDynamicalHeight); move2CtrlLeft(IDD_CUSTOMIZED_COLOR10_STATIC, _pLinkColorPicker->getHSelf(), cpDynamicalWidth, cpDynamicalHeight); move2CtrlLeft(IDD_CUSTOMIZED_COLOR11_STATIC, _pHotEdgeColorPicker->getHSelf(), cpDynamicalWidth, cpDynamicalHeight); + move2CtrlLeft(IDD_CUSTOMIZED_COLOR12_STATIC, _pDisabledEdgeColorPicker->getHSelf(), cpDynamicalWidth, cpDynamicalHeight); _pBackgroundColorPicker->display(); _pSofterBackgroundColorPicker->display(); @@ -1087,6 +1092,7 @@ intptr_t CALLBACK DarkModeSubDlg::run_dlgProc(UINT message, WPARAM wParam, LPARA _pEdgeColorPicker->display(); _pLinkColorPicker->display(); _pHotEdgeColorPicker->display(); + _pDisabledEdgeColorPicker->display(); ::EnableWindow(::GetDlgItem(_hSelf, IDC_RADIO_DARKMODE_BLACK), nppGUI._darkmode._isEnabled); ::EnableWindow(::GetDlgItem(_hSelf, IDC_RADIO_DARKMODE_RED), nppGUI._darkmode._isEnabled); @@ -1122,7 +1128,8 @@ intptr_t CALLBACK DarkModeSubDlg::run_dlgProc(UINT message, WPARAM wParam, LPARA dlgCtrlID == IDD_CUSTOMIZED_COLOR8_STATIC || dlgCtrlID == IDD_CUSTOMIZED_COLOR9_STATIC || dlgCtrlID == IDD_CUSTOMIZED_COLOR10_STATIC || - dlgCtrlID == IDD_CUSTOMIZED_COLOR11_STATIC); + dlgCtrlID == IDD_CUSTOMIZED_COLOR11_STATIC || + dlgCtrlID == IDD_CUSTOMIZED_COLOR12_STATIC); //set the static text colors to show enable/disable instead of ::EnableWindow which causes blurry text if (isStaticText) { @@ -1155,6 +1162,7 @@ intptr_t CALLBACK DarkModeSubDlg::run_dlgProc(UINT message, WPARAM wParam, LPARA _pEdgeColorPicker->destroy(); _pLinkColorPicker->destroy(); _pHotEdgeColorPicker->destroy(); + _pDisabledEdgeColorPicker->destroy(); delete _pBackgroundColorPicker; delete _pSofterBackgroundColorPicker; @@ -1167,6 +1175,7 @@ intptr_t CALLBACK DarkModeSubDlg::run_dlgProc(UINT message, WPARAM wParam, LPARA delete _pEdgeColorPicker; delete _pLinkColorPicker; delete _pHotEdgeColorPicker; + delete _pDisabledEdgeColorPicker; } case WM_COMMAND: @@ -1358,6 +1367,12 @@ intptr_t CALLBACK DarkModeSubDlg::run_dlgProc(UINT message, WPARAM wParam, LPARA NppDarkMode::setHotEdgeColor(c); nppGUI._darkmode._customColors.hotEdge = c; } + else if (reinterpret_cast(lParam) == _pDisabledEdgeColorPicker->getHSelf()) + { + c = _pDisabledEdgeColorPicker->getColour(); + NppDarkMode::setDisabledEdgeColor(c); + nppGUI._darkmode._customColors.disabledEdge = c; + } else { return FALSE; @@ -1395,6 +1410,7 @@ intptr_t CALLBACK DarkModeSubDlg::run_dlgProc(UINT message, WPARAM wParam, LPARA _pEdgeColorPicker->setColour(disabledColor); _pLinkColorPicker->setColour(disabledColor); _pHotEdgeColorPicker->setColour(disabledColor); + _pDisabledEdgeColorPicker->setColour(disabledColor); redraw(); } @@ -2519,7 +2535,7 @@ intptr_t CALLBACK LanguageSubDlg::run_dlgProc(UINT message, WPARAM wParam, LPARA { if (NppDarkMode::isEnabled()) { - return NppDarkMode::onCtlColor(reinterpret_cast(wParam)); + return NppDarkMode::onCtlColorListbox(wParam, lParam); } break; } diff --git a/PowerEditor/src/WinControls/Preference/preferenceDlg.h b/PowerEditor/src/WinControls/Preference/preferenceDlg.h index 5a4c1d346..e0cc850d4 100644 --- a/PowerEditor/src/WinControls/Preference/preferenceDlg.h +++ b/PowerEditor/src/WinControls/Preference/preferenceDlg.h @@ -72,6 +72,7 @@ private: ColourPicker* _pEdgeColorPicker = nullptr; ColourPicker* _pLinkColorPicker = nullptr; ColourPicker* _pHotEdgeColorPicker = nullptr; + ColourPicker* _pDisabledEdgeColorPicker = nullptr; intptr_t CALLBACK run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam); void enableCustomizedColorCtrls(bool doEnable); diff --git a/PowerEditor/src/WinControls/Preference/preference_rc.h b/PowerEditor/src/WinControls/Preference/preference_rc.h index b505a14c7..80c9ac054 100644 --- a/PowerEditor/src/WinControls/Preference/preference_rc.h +++ b/PowerEditor/src/WinControls/Preference/preference_rc.h @@ -419,6 +419,7 @@ #define IDD_CUSTOMIZED_COLOR9_STATIC (IDD_PREFERENCE_SUB_DARKMODE + 24) #define IDD_CUSTOMIZED_COLOR10_STATIC (IDD_PREFERENCE_SUB_DARKMODE + 25) #define IDD_CUSTOMIZED_COLOR11_STATIC (IDD_PREFERENCE_SUB_DARKMODE + 26) + #define IDD_CUSTOMIZED_COLOR12_STATIC (IDD_PREFERENCE_SUB_DARKMODE + 27) #define IDD_CUSTOMIZED_RESET_BUTTON (IDD_PREFERENCE_SUB_DARKMODE + 30) #define IDC_DARKMODE_TONES_GB_STATIC (IDD_PREFERENCE_SUB_DARKMODE + 35) #endif //PREFERENCE_RC_H diff --git a/PowerEditor/src/WinControls/shortcut/shortcut.cpp b/PowerEditor/src/WinControls/shortcut/shortcut.cpp index 824939e21..20a355fe6 100644 --- a/PowerEditor/src/WinControls/shortcut/shortcut.cpp +++ b/PowerEditor/src/WinControls/shortcut/shortcut.cpp @@ -1076,7 +1076,6 @@ intptr_t CALLBACK ScintillaKeyMap::run_dlgProc(UINT Message, WPARAM wParam, LPAR } case WM_CTLCOLOREDIT: - case WM_CTLCOLORLISTBOX: { if (NppDarkMode::isEnabled()) { @@ -1085,6 +1084,15 @@ intptr_t CALLBACK ScintillaKeyMap::run_dlgProc(UINT Message, WPARAM wParam, LPAR break; } + case WM_CTLCOLORLISTBOX: + { + if (NppDarkMode::isEnabled()) + { + return NppDarkMode::onCtlColorListbox(wParam, lParam); + } + break; + } + case WM_CTLCOLORDLG: case WM_CTLCOLORSTATIC: {