Refactor fluent icon color feature code

- fix visual glitches when toggling dark mode
- make english names consistent

Close #16435
This commit is contained in:
ozone10 2025-04-16 18:47:20 +02:00 committed by Don Ho
parent 331030ce66
commit d5b5e5e107
11 changed files with 439 additions and 395 deletions

View File

@ -689,11 +689,8 @@ LRESULT Notepad_plus::init(HWND hwnd)
//-- Tool Bar Section --// //-- Tool Bar Section --//
const NppDarkMode::TbIconInfo toolbarIconInfo = NppDarkMode::getToolbarIconInfo(); nppGUI._tbIconInfo = NppDarkMode::getToolbarIconInfo();
nppGUI._tbIconInfo = toolbarIconInfo; toolBarStatusType tbStatus = nppGUI._tbIconInfo._tbIconSet;
nppGUI._toolBarStatus = static_cast<toolBarStatusType>(nppGUI._tbIconInfo._tbIconSet);
toolBarStatusType tbStatus = nppGUI._toolBarStatus;
willBeShown = nppGUI._toolbarShow; willBeShown = nppGUI._toolbarShow;
// To notify plugins that toolbar icons can be registered // To notify plugins that toolbar icons can be registered
@ -893,7 +890,7 @@ bool Notepad_plus::saveGUIParams()
NppParameters& nppParams = NppParameters::getInstance(); NppParameters& nppParams = NppParameters::getInstance();
NppGUI & nppGUI = nppParams.getNppGUI(); NppGUI & nppGUI = nppParams.getNppGUI();
nppGUI._toolbarShow = _rebarTop.getIDVisible(REBAR_BAR_TOOLBAR); nppGUI._toolbarShow = _rebarTop.getIDVisible(REBAR_BAR_TOOLBAR);
nppGUI._toolBarStatus = _toolBar.getState(); nppGUI._tbIconInfo._tbIconSet = _toolBar.getState();
nppGUI._splitterPos = _subSplitter.isVertical()?POS_VERTICAL:POS_HORIZOTAL; nppGUI._splitterPos = _subSplitter.isVertical()?POS_VERTICAL:POS_HORIZOTAL;
UserDefineDialog *udd = _pEditView->getUserDefineDlg(); UserDefineDialog *udd = _pEditView->getUserDefineDlg();
@ -7290,11 +7287,11 @@ void Notepad_plus::launchClipboardHistoryPanel()
// define the default docking behaviour // define the default docking behaviour
data.uMask = DWS_DF_CONT_RIGHT | DWS_ICONTAB | DWS_USEOWNDARKMODE; data.uMask = DWS_DF_CONT_RIGHT | DWS_ICONTAB | DWS_USEOWNDARKMODE;
int icoID = IDR_CLIPBOARDPANEL_ICO; int icoID = IDR_CLIPBOARDPANEL_ICO2;
if (NppDarkMode::isEnabled()) if (nppParams.getNppGUI()._tbIconInfo._tbIconSet == TB_STANDARD)
icoID = IDR_CLIPBOARDPANEL_ICO;
else if (NppDarkMode::isEnabled())
icoID = IDR_CLIPBOARDPANEL_ICO_DM; icoID = IDR_CLIPBOARDPANEL_ICO_DM;
else if (nppParams.getNppGUI()._toolBarStatus != TB_STANDARD)
icoID = IDR_CLIPBOARDPANEL_ICO2;
const int iconSize = DPIManagerV2::scale(g_dockingContTabIconSize, _pClipboardHistoryPanel->getHSelf()); const int iconSize = DPIManagerV2::scale(g_dockingContTabIconSize, _pClipboardHistoryPanel->getHSelf());
DPIManagerV2::loadIcon(_pPublicInterface->getHinst(), MAKEINTRESOURCE(icoID), iconSize, iconSize, &data.hIconTab, LR_LOADMAP3DCOLORS | LR_LOADTRANSPARENT); DPIManagerV2::loadIcon(_pPublicInterface->getHinst(), MAKEINTRESOURCE(icoID), iconSize, iconSize, &data.hIconTab, LR_LOADMAP3DCOLORS | LR_LOADTRANSPARENT);
@ -7354,11 +7351,11 @@ void Notepad_plus::launchDocumentListPanel(bool changeFromBtnCmd)
// define the default docking behaviour // define the default docking behaviour
data.uMask = DWS_DF_CONT_LEFT | DWS_ICONTAB | DWS_USEOWNDARKMODE; data.uMask = DWS_DF_CONT_LEFT | DWS_ICONTAB | DWS_USEOWNDARKMODE;
int icoID = IDR_DOCLIST_ICO; int icoID = IDR_DOCLIST_ICO2;
if (NppDarkMode::isEnabled()) if (nppParams.getNppGUI()._tbIconInfo._tbIconSet == TB_STANDARD)
icoID = IDR_DOCLIST_ICO;
else if (NppDarkMode::isEnabled())
icoID = IDR_DOCLIST_ICO_DM; icoID = IDR_DOCLIST_ICO_DM;
else if (nppParams.getNppGUI()._toolBarStatus != TB_STANDARD)
icoID = IDR_DOCLIST_ICO2;
const int iconSize = DPIManagerV2::scale(g_dockingContTabIconSize, _pDocumentListPanel->getHSelf()); const int iconSize = DPIManagerV2::scale(g_dockingContTabIconSize, _pDocumentListPanel->getHSelf());
DPIManagerV2::loadIcon(_pPublicInterface->getHinst(), MAKEINTRESOURCE(icoID), iconSize, iconSize, &data.hIconTab, LR_LOADMAP3DCOLORS | LR_LOADTRANSPARENT); DPIManagerV2::loadIcon(_pPublicInterface->getHinst(), MAKEINTRESOURCE(icoID), iconSize, iconSize, &data.hIconTab, LR_LOADMAP3DCOLORS | LR_LOADTRANSPARENT);
@ -7442,11 +7439,11 @@ void Notepad_plus::launchAnsiCharPanel()
// define the default docking behaviour // define the default docking behaviour
data.uMask = DWS_DF_CONT_RIGHT | DWS_ICONTAB | DWS_USEOWNDARKMODE; data.uMask = DWS_DF_CONT_RIGHT | DWS_ICONTAB | DWS_USEOWNDARKMODE;
int icoID = IDR_ASCIIPANEL_ICO; int icoID = IDR_ASCIIPANEL_ICO2;
if (NppDarkMode::isEnabled()) if (nppParams.getNppGUI()._tbIconInfo._tbIconSet == TB_STANDARD)
icoID = IDR_ASCIIPANEL_ICO;
else if (NppDarkMode::isEnabled())
icoID = IDR_ASCIIPANEL_ICO_DM; icoID = IDR_ASCIIPANEL_ICO_DM;
else if (nppParams.getNppGUI()._toolBarStatus != TB_STANDARD)
icoID = IDR_ASCIIPANEL_ICO2;
const int iconSize = DPIManagerV2::scale(g_dockingContTabIconSize, _pAnsiCharPanel->getHSelf()); const int iconSize = DPIManagerV2::scale(g_dockingContTabIconSize, _pAnsiCharPanel->getHSelf());
DPIManagerV2::loadIcon(_pPublicInterface->getHinst(), MAKEINTRESOURCE(icoID), iconSize, iconSize, &data.hIconTab, LR_LOADMAP3DCOLORS | LR_LOADTRANSPARENT); DPIManagerV2::loadIcon(_pPublicInterface->getHinst(), MAKEINTRESOURCE(icoID), iconSize, iconSize, &data.hIconTab, LR_LOADMAP3DCOLORS | LR_LOADTRANSPARENT);
@ -7494,11 +7491,11 @@ void Notepad_plus::launchFileBrowser(const vector<wstring> & folders, const wstr
// define the default docking behaviour // define the default docking behaviour
data.uMask = DWS_DF_CONT_LEFT | DWS_ICONTAB | DWS_USEOWNDARKMODE; data.uMask = DWS_DF_CONT_LEFT | DWS_ICONTAB | DWS_USEOWNDARKMODE;
int icoID = IDR_FILEBROWSER_ICO; int icoID = IDR_FILEBROWSER_ICO2;
if (NppDarkMode::isEnabled()) if (nppParams.getNppGUI()._tbIconInfo._tbIconSet == TB_STANDARD)
icoID = IDR_FILEBROWSER_ICO;
else if (NppDarkMode::isEnabled())
icoID = IDR_FILEBROWSER_ICO_DM; icoID = IDR_FILEBROWSER_ICO_DM;
else if (nppParams.getNppGUI()._toolBarStatus != TB_STANDARD)
icoID = IDR_FILEBROWSER_ICO2;
const int iconSize = DPIManagerV2::scale(g_dockingContTabIconSize, _pFileBrowser->getHSelf()); const int iconSize = DPIManagerV2::scale(g_dockingContTabIconSize, _pFileBrowser->getHSelf());
DPIManagerV2::loadIcon(_pPublicInterface->getHinst(), MAKEINTRESOURCE(icoID), iconSize, iconSize, &data.hIconTab, LR_LOADMAP3DCOLORS | LR_LOADTRANSPARENT); DPIManagerV2::loadIcon(_pPublicInterface->getHinst(), MAKEINTRESOURCE(icoID), iconSize, iconSize, &data.hIconTab, LR_LOADMAP3DCOLORS | LR_LOADTRANSPARENT);
@ -7604,11 +7601,11 @@ void Notepad_plus::launchProjectPanel(int cmdID, ProjectPanel ** pProjPanel, int
// define the default docking behaviour // define the default docking behaviour
data.uMask = DWS_DF_CONT_LEFT | DWS_ICONTAB | DWS_USEOWNDARKMODE; data.uMask = DWS_DF_CONT_LEFT | DWS_ICONTAB | DWS_USEOWNDARKMODE;
int icoID = IDR_PROJECTPANEL_ICO; int icoID = IDR_PROJECTPANEL_ICO2;
if (NppDarkMode::isEnabled()) if (nppParam.getNppGUI()._tbIconInfo._tbIconSet == TB_STANDARD)
icoID = IDR_PROJECTPANEL_ICO;
else if (NppDarkMode::isEnabled())
icoID = IDR_PROJECTPANEL_ICO_DM; icoID = IDR_PROJECTPANEL_ICO_DM;
else if (nppParam.getNppGUI()._toolBarStatus != TB_STANDARD)
icoID = IDR_PROJECTPANEL_ICO2;
const int iconSize = DPIManagerV2::scale(g_dockingContTabIconSize, (*pProjPanel)->getHSelf()); const int iconSize = DPIManagerV2::scale(g_dockingContTabIconSize, (*pProjPanel)->getHSelf());
DPIManagerV2::loadIcon(_pPublicInterface->getHinst(), MAKEINTRESOURCE(icoID), iconSize, iconSize, &data.hIconTab, LR_LOADMAP3DCOLORS | LR_LOADTRANSPARENT); DPIManagerV2::loadIcon(_pPublicInterface->getHinst(), MAKEINTRESOURCE(icoID), iconSize, iconSize, &data.hIconTab, LR_LOADMAP3DCOLORS | LR_LOADTRANSPARENT);
@ -7670,11 +7667,11 @@ void Notepad_plus::launchDocMap()
// define the default docking behaviour // define the default docking behaviour
data.uMask = DWS_DF_CONT_RIGHT | DWS_ICONTAB | DWS_USEOWNDARKMODE; data.uMask = DWS_DF_CONT_RIGHT | DWS_ICONTAB | DWS_USEOWNDARKMODE;
int icoID = IDR_DOCMAP_ICO; int icoID = IDR_DOCMAP_ICO2;
if (NppDarkMode::isEnabled()) if (nppParam.getNppGUI()._tbIconInfo._tbIconSet == TB_STANDARD)
icoID = IDR_DOCMAP_ICO;
else if (NppDarkMode::isEnabled())
icoID = IDR_DOCMAP_ICO_DM; icoID = IDR_DOCMAP_ICO_DM;
else if (nppParam.getNppGUI()._toolBarStatus != TB_STANDARD)
icoID = IDR_DOCMAP_ICO2;
const int iconSize = DPIManagerV2::scale(g_dockingContTabIconSize, _pDocMap->getHSelf()); const int iconSize = DPIManagerV2::scale(g_dockingContTabIconSize, _pDocMap->getHSelf());
DPIManagerV2::loadIcon(_pPublicInterface->getHinst(), MAKEINTRESOURCE(icoID), iconSize, iconSize, &data.hIconTab, LR_LOADMAP3DCOLORS | LR_LOADTRANSPARENT); DPIManagerV2::loadIcon(_pPublicInterface->getHinst(), MAKEINTRESOURCE(icoID), iconSize, iconSize, &data.hIconTab, LR_LOADMAP3DCOLORS | LR_LOADTRANSPARENT);
@ -7721,11 +7718,11 @@ void Notepad_plus::launchFunctionList()
NppParameters& nppParam = NppParameters::getInstance(); NppParameters& nppParam = NppParameters::getInstance();
int icoID = IDR_FUNC_LIST_ICO; int icoID = IDR_FUNC_LIST_ICO2;
if (NppDarkMode::isEnabled()) if (nppParam.getNppGUI()._tbIconInfo._tbIconSet == TB_STANDARD)
icoID = IDR_FUNC_LIST_ICO;
else if (NppDarkMode::isEnabled())
icoID = IDR_FUNC_LIST_ICO_DM; icoID = IDR_FUNC_LIST_ICO_DM;
else if (nppParam.getNppGUI()._toolBarStatus != TB_STANDARD)
icoID = IDR_FUNC_LIST_ICO2;
const int iconSize = DPIManagerV2::scale(g_dockingContTabIconSize, _pFuncList->getHSelf()); const int iconSize = DPIManagerV2::scale(g_dockingContTabIconSize, _pFuncList->getHSelf());
DPIManagerV2::loadIcon(_pPublicInterface->getHinst(), MAKEINTRESOURCE(icoID), iconSize, iconSize, &data.hIconTab, LR_LOADMAP3DCOLORS | LR_LOADTRANSPARENT); DPIManagerV2::loadIcon(_pPublicInterface->getHinst(), MAKEINTRESOURCE(icoID), iconSize, iconSize, &data.hIconTab, LR_LOADMAP3DCOLORS | LR_LOADTRANSPARENT);
@ -8521,13 +8518,10 @@ void Notepad_plus::refreshDarkMode(bool resetStyle)
} }
} }
toolBarStatusType state = TB_STANDARD;
auto& nppGUITbInfo = nppParams.getNppGUI()._tbIconInfo; auto& nppGUITbInfo = nppParams.getNppGUI()._tbIconInfo;
const NppDarkMode::TbIconInfo toolbarIconInfo = NppDarkMode::getToolbarIconInfo(); nppGUITbInfo = NppDarkMode::getToolbarIconInfo();
nppGUITbInfo = toolbarIconInfo;
state = static_cast<toolBarStatusType>(nppGUITbInfo._tbIconSet);
switch (state) switch (nppGUITbInfo._tbIconSet)
{ {
case TB_SMALL: case TB_SMALL:
_toolBar.reduce(); _toolBar.reduce();

View File

@ -322,13 +322,10 @@ LRESULT Notepad_plus::process(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa
nppGUI._darkmode._isEnabled = enableDarkMode; nppGUI._darkmode._isEnabled = enableDarkMode;
if (!_preference.isCreated()) if (!_preference.isCreated())
{ {
toolBarStatusType state = TB_STANDARD;
auto& nppGUITbInfo = nppGUI._tbIconInfo; auto& nppGUITbInfo = nppGUI._tbIconInfo;
const NppDarkMode::TbIconInfo toolbarIconInfo = NppDarkMode::getToolbarIconInfo(); nppGUITbInfo = NppDarkMode::getToolbarIconInfo();
nppGUITbInfo = toolbarIconInfo;
state = static_cast<toolBarStatusType>(nppGUITbInfo._tbIconSet);
switch (state) switch (nppGUITbInfo._tbIconSet)
{ {
case TB_SMALL: case TB_SMALL:
_toolBar.reduce(); _toolBar.reduce();

View File

@ -34,7 +34,6 @@
#ifdef __GNUC__ #ifdef __GNUC__
#include <cmath> #include <cmath>
#include <memory>
#define WINAPI_LAMBDA WINAPI #define WINAPI_LAMBDA WINAPI
#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE #ifndef DWMWA_USE_IMMERSIVE_DARK_MODE
#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 #define DWMWA_USE_IMMERSIVE_DARK_MODE 20
@ -377,7 +376,7 @@ namespace NppDarkMode
} }
static Options _options; // actual runtime options static Options _options; // actual runtime options
static AdvancedOptions g_advOptions; static ::AdvancedOptions g_advOptions;
static Options configuredOptions() static Options configuredOptions()
{ {
@ -578,7 +577,7 @@ namespace NppDarkMode
: g_advOptions._lightDefaults._tbIconInfo; : g_advOptions._lightDefaults._tbIconInfo;
if (toolbarInfo._tbCustomColor == 0) if (toolbarInfo._tbCustomColor == 0)
toolbarInfo._tbCustomColor = NppDarkMode::getAccentColor(); toolbarInfo._tbCustomColor = NppDarkMode::getAccentColor(useDark);
return toolbarInfo; return toolbarInfo;
} }
@ -591,9 +590,9 @@ namespace NppDarkMode
void setToolbarIconSet(int state2Set, bool useDark) void setToolbarIconSet(int state2Set, bool useDark)
{ {
if (useDark) if (useDark)
g_advOptions._darkDefaults._tbIconInfo._tbIconSet = state2Set; g_advOptions._darkDefaults._tbIconInfo._tbIconSet = static_cast<toolBarStatusType>(state2Set);
else else
g_advOptions._lightDefaults._tbIconInfo._tbIconSet = state2Set; g_advOptions._lightDefaults._tbIconInfo._tbIconSet = static_cast<toolBarStatusType>(state2Set);
} }
void setToolbarIconSet(int state2Set) void setToolbarIconSet(int state2Set)
@ -721,9 +720,14 @@ namespace NppDarkMode
return lightness; return lightness;
} }
COLORREF getAccentColor(bool useDark)
{
return useDark ? cAccentDark : cAccentLight;
}
COLORREF getAccentColor() COLORREF getAccentColor()
{ {
return NppDarkMode::isEnabled() ? cAccentDark : cAccentLight; return getAccentColor(NppDarkMode::isEnabled());
} }
COLORREF getBackgroundColor() { return getTheme()._colors.background; } COLORREF getBackgroundColor() { return getTheme()._colors.background; }
@ -3856,204 +3860,4 @@ namespace NppDarkMode
} }
return NppDarkMode::onCtlColor(hdc); return NppDarkMode::onCtlColor(hdc);
} }
bool changeFluentIconColor(HICON* phIcon, const std::vector<std::pair<COLORREF, COLORREF>>& colorMappings, int tolerance)
{
if (!*phIcon)
{
return false;
}
HDC hdcScreen = nullptr;
HDC hdcBitmap = nullptr;
BITMAP bm{};
ICONINFO ii{};
HBITMAP hbmNew = nullptr;
std::unique_ptr<RGBQUAD[]> pixels;
const bool changeEverything = colorMappings[0].first == 0;
auto cleanup = [&]()
{
if (hdcScreen) ::ReleaseDC(nullptr, hdcScreen);
if (hdcBitmap) ::DeleteDC(hdcBitmap);
if (ii.hbmColor) ::DeleteObject(ii.hbmColor);
if (ii.hbmMask) ::DeleteObject(ii.hbmMask);
if (hbmNew) ::DeleteObject(hbmNew);
};
hdcScreen = ::GetDC(nullptr);
hdcBitmap = ::CreateCompatibleDC(nullptr);
if (!hdcScreen || !hdcBitmap || !::GetIconInfo(*phIcon, &ii) || !ii.hbmColor || !::GetObject(ii.hbmColor, sizeof(BITMAP), &bm))
{
cleanup();
return false;
}
BITMAPINFO bmi{};
bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmi.bmiHeader.biWidth = bm.bmWidth;
bmi.bmiHeader.biHeight = -bm.bmHeight; // Top-down bitmap
bmi.bmiHeader.biPlanes = 1;
bmi.bmiHeader.biBitCount = 32;
bmi.bmiHeader.biCompression = BI_RGB;
pixels = std::make_unique<RGBQUAD[]>(static_cast<size_t>(bm.bmWidth) * bm.bmHeight);
if (!pixels || !::GetDIBits(hdcBitmap, ii.hbmColor, 0, bm.bmHeight, pixels.get(), &bmi, DIB_RGB_COLORS))
{
cleanup();
return false;
}
for (int i = 0; i < bm.bmWidth * bm.bmHeight; i++)
{
if (pixels[i].rgbReserved != 0) // Modify non-transparent pixels
{
if (changeEverything)
{
COLORREF cNew = colorMappings[0].second == 0 ? NppDarkMode::getAccentColor() : colorMappings[0].second;
pixels[i].rgbRed = GetRValue(cNew);
pixels[i].rgbGreen = GetGValue(cNew);
pixels[i].rgbBlue = GetBValue(cNew);
}
else
{
for (const auto& [cToChange, cNew] : colorMappings)
{
if (std::abs(pixels[i].rgbRed - GetRValue(cToChange)) <= tolerance &&
std::abs(pixels[i].rgbGreen - GetGValue(cToChange)) <= tolerance &&
std::abs(pixels[i].rgbBlue - GetBValue(cToChange)) <= tolerance)
{
COLORREF finalNewColor = (cNew == 0) ? NppDarkMode::getAccentColor() : cNew;
pixels[i].rgbRed = GetRValue(finalNewColor);
pixels[i].rgbGreen = GetGValue(finalNewColor);
pixels[i].rgbBlue = GetBValue(finalNewColor);
break;
}
}
}
}
}
hbmNew = ::CreateCompatibleBitmap(hdcScreen, bm.bmWidth, bm.bmHeight);
if (!hbmNew || !::SetDIBits(hdcBitmap, hbmNew, 0, bm.bmHeight, pixels.get(), &bmi, DIB_RGB_COLORS))
{
cleanup();
return false;
}
if (ii.hbmColor)
{
::DeleteObject(ii.hbmColor);
ii.hbmColor = nullptr;
}
ii.hbmColor = hbmNew;
HICON hIconNew = ::CreateIconIndirect(&ii);
if (!hIconNew)
{
cleanup();
return false;
}
::DestroyIcon(*phIcon);
*phIcon = hIconNew;
cleanup();
return true;
}
bool changeFluentIconColor(HICON* phIcon)
{
const auto cMain = NppDarkMode::isEnabled() ? cDefaultMainDark : cDefaultMainLight;
const auto cSecondary = NppDarkMode::isEnabled() ? cDefaultSecondaryDark : cDefaultSecondaryLight;
std::vector<std::pair<COLORREF, COLORREF>> colorMappings;
NppParameters& nppParams = NppParameters::getInstance();
const auto& tbInfo = nppParams.getNppGUI()._tbIconInfo;
COLORREF cOld = tbInfo._tbUseMono ? 0 : cSecondary;
COLORREF cNew = 0;
switch (tbInfo._tbColor)
{
case FluentColor::accent:
{
cNew = 0;
break;
}
case FluentColor::red:
{
cNew = RGB(0xE8, 0x11, 0x23);
break;
}
case FluentColor::green:
{
cNew = RGB(0x00, 0x8B, 0x00);
break;
}
case FluentColor::blue:
{
cNew = RGB(0x00, 0x78, 0xD4);
break;
}
case FluentColor::purple:
{
cNew = RGB(0xB1, 0x46, 0xC2);
break;
}
case FluentColor::cyan:
{
cNew = RGB(0x00, 0xB7, 0xC3);
break;
}
case FluentColor::olive:
{
cNew = RGB(0x49, 0x82, 0x05);
break;
}
case FluentColor::yellow:
{
cNew = RGB(0xFF, 0xB9, 0x00);
break;
}
case FluentColor::custom:
{
if (tbInfo._tbCustomColor != 0)
{
cNew = tbInfo._tbCustomColor;
break;
}
[[fallthrough]];
}
case FluentColor::defaultColor:
{
if (tbInfo._tbUseMono)
{
cNew = cMain;
break;
}
[[fallthrough]];
}
default:
{
return false;
}
}
colorMappings = { {cOld, cNew} };
return NppDarkMode::changeFluentIconColor(phIcon, colorMappings);
}
} }

