From dbdeca5b288fd3acc81815982a67f3ce0576ef5b Mon Sep 17 00:00:00 2001 From: ozone10 Date: Thu, 13 Jun 2024 16:23:32 +0200 Subject: [PATCH] Add dark mode search results panel tab bar icon ref #14959 Close #15286 --- PowerEditor/src/Notepad_plus.rc | 4 ++- .../src/ScintillaComponent/FindReplaceDlg.cpp | 25 ++++++++++++++---- .../src/WinControls/DockingWnd/DockingCont.h | 8 ++++-- .../icons/dark/panels/tabbar/findResult.ico | Bin 0 -> 4472 bytes .../icons/light/panels/tabbar/findResult.ico | Bin 0 -> 4492 bytes .../panels/tabbar}/findResult.ico | Bin PowerEditor/src/resource.h | 3 ++- 7 files changed, 31 insertions(+), 9 deletions(-) create mode 100644 PowerEditor/src/icons/dark/panels/tabbar/findResult.ico create mode 100644 PowerEditor/src/icons/light/panels/tabbar/findResult.ico rename PowerEditor/src/icons/{ => standard/panels/tabbar}/findResult.ico (100%) diff --git a/PowerEditor/src/Notepad_plus.rc b/PowerEditor/src/Notepad_plus.rc index 4dba28f8f..5ec00c48e 100644 --- a/PowerEditor/src/Notepad_plus.rc +++ b/PowerEditor/src/Notepad_plus.rc @@ -286,7 +286,7 @@ IDI_READONLY_ALT_ICON ICON "icons/standard/tabbar/readonly_alt.ic IDI_MONITORING_ICON ICON "icons/standard/tabbar/monitoring.ico" IDI_MONITORING_DM_ICON ICON "icons/dark/tabbar/monitoring.ico" -IDI_FIND_RESULT_ICON ICON "icons/findResult.ico" +IDI_FIND_RESULT_ICON ICON "icons/standard/panels/tabbar/findResult.ico" IDC_DRAG_TAB CURSOR "cursors/drag.cur" IDC_DRAG_INTERDIT_TAB CURSOR "cursors/drag_interdit.cur" @@ -356,6 +356,8 @@ IDR_CLIPBOARDPANEL_ICO_DM ICON "icons/dark/panels/tabbar/clipboardP IDR_ASCIIPANEL_ICO ICON "icons/standard/panels/tabbar/asciiPanel.ico" IDR_ASCIIPANEL_ICO2 ICON "icons/light/panels/tabbar/asciiPanel.ico" IDR_ASCIIPANEL_ICO_DM ICON "icons/dark/panels/tabbar/asciiPanel.ico" +IDR_FIND_RESULT_ICO2 ICON "icons/light/panels/tabbar/findResult.ico" +IDR_FIND_RESULT_ICO_DM ICON "icons/dark/panels/tabbar/findResult.ico" IDI_PROJECT_WORKSPACE BITMAP "icons/standard/panels/treeview/project_work_space.bmp" diff --git a/PowerEditor/src/ScintillaComponent/FindReplaceDlg.cpp b/PowerEditor/src/ScintillaComponent/FindReplaceDlg.cpp index ae0f867f8..383a9f333 100644 --- a/PowerEditor/src/ScintillaComponent/FindReplaceDlg.cpp +++ b/PowerEditor/src/ScintillaComponent/FindReplaceDlg.cpp @@ -3507,6 +3507,8 @@ void FindReplaceDlg::findAllIn(InWhat op) bool justCreated = false; if (!_pFinder) { + NppParameters& nppParam = NppParameters::getInstance(); + _pFinder = new Finder(); _pFinder->init(_hInst, (*_ppEditView)->getHParent(), _ppEditView); _pFinder->setVolatiled(false); @@ -3517,8 +3519,14 @@ void FindReplaceDlg::findAllIn(InWhat op) // define the default docking behaviour data.uMask = DWS_DF_CONT_BOTTOM | DWS_ICONTAB | DWS_ADDINFO | DWS_USEOWNDARKMODE; + int icoID = IDI_FIND_RESULT_ICON; + if (NppDarkMode::isEnabled()) + icoID = IDR_FIND_RESULT_ICO_DM; + else if (nppParam.getNppGUI()._toolBarStatus != TB_STANDARD) + icoID = IDR_FIND_RESULT_ICO2; + const int iconSize = DPIManagerV2::scale(g_dockingContTabIconSize, _pFinder->getHSelf()); - DPIManagerV2::loadIcon(_hInst, MAKEINTRESOURCE(IDI_FIND_RESULT_ICON), iconSize, iconSize, &data.hIconTab, LR_LOADMAP3DCOLORS | LR_LOADTRANSPARENT); + DPIManagerV2::loadIcon(_hInst, MAKEINTRESOURCE(icoID), iconSize, iconSize, &data.hIconTab, LR_LOADMAP3DCOLORS | LR_LOADTRANSPARENT); data.pszAddInfo = _findAllResultStr; @@ -3528,7 +3536,7 @@ void FindReplaceDlg::findAllIn(InWhat op) // in this case is DOCKABLE_DEMO_INDEX data.dlgID = 0; - NativeLangSpeaker *pNativeSpeaker = (NppParameters::getInstance()).getNativeLangSpeaker(); + NativeLangSpeaker *pNativeSpeaker = nppParam.getNativeLangSpeaker(); generic_string text = pNativeSpeaker->getLocalizedStrFromID("find-result-caption", TEXT("")); if (!text.empty()) @@ -3554,7 +3562,6 @@ void FindReplaceDlg::findAllIn(InWhat op) _pFinder->_scintView.execute(SCI_SETUSETABS, true); _pFinder->_scintView.execute(SCI_SETTABWIDTH, 4); - NppParameters& nppParam = NppParameters::getInstance(); NppGUI& nppGUI = nppParam.getNppGUI(); _pFinder->_longLinesAreWrapped = nppGUI._finderLinesAreCurrentlyWrapped; _pFinder->_scintView.wrap(_pFinder->_longLinesAreWrapped); @@ -3647,6 +3654,8 @@ void FindReplaceDlg::findAllIn(InWhat op) Finder * FindReplaceDlg::createFinder() { + NppParameters& nppParam = NppParameters::getInstance(); + Finder *pFinder = new Finder(); pFinder->init(_hInst, (*_ppEditView)->getHParent(), _ppEditView); @@ -3657,8 +3666,14 @@ Finder * FindReplaceDlg::createFinder() // define the default docking behaviour data.uMask = DWS_DF_CONT_BOTTOM | DWS_ICONTAB | DWS_ADDINFO | DWS_USEOWNDARKMODE; + int icoID = IDI_FIND_RESULT_ICON; + if (NppDarkMode::isEnabled()) + icoID = IDR_FIND_RESULT_ICO_DM; + else if (nppParam.getNppGUI()._toolBarStatus != TB_STANDARD) + icoID = IDR_FIND_RESULT_ICO2; + const int iconSize = DPIManagerV2::scale(g_dockingContTabIconSize, _pFinder->getHSelf()); - DPIManagerV2::loadIcon(_hInst, MAKEINTRESOURCE(IDI_FIND_RESULT_ICON), iconSize, iconSize, &data.hIconTab, LR_LOADMAP3DCOLORS | LR_LOADTRANSPARENT); + DPIManagerV2::loadIcon(_hInst, MAKEINTRESOURCE(icoID), iconSize, iconSize, &data.hIconTab, LR_LOADMAP3DCOLORS | LR_LOADTRANSPARENT); data.pszAddInfo = _findAllResultStr; @@ -3668,7 +3683,7 @@ Finder * FindReplaceDlg::createFinder() // in this case is DOCKABLE_DEMO_INDEX data.dlgID = 0; - NativeLangSpeaker *pNativeSpeaker = (NppParameters::getInstance()).getNativeLangSpeaker(); + NativeLangSpeaker *pNativeSpeaker = nppParam.getNativeLangSpeaker(); generic_string text = pNativeSpeaker->getLocalizedStrFromID("find-result-caption", TEXT("")); if (!text.empty()) { diff --git a/PowerEditor/src/WinControls/DockingWnd/DockingCont.h b/PowerEditor/src/WinControls/DockingWnd/DockingCont.h index 30c566ebd..9b607ae18 100644 --- a/PowerEditor/src/WinControls/DockingWnd/DockingCont.h +++ b/PowerEditor/src/WinControls/DockingWnd/DockingCont.h @@ -119,10 +119,14 @@ public: updateCaption(); }; - void destroy() override{ + void destroy() override { for (auto& tTbData : _vTbData) { - ::DestroyIcon(tTbData->hIconTab); + if (tTbData->hIconTab != nullptr) + { + ::DestroyIcon(tTbData->hIconTab); + tTbData->hIconTab = nullptr; + } delete tTbData; } ::DestroyWindow(_hSelf); diff --git a/PowerEditor/src/icons/dark/panels/tabbar/findResult.ico b/PowerEditor/src/icons/dark/panels/tabbar/findResult.ico new file mode 100644 index 0000000000000000000000000000000000000000..b1109a5fa88359522415141b15f4f8cfad4441f7 GIT binary patch literal 4472 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