Improve DarkMode toggling

Make choosing dark tone to not require turning back to light mode.

Close #10141
This commit is contained in:
ozone10 2021-07-11 12:07:57 +02:00 committed by Don Ho
parent fb91093ccb
commit b3fdfdd064
9 changed files with 28 additions and 37 deletions

View File

@ -302,7 +302,7 @@ void SetDarkMode(bool useDark, bool fixDarkScrollbar)
AllowDarkModeForApp(useDark); AllowDarkModeForApp(useDark);
//_RefreshImmersiveColorPolicyState(); //_RefreshImmersiveColorPolicyState();
FlushMenuThemes(); FlushMenuThemes();
if (useDark && fixDarkScrollbar) if (fixDarkScrollbar)
{ {
FixDarkScrollBar(); FixDarkScrollBar();
} }

View File

@ -217,7 +217,6 @@ namespace NppDarkMode
Options opt; Options opt;
opt.enable = nppGui._darkmode._isEnabled; opt.enable = nppGui._darkmode._isEnabled;
opt.enableMenubar = opt.enable; opt.enableMenubar = opt.enable;
opt.enableScrollbarHack = opt.enable;
g_colorToneChoice = nppGui._darkmode._colorTone; g_colorToneChoice = nppGui._darkmode._colorTone;
@ -229,7 +228,7 @@ namespace NppDarkMode
_options = configuredOptions(); _options = configuredOptions();
initExperimentalDarkMode(); initExperimentalDarkMode();
setDarkMode(_options.enable, _options.enableScrollbarHack); setDarkMode(_options.enable, true);
} }
// attempts to apply new options from NppParameters, sends NPPM_INTERNAL_REFRESHDARKMODE to hwnd's top level parent // attempts to apply new options from NppParameters, sends NPPM_INTERNAL_REFRESHDARKMODE to hwnd's top level parent
@ -274,11 +273,6 @@ namespace NppDarkMode
return _options.enableMenubar; return _options.enableMenubar;
} }
bool isScrollbarHackEnabled()
{
return _options.enableScrollbarHack;
}
bool isExperimentalActive() bool isExperimentalActive()
{ {
return g_darkModeEnabled; return g_darkModeEnabled;
@ -1267,8 +1261,9 @@ namespace NppDarkMode
} }
} }
void redrawTreeViewScrollBar(HWND hwnd) // force scrollbar redraw
void setTreeViewStyle(HWND hwnd)
{ {
SetWindowTheme(hwnd, nullptr, nullptr); //hack to redraw treeview scrollbar SetWindowTheme(hwnd, nullptr, nullptr);
} }
} }

View File

@ -17,7 +17,6 @@ namespace NppDarkMode
{ {
bool enable = false; bool enable = false;
bool enableMenubar = false; bool enableMenubar = false;
bool enableScrollbarHack = false;
}; };
enum class ToolTipsType enum class ToolTipsType
@ -44,7 +43,6 @@ namespace NppDarkMode
bool isEnabled(); bool isEnabled();
bool isDarkMenuEnabled(); bool isDarkMenuEnabled();
bool isScrollbarHackEnabled();
bool isExperimentalSupported(); bool isExperimentalSupported();
COLORREF invertLightness(COLORREF c); COLORREF invertLightness(COLORREF c);
@ -104,5 +102,5 @@ namespace NppDarkMode
void setDarkListView(HWND hwnd); void setDarkListView(HWND hwnd);
void disableVisualStyle(HWND hwnd, bool doDisable); void disableVisualStyle(HWND hwnd, bool doDisable);
void redrawTreeViewScrollBar(HWND hwnd); void setTreeViewStyle(HWND hwnd);
} }

View File

@ -175,7 +175,7 @@ INT_PTR CALLBACK FileBrowser::run_dlgProc(UINT message, WPARAM wParam, LPARAM lP
NppDarkMode::setDarkLineAbovePanelToolbar(_hToolbarMenu); NppDarkMode::setDarkLineAbovePanelToolbar(_hToolbarMenu);
NppDarkMode::setDarkTooltips(_treeView.getHSelf(), NppDarkMode::ToolTipsType::treeview); NppDarkMode::setDarkTooltips(_treeView.getHSelf(), NppDarkMode::ToolTipsType::treeview);
NppDarkMode::redrawTreeViewScrollBar(_treeView.getHSelf()); NppDarkMode::setTreeViewStyle(_treeView.getHSelf());
return TRUE; return TRUE;
} }

View File

@ -870,7 +870,7 @@ INT_PTR CALLBACK FunctionListPanel::run_dlgProc(UINT message, WPARAM wParam, LPA
NppDarkMode::setDarkLineAbovePanelToolbar(_hToolbarMenu); NppDarkMode::setDarkLineAbovePanelToolbar(_hToolbarMenu);
NppDarkMode::setDarkTooltips(_treeView.getHSelf(), NppDarkMode::ToolTipsType::treeview); NppDarkMode::setDarkTooltips(_treeView.getHSelf(), NppDarkMode::ToolTipsType::treeview);
NppDarkMode::redrawTreeViewScrollBar(_treeView.getHSelf()); NppDarkMode::setTreeViewStyle(_treeView.getHSelf());
return TRUE; return TRUE;
} }