View File

@ -17,9 +17,11 @@
#pragma once #pragma once
#include <string> #include <string>
#include <vector>
#include <windows.h> #include <windows.h>
enum class FluentColor;
struct TbIconInfo;
struct AdvancedOptions;
namespace NppDarkMode namespace NppDarkMode
{ {
@ -80,52 +82,6 @@ namespace NppDarkMode
dark = 2 dark = 2
}; };
enum class FluentColor
{
defaultColor = 0,
accent = 1,
red = 2,
green = 3,
blue = 4,
purple = 5,
cyan = 6,
olive = 7,
yellow = 8,
custom = 9,
maxValue = 10
};
struct TbIconInfo
{
// 0: Fluent small, 1: Fluent big, 2: Filled Fluent small, 3: Filled Fluent big, 4: Standard small
int _tbIconSet = 4;
// fluent icon color
FluentColor _tbColor = FluentColor::defaultColor;
// fluent icon custom color, used when _tbColor == FluentColor::custom
COLORREF _tbCustomColor = 0;
// does fluent icon use monochrome colorization
bool _tbUseMono = false;
};
struct AdvOptDefaults
{
std::wstring _xmlFileName;
TbIconInfo _tbIconInfo{};
int _tabIconSet = -1;
bool _tabUseTheme = false;
};
struct AdvancedOptions
{
bool _enableWindowsMode = false;
NppDarkMode::AdvOptDefaults _darkDefaults{ L"DarkModeDefault.xml", {0, FluentColor::defaultColor, 0, false}, 2, false};
NppDarkMode::AdvOptDefaults _lightDefaults{ L"", { 4, FluentColor::defaultColor, 0, false }, 0, true };
};
constexpr UINT WM_SETBUTTONIDEALSIZE = (WM_USER + 4200); constexpr UINT WM_SETBUTTONIDEALSIZE = (WM_USER + 4200);
void initDarkMode(); // pulls options from NppParameters void initDarkMode(); // pulls options from NppParameters
@ -167,6 +123,7 @@ namespace NppDarkMode
void setDarkTone(ColorTone colorToneChoice); void setDarkTone(ColorTone colorToneChoice);
COLORREF getAccentColor(bool useDark);
COLORREF getAccentColor(); COLORREF getAccentColor();
COLORREF getBackgroundColor(); COLORREF getBackgroundColor();
@ -281,7 +238,4 @@ namespace NppDarkMode
LRESULT onCtlColorError(HDC hdc); LRESULT onCtlColorError(HDC hdc);
LRESULT onCtlColorDlgStaticText(HDC hdc, bool isTextEnabled); LRESULT onCtlColorDlgStaticText(HDC hdc, bool isTextEnabled);
LRESULT onCtlColorListbox(WPARAM wParam, LPARAM lParam); LRESULT onCtlColorListbox(WPARAM wParam, LPARAM lParam);
bool changeFluentIconColor(HICON* phIcon, const std::vector<std::pair<COLORREF, COLORREF>>& colorMappings, int tolerance = 3);
bool changeFluentIconColor(HICON* phIcon);
} }

