From b3fdfdd0649c6d186ec0fa358d957ceea2f34cee Mon Sep 17 00:00:00 2001 From: ozone10 Date: Sun, 11 Jul 2021 12:07:57 +0200 Subject: [PATCH] Improve DarkMode toggling Make choosing dark tone to not require turning back to light mode. Close #10141 --- PowerEditor/src/DarkMode/DarkMode.cpp | 2 +- PowerEditor/src/NppDarkMode.cpp | 13 +++------ PowerEditor/src/NppDarkMode.h | 4 +-- .../WinControls/FileBrowser/fileBrowser.cpp | 2 +- .../FunctionList/functionListPanel.cpp | 2 +- .../WinControls/Preference/preferenceDlg.cpp | 9 +++---- .../WinControls/Preference/preference_rc.h | 27 +++++++++---------- .../WinControls/ProjectPanel/ProjectPanel.cpp | 2 +- .../src/WinControls/TreeView/TreeView.cpp | 4 +-- 9 files changed, 28 insertions(+), 37 deletions(-) diff --git a/PowerEditor/src/DarkMode/DarkMode.cpp b/PowerEditor/src/DarkMode/DarkMode.cpp index 4200ad827..537820ba3 100644 --- a/PowerEditor/src/DarkMode/DarkMode.cpp +++ b/PowerEditor/src/DarkMode/DarkMode.cpp @@ -302,7 +302,7 @@ void SetDarkMode(bool useDark, bool fixDarkScrollbar) AllowDarkModeForApp(useDark); //_RefreshImmersiveColorPolicyState(); FlushMenuThemes(); - if (useDark && fixDarkScrollbar) + if (fixDarkScrollbar) { FixDarkScrollBar(); } diff --git a/PowerEditor/src/NppDarkMode.cpp b/PowerEditor/src/NppDarkMode.cpp index 3881279cb..6a03438df 100644 --- a/PowerEditor/src/NppDarkMode.cpp +++ b/PowerEditor/src/NppDarkMode.cpp @@ -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); } } diff --git a/PowerEditor/src/NppDarkMode.h b/PowerEditor/src/NppDarkMode.h index 212f831dc..8d22b2620 100644 --- a/PowerEditor/src/NppDarkMode.h +++ b/PowerEditor/src/NppDarkMode.h @@ -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); } diff --git a/PowerEditor/src/WinControls/FileBrowser/fileBrowser.cpp b/PowerEditor/src/WinControls/FileBrowser/fileBrowser.cpp index c62b31d30..fbe2d3b23 100644 --- a/PowerEditor/src/WinControls/FileBrowser/fileBrowser.cpp +++ b/PowerEditor/src/WinControls/FileBrowser/fileBrowser.cpp @@ -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; } diff --git a/PowerEditor/src/WinControls/FunctionList/functionListPanel.cpp b/PowerEditor/src/WinControls/FunctionList/functionListPanel.cpp index 77426a7a3..187bcdc68 100644 --- a/PowerEditor/src/WinControls/FunctionList/functionListPanel.cpp +++ b/PowerEditor/src/WinControls/FunctionList/functionListPanel.cpp @@ -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; } diff --git a/PowerEditor/src/WinControls/Preference/preferenceDlg.cpp b/PowerEditor/src/WinControls/Preference/preferenceDlg.cpp index af67867e5..592f5ed3a 100644 --- a/PowerEditor/src/WinControls/Preference/preferenceDlg.cpp +++ b/PowerEditor/src/WinControls/Preference/preferenceDlg.cpp @@ -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; } diff --git a/PowerEditor/src/WinControls/Preference/preference_rc.h b/PowerEditor/src/WinControls/Preference/preference_rc.h index c7f176a66..780882e52 100644 --- a/PowerEditor/src/WinControls/Preference/preference_rc.h +++ b/PowerEditor/src/WinControls/Preference/preference_rc.h @@ -31,7 +31,7 @@ #define IDC_RADIO_SMALLICON (IDD_PREFERENCE_SUB_GENRAL + 3) #define IDC_RADIO_BIGICON (IDD_PREFERENCE_SUB_GENRAL + 4) #define IDC_RADIO_STANDARD (IDD_PREFERENCE_SUB_GENRAL + 5) - + #define IDC_TABBAR_GB_STATIC (IDD_PREFERENCE_SUB_GENRAL + 6) #define IDC_CHECK_REDUCE (IDD_PREFERENCE_SUB_GENRAL + 7) #define IDC_CHECK_LOCK (IDD_PREFERENCE_SUB_GENRAL + 8) @@ -79,20 +79,20 @@ #define IDC_RADIO_ARROW (IDD_PREFERENCE_SUB_EDITING + 3) #define IDC_RADIO_CIRCLE (IDD_PREFERENCE_SUB_EDITING + 4) #define IDC_RADIO_BOX (IDD_PREFERENCE_SUB_EDITING + 5) - + #define IDC_CHECK_LINENUMBERMARGE (IDD_PREFERENCE_SUB_EDITING + 6) #define IDC_CHECK_BOOKMARKMARGE (IDD_PREFERENCE_SUB_EDITING + 7) #define IDC_PADDING_STATIC (IDD_PREFERENCE_SUB_EDITING + 8) #define IDC_PADDINGLEFT_STATIC (IDD_PREFERENCE_SUB_EDITING + 9) #define IDC_PADDINGRIGHT_STATIC (IDD_PREFERENCE_SUB_EDITING + 10) - + #define IDC_VES_GB_STATIC (IDD_PREFERENCE_SUB_EDITING + 11) #define IDC_DISTRACTIONFREE_STATIC (IDD_PREFERENCE_SUB_EDITING + 12) #define IDC_CHECK_EDGEBGMODE (IDD_PREFERENCE_SUB_EDITING + 13) #define IDC_CHECK_CURRENTLINEHILITE (IDD_PREFERENCE_SUB_EDITING + 14) #define IDC_CHECK_SMOOTHFONT (IDD_PREFERENCE_SUB_EDITING + 15) - + #define IDC_CARETSETTING_STATIC (IDD_PREFERENCE_SUB_EDITING + 16) #define IDC_WIDTH_STATIC (IDD_PREFERENCE_SUB_EDITING + 17) #define IDC_WIDTH_COMBO (IDD_PREFERENCE_SUB_EDITING + 18) @@ -103,9 +103,9 @@ #define IDC_CHECK_DOCCHANGESTATEMARGE (IDD_PREFERENCE_SUB_EDITING + 23) #define IDC_DISTRACTIONFREE_SLIDER (IDD_PREFERENCE_SUB_EDITING + 24) #define IDC_CHECK_MULTISELECTION (IDD_PREFERENCE_SUB_EDITING + 25) - + #define IDC_RADIO_FOLDMARGENONE (IDD_PREFERENCE_SUB_EDITING + 26) - + #define IDC_LW_GB_STATIC (IDD_PREFERENCE_SUB_EDITING + 27) #define IDC_RADIO_LWDEF (IDD_PREFERENCE_SUB_EDITING + 28) #define IDC_RADIO_LWALIGN (IDD_PREFERENCE_SUB_EDITING + 29) @@ -117,7 +117,7 @@ #define IDC_CHECK_DISABLEADVANCEDSCROLL (IDD_PREFERENCE_SUB_EDITING + 34) #define IDC_CHECK_NOEDGE (IDD_PREFERENCE_SUB_EDITING + 35) #define IDC_CHECK_SCROLLBEYONDLASTLINE (IDD_PREFERENCE_SUB_EDITING + 36) - + #define IDC_STATIC_MULTILNMODE_TIP (IDD_PREFERENCE_SUB_EDITING + 37) #define IDC_COLUMNPOS_EDIT (IDD_PREFERENCE_SUB_EDITING + 38) #define IDC_CHECK_RIGHTCLICKKEEPSSELECTION (IDD_PREFERENCE_SUB_EDITING + 39) @@ -126,7 +126,7 @@ #define IDC_PADDINGLEFTVAL_STATIC (IDD_PREFERENCE_SUB_EDITING + 42) #define IDC_PADDINGRIGHTVAL_STATIC (IDD_PREFERENCE_SUB_EDITING + 43) #define IDC_DISTRACTIONFREEVAL_STATIC (IDD_PREFERENCE_SUB_EDITING + 44) - + #define IDD_PREFERENCE_SUB_DELIMITER 6250 //(IDD_PREFERENCE_BOX + 250) #define IDC_DELIMITERSETTINGS_GB_STATIC (IDD_PREFERENCE_SUB_DELIMITER + 1) #define IDD_STATIC_OPENDELIMITER (IDD_PREFERENCE_SUB_DELIMITER + 2) @@ -147,7 +147,7 @@ #define IDC_WITHCLOUD_RADIO (IDD_PREFERENCE_SUB_CLOUD_LINK + 7) #define IDC_CLOUDPATH_EDIT (IDD_PREFERENCE_SUB_CLOUD_LINK + 8) #define IDD_CLOUDPATH_BROWSE_BUTTON (IDD_PREFERENCE_SUB_CLOUD_LINK + 9) - + #define IDD_PREFERENCE_SUB_SEARCHENGINE 6270 //(IDD_PREFERENCE_BOX + 250) #define IDC_SEARCHENGINES_GB_STATIC (IDD_PREFERENCE_SUB_SEARCHENGINE + 1) #define IDC_SEARCHENGINE_DUCKDUCKGO_RADIO (IDD_PREFERENCE_SUB_SEARCHENGINE + 2) @@ -204,7 +204,7 @@ #define IDC_CHECK_SMARTHILITEUSEFINDSETTINGS (IDD_PREFERENCE_SUB_MISC + 39) #define IDC_CHECK_SMARTHILITEANOTHERRVIEW (IDD_PREFERENCE_SUB_MISC + 40) - //-- xFileEditViewHistoryParameterGUI: Additional Checkbox for enabling the history for restoring the edit view per file. + //-- xFileEditViewHistoryParameterGUI: Additional Checkbox for enabling the history for restoring the edit view per file. #define IDC_CHECK_REMEMBEREDITVIEWPERFILE (IDD_PREFERENCE_SUB_MISC + 41) #define IDC_REMEMBEREDITVIEWPERFILE_STATIC (IDD_PREFERENCE_SUB_MISC + 42) #define IDC_EDIT_REMEMBEREDITVIEWPERFILE (IDD_PREFERENCE_SUB_MISC + 43) @@ -253,10 +253,10 @@ #define IDC_CUSTOMIZELENGTHVAL_STATIC (IDD_PREFERENCE_SUB_NEWDOCUMENT + 28) #define IDC_DISPLAY_STATIC (IDD_PREFERENCE_SUB_NEWDOCUMENT + 29) #define IDC_OPENSAVEDIR_CHECK_DRROPFOLDEROPENFILES (IDD_PREFERENCE_SUB_NEWDOCUMENT + 31) - + #define IDD_PREFERENCE_SUB_DEFAULTDIRECTORY 6450 //(IDD_PREFERENCE_BOX + 400) #define IDD_PREFERENCE_SUB_RECENTFILESHISTORY 6460 //(IDD_PREFERENCE_BOX + 400) - + #define IDD_PREFERENCE_SUB_LANGUAGE 6500 //(IDD_PREFERENCE_BOX + 500) #define IDC_LIST_ENABLEDLANG (IDD_PREFERENCE_SUB_LANGUAGE + 1) #define IDC_LIST_DISABLEDLANG (IDD_PREFERENCE_SUB_LANGUAGE + 2) @@ -288,7 +288,7 @@ #define IDC_MT_STATIC (IDD_PREFERENCE_SUB_PRINT + 13) #define IDC_MR_STATIC (IDD_PREFERENCE_SUB_PRINT + 14) #define IDC_MB_STATIC (IDD_PREFERENCE_SUB_PRINT + 15) - + #define IDD_PREFERENCE_PRINT2_BOX 6700 //(IDD_PREFERENCE_BOX + 700) #define IDC_EDIT_HLEFT (IDD_PREFERENCE_PRINT2_BOX + 1) #define IDC_EDIT_HMIDDLE (IDD_PREFERENCE_PRINT2_BOX + 2) @@ -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) diff --git a/PowerEditor/src/WinControls/ProjectPanel/ProjectPanel.cpp b/PowerEditor/src/WinControls/ProjectPanel/ProjectPanel.cpp index 048c24204..5652a4ec2 100644 --- a/PowerEditor/src/WinControls/ProjectPanel/ProjectPanel.cpp +++ b/PowerEditor/src/WinControls/ProjectPanel/ProjectPanel.cpp @@ -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; } diff --git a/PowerEditor/src/WinControls/TreeView/TreeView.cpp b/PowerEditor/src/WinControls/TreeView/TreeView.cpp index d2bdbe281..8b350cd17 100644 --- a/PowerEditor/src/WinControls/TreeView/TreeView.cpp +++ b/PowerEditor/src/WinControls/TreeView/TreeView.cpp @@ -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,