View File

@ -858,6 +858,7 @@ INT_PTR CALLBACK DarkModeSubDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM
case WM_COMMAND: case WM_COMMAND:
{ {
bool changed = false; bool changed = false;
bool forceRefresh = false;
switch (wParam) switch (wParam)
{ {
case IDC_CHECK_DARKMODE_ENABLE: case IDC_CHECK_DARKMODE_ENABLE:
@ -885,6 +886,7 @@ INT_PTR CALLBACK DarkModeSubDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM
// For tabbar: uncheck Alternate icons checkbox // For tabbar: uncheck Alternate icons checkbox
::SendMessage(_hParent, PREF_MSG_DISABLETABBARALTERNATEICONS, 0, 0); ::SendMessage(_hParent, PREF_MSG_DISABLETABBARALTERNATEICONS, 0, 0);
} }
changed = true; changed = true;
} }
break; break;
@ -939,20 +941,17 @@ INT_PTR CALLBACK DarkModeSubDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM
nppGUI._darkmode._colorTone = NppDarkMode::oliveTone; nppGUI._darkmode._colorTone = NppDarkMode::oliveTone;
} }
// switch to light mode firstly (to make color change completely)
nppGUI._darkmode._isEnabled = false;
NppDarkMode::refreshDarkMode(_hSelf);
// switch to chosen dark mode // switch to chosen dark mode
nppGUI._darkmode._isEnabled = true; nppGUI._darkmode._isEnabled = true;
NppDarkMode::setDarkTone(nppGUI._darkmode._colorTone); NppDarkMode::setDarkTone(nppGUI._darkmode._colorTone);
changed = true; changed = true;
forceRefresh = true;
break; break;
} }
if (changed) if (changed)
{ {
NppDarkMode::refreshDarkMode(_hSelf); NppDarkMode::refreshDarkMode(_hSelf, forceRefresh);
getFocus(); // to make black mode title bar appear getFocus(); // to make black mode title bar appear
return TRUE; return TRUE;
} }

View File

@ -319,7 +319,6 @@
#define IDC_WHICHPART_STATIC (IDD_PREFERENCE_PRINT2_BOX + 27) #define IDC_WHICHPART_STATIC (IDD_PREFERENCE_PRINT2_BOX + 27)
#define IDC_HEADERFPPTER_GR_STATIC (IDD_PREFERENCE_PRINT2_BOX + 28) #define IDC_HEADERFPPTER_GR_STATIC (IDD_PREFERENCE_PRINT2_BOX + 28)
#define IDD_PREFERENCE_SUB_BACKUP 6800 //(IDD_PREFERENCE_BOX + 800) #define IDD_PREFERENCE_SUB_BACKUP 6800 //(IDD_PREFERENCE_BOX + 800)
#define IDC_BACKUPDIR_GRP_STATIC (IDD_PREFERENCE_SUB_BACKUP + 1) #define IDC_BACKUPDIR_GRP_STATIC (IDD_PREFERENCE_SUB_BACKUP + 1)
#define IDC_BACKUPDIR_CHECK (IDD_PREFERENCE_SUB_BACKUP + 2) #define IDC_BACKUPDIR_CHECK (IDD_PREFERENCE_SUB_BACKUP + 2)

View File

@ -104,7 +104,7 @@ INT_PTR CALLBACK ProjectPanel::run_dlgProc(UINT message, WPARAM wParam, LPARAM l
NppDarkMode::disableVisualStyle(_hToolbarMenu, NppDarkMode::isEnabled()); NppDarkMode::disableVisualStyle(_hToolbarMenu, NppDarkMode::isEnabled());
NppDarkMode::setDarkTooltips(_treeView.getHSelf(), NppDarkMode::ToolTipsType::treeview); NppDarkMode::setDarkTooltips(_treeView.getHSelf(), NppDarkMode::ToolTipsType::treeview);
NppDarkMode::redrawTreeViewScrollBar(_treeView.getHSelf()); NppDarkMode::setTreeViewStyle(_treeView.getHSelf());
return TRUE; return TRUE;
} }

View File

@ -26,9 +26,9 @@ void TreeView::init(HINSTANCE hInst, HWND parent, int treeViewID)
Window::init(hInst, parent); Window::init(hInst, parent);
_hSelf = ::GetDlgItem(parent, treeViewID); _hSelf = ::GetDlgItem(parent, treeViewID);
auto treeViewStyles = WS_HSCROLL | WS_TABSTOP | TVS_LINESATROOT\ const auto treeViewStyles = WS_HSCROLL | WS_TABSTOP | TVS_LINESATROOT\
| TVS_HASLINES | TVS_HASBUTTONS | TVS_SHOWSELALWAYS\ | TVS_HASLINES | TVS_HASBUTTONS | TVS_SHOWSELALWAYS\
| TVS_EDITLABELS | TVS_INFOTIP | TVS_TRACKSELECT; | TVS_EDITLABELS | TVS_INFOTIP;
_hSelf = CreateWindowEx(0, _hSelf = CreateWindowEx(0,
WC_TREEVIEW, WC_TREEVIEW,