View File

@ -4803,7 +4803,7 @@ void NppParameters::feedGUIParameters(TiXmlNode *node)
if (val) if (val)
{ {
auto& tbColor = _nppGUI._tbIconInfo._tbColor; auto& tbColor = _nppGUI._tbIconInfo._tbColor;
tbColor = static_cast<NppDarkMode::FluentColor>(i); tbColor = static_cast<FluentColor>(i);
} }
val = element->Attribute(L"fluentCustomColor", &i); val = element->Attribute(L"fluentCustomColor", &i);
@ -4829,16 +4829,17 @@ void NppParameters::feedGUIParameters(TiXmlNode *node)
val = n->Value(); val = n->Value();
if (val) if (val)
{ {
auto& tbIconSet = _nppGUI._tbIconInfo._tbIconSet;
if (!lstrcmp(val, L"small")) if (!lstrcmp(val, L"small"))
_nppGUI._toolBarStatus = TB_SMALL; tbIconSet = TB_SMALL;
else if (!lstrcmp(val, L"large")) else if (!lstrcmp(val, L"large"))
_nppGUI._toolBarStatus = TB_LARGE; tbIconSet = TB_LARGE;
else if (!lstrcmp(val, L"small2")) else if (!lstrcmp(val, L"small2"))
_nppGUI._toolBarStatus = TB_SMALL2; tbIconSet = TB_SMALL2;
else if (!lstrcmp(val, L"large2")) else if (!lstrcmp(val, L"large2"))
_nppGUI._toolBarStatus = TB_LARGE2; tbIconSet = TB_LARGE2;
else //if (!lstrcmp(val, L"standard")) else //if (!lstrcmp(val, L"standard"))
_nppGUI._toolBarStatus = TB_STANDARD; tbIconSet = TB_STANDARD;
} }
} }
@ -6393,14 +6394,15 @@ void NppParameters::feedGUIParameters(TiXmlNode *node)
auto& windowsMode = _nppGUI._darkmode._advOptions._enableWindowsMode; auto& windowsMode = _nppGUI._darkmode._advOptions._enableWindowsMode;
windowsMode = parseYesNoBoolAttribute(L"enableWindowsMode"); windowsMode = parseYesNoBoolAttribute(L"enableWindowsMode");
constexpr int fluentColorMaxValue = static_cast<int>(NppDarkMode::FluentColor::maxValue) - 1; constexpr int fluentColorMaxValue = static_cast<int>(FluentColor::maxValue) - 1;
constexpr int tbStdIcoSet = static_cast<int>(TB_STANDARD);
auto& darkDefaults = _nppGUI._darkmode._advOptions._darkDefaults; auto& darkDefaults = _nppGUI._darkmode._advOptions._darkDefaults;
auto& darkThemeName = darkDefaults._xmlFileName; auto& darkThemeName = darkDefaults._xmlFileName;
auto& darkTbInfo = darkDefaults._tbIconInfo; auto& darkTbInfo = darkDefaults._tbIconInfo;
darkThemeName = parseStringAttribute(L"darkThemeName", L"DarkModeDefault.xml"); darkThemeName = parseStringAttribute(L"darkThemeName", L"DarkModeDefault.xml");
darkTbInfo._tbIconSet = parseMinMaxAttribute(L"darkToolBarIconSet", 0, 4); darkTbInfo._tbIconSet = static_cast<toolBarStatusType>(parseMinMaxAttribute(L"darkToolBarIconSet", static_cast<int>(TB_SMALL), tbStdIcoSet));
darkTbInfo._tbColor = static_cast<NppDarkMode::FluentColor>(parseMinMaxAttribute(L"darkTbFluentColor", 0, fluentColorMaxValue)); darkTbInfo._tbColor = static_cast<FluentColor>(parseMinMaxAttribute(L"darkTbFluentColor", 0, fluentColorMaxValue));
darkTbInfo._tbCustomColor = parseIntAttribute(L"darkTbFluentCustomColor", 0); darkTbInfo._tbCustomColor = parseIntAttribute(L"darkTbFluentCustomColor", 0);
darkTbInfo._tbUseMono = parseYesNoBoolAttribute(L"darkTbFluentMono"); darkTbInfo._tbUseMono = parseYesNoBoolAttribute(L"darkTbFluentMono");
darkDefaults._tabIconSet = parseMinMaxAttribute(L"darkTabIconSet", 2); darkDefaults._tabIconSet = parseMinMaxAttribute(L"darkTabIconSet", 2);
@ -6410,8 +6412,8 @@ void NppParameters::feedGUIParameters(TiXmlNode *node)
auto& lightThemeName = lightDefaults._xmlFileName; auto& lightThemeName = lightDefaults._xmlFileName;
auto& lightTbInfo = lightDefaults._tbIconInfo; auto& lightTbInfo = lightDefaults._tbIconInfo;
lightThemeName = parseStringAttribute(L"lightThemeName"); lightThemeName = parseStringAttribute(L"lightThemeName");
lightTbInfo._tbIconSet = parseMinMaxAttribute(L"lightToolBarIconSet", 4, 4); lightTbInfo._tbIconSet = static_cast<toolBarStatusType>(parseMinMaxAttribute(L"lightToolBarIconSet", tbStdIcoSet, tbStdIcoSet));
lightTbInfo._tbColor = static_cast<NppDarkMode::FluentColor>(parseMinMaxAttribute(L"lightTbFluentColor", 0, fluentColorMaxValue)); lightTbInfo._tbColor = static_cast<FluentColor>(parseMinMaxAttribute(L"lightTbFluentColor", 0, fluentColorMaxValue));
lightTbInfo._tbCustomColor = parseIntAttribute(L"lightTbFluentCustomColor", 0); lightTbInfo._tbCustomColor = parseIntAttribute(L"lightTbFluentCustomColor", 0);
lightTbInfo._tbUseMono = parseYesNoBoolAttribute(L"lightTbFluentMono"); lightTbInfo._tbUseMono = parseYesNoBoolAttribute(L"lightTbFluentMono");
lightDefaults._tabIconSet = parseMinMaxAttribute(L"lightTabIconSet", 0); lightDefaults._tabIconSet = parseMinMaxAttribute(L"lightTabIconSet", 0);
@ -7301,24 +7303,48 @@ void NppParameters::createXmlTreeFromGUIParams()
// <GUIConfig name="ToolBar" visible="yes">standard</GUIConfig> // <GUIConfig name="ToolBar" visible="yes">standard</GUIConfig>
{ {
TiXmlElement *GUIConfigElement = (newGUIRoot->InsertEndChild(TiXmlElement(L"GUIConfig")))->ToElement(); TiXmlElement *GUIConfigElement = (newGUIRoot->InsertEndChild(TiXmlElement(L"GUIConfig")))->ToElement();
auto& nppGUITbInfo = _nppGUI._tbIconInfo;
GUIConfigElement->SetAttribute(L"name", L"ToolBar"); GUIConfigElement->SetAttribute(L"name", L"ToolBar");
const wchar_t* pStr = (_nppGUI._toolbarShow) ? L"yes" : L"no"; const wchar_t* pStr = (_nppGUI._toolbarShow) ? L"yes" : L"no";
GUIConfigElement->SetAttribute(L"visible", pStr); GUIConfigElement->SetAttribute(L"visible", pStr);
GUIConfigElement->SetAttribute(L"fluentColor", static_cast<int>(_nppGUI._tbIconInfo._tbColor)); GUIConfigElement->SetAttribute(L"fluentColor", static_cast<int>(nppGUITbInfo._tbColor));
GUIConfigElement->SetAttribute(L"fluentCustomColor", _nppGUI._tbIconInfo._tbCustomColor); GUIConfigElement->SetAttribute(L"fluentCustomColor", nppGUITbInfo._tbCustomColor);
pStr = (_nppGUI._tbIconInfo._tbUseMono) ? L"yes" : L"no"; pStr = (nppGUITbInfo._tbUseMono) ? L"yes" : L"no";
GUIConfigElement->SetAttribute(L"fluentMono", pStr); GUIConfigElement->SetAttribute(L"fluentMono", pStr);
if (_nppGUI._toolBarStatus == TB_SMALL) switch (nppGUITbInfo._tbIconSet)
{
case TB_SMALL:
{
pStr = L"small"; pStr = L"small";
else if (_nppGUI._toolBarStatus == TB_LARGE) break;
}
case TB_LARGE:
{
pStr = L"large"; pStr = L"large";
else if (_nppGUI._toolBarStatus == TB_SMALL2) break;
}
case TB_SMALL2:
{
pStr = L"small2"; pStr = L"small2";
else if (_nppGUI._toolBarStatus == TB_LARGE2) break;
}
case TB_LARGE2:
{
pStr = L"large2"; pStr = L"large2";
else //if (_nppGUI._toolBarStatus == TB_STANDARD) break;
}
case TB_STANDARD:
default:
{
pStr = L"standard"; pStr = L"standard";
break;
}
}
GUIConfigElement->InsertEndChild(TiXmlText(pStr)); GUIConfigElement->InsertEndChild(TiXmlText(pStr));
} }

