diff --git a/PowerEditor/installer/nativeLang/english.xml b/PowerEditor/installer/nativeLang/english.xml index bde69c7a6..ab3a99841 100644 --- a/PowerEditor/installer/nativeLang/english.xml +++ b/PowerEditor/installer/nativeLang/english.xml @@ -915,6 +915,7 @@ The comments are here for explanation, it's not necessary to translate them. + diff --git a/PowerEditor/src/Notepad_plus.cpp b/PowerEditor/src/Notepad_plus.cpp index 33cb62054..36c30062a 100644 --- a/PowerEditor/src/Notepad_plus.cpp +++ b/PowerEditor/src/Notepad_plus.cpp @@ -6620,7 +6620,7 @@ void Notepad_plus::launchClipboardHistoryPanel() ::SendMessage(_pPublicInterface->getHSelf(), NPPM_MODELESSDIALOG, MODELESSDIALOGREMOVE, reinterpret_cast(_pClipboardHistoryPanel->getHSelf())); // define the default docking behaviour - data.uMask = DWS_DF_CONT_RIGHT | DWS_ICONTAB; + data.uMask = DWS_DF_CONT_RIGHT | DWS_ICONTAB | DWS_USEOWNDARKMODE; int icoID = IDR_CLIPBOARDPANEL_ICO; if (NppDarkMode::isEnabled()) @@ -6673,7 +6673,7 @@ void Notepad_plus::launchDocumentListPanel() ::SendMessage(_pPublicInterface->getHSelf(), NPPM_MODELESSDIALOG, MODELESSDIALOGREMOVE, reinterpret_cast(_pDocumentListPanel->getHSelf())); // define the default docking behaviour - data.uMask = DWS_DF_CONT_LEFT | DWS_ICONTAB; + data.uMask = DWS_DF_CONT_LEFT | DWS_ICONTAB | DWS_USEOWNDARKMODE; int icoID = IDR_DOCLIST_ICO; if (NppDarkMode::isEnabled()) @@ -6724,7 +6724,7 @@ void Notepad_plus::launchAnsiCharPanel() ::SendMessage(_pPublicInterface->getHSelf(), NPPM_MODELESSDIALOG, MODELESSDIALOGREMOVE, reinterpret_cast(_pAnsiCharPanel->getHSelf())); // define the default docking behaviour - data.uMask = DWS_DF_CONT_RIGHT | DWS_ICONTAB; + data.uMask = DWS_DF_CONT_RIGHT | DWS_ICONTAB | DWS_USEOWNDARKMODE; int icoID = IDR_ASCIIPANEL_ICO; if (NppDarkMode::isEnabled()) @@ -6775,7 +6775,7 @@ void Notepad_plus::launchFileBrowser(const vector & folders, con ::SendMessage(_pPublicInterface->getHSelf(), NPPM_MODELESSDIALOG, MODELESSDIALOGREMOVE, reinterpret_cast(_pFileBrowser->getHSelf())); // define the default docking behaviour - data.uMask = DWS_DF_CONT_LEFT | DWS_ICONTAB; + data.uMask = DWS_DF_CONT_LEFT | DWS_ICONTAB | DWS_USEOWNDARKMODE; int icoID = IDR_FILEBROWSER_ICO; if (NppDarkMode::isEnabled()) @@ -6883,7 +6883,7 @@ void Notepad_plus::launchProjectPanel(int cmdID, ProjectPanel ** pProjPanel, int ::SendMessage(_pPublicInterface->getHSelf(), NPPM_MODELESSDIALOG, MODELESSDIALOGREMOVE, reinterpret_cast((*pProjPanel)->getHSelf())); // define the default docking behaviour - data.uMask = DWS_DF_CONT_LEFT | DWS_ICONTAB; + data.uMask = DWS_DF_CONT_LEFT | DWS_ICONTAB | DWS_USEOWNDARKMODE; int icoID = IDR_PROJECTPANEL_ICO; if (NppDarkMode::isEnabled()) @@ -6947,7 +6947,7 @@ void Notepad_plus::launchDocMap() ::SendMessage(_pPublicInterface->getHSelf(), NPPM_MODELESSDIALOG, MODELESSDIALOGREMOVE, reinterpret_cast(_pDocMap->getHSelf())); // define the default docking behaviour - data.uMask = DWS_DF_CONT_RIGHT | DWS_ICONTAB; + data.uMask = DWS_DF_CONT_RIGHT | DWS_ICONTAB | DWS_USEOWNDARKMODE; int icoID = IDR_DOCMAP_ICO; if (NppDarkMode::isEnabled()) @@ -6994,7 +6994,7 @@ void Notepad_plus::launchFunctionList() ::SendMessage(_pPublicInterface->getHSelf(), NPPM_MODELESSDIALOG, MODELESSDIALOGREMOVE, reinterpret_cast(_pFuncList->getHSelf())); // define the default docking behaviour - data.uMask = DWS_DF_CONT_RIGHT | DWS_ICONTAB; + data.uMask = DWS_DF_CONT_RIGHT | DWS_ICONTAB | DWS_USEOWNDARKMODE; NppParameters& nppParam = NppParameters::getInstance(); diff --git a/PowerEditor/src/NppDarkMode.cpp b/PowerEditor/src/NppDarkMode.cpp index 290c59225..9d0d73be1 100644 --- a/PowerEditor/src/NppDarkMode.cpp +++ b/PowerEditor/src/NppDarkMode.cpp @@ -323,6 +323,7 @@ namespace NppDarkMode Options opt; opt.enable = nppGui._darkmode._isEnabled; opt.enableMenubar = opt.enable; + opt.enablePlugin = nppGui._darkmode._isEnabledPlugin; g_colorToneChoice = nppGui._darkmode._colorTone; tCustom.change(nppGui._darkmode._customColors); @@ -377,6 +378,11 @@ namespace NppDarkMode return _options.enable; } + bool isEnabledForPlugins() + { + return _options.enablePlugin; + } + bool isDarkMenuEnabled() { return _options.enableMenubar; @@ -1493,6 +1499,70 @@ namespace NppDarkMode SetWindowSubclass(hwnd, ComboBoxSubclass, g_comboBoxSubclassID, hwndEditData); } + constexpr UINT_PTR g_listViewSubclassID = 42; + + LRESULT CALLBACK ListViewSubclass( + HWND hWnd, + UINT uMsg, + WPARAM wParam, + LPARAM lParam, + UINT_PTR uIdSubclass, + DWORD_PTR dwRefData + ) + { + UNREFERENCED_PARAMETER(dwRefData); + + switch (uMsg) + { + case WM_NCDESTROY: + { + ::RemoveWindowSubclass(hWnd, ListViewSubclass, uIdSubclass); + break; + } + + case WM_NOTIFY: + { + switch (reinterpret_cast(lParam)->code) + { + case NM_CUSTOMDRAW: + { + auto lpnmcd = reinterpret_cast(lParam); + switch (lpnmcd->dwDrawStage) + { + case CDDS_PREPAINT: + { + if (NppDarkMode::isExperimentalSupported() && NppDarkMode::isEnabled()) + { + return CDRF_NOTIFYITEMDRAW; + } + return CDRF_DODEFAULT; + } + + case CDDS_ITEMPREPAINT: + { + SetTextColor(lpnmcd->hdc, NppDarkMode::getDarkerTextColor()); + + return CDRF_NEWFONT; + } + + default: + return CDRF_DODEFAULT; + } + } + break; + } + break; + } + break; + } + return DefSubclassProc(hWnd, uMsg, wParam, lParam); + } + + void subclassListViewControl(HWND hwnd) + { + SetWindowSubclass(hwnd, ListViewSubclass, g_listViewSubclassID, 0); + } + void autoSubclassAndThemeChildControls(HWND hwndParent, bool subclass, bool theme) { struct Params @@ -1512,8 +1582,8 @@ namespace NppDarkMode EnumChildWindows(hwndParent, [](HWND hwnd, LPARAM lParam) WINAPI_LAMBDA { auto& p = *reinterpret_cast(lParam); - const size_t classNameLen = 16; - TCHAR className[classNameLen] = { '\0' }; + constexpr size_t classNameLen = 16; + TCHAR className[classNameLen]{}; GetClassName(hwnd, className, classNameLen); if (wcscmp(className, WC_COMBOBOX) == 0) @@ -1608,6 +1678,58 @@ namespace NppDarkMode } return TRUE; } + + if (wcscmp(className, TOOLBARCLASSNAME) == 0) + { + NppDarkMode::setDarkLineAbovePanelToolbar(hwnd); + NppDarkMode::setDarkTooltips(hwnd, NppDarkMode::ToolTipsType::toolbar); + + return TRUE; + } + + if (wcscmp(className, WC_LISTVIEW) == 0) + { + NppDarkMode::setDarkListView(hwnd); + NppDarkMode::setDarkTooltips(hwnd, NppDarkMode::ToolTipsType::listview); + + ListView_SetTextColor(hwnd, NppParameters::getInstance().getCurrentDefaultFgColor()); + ListView_SetTextBkColor(hwnd, NppParameters::getInstance().getCurrentDefaultBgColor()); + ListView_SetBkColor(hwnd, NppParameters::getInstance().getCurrentDefaultBgColor()); + + if (p.subclass) + { + auto exStyle = ListView_GetExtendedListViewStyle(hwnd); + ListView_SetExtendedListViewStyle(hwnd, exStyle | LVS_EX_DOUBLEBUFFER); + NppDarkMode::subclassListViewControl(hwnd); + } + + return TRUE; + } + + if (wcscmp(className, WC_TREEVIEW) == 0) + { + TreeView_SetTextColor(hwnd, NppParameters::getInstance().getCurrentDefaultFgColor()); + TreeView_SetBkColor(hwnd, NppParameters::getInstance().getCurrentDefaultBgColor()); + + NppDarkMode::calculateTreeViewStyle(); + NppDarkMode::setTreeViewStyle(hwnd); + + NppDarkMode::setDarkTooltips(hwnd, NppDarkMode::ToolTipsType::treeview); + + return TRUE; + } + + if (wcscmp(className, L"RichEdit20W") == 0 || wcscmp(className, L"RICHEDIT50W") == 0) + { + if (p.theme) + { + //dark scrollbar for richedit + SetWindowTheme(hwnd, p.themeClassName, nullptr); + } + + return TRUE; + } + return TRUE; }, reinterpret_cast(&p)); } @@ -1617,6 +1739,365 @@ namespace NppDarkMode autoSubclassAndThemeChildControls(hwndParent, false, true); } + LRESULT darkToolBarNotifyCustomDraw(LPARAM lParam) + { + auto nmtbcd = reinterpret_cast(lParam); + static int roundCornerValue = 0; + + switch (nmtbcd->nmcd.dwDrawStage) + { + case CDDS_PREPAINT: + { + if (NppDarkMode::isEnabled()) + { + auto dpiManager = NppParameters::getInstance()._dpiManager; + roundCornerValue = NppDarkMode::isWindows11() ? dpiManager.scaleX(5) : 0; + + ::FillRect(nmtbcd->nmcd.hdc, &nmtbcd->nmcd.rc, NppDarkMode::getDarkerBackgroundBrush()); + return CDRF_NOTIFYITEMDRAW; + } + return CDRF_DODEFAULT; + } + + case CDDS_ITEMPREPAINT: + { + nmtbcd->hbrLines = NppDarkMode::getEdgeBrush(); + nmtbcd->clrText = NppDarkMode::getTextColor(); + nmtbcd->clrTextHighlight = NppDarkMode::getTextColor(); + nmtbcd->clrBtnFace = NppDarkMode::getBackgroundColor(); + nmtbcd->clrBtnHighlight = NppDarkMode::getSofterBackgroundColor(); + nmtbcd->clrHighlightHotTrack = NppDarkMode::getHotBackgroundColor(); + nmtbcd->nStringBkMode = TRANSPARENT; + nmtbcd->nHLStringBkMode = TRANSPARENT; + + if ((nmtbcd->nmcd.uItemState & CDIS_CHECKED) == CDIS_CHECKED) + { + auto holdBrush = ::SelectObject(nmtbcd->nmcd.hdc, NppDarkMode::getSofterBackgroundBrush()); + auto holdPen = ::SelectObject(nmtbcd->nmcd.hdc, NppDarkMode::getEdgePen()); + ::RoundRect(nmtbcd->nmcd.hdc, nmtbcd->nmcd.rc.left, nmtbcd->nmcd.rc.top, nmtbcd->nmcd.rc.right, nmtbcd->nmcd.rc.bottom, roundCornerValue, roundCornerValue); + ::SelectObject(nmtbcd->nmcd.hdc, holdBrush); + ::SelectObject(nmtbcd->nmcd.hdc, holdPen); + + nmtbcd->nmcd.uItemState &= ~CDIS_CHECKED; + } + + return TBCDRF_HILITEHOTTRACK | TBCDRF_USECDCOLORS | CDRF_NOTIFYPOSTPAINT; + } + + case CDDS_ITEMPOSTPAINT: + { + bool isDropDown = false; + + auto exStyle = ::SendMessage(nmtbcd->nmcd.hdr.hwndFrom, TB_GETEXTENDEDSTYLE, 0, 0); + if ((exStyle & TBSTYLE_EX_DRAWDDARROWS) == TBSTYLE_EX_DRAWDDARROWS) + { + TBBUTTONINFO tbButtonInfo{}; + tbButtonInfo.cbSize = sizeof(TBBUTTONINFO); + tbButtonInfo.dwMask = TBIF_STYLE; + ::SendMessage(nmtbcd->nmcd.hdr.hwndFrom, TB_GETBUTTONINFO, nmtbcd->nmcd.dwItemSpec, reinterpret_cast(&tbButtonInfo)); + + isDropDown = (tbButtonInfo.fsStyle & BTNS_DROPDOWN) == BTNS_DROPDOWN; + } + + if ( !isDropDown && (nmtbcd->nmcd.uItemState & CDIS_HOT) == CDIS_HOT) + { + NppDarkMode::paintRoundFrameRect(nmtbcd->nmcd.hdc, nmtbcd->nmcd.rc, NppDarkMode::getHotEdgePen(), roundCornerValue, roundCornerValue); + } + + return CDRF_DODEFAULT; + } + + default: + return CDRF_DODEFAULT; + } + } + + LRESULT darkListViewNotifyCustomDraw(LPARAM lParam) + { + auto lplvcd = reinterpret_cast(lParam); + + switch (lplvcd->nmcd.dwDrawStage) + { + case CDDS_PREPAINT: + { + return CDRF_NOTIFYITEMDRAW; + } + + case CDDS_ITEMPREPAINT: + { + auto isSelected = ListView_GetItemState(lplvcd->nmcd.hdr.hwndFrom, lplvcd->nmcd.dwItemSpec, LVIS_SELECTED) == LVIS_SELECTED; + + if (NppDarkMode::isEnabled()) + { + if (isSelected) + { + lplvcd->clrText = NppDarkMode::getTextColor(); + lplvcd->clrTextBk = NppDarkMode::getSofterBackgroundColor(); + + ::FillRect(lplvcd->nmcd.hdc, &lplvcd->nmcd.rc, NppDarkMode::getSofterBackgroundBrush()); + } + else if ((lplvcd->nmcd.uItemState & CDIS_HOT) == CDIS_HOT) + { + lplvcd->clrText = NppDarkMode::getTextColor(); + lplvcd->clrTextBk = NppDarkMode::getHotBackgroundColor(); + + ::FillRect(lplvcd->nmcd.hdc, &lplvcd->nmcd.rc, NppDarkMode::getHotBackgroundBrush()); + } + } + + if (isSelected) + { + ::DrawFocusRect(lplvcd->nmcd.hdc, &lplvcd->nmcd.rc); + } + + return CDRF_NEWFONT; + } + + default: + return CDRF_DODEFAULT; + } + } + + LRESULT darkTreeViewNotifyCustomDraw(LPARAM lParam) + { + auto lptvcd = reinterpret_cast(lParam); + + switch (lptvcd->nmcd.dwDrawStage) + { + case CDDS_PREPAINT: + { + if (NppDarkMode::isEnabled()) + { + return CDRF_NOTIFYITEMDRAW; + } + return CDRF_DODEFAULT; + } + + case CDDS_ITEMPREPAINT: + { + if ((lptvcd->nmcd.uItemState & CDIS_SELECTED) == CDIS_SELECTED) + { + lptvcd->clrText = NppDarkMode::getTextColor(); + lptvcd->clrTextBk = NppDarkMode::getSofterBackgroundColor(); + ::FillRect(lptvcd->nmcd.hdc, &lptvcd->nmcd.rc, NppDarkMode::getSofterBackgroundBrush()); + + return CDRF_NEWFONT | CDRF_NOTIFYPOSTPAINT; + } + + if ((lptvcd->nmcd.uItemState & CDIS_HOT) == CDIS_HOT) + { + lptvcd->clrText = NppDarkMode::getTextColor(); + lptvcd->clrTextBk = NppDarkMode::getHotBackgroundColor(); + ::FillRect(lptvcd->nmcd.hdc, &lptvcd->nmcd.rc, NppDarkMode::getHotBackgroundBrush()); + + return CDRF_NEWFONT | CDRF_NOTIFYPOSTPAINT; + } + + return CDRF_DODEFAULT; + } + + case CDDS_ITEMPOSTPAINT: + { + RECT rcFrame = lptvcd->nmcd.rc; + rcFrame.left -= 1; + rcFrame.right += 1; + + if ((lptvcd->nmcd.uItemState & CDIS_HOT) == CDIS_HOT) + { + NppDarkMode::paintRoundFrameRect(lptvcd->nmcd.hdc, rcFrame, NppDarkMode::getHotEdgePen(), 0, 0); + } + else if ((lptvcd->nmcd.uItemState & CDIS_SELECTED) == CDIS_SELECTED) + { + NppDarkMode::paintRoundFrameRect(lptvcd->nmcd.hdc, rcFrame, NppDarkMode::getEdgePen(), 0, 0); + } + + return CDRF_DODEFAULT; + + } + + default: + return CDRF_DODEFAULT; + } + } + + constexpr UINT_PTR g_pluginDockWindowSubclassID = 42; + + LRESULT CALLBACK PluginDockWindowSubclass( + HWND hWnd, + UINT uMsg, + WPARAM wParam, + LPARAM lParam, + UINT_PTR uIdSubclass, + DWORD_PTR dwRefData + ) + { + UNREFERENCED_PARAMETER(dwRefData); + + switch (uMsg) + { + case WM_ERASEBKGND: + { + if (NppDarkMode::isEnabled()) + { + RECT rect = {}; + GetClientRect(hWnd, &rect); + ::FillRect(reinterpret_cast(wParam), &rect, NppDarkMode::getDarkerBackgroundBrush()); + return TRUE; + } + break; + } + + case WM_NCDESTROY: + { + ::RemoveWindowSubclass(hWnd, PluginDockWindowSubclass, uIdSubclass); + break; + } + + case NPPM_INTERNAL_REFRESHDARKMODE: + { + NppDarkMode::autoThemeChildControls(hWnd); + return TRUE; + } + + case WM_CTLCOLOREDIT: + { + return NppDarkMode::onCtlColorSofter(reinterpret_cast(wParam)); + } + + case WM_CTLCOLORLISTBOX: + case WM_CTLCOLORDLG: + { + return NppDarkMode::onCtlColorDarker(reinterpret_cast(wParam)); + } + + case WM_CTLCOLORSTATIC: + { + if (NppDarkMode::isEnabled()) + { + constexpr size_t classNameLen = 16; + TCHAR className[classNameLen]{}; + auto hwndEdit = reinterpret_cast(lParam); + GetClassName(hwndEdit, className, classNameLen); + if (wcscmp(className, WC_EDIT) == 0) + { + return NppDarkMode::onCtlColor(reinterpret_cast(wParam)); + } + return NppDarkMode::onCtlColorDarker(reinterpret_cast(wParam)); + } + break; + } + + case WM_PRINTCLIENT: + { + if (NppDarkMode::isEnabled()) + { + return TRUE; + } + break; + } + + case WM_NOTIFY: + { + auto nmhdr = reinterpret_cast(lParam); + + constexpr size_t classNameLen = 16; + TCHAR className[classNameLen]{}; + GetClassName(nmhdr->hwndFrom, className, classNameLen); + + switch (nmhdr->code) + { + case NM_CUSTOMDRAW: + { + if (wcscmp(className, TOOLBARCLASSNAME) == 0) + { + return NppDarkMode::darkToolBarNotifyCustomDraw(lParam); + } + + if (wcscmp(className, WC_LISTVIEW) == 0) + { + return NppDarkMode::darkListViewNotifyCustomDraw(lParam); + } + + if (wcscmp(className, WC_TREEVIEW) == 0) + { + return NppDarkMode::darkTreeViewNotifyCustomDraw(lParam); + } + } + break; + } + break; + } + } + return DefSubclassProc(hWnd, uMsg, wParam, lParam); + } + + void autoSubclassAndThemePluginDockWindow(HWND hwnd) + { + SetWindowSubclass(hwnd, PluginDockWindowSubclass, g_pluginDockWindowSubclassID, 0); + NppDarkMode::autoSubclassAndThemeChildControls(hwnd); + } + + constexpr UINT_PTR g_windowNotifySubclassID = 42; + + LRESULT CALLBACK WindowNotifySubclass( + HWND hWnd, + UINT uMsg, + WPARAM wParam, + LPARAM lParam, + UINT_PTR uIdSubclass, + DWORD_PTR dwRefData + ) + { + UNREFERENCED_PARAMETER(dwRefData); + + switch (uMsg) + { + case WM_NCDESTROY: + { + ::RemoveWindowSubclass(hWnd, PluginDockWindowSubclass, uIdSubclass); + break; + } + + case WM_NOTIFY: + { + auto nmhdr = reinterpret_cast(lParam); + + constexpr size_t classNameLen = 16; + TCHAR className[classNameLen]{}; + GetClassName(nmhdr->hwndFrom, className, classNameLen); + + switch (nmhdr->code) + { + case NM_CUSTOMDRAW: + { + if (wcscmp(className, TOOLBARCLASSNAME) == 0) + { + return NppDarkMode::darkToolBarNotifyCustomDraw(lParam); + } + + if (wcscmp(className, WC_LISTVIEW) == 0) + { + return NppDarkMode::darkListViewNotifyCustomDraw(lParam); + } + + if (wcscmp(className, WC_TREEVIEW) == 0) + { + return NppDarkMode::darkTreeViewNotifyCustomDraw(lParam); + } + } + break; + } + break; + } + } + return DefSubclassProc(hWnd, uMsg, wParam, lParam); + } + + void autoSubclassAndThemeWindowNotify(HWND hwnd) + { + SetWindowSubclass(hwnd, WindowNotifySubclass, g_windowNotifySubclassID, 0); + } + constexpr UINT_PTR g_tabUpDownSubclassID = 42; LRESULT CALLBACK TabUpDownSubclass( @@ -1842,14 +2323,17 @@ namespace NppDarkMode void setDarkListView(HWND hwnd) { - bool useDark = NppDarkMode::isEnabled(); + if (NppDarkMode::isExperimentalSupported()) + { + bool useDark = NppDarkMode::isEnabled(); - HWND hHeader = ListView_GetHeader(hwnd); - NppDarkMode::allowDarkModeForWindow(hHeader, useDark); - SetWindowTheme(hHeader, useDark ? L"ItemsView" : nullptr, nullptr); + HWND hHeader = ListView_GetHeader(hwnd); + NppDarkMode::allowDarkModeForWindow(hHeader, useDark); + SetWindowTheme(hHeader, useDark ? L"ItemsView" : nullptr, nullptr); - NppDarkMode::allowDarkModeForWindow(hwnd, useDark); - SetWindowTheme(hwnd, L"Explorer", nullptr); + NppDarkMode::allowDarkModeForWindow(hwnd, useDark); + SetWindowTheme(hwnd, L"Explorer", nullptr); + } } void disableVisualStyle(HWND hwnd, bool doDisable) diff --git a/PowerEditor/src/NppDarkMode.h b/PowerEditor/src/NppDarkMode.h index 0b8e734f2..7cd105270 100644 --- a/PowerEditor/src/NppDarkMode.h +++ b/PowerEditor/src/NppDarkMode.h @@ -48,6 +48,7 @@ namespace NppDarkMode { bool enable = false; bool enableMenubar = false; + bool enablePlugin = false; }; enum class ToolTipsType @@ -82,6 +83,7 @@ namespace NppDarkMode bool isEnabled(); bool isDarkMenuEnabled(); + bool isEnabledForPlugins(); bool isExperimentalSupported(); bool isWindows11(); @@ -160,6 +162,13 @@ namespace NppDarkMode void autoSubclassAndThemeChildControls(HWND hwndParent, bool subclass = true, bool theme = true); void autoThemeChildControls(HWND hwndParent); + LRESULT darkToolBarNotifyCustomDraw(LPARAM lParam); + LRESULT darkListViewNotifyCustomDraw(LPARAM lParam); + LRESULT darkTreeViewNotifyCustomDraw(LPARAM lParam); + + void autoSubclassAndThemePluginDockWindow(HWND hwnd); + void autoSubclassAndThemeWindowNotify(HWND hwnd); + bool subclassTabUpDownControl(HWND hwnd); void setDarkTitleBar(HWND hwnd); diff --git a/PowerEditor/src/Parameters.cpp b/PowerEditor/src/Parameters.cpp index 645df7692..6700eb496 100644 --- a/PowerEditor/src/Parameters.cpp +++ b/PowerEditor/src/Parameters.cpp @@ -5547,6 +5547,8 @@ void NppParameters::feedGUIParameters(TiXmlNode *node) _nppGUI._darkmode._isEnabled = parseYesNoBoolAttribute(TEXT("enable")); + _nppGUI._darkmode._isEnabledPlugin = parseYesNoBoolAttribute(TEXT("enablePlugin")); + int i; const TCHAR* val; val = element->Attribute(TEXT("colorTone"), &i); @@ -6682,6 +6684,7 @@ void NppParameters::createXmlTreeFromGUIParams() }; setYesNoBoolAttribute(TEXT("enable"), _nppGUI._darkmode._isEnabled); + setYesNoBoolAttribute(TEXT("enablePlugin"), _nppGUI._darkmode._isEnabledPlugin); GUIConfigElement->SetAttribute(TEXT("colorTone"), _nppGUI._darkmode._colorTone); GUIConfigElement->SetAttribute(TEXT("customColorTop"), _nppGUI._darkmode._customColors.pureBackground); diff --git a/PowerEditor/src/Parameters.h b/PowerEditor/src/Parameters.h index 3e0accb3a..2646736dd 100644 --- a/PowerEditor/src/Parameters.h +++ b/PowerEditor/src/Parameters.h @@ -715,6 +715,7 @@ public: struct DarkModeConf final { bool _isEnabled = false; + bool _isEnabledPlugin = false; NppDarkMode::ColorTone _colorTone = NppDarkMode::blackTone; NppDarkMode::Colors _customColors = NppDarkMode::getDarkModeDefaultColors(); }; @@ -884,6 +885,7 @@ struct NppGUI final bool _shouldSortFunctionList = false; DarkModeConf _darkmode; + DarkModeConf _darkmodeplugins; }; struct ScintillaViewParams diff --git a/PowerEditor/src/ScintillaComponent/FindReplaceDlg.cpp b/PowerEditor/src/ScintillaComponent/FindReplaceDlg.cpp index 7575b1d6c..00352fae4 100644 --- a/PowerEditor/src/ScintillaComponent/FindReplaceDlg.cpp +++ b/PowerEditor/src/ScintillaComponent/FindReplaceDlg.cpp @@ -2648,7 +2648,7 @@ void FindReplaceDlg::findAllIn(InWhat op) _pFinder->create(&data); ::SendMessage(_hParent, NPPM_MODELESSDIALOG, MODELESSDIALOGREMOVE, reinterpret_cast(_pFinder->getHSelf())); // define the default docking behaviour - data.uMask = DWS_DF_CONT_BOTTOM | DWS_ICONTAB | DWS_ADDINFO; + data.uMask = DWS_DF_CONT_BOTTOM | DWS_ICONTAB | DWS_ADDINFO | DWS_USEOWNDARKMODE; data.hIconTab = (HICON)::LoadImage(_hInst, MAKEINTRESOURCE(IDI_FIND_RESULT_ICON), IMAGE_ICON, 0, 0, LR_LOADMAP3DCOLORS | LR_LOADTRANSPARENT); data.pszAddInfo = _findAllResultStr; @@ -2779,7 +2779,7 @@ Finder * FindReplaceDlg::createFinder() pFinder->create(&data, isRTL); ::SendMessage(_hParent, NPPM_MODELESSDIALOG, MODELESSDIALOGREMOVE, reinterpret_cast(pFinder->getHSelf())); // define the default docking behaviour - data.uMask = DWS_DF_CONT_BOTTOM | DWS_ICONTAB | DWS_ADDINFO; + data.uMask = DWS_DF_CONT_BOTTOM | DWS_ICONTAB | DWS_ADDINFO | DWS_USEOWNDARKMODE; data.hIconTab = (HICON)::LoadImage(_hInst, MAKEINTRESOURCE(IDI_FIND_RESULT_ICON), IMAGE_ICON, 0, 0, LR_LOADMAP3DCOLORS | LR_LOADTRANSPARENT); data.pszAddInfo = _findAllResultStr; diff --git a/PowerEditor/src/WinControls/AnsiCharPanel/ListView.cpp b/PowerEditor/src/WinControls/AnsiCharPanel/ListView.cpp index c90045cbc..12aea1f0a 100644 --- a/PowerEditor/src/WinControls/AnsiCharPanel/ListView.cpp +++ b/PowerEditor/src/WinControls/AnsiCharPanel/ListView.cpp @@ -54,8 +54,6 @@ void ListView::init(HINSTANCE hInst, HWND parent) throw std::runtime_error("ListView::init : CreateWindowEx() function return null"); } - NppDarkMode::setDarkListView(_hSelf); - ::SetWindowLongPtr(_hSelf, GWLP_USERDATA, reinterpret_cast(this)); _defaultProc = reinterpret_cast(::SetWindowLongPtr(_hSelf, GWLP_WNDPROC, reinterpret_cast(staticProc))); @@ -168,36 +166,6 @@ std::vector ListView::getCheckedIndexes() const LRESULT ListView::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) { - switch (Message) - { - case WM_NOTIFY: - { - switch (reinterpret_cast(lParam)->code) - { - case NM_CUSTOMDRAW: - { - LPNMCUSTOMDRAW nmcd = reinterpret_cast(lParam); - switch (nmcd->dwDrawStage) - { - case CDDS_PREPAINT: - { - return CDRF_NOTIFYITEMDRAW; - } - - case CDDS_ITEMPREPAINT: - { - bool isDarkModeSupported = NppDarkMode::isEnabled() && NppDarkMode::isExperimentalSupported(); - SetTextColor(nmcd->hdc, isDarkModeSupported ? NppDarkMode::getDarkerTextColor() : GetSysColor(COLOR_BTNTEXT)); - return CDRF_DODEFAULT; - } - break; - } - } - break; - } - } - break; - } return ::CallWindowProc(_defaultProc, hwnd, Message, wParam, lParam); } diff --git a/PowerEditor/src/WinControls/AnsiCharPanel/ansiCharPanel.cpp b/PowerEditor/src/WinControls/AnsiCharPanel/ansiCharPanel.cpp index dc5e2bd0f..9f9de05ef 100644 --- a/PowerEditor/src/WinControls/AnsiCharPanel/ansiCharPanel.cpp +++ b/PowerEditor/src/WinControls/AnsiCharPanel/ansiCharPanel.cpp @@ -50,12 +50,15 @@ intptr_t CALLBACK AnsiCharPanel::run_dlgProc(UINT message, WPARAM wParam, LPARAM _listView.setValues(codepage==-1?0:codepage); _listView.display(); + NppDarkMode::autoSubclassAndThemeChildControls(_hSelf); + NppDarkMode::autoSubclassAndThemeWindowNotify(_hSelf); + return TRUE; } case NPPM_INTERNAL_REFRESHDARKMODE: { - NppDarkMode::setDarkListView(_listView.getHSelf()); + NppDarkMode::autoThemeChildControls(_hSelf); return TRUE; } diff --git a/PowerEditor/src/WinControls/DockingWnd/Docking.h b/PowerEditor/src/WinControls/DockingWnd/Docking.h index 5a2d6b222..998efb966 100644 --- a/PowerEditor/src/WinControls/DockingWnd/Docking.h +++ b/PowerEditor/src/WinControls/DockingWnd/Docking.h @@ -36,6 +36,7 @@ #define DWS_ICONTAB 0x00000001 // Icon for tabs are available #define DWS_ICONBAR 0x00000002 // Icon for icon bar are available (currently not supported) #define DWS_ADDINFO 0x00000004 // Additional information are in use +#define DWS_USEOWNDARKMODE 0x00000008 // Use plugin's own dark mode #define DWS_PARAMSALL (DWS_ICONTAB|DWS_ICONBAR|DWS_ADDINFO) // default docking values for first call of plugin diff --git a/PowerEditor/src/WinControls/DockingWnd/DockingManager.cpp b/PowerEditor/src/WinControls/DockingWnd/DockingManager.cpp index 2719307c8..db1e76d8b 100644 --- a/PowerEditor/src/WinControls/DockingWnd/DockingManager.cpp +++ b/PowerEditor/src/WinControls/DockingWnd/DockingManager.cpp @@ -572,6 +572,11 @@ void DockingManager::createDockableDlg(tTbData data, int iCont, bool isVisible) _vImageList.push_back(data.hClient); } + if ((data.uMask & DWS_USEOWNDARKMODE) != DWS_USEOWNDARKMODE && NppDarkMode::isEnabledForPlugins()) + { + NppDarkMode::autoSubclassAndThemePluginDockWindow(data.hClient); + } + // create additional containers if necessary RECT rc = {0,0,0,0}; DockingCont* pCont = NULL; diff --git a/PowerEditor/src/WinControls/FileBrowser/fileBrowser.cpp b/PowerEditor/src/WinControls/FileBrowser/fileBrowser.cpp index 8bbd26641..905e61a3b 100644 --- a/PowerEditor/src/WinControls/FileBrowser/fileBrowser.cpp +++ b/PowerEditor/src/WinControls/FileBrowser/fileBrowser.cpp @@ -102,9 +102,6 @@ intptr_t CALLBACK FileBrowser::run_dlgProc(UINT message, WPARAM wParam, LPARAM l int style = WS_CHILD | WS_VISIBLE | CCS_ADJUSTABLE | TBSTYLE_AUTOSIZE | TBSTYLE_FLAT | TBSTYLE_LIST | TBSTYLE_TRANSPARENT | BTNS_AUTOSIZE | BTNS_SEP | TBSTYLE_TOOLTIPS | TBSTYLE_CUSTOMERASE; _hToolbarMenu = CreateWindowEx(WS_EX_LAYOUTRTL, TOOLBARCLASSNAME, NULL, style, 0, 0, 0, 0, _hSelf, nullptr, _hInst, NULL); - NppDarkMode::setDarkTooltips(_hToolbarMenu, NppDarkMode::ToolTipsType::toolbar); - NppDarkMode::setDarkLineAbovePanelToolbar(_hToolbarMenu); - // Add the bmap image into toolbar's imagelist int iconSizeDyn = nppParam._dpiManager.scaleX(16); ::SendMessage(_hToolbarMenu, TB_SETBITMAPSIZE, 0, MAKELPARAM(iconSizeDyn, iconSizeDyn)); @@ -173,6 +170,9 @@ intptr_t CALLBACK FileBrowser::run_dlgProc(UINT message, WPARAM wParam, LPARAM l _treeView.makeLabelEditable(false); _treeView.display(); + NppDarkMode::autoSubclassAndThemeChildControls(_hSelf); + NppDarkMode::autoSubclassAndThemeWindowNotify(_hSelf); + return TRUE; } @@ -180,10 +180,7 @@ intptr_t CALLBACK FileBrowser::run_dlgProc(UINT message, WPARAM wParam, LPARAM l { if (static_cast(lParam) != TRUE) { - NppDarkMode::setDarkTooltips(_hToolbarMenu, NppDarkMode::ToolTipsType::toolbar); - NppDarkMode::setDarkLineAbovePanelToolbar(_hToolbarMenu); - - NppDarkMode::setDarkTooltips(_treeView.getHSelf(), NppDarkMode::ToolTipsType::treeview); + NppDarkMode::autoThemeChildControls(_hSelf); } NppDarkMode::setTreeViewStyle(_treeView.getHSelf()); return TRUE; @@ -675,14 +672,6 @@ void FileBrowser::notified(LPNMHDR notification) break; } } - else if (notification->code == NM_CUSTOMDRAW && (notification->hwndFrom == _hToolbarMenu)) - { - if (NppDarkMode::isEnabled()) - { - auto nmtbcd = reinterpret_cast(notification); - ::FillRect(nmtbcd->nmcd.hdc, &nmtbcd->nmcd.rc, NppDarkMode::getDarkerBackgroundBrush()); - } - } } BrowserNodeType FileBrowser::getNodeType(HTREEITEM hItem) diff --git a/PowerEditor/src/WinControls/FunctionList/functionListPanel.cpp b/PowerEditor/src/WinControls/FunctionList/functionListPanel.cpp index 29c068b7a..12c114b01 100644 --- a/PowerEditor/src/WinControls/FunctionList/functionListPanel.cpp +++ b/PowerEditor/src/WinControls/FunctionList/functionListPanel.cpp @@ -654,14 +654,6 @@ void FunctionListPanel::notified(LPNMHDR notification) { ::SendMessage(_hParent, WM_COMMAND, IDM_VIEW_FUNC_LIST, 0); } - else if (notification->code == NM_CUSTOMDRAW && (notification->hwndFrom == _hToolbarMenu)) - { - if (NppDarkMode::isEnabled()) - { - auto nmtbcd = reinterpret_cast(notification); - ::FillRect(nmtbcd->nmcd.hdc, &nmtbcd->nmcd.rc, NppDarkMode::getDarkerBackgroundBrush()); - } - } } void FunctionListPanel::searchFuncAndSwitchView() @@ -833,9 +825,6 @@ intptr_t CALLBACK FunctionListPanel::run_dlgProc(UINT message, WPARAM wParam, LP _hToolbarMenu = CreateWindowEx(0,TOOLBARCLASSNAME,NULL, style, 0,0,0,0,_hSelf,nullptr, _hInst, NULL); - NppDarkMode::setDarkTooltips(_hToolbarMenu, NppDarkMode::ToolTipsType::toolbar); - NppDarkMode::setDarkLineAbovePanelToolbar(_hToolbarMenu); - oldFunclstToolbarProc = reinterpret_cast(::SetWindowLongPtr(_hToolbarMenu, GWLP_WNDPROC, reinterpret_cast(funclstToolbarProc))); // Add the bmap image into toolbar's imagelist @@ -911,9 +900,12 @@ intptr_t CALLBACK FunctionListPanel::run_dlgProc(UINT message, WPARAM wParam, LP _treeViewSearchResult.setImageList(CX_BITMAP, 3, CY_BITMAP, IDI_FUNCLIST_ROOT, IDI_FUNCLIST_NODE, IDI_FUNCLIST_LEAF); _treeView.makeLabelEditable(false); - _treeView.display(); + + NppDarkMode::autoSubclassAndThemeChildControls(_hSelf); + NppDarkMode::autoSubclassAndThemeWindowNotify(_hSelf); + return TRUE; } @@ -921,10 +913,7 @@ intptr_t CALLBACK FunctionListPanel::run_dlgProc(UINT message, WPARAM wParam, LP { if (static_cast(lParam) != TRUE) { - NppDarkMode::setDarkTooltips(_hToolbarMenu, NppDarkMode::ToolTipsType::toolbar); - NppDarkMode::setDarkLineAbovePanelToolbar(_hToolbarMenu); - - NppDarkMode::setDarkTooltips(_treeView.getHSelf(), NppDarkMode::ToolTipsType::treeview); + NppDarkMode::autoThemeChildControls(_hSelf); } NppDarkMode::setTreeViewStyle(_treeView.getHSelf()); return TRUE; diff --git a/PowerEditor/src/WinControls/PluginsAdmin/pluginsAdmin.cpp b/PowerEditor/src/WinControls/PluginsAdmin/pluginsAdmin.cpp index f8f094ecf..f57e7db59 100644 --- a/PowerEditor/src/WinControls/PluginsAdmin/pluginsAdmin.cpp +++ b/PowerEditor/src/WinControls/PluginsAdmin/pluginsAdmin.cpp @@ -266,6 +266,9 @@ void PluginsAdminDlg::create(int dialogID, bool isRTL, bool msgDestParent) switchDialog(0); + NppDarkMode::autoSubclassAndThemeChildControls(_hSelf); + NppDarkMode::autoSubclassAndThemeWindowNotify(_hSelf); + goToCenter(); } @@ -1103,12 +1106,6 @@ intptr_t CALLBACK PluginsAdminDlg::run_dlgProc(UINT message, WPARAM wParam, LPAR { switch (message) { - case WM_INITDIALOG : - { - NppDarkMode::autoSubclassAndThemeChildControls(_hSelf); - return TRUE; - } - case WM_CTLCOLOREDIT: { if (NppDarkMode::isEnabled()) @@ -1156,11 +1153,6 @@ intptr_t CALLBACK PluginsAdminDlg::run_dlgProc(UINT message, WPARAM wParam, LPAR case NPPM_INTERNAL_REFRESHDARKMODE: { NppDarkMode::autoThemeChildControls(_hSelf); - - NppDarkMode::setDarkListView(_availableList.getViewHwnd()); - NppDarkMode::setDarkListView(_updateList.getViewHwnd()); - NppDarkMode::setDarkListView(_installedList.getViewHwnd()); - return TRUE; } diff --git a/PowerEditor/src/WinControls/Preference/preference.rc b/PowerEditor/src/WinControls/Preference/preference.rc index bfba2341d..bcada1f6d 100644 --- a/PowerEditor/src/WinControls/Preference/preference.rc +++ b/PowerEditor/src/WinControls/Preference/preference.rc @@ -108,6 +108,7 @@ STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD FONT 8, "MS Shell Dlg", 0, 0, 0x1 BEGIN CONTROL "Enable &dark mode",IDC_CHECK_DARKMODE_ENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,12,150,10 + CONTROL "Apply dark mode on plugins with docking window (requires Notepad++ restart)",IDC_CHECK_DARKMODE_PLUGIN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,165,12,270,10 GROUPBOX "Tones",IDC_DARKMODE_TONES_GB_STATIC,10,25,440,154,BS_CENTER CONTROL "Black",IDC_RADIO_DARKMODE_BLACK,"Button",BS_AUTORADIOBUTTON | WS_GROUP,15,35,80,10 CONTROL "Red",IDC_RADIO_DARKMODE_RED,"Button",BS_AUTORADIOBUTTON ,15,50,80,10 diff --git a/PowerEditor/src/WinControls/Preference/preferenceDlg.cpp b/PowerEditor/src/WinControls/Preference/preferenceDlg.cpp index 3989e29d6..631ed5512 100644 --- a/PowerEditor/src/WinControls/Preference/preferenceDlg.cpp +++ b/PowerEditor/src/WinControls/Preference/preferenceDlg.cpp @@ -1008,6 +1008,7 @@ intptr_t CALLBACK DarkModeSubDlg::run_dlgProc(UINT message, WPARAM wParam, LPARA case WM_INITDIALOG: { ::SendDlgItemMessage(_hSelf, IDC_CHECK_DARKMODE_ENABLE, BM_SETCHECK, nppGUI._darkmode._isEnabled, 0); + ::SendDlgItemMessage(_hSelf, IDC_CHECK_DARKMODE_PLUGIN, BM_SETCHECK, nppGUI._darkmode._isEnabledPlugin, 0); int id = IDC_RADIO_DARKMODE_BLACK; switch (nppGUI._darkmode._colorTone) @@ -1210,6 +1211,13 @@ intptr_t CALLBACK DarkModeSubDlg::run_dlgProc(UINT message, WPARAM wParam, LPARA } break; + case IDC_CHECK_DARKMODE_PLUGIN: + { + bool enableDarkModePlugin = isCheckedOrNot(static_cast(wParam)); + nppGUI._darkmode._isEnabledPlugin = enableDarkModePlugin; + } + break; + case IDC_RADIO_DARKMODE_BLACK: case IDC_RADIO_DARKMODE_RED: case IDC_RADIO_DARKMODE_GREEN: diff --git a/PowerEditor/src/WinControls/Preference/preference_rc.h b/PowerEditor/src/WinControls/Preference/preference_rc.h index b505a14c7..9a4f6c689 100644 --- a/PowerEditor/src/WinControls/Preference/preference_rc.h +++ b/PowerEditor/src/WinControls/Preference/preference_rc.h @@ -421,4 +421,5 @@ #define IDD_CUSTOMIZED_COLOR11_STATIC (IDD_PREFERENCE_SUB_DARKMODE + 26) #define IDD_CUSTOMIZED_RESET_BUTTON (IDD_PREFERENCE_SUB_DARKMODE + 30) #define IDC_DARKMODE_TONES_GB_STATIC (IDD_PREFERENCE_SUB_DARKMODE + 35) + #define IDC_CHECK_DARKMODE_PLUGIN (IDD_PREFERENCE_SUB_DARKMODE + 36) #endif //PREFERENCE_RC_H diff --git a/PowerEditor/src/WinControls/ProjectPanel/ProjectPanel.cpp b/PowerEditor/src/WinControls/ProjectPanel/ProjectPanel.cpp index ab30cd781..55bd5421b 100644 --- a/PowerEditor/src/WinControls/ProjectPanel/ProjectPanel.cpp +++ b/PowerEditor/src/WinControls/ProjectPanel/ProjectPanel.cpp @@ -52,9 +52,6 @@ intptr_t CALLBACK ProjectPanel::run_dlgProc(UINT message, WPARAM wParam, LPARAM _hToolbarMenu = CreateWindowEx(0,TOOLBARCLASSNAME,NULL, style, 0,0,0,0,_hSelf, nullptr, _hInst, nullptr); - NppDarkMode::setDarkLineAbovePanelToolbar(_hToolbarMenu); - NppDarkMode::disableVisualStyle(_hToolbarMenu, NppDarkMode::isEnabled()); - TBBUTTON tbButtons[2]; NativeLangSpeaker *pNativeSpeaker = (NppParameters::getInstance()).getNativeLangSpeaker(); @@ -92,6 +89,9 @@ intptr_t CALLBACK ProjectPanel::run_dlgProc(UINT message, WPARAM wParam, LPARAM if (!openWorkSpace(_workSpaceFilePath.c_str(), true)) newWorkSpace(); + NppDarkMode::autoSubclassAndThemeChildControls(_hSelf); + NppDarkMode::autoSubclassAndThemeWindowNotify(_hSelf); + return TRUE; } @@ -99,10 +99,7 @@ intptr_t CALLBACK ProjectPanel::run_dlgProc(UINT message, WPARAM wParam, LPARAM { if (static_cast(lParam) != TRUE) { - NppDarkMode::setDarkLineAbovePanelToolbar(_hToolbarMenu); - NppDarkMode::disableVisualStyle(_hToolbarMenu, NppDarkMode::isEnabled()); - - NppDarkMode::setDarkTooltips(_treeView.getHSelf(), NppDarkMode::ToolTipsType::treeview); + NppDarkMode::autoThemeChildControls(_hSelf); } NppDarkMode::setTreeViewStyle(_treeView.getHSelf()); return TRUE; @@ -749,17 +746,6 @@ void ProjectPanel::notified(LPNMHDR notification) break; } } - else if (notification->code == NM_CUSTOMDRAW && (notification->hwndFrom == _hToolbarMenu)) - { - if (NppDarkMode::isEnabled()) - { - auto nmtbcd = reinterpret_cast(notification); - ::FillRect(nmtbcd->nmcd.hdc, &nmtbcd->nmcd.rc, NppDarkMode::getDarkerBackgroundBrush()); - nmtbcd->clrText = NppDarkMode::getTextColor(); - nmtbcd->clrHighlightHotTrack = NppDarkMode::getHotBackgroundColor(); - SetWindowLongPtr(_hSelf, DWLP_MSGRESULT, CDRF_NOTIFYITEMDRAW | TBCDRF_HILITEHOTTRACK); - } - } } void ProjectPanel::setWorkSpaceDirty(bool isDirty) diff --git a/PowerEditor/src/WinControls/TreeView/TreeView.cpp b/PowerEditor/src/WinControls/TreeView/TreeView.cpp index ee3b9a0f4..97175b48e 100644 --- a/PowerEditor/src/WinControls/TreeView/TreeView.cpp +++ b/PowerEditor/src/WinControls/TreeView/TreeView.cpp @@ -44,7 +44,6 @@ void TreeView::init(HINSTANCE hInst, HWND parent, int treeViewID) nullptr); NppDarkMode::setTreeViewStyle(_hSelf); - NppDarkMode::setDarkTooltips(_hSelf, NppDarkMode::ToolTipsType::treeview); int itemHeight = NppParameters::getInstance()._dpiManager.scaleY(CY_ITEMHEIGHT); TreeView_SetItemHeight(_hSelf, itemHeight); diff --git a/PowerEditor/src/WinControls/VerticalFileSwitcher/VerticalFileSwitcher.cpp b/PowerEditor/src/WinControls/VerticalFileSwitcher/VerticalFileSwitcher.cpp index 92cdf9112..d29a3816a 100644 --- a/PowerEditor/src/WinControls/VerticalFileSwitcher/VerticalFileSwitcher.cpp +++ b/PowerEditor/src/WinControls/VerticalFileSwitcher/VerticalFileSwitcher.cpp @@ -77,13 +77,15 @@ intptr_t CALLBACK VerticalFileSwitcher::run_dlgProc(UINT message, WPARAM wParam, _fileListView.initList(); _fileListView.display(); + NppDarkMode::autoSubclassAndThemeChildControls(_hSelf); + NppDarkMode::autoSubclassAndThemeWindowNotify(_hSelf); + return TRUE; } case NPPM_INTERNAL_REFRESHDARKMODE: { - NppDarkMode::setDarkListView(_fileListView.getHSelf()); - NppDarkMode::setDarkTooltips(_fileListView.getHSelf(), NppDarkMode::ToolTipsType::listview); + NppDarkMode::autoThemeChildControls(_hSelf); return TRUE; } diff --git a/PowerEditor/src/WinControls/VerticalFileSwitcher/VerticalFileSwitcherListView.cpp b/PowerEditor/src/WinControls/VerticalFileSwitcher/VerticalFileSwitcherListView.cpp index 143e4bd60..f52c40bdf 100644 --- a/PowerEditor/src/WinControls/VerticalFileSwitcher/VerticalFileSwitcherListView.cpp +++ b/PowerEditor/src/WinControls/VerticalFileSwitcher/VerticalFileSwitcherListView.cpp @@ -51,9 +51,6 @@ void VerticalFileSwitcherListView::init(HINSTANCE hInst, HWND parent, HIMAGELIST throw std::runtime_error("VerticalFileSwitcherListView::init : CreateWindowEx() function return null"); } - NppDarkMode::setDarkListView(_hSelf); - NppDarkMode::setDarkTooltips(_hSelf, NppDarkMode::ToolTipsType::listview); - ::SetWindowLongPtr(_hSelf, GWLP_USERDATA, reinterpret_cast(this)); _defaultProc = reinterpret_cast(::SetWindowLongPtr(_hSelf, GWLP_WNDPROC, reinterpret_cast(staticProc))); @@ -80,36 +77,6 @@ void VerticalFileSwitcherListView::destroy() LRESULT VerticalFileSwitcherListView::runProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) { - switch (Message) - { - case WM_NOTIFY: - { - switch (reinterpret_cast(lParam)->code) - { - case NM_CUSTOMDRAW: - { - LPNMCUSTOMDRAW nmcd = reinterpret_cast(lParam); - switch (nmcd->dwDrawStage) - { - case CDDS_PREPAINT: - { - return CDRF_NOTIFYITEMDRAW; - } - - case CDDS_ITEMPREPAINT: - { - bool isDarkModeSupported = NppDarkMode::isEnabled() && NppDarkMode::isExperimentalSupported(); - SetTextColor(nmcd->hdc, isDarkModeSupported ? NppDarkMode::getDarkerTextColor() : GetSysColor(COLOR_BTNTEXT)); - return CDRF_DODEFAULT; - } - break; - } - } - break; - } - } - break; - } return ::CallWindowProc(_defaultProc, hwnd, Message, wParam, lParam); } diff --git a/PowerEditor/src/WinControls/WindowsDlg/WindowsDlg.cpp b/PowerEditor/src/WinControls/WindowsDlg/WindowsDlg.cpp index 3ba838171..64da0ad46 100644 --- a/PowerEditor/src/WinControls/WindowsDlg/WindowsDlg.cpp +++ b/PowerEditor/src/WinControls/WindowsDlg/WindowsDlg.cpp @@ -272,6 +272,7 @@ intptr_t CALLBACK WindowsDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM lP pNativeSpeaker->changeDlgLang(_hSelf, "Window"); NppDarkMode::autoSubclassAndThemeChildControls(_hSelf); + NppDarkMode::autoSubclassAndThemeWindowNotify(_hSelf); return MyBaseClass::run_dlgProc(message, wParam, lParam); } @@ -297,8 +298,7 @@ intptr_t CALLBACK WindowsDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM lP case NPPM_INTERNAL_REFRESHDARKMODE: { - NppDarkMode::autoThemeChildControls(getHSelf()); - NppDarkMode::setDarkListView(_hList); + NppDarkMode::autoThemeChildControls(_hSelf); return TRUE; } @@ -584,7 +584,6 @@ BOOL WindowsDlg::onInitDialog() exStyle |= LVS_EX_HEADERDRAGDROP|LVS_EX_FULLROWSELECT|LVS_EX_DOUBLEBUFFER; ListView_SetExtendedListViewStyle(_hList, exStyle); - NppDarkMode::setDarkListView(_hList); COLORREF fgColor = (NppParameters::getInstance()).getCurrentDefaultFgColor(); COLORREF bgColor = (NppParameters::getInstance()).getCurrentDefaultBgColor(); @@ -1115,36 +1114,6 @@ Buffer* WindowsDlg::getBuffer(int index) const LRESULT CALLBACK WindowsDlg::listViewProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) { - switch (Message) - { - case WM_NOTIFY: - { - switch (reinterpret_cast(lParam)->code) - { - case NM_CUSTOMDRAW: - { - LPNMCUSTOMDRAW nmcd = reinterpret_cast(lParam); - switch (nmcd->dwDrawStage) - { - case CDDS_PREPAINT: - { - return CDRF_NOTIFYITEMDRAW; - } - - case CDDS_ITEMPREPAINT: - { - bool isDarkModeSupported = NppDarkMode::isEnabled() && NppDarkMode::isExperimentalSupported(); - ::SetTextColor(nmcd->hdc, isDarkModeSupported ? NppDarkMode::getDarkerTextColor() : GetSysColor(COLOR_BTNTEXT)); - return CDRF_DODEFAULT; - } - break; - } - } - break; - } - } - break; - } return CallWindowProc(reinterpret_cast(originalListViewProc), hwnd, Message, wParam, lParam); }