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);
//_RefreshImmersiveColorPolicyState();
FlushMenuThemes();
if (useDark && fixDarkScrollbar)
if (fixDarkScrollbar)
{
FixDarkScrollBar();
}

View File

@ -217,7 +217,6 @@ namespace NppDarkMode
Options opt;
opt.enable = nppGui._darkmode._isEnabled;
opt.enableMenubar = opt.enable;
opt.enableScrollbarHack = opt.enable;
g_colorToneChoice = nppGui._darkmode._colorTone;
@ -229,7 +228,7 @@ namespace NppDarkMode
_options = configuredOptions();
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
@ -274,11 +273,6 @@ namespace NppDarkMode
return _options.enableMenubar;
}
bool isScrollbarHackEnabled()
{
return _options.enableScrollbarHack;
}
bool isExperimentalActive()
{
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 enableMenubar = false;
bool enableScrollbarHack = false;
};
enum class ToolTipsType
@ -44,7 +43,6 @@ namespace NppDarkMode
bool isEnabled();
bool isDarkMenuEnabled();
bool isScrollbarHackEnabled();
bool isExperimentalSupported();
COLORREF invertLightness(COLORREF c);
@ -104,5 +102,5 @@ namespace NppDarkMode
void setDarkListView(HWND hwnd);
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::setDarkTooltips(_treeView.getHSelf(), NppDarkMode::ToolTipsType::treeview);
NppDarkMode::redrawTreeViewScrollBar(_treeView.getHSelf());
NppDarkMode::setTreeViewStyle(_treeView.getHSelf());
return TRUE;
}

View File

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

View File

@ -858,6 +858,7 @@ INT_PTR CALLBACK DarkModeSubDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM
case WM_COMMAND:
{
bool changed = false;
bool forceRefresh = false;
switch (wParam)
{
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
::SendMessage(_hParent, PREF_MSG_DISABLETABBARALTERNATEICONS, 0, 0);
}
changed = true;
}
break;
@ -939,20 +941,17 @@ INT_PTR CALLBACK DarkModeSubDlg::run_dlgProc(UINT message, WPARAM wParam, LPARAM
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
nppGUI._darkmode._isEnabled = true;
NppDarkMode::setDarkTone(nppGUI._darkmode._colorTone);
changed = true;
forceRefresh = true;
break;
}
if (changed)
{
NppDarkMode::refreshDarkMode(_hSelf);
NppDarkMode::refreshDarkMode(_hSelf, forceRefresh);
getFocus(); // to make black mode title bar appear
return TRUE;
}

View File

@ -319,7 +319,6 @@
#define IDC_WHICHPART_STATIC (IDD_PREFERENCE_PRINT2_BOX + 27)
#define IDC_HEADERFPPTER_GR_STATIC (IDD_PREFERENCE_PRINT2_BOX + 28)
#define IDD_PREFERENCE_SUB_BACKUP 6800 //(IDD_PREFERENCE_BOX + 800)
#define IDC_BACKUPDIR_GRP_STATIC (IDD_PREFERENCE_SUB_BACKUP + 1)
#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::setDarkTooltips(_treeView.getHSelf(), NppDarkMode::ToolTipsType::treeview);
NppDarkMode::redrawTreeViewScrollBar(_treeView.getHSelf());
NppDarkMode::setTreeViewStyle(_treeView.getHSelf());
return TRUE;
}

View File

@ -26,9 +26,9 @@ void TreeView::init(HINSTANCE hInst, HWND parent, int treeViewID)
Window::init(hInst, parent);
_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_EDITLABELS | TVS_INFOTIP | TVS_TRACKSELECT;
| TVS_EDITLABELS | TVS_INFOTIP;
_hSelf = CreateWindowEx(0,
WC_TREEVIEW,