View File

@ -764,13 +764,63 @@ public:
bool _doDoubleQuotes = false; bool _doDoubleQuotes = false;
}; };
constexpr COLORREF g_cDefaultMainDark = RGB(0xDE, 0xDE, 0xDE);
constexpr COLORREF g_cDefaultSecondaryDark = RGB(0x4C, 0xC2, 0xFF);
constexpr COLORREF g_cDefaultMainLight = RGB(0x21, 0x21, 0x21);
constexpr COLORREF g_cDefaultSecondaryLight = RGB(0x00, 0x78, 0xD4);
enum class FluentColor
{
defaultColor = 0,
red = 1,
green = 2,
blue = 3,
purple = 4,
cyan = 5,
olive = 6,
yellow = 7,
accent = 8,
custom = 9,
maxValue = 10
};
struct TbIconInfo
{
toolBarStatusType _tbIconSet = TB_STANDARD;
// fluent icon color
FluentColor _tbColor = FluentColor::defaultColor;
// fluent icon custom color, used when _tbColor == FluentColor::custom
COLORREF _tbCustomColor = 0;
// does fluent icon use monochrome colorization
bool _tbUseMono = false;
};
struct AdvOptDefaults final
{
std::wstring _xmlFileName;
TbIconInfo _tbIconInfo{};
int _tabIconSet = -1;
bool _tabUseTheme = false;
};
struct AdvancedOptions final
{
AdvOptDefaults _darkDefaults{ L"DarkModeDefault.xml", {TB_SMALL, FluentColor::defaultColor, 0, false}, 2, false };
AdvOptDefaults _lightDefaults{ L"", { TB_STANDARD, FluentColor::defaultColor, 0, false }, 0, true };
bool _enableWindowsMode = false;
};
struct DarkModeConf final struct DarkModeConf final
{ {
bool _isEnabled = false; bool _isEnabled = false;
bool _isEnabledPlugin = true; bool _isEnabledPlugin = true;
NppDarkMode::ColorTone _colorTone = NppDarkMode::blackTone; NppDarkMode::ColorTone _colorTone = NppDarkMode::blackTone;
NppDarkMode::Colors _customColors = NppDarkMode::getDarkModeDefaultColors(); NppDarkMode::Colors _customColors = NppDarkMode::getDarkModeDefaultColors();
NppDarkMode::AdvancedOptions _advOptions{}; AdvancedOptions _advOptions{};
}; };
@ -791,8 +841,7 @@ struct LargeFileRestriction final
struct NppGUI final struct NppGUI final
{ {
toolBarStatusType _toolBarStatus = TB_STANDARD; TbIconInfo _tbIconInfo{ TB_STANDARD, FluentColor::defaultColor, 0, false };
NppDarkMode::TbIconInfo _tbIconInfo{ TB_STANDARD, NppDarkMode::FluentColor::defaultColor, 0, false };
bool _toolbarShow = true; bool _toolbarShow = true;
bool _statusBarShow = true; bool _statusBarShow = true;
bool _menuBarShow = true; bool _menuBarShow = true;

View File

@ -3611,11 +3611,11 @@ void FindReplaceDlg::findAllIn(InWhat op)
// define the default docking behaviour // define the default docking behaviour
data.uMask = DWS_DF_CONT_BOTTOM | DWS_ICONTAB | DWS_ADDINFO | DWS_USEOWNDARKMODE; data.uMask = DWS_DF_CONT_BOTTOM | DWS_ICONTAB | DWS_ADDINFO | DWS_USEOWNDARKMODE;
int icoID = IDI_FIND_RESULT_ICON; int icoID = IDR_FIND_RESULT_ICO2;
if (NppDarkMode::isEnabled()) if (nppParam.getNppGUI()._tbIconInfo._tbIconSet == TB_STANDARD)
icoID = IDI_FIND_RESULT_ICON;
else if (NppDarkMode::isEnabled())
icoID = IDR_FIND_RESULT_ICO_DM; 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()); const int iconSize = DPIManagerV2::scale(g_dockingContTabIconSize, _pFinder->getHSelf());
DPIManagerV2::loadIcon(_hInst, MAKEINTRESOURCE(icoID), iconSize, iconSize, &data.hIconTab, LR_LOADMAP3DCOLORS | LR_LOADTRANSPARENT); DPIManagerV2::loadIcon(_hInst, MAKEINTRESOURCE(icoID), iconSize, iconSize, &data.hIconTab, LR_LOADMAP3DCOLORS | LR_LOADTRANSPARENT);
@ -3759,11 +3759,11 @@ Finder* FindReplaceDlg::createFinder()
// define the default docking behaviour // define the default docking behaviour
data.uMask = DWS_DF_CONT_BOTTOM | DWS_ICONTAB | DWS_ADDINFO | DWS_USEOWNDARKMODE; data.uMask = DWS_DF_CONT_BOTTOM | DWS_ICONTAB | DWS_ADDINFO | DWS_USEOWNDARKMODE;
int icoID = IDI_FIND_RESULT_ICON; int icoID = IDR_FIND_RESULT_ICO2;
if (NppDarkMode::isEnabled()) if (nppParam.getNppGUI()._tbIconInfo._tbIconSet == TB_STANDARD)
icoID = IDI_FIND_RESULT_ICON;
else if (NppDarkMode::isEnabled())
icoID = IDR_FIND_RESULT_ICO_DM; 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()); const int iconSize = DPIManagerV2::scale(g_dockingContTabIconSize, _pFinder->getHSelf());
DPIManagerV2::loadIcon(_hInst, MAKEINTRESOURCE(icoID), iconSize, iconSize, &data.hIconTab, LR_LOADMAP3DCOLORS | LR_LOADTRANSPARENT); DPIManagerV2::loadIcon(_hInst, MAKEINTRESOURCE(icoID), iconSize, iconSize, &data.hIconTab, LR_LOADMAP3DCOLORS | LR_LOADTRANSPARENT);

View File

@ -18,6 +18,7 @@
#include <stdexcept> #include <stdexcept>
#include <memory> #include <memory>
#include "ImageListSet.h" #include "ImageListSet.h"
#include "Parameters.h"
#include "NppDarkMode.h" #include "NppDarkMode.h"
#include "dpiManagerV2.h" #include "dpiManagerV2.h"
@ -74,7 +75,6 @@ void IconList::addIcon(int iconID, int cx, int cy, int failIconID, bool isToolba
return; return;
} }
} }
constexpr int IDI_ICONABSENT = 104; // check resource.h for correct id
DPIManagerV2::loadIcon(_hInst, MAKEINTRESOURCE(IDI_ICONABSENT), cx, cy, &hIcon); DPIManagerV2::loadIcon(_hInst, MAKEINTRESOURCE(IDI_ICONABSENT), cx, cy, &hIcon);
} }
} }
@ -82,7 +82,7 @@ void IconList::addIcon(int iconID, int cx, int cy, int failIconID, bool isToolba
if (hIcon != nullptr) if (hIcon != nullptr)
{ {
if (isToolbarNormal) if (isToolbarNormal)
NppDarkMode::changeFluentIconColor(&hIcon); IconList::changeFluentIconColor(&hIcon);
::ImageList_AddIcon(_hImglst, hIcon); ::ImageList_AddIcon(_hImglst, hIcon);
::DestroyIcon(hIcon); ::DestroyIcon(hIcon);
} }
@ -105,6 +105,207 @@ bool IconList::changeIcon(size_t index, const wchar_t* iconLocation) const
return (i == index); return (i == index);
} }
bool IconList::changeFluentIconColor(HICON* phIcon, const std::vector<std::pair<COLORREF, COLORREF>>& colorMappings, int tolerance) const
{
if (!*phIcon)
{
return false;
}
HDC hdcScreen = nullptr;
HDC hdcBitmap = nullptr;
BITMAP bm{};
ICONINFO ii{};
HBITMAP hbmNew = nullptr;
std::unique_ptr<RGBQUAD[]> pixels;
const bool changeEverything = colorMappings[0].first == 0;
auto cleanup = [&]()
{
if (hdcScreen) ::ReleaseDC(nullptr, hdcScreen);
if (hdcBitmap) ::DeleteDC(hdcBitmap);
if (ii.hbmColor) ::DeleteObject(ii.hbmColor);
if (ii.hbmMask) ::DeleteObject(ii.hbmMask);
if (hbmNew) ::DeleteObject(hbmNew);
};
hdcScreen = ::GetDC(nullptr);
hdcBitmap = ::CreateCompatibleDC(nullptr);
if (!hdcScreen || !hdcBitmap || !::GetIconInfo(*phIcon, &ii) || !ii.hbmColor || !::GetObject(ii.hbmColor, sizeof(BITMAP), &bm))
{
cleanup();
return false;
}
BITMAPINFO bmi{};
bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmi.bmiHeader.biWidth = bm.bmWidth;
bmi.bmiHeader.biHeight = -bm.bmHeight; // Top-down bitmap
bmi.bmiHeader.biPlanes = 1;
bmi.bmiHeader.biBitCount = 32;
bmi.bmiHeader.biCompression = BI_RGB;
pixels = std::make_unique<RGBQUAD[]>(static_cast<size_t>(bm.bmWidth) * bm.bmHeight);
if (!pixels || !::GetDIBits(hdcBitmap, ii.hbmColor, 0, bm.bmHeight, pixels.get(), &bmi, DIB_RGB_COLORS))
{
cleanup();
return false;
}
for (int i = 0; i < bm.bmWidth * bm.bmHeight; i++)
{
if (pixels[i].rgbReserved != 0) // Modify non-transparent pixels
{
if (changeEverything)
{
COLORREF cNew = colorMappings[0].second == 0 ? NppDarkMode::getAccentColor() : colorMappings[0].second;
pixels[i].rgbRed = GetRValue(cNew);
pixels[i].rgbGreen = GetGValue(cNew);
pixels[i].rgbBlue = GetBValue(cNew);
}
else
{
for (const auto& [cToChange, cNew] : colorMappings)
{
if (std::abs(pixels[i].rgbRed - GetRValue(cToChange)) <= tolerance &&
std::abs(pixels[i].rgbGreen - GetGValue(cToChange)) <= tolerance &&
std::abs(pixels[i].rgbBlue - GetBValue(cToChange)) <= tolerance)
{
COLORREF finalNewColor = (cNew == 0) ? NppDarkMode::getAccentColor() : cNew;
pixels[i].rgbRed = GetRValue(finalNewColor);
pixels[i].rgbGreen = GetGValue(finalNewColor);
pixels[i].rgbBlue = GetBValue(finalNewColor);
break;
}
}
}
}
}
hbmNew = ::CreateCompatibleBitmap(hdcScreen, bm.bmWidth, bm.bmHeight);
if (!hbmNew || !::SetDIBits(hdcBitmap, hbmNew, 0, bm.bmHeight, pixels.get(), &bmi, DIB_RGB_COLORS))
{
cleanup();
return false;
}
if (ii.hbmColor)
{
::DeleteObject(ii.hbmColor);
ii.hbmColor = nullptr;
}
ii.hbmColor = hbmNew;
HICON hIconNew = ::CreateIconIndirect(&ii);
if (!hIconNew)
{
cleanup();
return false;
}
::DestroyIcon(*phIcon);
*phIcon = hIconNew;
cleanup();
return true;
}
bool IconList::changeFluentIconColor(HICON* phIcon) const
{
const auto cMain = NppDarkMode::isEnabled() ? g_cDefaultMainDark : g_cDefaultMainLight;
const auto cSecondary = NppDarkMode::isEnabled() ? g_cDefaultSecondaryDark : g_cDefaultSecondaryLight;
std::vector<std::pair<COLORREF, COLORREF>> colorMappings;
NppParameters& nppParams = NppParameters::getInstance();
const auto& tbInfo = nppParams.getNppGUI()._tbIconInfo;
COLORREF cOld = tbInfo._tbUseMono ? 0 : cSecondary;
COLORREF cNew = 0;
switch (tbInfo._tbColor)
{
case FluentColor::accent:
{
cNew = 0;
break;
}
case FluentColor::red:
{
cNew = RGB(0xE8, 0x11, 0x23);
break;
}
case FluentColor::green:
{
cNew = RGB(0x00, 0x8B, 0x00);
break;
}
case FluentColor::blue:
{
cNew = RGB(0x00, 0x78, 0xD4);
break;
}
case FluentColor::purple:
{
cNew = RGB(0xB1, 0x46, 0xC2);
break;
}
case FluentColor::cyan:
{
cNew = RGB(0x00, 0xB7, 0xC3);
break;
}
case FluentColor::olive:
{
cNew = RGB(0x49, 0x82, 0x05);
break;
}
case FluentColor::yellow:
{
cNew = RGB(0xFF, 0xB9, 0x00);
break;
}
case FluentColor::custom:
{
if (tbInfo._tbCustomColor != 0)
{
cNew = tbInfo._tbCustomColor;
break;
}
[[fallthrough]];
}
case FluentColor::defaultColor:
{
if (tbInfo._tbUseMono)
{
cNew = cMain;
break;
}
[[fallthrough]];
}
default:
{
return false;
}
}
colorMappings = { {cOld, cNew} };
return IconList::changeFluentIconColor(phIcon, colorMappings);
}
void ToolBarIcons::init(ToolBarButtonUnit *buttonUnitArray, int arraySize, const std::vector<DynamicCmdIcoBmp>& moreCmds) void ToolBarIcons::init(ToolBarButtonUnit *buttonUnitArray, int arraySize, const std::vector<DynamicCmdIcoBmp>& moreCmds)
{ {
for (int i = 0 ; i < arraySize ; ++i) for (int i = 0 ; i < arraySize ; ++i)

View File

@ -50,6 +50,9 @@ private :
int *_pIconIDArray = nullptr; int *_pIconIDArray = nullptr;
int _iconIDArraySize = 0; int _iconIDArraySize = 0;
int _iconSize = 0; int _iconSize = 0;
bool changeFluentIconColor(HICON* phIcon, const std::vector<std::pair<COLORREF, COLORREF>>& colorMappings, int tolerance = 3) const;
bool changeFluentIconColor(HICON* phIcon) const;
}; };
struct ToolBarButtonUnit struct ToolBarButtonUnit
@ -158,4 +161,3 @@ private :
std::vector<IconList> _iconListVector; std::vector<IconList> _iconListVector;
}; };

View File

@ -194,8 +194,8 @@ intptr_t CALLBACK PreferenceDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM
_searchEngineSubDlg.create(IDD_PREFERENCE_SUB_SEARCHENGINE, false, false); _searchEngineSubDlg.create(IDD_PREFERENCE_SUB_SEARCHENGINE, false, false);
_wVector.push_back(DlgInfo(&_generalSubDlg, L"General", L"Global")); _wVector.push_back(DlgInfo(&_generalSubDlg, L"General", L"Global"));
_wVector.push_back(DlgInfo(&_toolbarSubDlg, L"Tool Bar", L"Toolbar")); _wVector.push_back(DlgInfo(&_toolbarSubDlg, L"Toolbar", L"Toolbar"));
_wVector.push_back(DlgInfo(&_tabbarSubDlg, L"Tab bar", L"Tabbar")); _wVector.push_back(DlgInfo(&_tabbarSubDlg, L"Tab Bar", L"Tabbar"));
_wVector.push_back(DlgInfo(&_editingSubDlg, L"Editing 1", L"Scintillas")); _wVector.push_back(DlgInfo(&_editingSubDlg, L"Editing 1", L"Scintillas"));
_wVector.push_back(DlgInfo(&_editing2SubDlg, L"Editing 2", L"Scintillas2")); _wVector.push_back(DlgInfo(&_editing2SubDlg, L"Editing 2", L"Scintillas2"));
_wVector.push_back(DlgInfo(&_darkModeSubDlg, L"Dark Mode", L"DarkMode")); _wVector.push_back(DlgInfo(&_darkModeSubDlg, L"Dark Mode", L"DarkMode"));
@ -289,6 +289,10 @@ intptr_t CALLBACK PreferenceDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM
const bool isEnableAutoC = _autoCompletionSubDlg.isCheckedOrNot(IDD_AUTOC_ENABLECHECK); const bool isEnableAutoC = _autoCompletionSubDlg.isCheckedOrNot(IDD_AUTOC_ENABLECHECK);
::EnableWindow(::GetDlgItem(_autoCompletionSubDlg.getHSelf(), IDD_AUTOC_USEKEY_GRP_STATIC), isEnableAutoC); ::EnableWindow(::GetDlgItem(_autoCompletionSubDlg.getHSelf(), IDD_AUTOC_USEKEY_GRP_STATIC), isEnableAutoC);
const bool isFluentIcon = !_toolbarSubDlg.isCheckedOrNot(IDC_RADIO_STANDARD);
::EnableWindow(::GetDlgItem(_toolbarSubDlg.getHSelf(), IDC_TOOLBAR_GB_COLORCHOICE), isFluentIcon);
::EnableWindow(::GetDlgItem(_toolbarSubDlg.getHSelf(), IDC_TOOLBAR_GB_COLORIZATION), isFluentIcon);
} }
return TRUE; return TRUE;
@ -299,38 +303,36 @@ intptr_t CALLBACK PreferenceDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM
NppParameters& nppParams = NppParameters::getInstance(); NppParameters& nppParams = NppParameters::getInstance();
NppGUI& nppGUI = nppParams.getNppGUI(); NppGUI& nppGUI = nppParams.getNppGUI();
auto& nppGUITbInfo = nppGUI._tbIconInfo; auto& nppGUITbInfo = nppGUI._tbIconInfo;
const NppDarkMode::TbIconInfo toolbarIconInfo = NppDarkMode::getToolbarIconInfo(static_cast<bool>(wParam)); nppGUITbInfo = NppDarkMode::getToolbarIconInfo(static_cast<bool>(wParam));
nppGUITbInfo = toolbarIconInfo;
nppGUI._toolBarStatus = static_cast<toolBarStatusType>(nppGUITbInfo._tbIconSet);
const HWND hToolbarlSubDlg = _toolbarSubDlg.getHSelf(); const HWND hToolbarlSubDlg = _toolbarSubDlg.getHSelf();
auto checkOrUncheckBtn = [&hToolbarlSubDlg](int id, WPARAM check = BST_UNCHECKED) -> void auto checkOrUncheckBtn = [&hToolbarlSubDlg](int id, bool check = false) -> void
{ {
::SendDlgItemMessage(hToolbarlSubDlg, id, BM_SETCHECK, check, 0); ::SendDlgItemMessage(hToolbarlSubDlg, id, BM_SETCHECK, check ? BST_CHECKED : BST_UNCHECKED, 0);
}; };
checkOrUncheckBtn(IDC_RADIO_SMALLICON, nppGUI._toolBarStatus == TB_SMALL ? BST_CHECKED : BST_UNCHECKED); checkOrUncheckBtn(IDC_RADIO_SMALLICON, nppGUITbInfo._tbIconSet == TB_SMALL);
checkOrUncheckBtn(IDC_RADIO_BIGICON, nppGUI._toolBarStatus == TB_LARGE ? BST_CHECKED : BST_UNCHECKED); checkOrUncheckBtn(IDC_RADIO_BIGICON, nppGUITbInfo._tbIconSet == TB_LARGE);
checkOrUncheckBtn(IDC_RADIO_SMALLICON2, nppGUI._toolBarStatus == TB_SMALL2 ? BST_CHECKED : BST_UNCHECKED); checkOrUncheckBtn(IDC_RADIO_SMALLICON2, nppGUITbInfo._tbIconSet == TB_SMALL2);
checkOrUncheckBtn(IDC_RADIO_BIGICON2, nppGUI._toolBarStatus == TB_LARGE2 ? BST_CHECKED : BST_UNCHECKED); checkOrUncheckBtn(IDC_RADIO_BIGICON2, nppGUITbInfo._tbIconSet == TB_LARGE2);
checkOrUncheckBtn(IDC_RADIO_STANDARD, nppGUI._toolBarStatus == TB_STANDARD ? BST_CHECKED : BST_UNCHECKED); checkOrUncheckBtn(IDC_RADIO_STANDARD, nppGUITbInfo._tbIconSet == TB_STANDARD);
checkOrUncheckBtn(IDC_RADIO_RED, nppGUITbInfo._tbColor == NppDarkMode::FluentColor::red ? BST_CHECKED : BST_UNCHECKED); checkOrUncheckBtn(IDC_RADIO_RED, nppGUITbInfo._tbColor == FluentColor::red);
checkOrUncheckBtn(IDC_RADIO_GREEN, nppGUITbInfo._tbColor == NppDarkMode::FluentColor::green ? BST_CHECKED : BST_UNCHECKED); checkOrUncheckBtn(IDC_RADIO_GREEN, nppGUITbInfo._tbColor == FluentColor::green);
checkOrUncheckBtn(IDC_RADIO_BLUE, nppGUITbInfo._tbColor == NppDarkMode::FluentColor::blue ? BST_CHECKED : BST_UNCHECKED); checkOrUncheckBtn(IDC_RADIO_BLUE, nppGUITbInfo._tbColor == FluentColor::blue);
checkOrUncheckBtn(IDC_RADIO_PURPLE, nppGUITbInfo._tbColor == NppDarkMode::FluentColor::purple ? BST_CHECKED : BST_UNCHECKED); checkOrUncheckBtn(IDC_RADIO_PURPLE, nppGUITbInfo._tbColor == FluentColor::purple);
checkOrUncheckBtn(IDC_RADIO_CYAN, nppGUITbInfo._tbColor == NppDarkMode::FluentColor::cyan ? BST_CHECKED : BST_UNCHECKED); checkOrUncheckBtn(IDC_RADIO_CYAN, nppGUITbInfo._tbColor == FluentColor::cyan);
checkOrUncheckBtn(IDC_RADIO_OLIVE, nppGUITbInfo._tbColor == NppDarkMode::FluentColor::olive ? BST_CHECKED : BST_UNCHECKED); checkOrUncheckBtn(IDC_RADIO_OLIVE, nppGUITbInfo._tbColor == FluentColor::olive);
checkOrUncheckBtn(IDC_RADIO_YELLOW, nppGUITbInfo._tbColor == NppDarkMode::FluentColor::yellow ? BST_CHECKED : BST_UNCHECKED); checkOrUncheckBtn(IDC_RADIO_YELLOW, nppGUITbInfo._tbColor == FluentColor::yellow);
checkOrUncheckBtn(IDC_RADIO_ACCENTCOLOR, nppGUITbInfo._tbColor == NppDarkMode::FluentColor::accent ? BST_CHECKED : BST_UNCHECKED); checkOrUncheckBtn(IDC_RADIO_ACCENTCOLOR, nppGUITbInfo._tbColor == FluentColor::accent);
checkOrUncheckBtn(IDC_RADIO_CUSTOMCOLOR, nppGUITbInfo._tbColor == NppDarkMode::FluentColor::custom ? BST_CHECKED : BST_UNCHECKED); checkOrUncheckBtn(IDC_RADIO_CUSTOMCOLOR, nppGUITbInfo._tbColor == FluentColor::custom);
checkOrUncheckBtn(IDC_RADIO_DEFAULTCOLOR, nppGUITbInfo._tbColor == NppDarkMode::FluentColor::defaultColor ? BST_CHECKED : BST_UNCHECKED); checkOrUncheckBtn(IDC_RADIO_DEFAULTCOLOR, nppGUITbInfo._tbColor == FluentColor::defaultColor);
checkOrUncheckBtn(IDC_RADIO_COMPLETE, nppGUITbInfo._tbUseMono ? BST_CHECKED : BST_UNCHECKED); checkOrUncheckBtn(IDC_RADIO_COMPLETE, nppGUITbInfo._tbUseMono);
checkOrUncheckBtn(IDC_RADIO_PARTIAL, nppGUITbInfo._tbUseMono ? BST_UNCHECKED : BST_CHECKED); checkOrUncheckBtn(IDC_RADIO_PARTIAL, !nppGUITbInfo._tbUseMono);
::SendMessage(hToolbarlSubDlg, NPPM_INTERNAL_CHANGETOOLBARCOLORABLESTATE, 0, 0); ::SendMessage(hToolbarlSubDlg, NPPM_INTERNAL_CHANGETOOLBARCOLORABLESTATE, static_cast<WPARAM>(true), 0);
return TRUE; return TRUE;
} }
@ -752,7 +754,6 @@ intptr_t CALLBACK ToolbarSubDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM
{ {
case WM_INITDIALOG: case WM_INITDIALOG:
{ {
toolBarStatusType toolbarStatus = nppGUI._toolBarStatus;
auto& nppGUITbInfo = nppGUI._tbIconInfo; auto& nppGUITbInfo = nppGUI._tbIconInfo;
::SendDlgItemMessage(_hSelf, IDC_CHECK_HIDE, BM_SETCHECK, nppGUI._toolbarShow ? BST_UNCHECKED : BST_CHECKED, 0); ::SendDlgItemMessage(_hSelf, IDC_CHECK_HIDE, BM_SETCHECK, nppGUI._toolbarShow ? BST_UNCHECKED : BST_CHECKED, 0);
@ -783,34 +784,34 @@ intptr_t CALLBACK ToolbarSubDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM
ID2Check = 0; ID2Check = 0;
switch (nppGUITbInfo._tbColor) switch (nppGUITbInfo._tbColor)
{ {
case NppDarkMode::FluentColor::custom: case FluentColor::custom:
ID2Check = IDC_RADIO_CUSTOMCOLOR; ID2Check = IDC_RADIO_CUSTOMCOLOR;
break; break;
case NppDarkMode::FluentColor::accent: case FluentColor::accent:
ID2Check = IDC_RADIO_ACCENTCOLOR; ID2Check = IDC_RADIO_ACCENTCOLOR;
break; break;
case NppDarkMode::FluentColor::red: case FluentColor::red:
ID2Check = IDC_RADIO_RED; ID2Check = IDC_RADIO_RED;
break; break;
case NppDarkMode::FluentColor::green: case FluentColor::green:
ID2Check = IDC_RADIO_GREEN; ID2Check = IDC_RADIO_GREEN;
break; break;
case NppDarkMode::FluentColor::blue: case FluentColor::blue:
ID2Check = IDC_RADIO_BLUE; ID2Check = IDC_RADIO_BLUE;
break; break;
case NppDarkMode::FluentColor::purple: case FluentColor::purple:
ID2Check = IDC_RADIO_PURPLE; ID2Check = IDC_RADIO_PURPLE;
break; break;
case NppDarkMode::FluentColor::cyan: case FluentColor::cyan:
ID2Check = IDC_RADIO_CYAN; ID2Check = IDC_RADIO_CYAN;
break; break;
case NppDarkMode::FluentColor::olive: case FluentColor::olive:
ID2Check = IDC_RADIO_OLIVE; ID2Check = IDC_RADIO_OLIVE;
break; break;
case NppDarkMode::FluentColor::yellow: case FluentColor::yellow:
ID2Check = IDC_RADIO_YELLOW; ID2Check = IDC_RADIO_YELLOW;
break; break;
case NppDarkMode::FluentColor::defaultColor: case FluentColor::defaultColor:
default: default:
ID2Check = IDC_RADIO_DEFAULTCOLOR; ID2Check = IDC_RADIO_DEFAULTCOLOR;
} }
@ -827,7 +828,7 @@ intptr_t CALLBACK ToolbarSubDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM
_pIconColorPicker->display(); _pIconColorPicker->display();
_pIconColorPicker->setColour(nppGUI._tbIconInfo._tbCustomColor); _pIconColorPicker->setColour(nppGUI._tbIconInfo._tbCustomColor);
if (toolbarStatus == TB_STANDARD) if (nppGUITbInfo._tbIconSet == TB_STANDARD)
{ {
::SendMessage(_hSelf, NPPM_INTERNAL_CHANGETOOLBARCOLORABLESTATE, 0, 0); ::SendMessage(_hSelf, NPPM_INTERNAL_CHANGETOOLBARCOLORABLESTATE, 0, 0);
} }
@ -839,10 +840,9 @@ intptr_t CALLBACK ToolbarSubDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM
{ {
bool enableColor = !isCheckedOrNot(IDC_RADIO_STANDARD); bool enableColor = !isCheckedOrNot(IDC_RADIO_STANDARD);
::EnableWindow(::GetDlgItem(_hSelf, IDC_TOOLBAR_GB_COLORIZATION), enableColor);
::EnableWindow(::GetDlgItem(_hSelf, IDC_RADIO_COMPLETE), enableColor); ::EnableWindow(::GetDlgItem(_hSelf, IDC_RADIO_COMPLETE), enableColor);
::EnableWindow(::GetDlgItem(_hSelf, IDC_RADIO_PARTIAL), enableColor); ::EnableWindow(::GetDlgItem(_hSelf, IDC_RADIO_PARTIAL), enableColor);
::EnableWindow(::GetDlgItem(_hSelf, IDC_TOOLBAR_GB_COLORCHOICE), enableColor);
::EnableWindow(::GetDlgItem(_hSelf, IDC_RADIO_RED), enableColor); ::EnableWindow(::GetDlgItem(_hSelf, IDC_RADIO_RED), enableColor);
::EnableWindow(::GetDlgItem(_hSelf, IDC_RADIO_GREEN), enableColor); ::EnableWindow(::GetDlgItem(_hSelf, IDC_RADIO_GREEN), enableColor);
::EnableWindow(::GetDlgItem(_hSelf, IDC_RADIO_BLUE), enableColor); ::EnableWindow(::GetDlgItem(_hSelf, IDC_RADIO_BLUE), enableColor);
@ -856,11 +856,29 @@ intptr_t CALLBACK ToolbarSubDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM
::EnableWindow(_pIconColorPicker->getHSelf(), enableColor); ::EnableWindow(_pIconColorPicker->getHSelf(), enableColor);
const bool usePrevDarkMode = static_cast<bool>(wParam) ? !NppDarkMode::isEnabled() : NppDarkMode::isEnabled();
if (enableColor) if (enableColor)
{ {
_pIconColorPicker->setColour(nppGUI._tbIconInfo._tbCustomColor); const auto& tbIconInfo = NppDarkMode::getToolbarIconInfo(usePrevDarkMode);
_pIconColorPicker->redraw(); _pIconColorPicker->setColour(tbIconInfo._tbCustomColor);
} }
else
{
COLORREF disabledColor = usePrevDarkMode ? NppDarkMode::getDlgBackgroundColor() : ::GetSysColor(COLOR_3DFACE);
_pIconColorPicker->setColour(disabledColor);
}
_pIconColorPicker->redraw();
if (NppDarkMode::isEnabled())
{
::EnableWindow(::GetDlgItem(_hSelf, IDC_TOOLBAR_GB_COLORCHOICE), enableColor);
::EnableWindow(::GetDlgItem(_hSelf, IDC_TOOLBAR_GB_COLORIZATION), enableColor);
redrawDlgItem(IDC_TOOLBAR_GB_COLORCHOICE);
redrawDlgItem(IDC_TOOLBAR_GB_COLORIZATION);
}
return TRUE; return TRUE;
} }
@ -943,7 +961,7 @@ intptr_t CALLBACK ToolbarSubDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM
case IDC_RADIO_CUSTOMCOLOR: case IDC_RADIO_CUSTOMCOLOR:
{ {
NppDarkMode::FluentColor c = NppDarkMode::FluentColor::custom; FluentColor c = FluentColor::custom;
NppDarkMode::setToolbarFluentColor(c); NppDarkMode::setToolbarFluentColor(c);
nppGUI._tbIconInfo._tbColor = c; nppGUI._tbIconInfo._tbColor = c;
UINT msg = getToolbarIconSetMsg(nullptr); UINT msg = getToolbarIconSetMsg(nullptr);
@ -953,7 +971,7 @@ intptr_t CALLBACK ToolbarSubDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM
case IDC_RADIO_ACCENTCOLOR: case IDC_RADIO_ACCENTCOLOR:
{ {
NppDarkMode::FluentColor c = NppDarkMode::FluentColor::accent; FluentColor c = FluentColor::accent;
NppDarkMode::setToolbarFluentColor(c); NppDarkMode::setToolbarFluentColor(c);
nppGUI._tbIconInfo._tbColor = c; nppGUI._tbIconInfo._tbColor = c;
UINT msg = getToolbarIconSetMsg(nullptr); UINT msg = getToolbarIconSetMsg(nullptr);
@ -963,7 +981,7 @@ intptr_t CALLBACK ToolbarSubDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM
case IDC_RADIO_RED: case IDC_RADIO_RED:
{ {
NppDarkMode::FluentColor c = NppDarkMode::FluentColor::red; FluentColor c = FluentColor::red;
NppDarkMode::setToolbarFluentColor(c); NppDarkMode::setToolbarFluentColor(c);
nppGUI._tbIconInfo._tbColor = c; nppGUI._tbIconInfo._tbColor = c;
UINT msg = getToolbarIconSetMsg(nullptr); UINT msg = getToolbarIconSetMsg(nullptr);
@ -973,7 +991,7 @@ intptr_t CALLBACK ToolbarSubDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM
case IDC_RADIO_GREEN: case IDC_RADIO_GREEN:
{ {
NppDarkMode::FluentColor c = NppDarkMode::FluentColor::green; FluentColor c = FluentColor::green;
NppDarkMode::setToolbarFluentColor(c); NppDarkMode::setToolbarFluentColor(c);
nppGUI._tbIconInfo._tbColor = c; nppGUI._tbIconInfo._tbColor = c;
UINT msg = getToolbarIconSetMsg(nullptr); UINT msg = getToolbarIconSetMsg(nullptr);
@ -983,7 +1001,7 @@ intptr_t CALLBACK ToolbarSubDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM
case IDC_RADIO_BLUE: case IDC_RADIO_BLUE:
{ {
NppDarkMode::FluentColor c = NppDarkMode::FluentColor::blue; FluentColor c = FluentColor::blue;
NppDarkMode::setToolbarFluentColor(c); NppDarkMode::setToolbarFluentColor(c);
nppGUI._tbIconInfo._tbColor = c; nppGUI._tbIconInfo._tbColor = c;
UINT msg = getToolbarIconSetMsg(nullptr); UINT msg = getToolbarIconSetMsg(nullptr);
@ -993,7 +1011,7 @@ intptr_t CALLBACK ToolbarSubDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM
case IDC_RADIO_PURPLE: case IDC_RADIO_PURPLE:
{ {
NppDarkMode::FluentColor c = NppDarkMode::FluentColor::purple; FluentColor c = FluentColor::purple;
NppDarkMode::setToolbarFluentColor(c); NppDarkMode::setToolbarFluentColor(c);
nppGUI._tbIconInfo._tbColor = c; nppGUI._tbIconInfo._tbColor = c;
UINT msg = getToolbarIconSetMsg(nullptr); UINT msg = getToolbarIconSetMsg(nullptr);
@ -1003,7 +1021,7 @@ intptr_t CALLBACK ToolbarSubDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM
case IDC_RADIO_CYAN: case IDC_RADIO_CYAN:
{ {
NppDarkMode::FluentColor c = NppDarkMode::FluentColor::cyan; FluentColor c = FluentColor::cyan;
NppDarkMode::setToolbarFluentColor(c); NppDarkMode::setToolbarFluentColor(c);
nppGUI._tbIconInfo._tbColor = c; nppGUI._tbIconInfo._tbColor = c;
UINT msg = getToolbarIconSetMsg(nullptr); UINT msg = getToolbarIconSetMsg(nullptr);
@ -1013,7 +1031,7 @@ intptr_t CALLBACK ToolbarSubDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM
case IDC_RADIO_OLIVE: case IDC_RADIO_OLIVE:
{ {
NppDarkMode::FluentColor c = NppDarkMode::FluentColor::olive; FluentColor c = FluentColor::olive;
NppDarkMode::setToolbarFluentColor(c); NppDarkMode::setToolbarFluentColor(c);
nppGUI._tbIconInfo._tbColor = c; nppGUI._tbIconInfo._tbColor = c;
UINT msg = getToolbarIconSetMsg(nullptr); UINT msg = getToolbarIconSetMsg(nullptr);
@ -1023,7 +1041,7 @@ intptr_t CALLBACK ToolbarSubDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM
case IDC_RADIO_YELLOW: case IDC_RADIO_YELLOW:
{ {
NppDarkMode::FluentColor c = NppDarkMode::FluentColor::yellow; FluentColor c = FluentColor::yellow;
NppDarkMode::setToolbarFluentColor(c); NppDarkMode::setToolbarFluentColor(c);
nppGUI._tbIconInfo._tbColor = c; nppGUI._tbIconInfo._tbColor = c;
UINT msg = getToolbarIconSetMsg(nullptr); UINT msg = getToolbarIconSetMsg(nullptr);
@ -1033,10 +1051,9 @@ intptr_t CALLBACK ToolbarSubDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM
case IDC_RADIO_DEFAULTCOLOR: case IDC_RADIO_DEFAULTCOLOR:
{ {
NppDarkMode::FluentColor c = NppDarkMode::FluentColor::defaultColor; FluentColor c = FluentColor::defaultColor;
NppDarkMode::setToolbarFluentColor(c); NppDarkMode::setToolbarFluentColor(c);
nppGUI._tbIconInfo._tbColor = c; nppGUI._tbIconInfo._tbColor = c;
UINT msg = getToolbarIconSetMsg(nullptr); UINT msg = getToolbarIconSetMsg(nullptr);
::SendMessage(::GetParent(_hParent), msg, TRUE, 0); ::SendMessage(::GetParent(_hParent), msg, TRUE, 0);
return TRUE; return TRUE;
@ -1083,7 +1100,7 @@ intptr_t CALLBACK ToolbarSubDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM
setChecked(IDC_RADIO_ACCENTCOLOR, false); setChecked(IDC_RADIO_ACCENTCOLOR, false);
setChecked(IDC_RADIO_DEFAULTCOLOR, false); setChecked(IDC_RADIO_DEFAULTCOLOR, false);
NppDarkMode::FluentColor colorType = NppDarkMode::FluentColor::custom; FluentColor colorType = FluentColor::custom;
NppDarkMode::setToolbarFluentColor(colorType); NppDarkMode::setToolbarFluentColor(colorType);
nppGUI._tbIconInfo._tbColor = colorType; nppGUI._tbIconInfo._tbColor = colorType;
UINT msg = getToolbarIconSetMsg(nullptr); UINT msg = getToolbarIconSetMsg(nullptr);
@ -1096,7 +1113,7 @@ intptr_t CALLBACK ToolbarSubDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM
{ {
if (reinterpret_cast<HWND>(lParam) == _pIconColorPicker->getHSelf()) if (reinterpret_cast<HWND>(lParam) == _pIconColorPicker->getHSelf())
{ {
NppDarkMode::FluentColor colorType = NppDarkMode::FluentColor::custom; FluentColor colorType = FluentColor::custom;
NppDarkMode::setToolbarFluentColor(colorType); NppDarkMode::setToolbarFluentColor(colorType);
nppGUI._tbIconInfo._tbColor = colorType; nppGUI._tbIconInfo._tbColor = colorType;

View File

@ -291,7 +291,7 @@ bool TreeView::setImageList(const std::vector<int>& imageIds, int imgSize)
int dpiImgSize = DPIManagerV2::scale(imgSize, _hParent); int dpiImgSize = DPIManagerV2::scale(imgSize, _hParent);
NppParameters& nppParam = NppParameters::getInstance(); NppParameters& nppParam = NppParameters::getInstance();
const bool useStdIcons = nppParam.getNppGUI()._toolBarStatus == TB_STANDARD; const bool useStdIcons = nppParam.getNppGUI()._tbIconInfo._tbIconSet == TB_STANDARD;
if (_hImaLst != nullptr) if (_hImaLst != nullptr)
{ {
@ -334,7 +334,7 @@ bool TreeView::setImageList(const std::vector<int>& imageIds, int imgSize)
std::vector<int> TreeView::getImageIds(std::vector<int> stdIds, std::vector<int> darkIds, std::vector<int> lightIds) std::vector<int> TreeView::getImageIds(std::vector<int> stdIds, std::vector<int> darkIds, std::vector<int> lightIds)
{ {
NppParameters& nppParam = NppParameters::getInstance(); NppParameters& nppParam = NppParameters::getInstance();
const bool useStdIcons = nppParam.getNppGUI()._toolBarStatus == TB_STANDARD; const bool useStdIcons = nppParam.getNppGUI()._tbIconInfo._tbIconSet == TB_STANDARD;
if (useStdIcons) if (useStdIcons)
{ {
return stdIds; return stdIds;