Add initial dark mode support for Shortcut Mapper

- Partially implement #11530.
- Minor tweaks for drawAutocompleteColoursFromTheme to avoid double calling.

Close #11531
This commit is contained in:
ozone10 2022-04-13 08:41:53 +02:00 committed by Don Ho
parent d656c19de0
commit 2dbc25f918
8 changed files with 103 additions and 57 deletions

View File

@ -369,7 +369,13 @@ LRESULT Notepad_plus::init(HWND hwnd)
drawTabbarColoursFromStylerArray();
// Autocomplete list and calltip
drawAutocompleteColoursFromTheme();
const Style* pStyle = NppParameters::getInstance().getGlobalStylers().findByID(STYLE_DEFAULT);
if (pStyle)
{
NppParameters::getInstance().setCurrentDefaultFgColor(pStyle->_fgColor);
NppParameters::getInstance().setCurrentDefaultBgColor(pStyle->_bgColor);
drawAutocompleteColoursFromTheme(pStyle->_fgColor, pStyle->_bgColor);
}
AutoCompletion::drawAutocomplete(_pEditView);
AutoCompletion::drawAutocomplete(_pNonEditView);
@ -5832,40 +5838,33 @@ void Notepad_plus::drawTabbarColoursFromStylerArray()
TabBarPlus::setColour(stInact->_bgColor, TabBarPlus::inactiveBg);
}
void Notepad_plus::drawAutocompleteColoursFromTheme()
void Notepad_plus::drawAutocompleteColoursFromTheme(COLORREF fgColor, COLORREF bgColor)
{
// Update default fg/bg colors in Parameters for both internal/plugins docking dialog
const Style* pStyle = NppParameters::getInstance().getGlobalStylers().findByID(STYLE_DEFAULT);
if (pStyle)
{
NppParameters::getInstance().setCurrentDefaultFgColor(pStyle->_fgColor);
NppParameters::getInstance().setCurrentDefaultBgColor(pStyle->_bgColor);
int rbv = GetRValue(bgColor);
int gbv = GetGValue(bgColor);
int bbv = GetBValue(bgColor);
int rbv = GetRValue(pStyle->_bgColor);
int gbv = GetGValue(pStyle->_bgColor);
int bbv = GetBValue(pStyle->_bgColor);
int rfv = GetRValue(fgColor);
int gfv = GetGValue(fgColor);
int bfv = GetBValue(fgColor);
int rfv = GetRValue(pStyle->_fgColor);
int gfv = GetGValue(pStyle->_fgColor);
int bfv = GetBValue(pStyle->_fgColor);
COLORREF bgDarker = RGB(rbv - 20 <= 0 ? 0 : rbv - 20, gbv - 20 <= 0 ? 0 : gbv - 20, bbv - 20 <= 0 ? 0 : bbv - 20);
COLORREF bgDarker = RGB(rbv - 20 <= 0 ? 0 : rbv - 20, gbv - 20 <= 0 ? 0 : gbv - 20, bbv - 20 <= 0 ? 0 : bbv - 20);
if (bgColor == RGB(0, 0, 0)) // if the bg is pure black
bgDarker = RGB(20, 20, 20); // make bgDarker lighter for distinguishing between both
if (pStyle->_bgColor == RGB(0, 0, 0)) // if the bg is pure black
bgDarker = RGB(20, 20, 20); // make bgDarker lighter for distinguishing between both
COLORREF fgDarker = RGB(rfv - 20 <= 0 ? 0 : rfv - 20, gfv - 20 <= 0 ? 0 : gfv - 20, bfv - 20 <= 0 ? 0 : bfv - 20);
COLORREF fgLigher = RGB(rfv + 20 >= 255 ? 255 : rfv + 20, gfv + 20 >= 255 ? 255 : gfv + 20, bfv + 20 >= 255 ? 255 : bfv + 20);
COLORREF fgDarker = RGB(rfv - 20 <= 0 ? 0 : rfv - 20, gfv - 20 <= 0 ? 0 : gfv - 20, bfv - 20 <= 0 ? 0 : bfv - 20);
COLORREF fgLigher = RGB(rfv + 20 >= 255 ? 255 : rfv + 20, gfv + 20 >= 255 ? 255 : gfv + 20, bfv + 20 >= 255 ? 255 : bfv + 20);
AutoCompletion::setColour(bgDarker, AutoCompletion::AutocompleteColorIndex::autocompleteBg);
AutoCompletion::setColour(bgColor, AutoCompletion::AutocompleteColorIndex::selectedBg);
AutoCompletion::setColour(fgDarker, AutoCompletion::AutocompleteColorIndex::autocompleteText);
AutoCompletion::setColour(fgColor, AutoCompletion::AutocompleteColorIndex::selectedText);
AutoCompletion::setColour(bgDarker, AutoCompletion::AutocompleteColorIndex::autocompleteBg);
AutoCompletion::setColour(pStyle->_bgColor, AutoCompletion::AutocompleteColorIndex::selectedBg);
AutoCompletion::setColour(fgDarker, AutoCompletion::AutocompleteColorIndex::autocompleteText);
AutoCompletion::setColour(pStyle->_fgColor, AutoCompletion::AutocompleteColorIndex::selectedText);
AutoCompletion::setColour(bgDarker, AutoCompletion::AutocompleteColorIndex::calltipBg);
AutoCompletion::setColour(fgDarker, AutoCompletion::AutocompleteColorIndex::calltipText);
AutoCompletion::setColour(fgLigher, AutoCompletion::AutocompleteColorIndex::calltipHighlight);
}
AutoCompletion::setColour(bgDarker, AutoCompletion::AutocompleteColorIndex::calltipBg);
AutoCompletion::setColour(fgDarker, AutoCompletion::AutocompleteColorIndex::calltipText);
AutoCompletion::setColour(fgLigher, AutoCompletion::AutocompleteColorIndex::calltipHighlight);
}
void Notepad_plus::drawDocumentMapColoursFromStylerArray()

View File

@ -585,7 +585,7 @@ private:
Style * getStyleFromName(const TCHAR *styleName);
bool dumpFiles(const TCHAR * outdir, const TCHAR * fileprefix = TEXT("")); //helper func
void drawTabbarColoursFromStylerArray();
void drawAutocompleteColoursFromTheme();
void drawAutocompleteColoursFromTheme(COLORREF fgColor, COLORREF bgColor);
void drawDocumentMapColoursFromStylerArray();
std::vector<generic_string> loadCommandlineParams(const TCHAR * commandLine, const CmdLineParams * pCmdParams) {

View File

@ -1869,18 +1869,18 @@ LRESULT Notepad_plus::process(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPa
drawDocumentMapColoursFromStylerArray();
drawAutocompleteColoursFromTheme();
AutoCompletion::drawAutocomplete(_pEditView);
AutoCompletion::drawAutocomplete(_pNonEditView);
// Update default fg/bg colors in Parameters for both internal/plugins docking dialog
const Style * pStyle = NppParameters::getInstance().getGlobalStylers().findByID(STYLE_DEFAULT);
const Style* pStyle = NppParameters::getInstance().getGlobalStylers().findByID(STYLE_DEFAULT);
if (pStyle)
{
NppParameters::getInstance().setCurrentDefaultFgColor(pStyle->_fgColor);
NppParameters::getInstance().setCurrentDefaultBgColor(pStyle->_bgColor);
drawAutocompleteColoursFromTheme(pStyle->_fgColor, pStyle->_bgColor);
}
AutoCompletion::drawAutocomplete(_pEditView);
AutoCompletion::drawAutocomplete(_pNonEditView);
NppDarkMode::calculateTreeViewStyle();
auto refreshOnlyTreeView = static_cast<LPARAM>(TRUE);

View File

@ -1698,7 +1698,7 @@ namespace NppDarkMode
}
}
BOOL getAutocompleHandleProc(HWND hwnd, LPARAM /*lParam*/)
BOOL CALLBACK enumAutocompleteProc(HWND hwnd, LPARAM /*lParam*/)
{
constexpr size_t classNameLen = 16;
TCHAR className[classNameLen]{};
@ -1707,7 +1707,7 @@ namespace NppDarkMode
(wcscmp(className, WC_LISTBOX) == 0))
{
NppDarkMode::setDarkScrollBar(hwnd);
::EnumChildWindows(hwnd, (WNDENUMPROC)getAutocompleHandleProc, 0);
::EnumChildWindows(hwnd, (WNDENUMPROC)enumAutocompleteProc, 0);
}
return TRUE;
@ -1716,11 +1716,16 @@ namespace NppDarkMode
// set dark scrollbar for autocomplete list
void setDarkAutoCompletion()
{
::EnumThreadWindows(::GetCurrentThreadId(), (WNDENUMPROC)getAutocompleHandleProc, 0);
::EnumThreadWindows(::GetCurrentThreadId(), (WNDENUMPROC)enumAutocompleteProc, 0);
}
LRESULT onCtlColor(HDC hdc)
{
if (!NppDarkMode::isEnabled())
{
return FALSE;
}
::SetTextColor(hdc, NppDarkMode::getTextColor());
::SetBkColor(hdc, NppDarkMode::getBackgroundColor());
return reinterpret_cast<LRESULT>(NppDarkMode::getBackgroundBrush());
@ -1728,6 +1733,11 @@ namespace NppDarkMode
LRESULT onCtlColorSofter(HDC hdc)
{
if (!NppDarkMode::isEnabled())
{
return FALSE;
}
::SetTextColor(hdc, NppDarkMode::getTextColor());
::SetBkColor(hdc, NppDarkMode::getSofterBackgroundColor());
return reinterpret_cast<LRESULT>(NppDarkMode::getSofterBackgroundBrush());
@ -1735,6 +1745,11 @@ namespace NppDarkMode
LRESULT onCtlColorDarker(HDC hdc)
{
if (!NppDarkMode::isEnabled())
{
return FALSE;
}
::SetTextColor(hdc, NppDarkMode::getTextColor());
::SetBkColor(hdc, NppDarkMode::getDarkerBackgroundColor());
return reinterpret_cast<LRESULT>(NppDarkMode::getDarkerBackgroundBrush());
@ -1742,6 +1757,11 @@ namespace NppDarkMode
LRESULT onCtlColorError(HDC hdc)
{
if (!NppDarkMode::isEnabled())
{
return FALSE;
}
::SetTextColor(hdc, NppDarkMode::getTextColor());
::SetBkColor(hdc, NppDarkMode::getErrorBackgroundColor());
return reinterpret_cast<LRESULT>(NppDarkMode::getErrorBackgroundBrush());
@ -1749,19 +1769,14 @@ namespace NppDarkMode
LRESULT onCtlColorDarkerBGStaticText(HDC hdc, bool isTextEnabled)
{
LRESULT result = FALSE;
if (NppDarkMode::isEnabled())
{
::SetTextColor(hdc, isTextEnabled ? NppDarkMode::getTextColor() : NppDarkMode::getDisabledTextColor());
::SetBkColor(hdc, NppDarkMode::getDarkerBackgroundColor());
result = reinterpret_cast<LRESULT>(NppDarkMode::getDarkerBackgroundBrush());
}
else
if (!NppDarkMode::isEnabled())
{
::SetTextColor(hdc, ::GetSysColor(isTextEnabled ? COLOR_WINDOWTEXT : COLOR_GRAYTEXT));
return FALSE;
}
return result;
::SetTextColor(hdc, isTextEnabled ? NppDarkMode::getTextColor() : NppDarkMode::getDisabledTextColor());
::SetBkColor(hdc, NppDarkMode::getDarkerBackgroundColor());
return reinterpret_cast<LRESULT>(NppDarkMode::getDarkerBackgroundBrush());
}
}

View File

@ -165,7 +165,7 @@ namespace NppDarkMode
void setTreeViewStyle(HWND hwnd);
void setBorder(HWND hwnd, bool border = true);
BOOL getAutocompleHandleProc(HWND hwnd, LPARAM lParam);
BOOL CALLBACK enumAutocompleteProc(HWND hwnd, LPARAM lParam);
void setDarkAutoCompletion();
LRESULT onCtlColor(HDC hdc);

View File

@ -28,10 +28,10 @@ void BabyGridWrapper::init(HINSTANCE hInst, HWND parent, int16_t id)
if (!_isRegistered)
RegisterGridClass(_hInst);
_hSelf = ::CreateWindowEx(WS_EX_CLIENTEDGE,
babyGridClassName,\
_hSelf = ::CreateWindowEx(0,
babyGridClassName,\
TEXT(""),\
WS_CHILD | WS_VISIBLE | WS_TABSTOP,\
WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER,\
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0,\
_hParent,\
reinterpret_cast<HMENU>(id), \

View File

@ -24,6 +24,7 @@ using namespace std;
void ShortcutMapper::initTabs()
{
HWND hTab = _hTabCtrl = ::GetDlgItem(_hSelf, IDC_BABYGRID_TABBAR);
NppDarkMode::subclassTabControl(hTab);
TCITEM tie;
tie.mask = TCIF_TEXT;
@ -121,6 +122,8 @@ void ShortcutMapper::initBabyGrid()
_babygrid.init(_hInst, _hSelf, IDD_BABYGRID_ID1);
NppDarkMode::setDarkScrollBar(_babygrid.getHSelf());
_babygrid.setHeaderFont(_hGridFonts.at(GFONT_HEADER));
_babygrid.setRowFont(_hGridFonts.at(GFONT_ROWS));
@ -422,6 +425,8 @@ intptr_t CALLBACK ShortcutMapper::run_dlgProc(UINT message, WPARAM wParam, LPARA
_babygrid.display();
goToCenter();
NppDarkMode::autoSubclassAndThemeChildControls(_hSelf);
RECT rect;
Window::getClientRect(rect);
_clientWidth = rect.right - rect.left;
@ -435,6 +440,33 @@ intptr_t CALLBACK ShortcutMapper::run_dlgProc(UINT message, WPARAM wParam, LPARA
return TRUE;
}
case WM_CTLCOLOREDIT:
{
return NppDarkMode::onCtlColorSofter(reinterpret_cast<HDC>(wParam));
}
case WM_CTLCOLORDLG:
case WM_CTLCOLORSTATIC:
{
return NppDarkMode::onCtlColorDarker(reinterpret_cast<HDC>(wParam));
}
case WM_PRINTCLIENT:
{
if (NppDarkMode::isEnabled())
{
return TRUE;
}
break;
}
case NPPM_INTERNAL_REFRESHDARKMODE:
{
NppDarkMode::autoThemeChildControls(_hSelf);
return TRUE;
}
case WM_GETMINMAXINFO :
{
MINMAXINFO* mmi = (MINMAXINFO*)lParam;

View File

@ -29,11 +29,11 @@ CAPTION "Shortcut mapper"
FONT 8, TEXT("MS Shell Dlg"), 400, 0, 0x1
BEGIN
CONTROL "",IDC_BABYGRID_TABBAR,"SysTabControl32",WS_TABSTOP,4,6,384,12
EDITTEXT IDC_BABYGRID_INFO, 4, 281, 440, 29, ES_MULTILINE | ES_AUTOHSCROLL | ES_READONLY | WS_VSCROLL | NOT WS_TABSTOP
RTEXT "Filter :", IDC_BABYGRID_STATIC, 4, 313, 25, 12
EDITTEXT IDC_BABYGRID_FILTER, 30, 312, 415, 12, ES_AUTOHSCROLL | ES_WANTRETURN | NOT WS_BORDER, WS_EX_STATICEDGE
DEFPUSHBUTTON "Modify",IDM_BABYGRID_MODIFY,118,330,47,14
DEFPUSHBUTTON "Clear",IDM_BABYGRID_CLEAR,172,330,47,14
DEFPUSHBUTTON "Delete",IDM_BABYGRID_DELETE,226,330,47,14
EDITTEXT IDC_BABYGRID_INFO,3,281,443,29,ES_MULTILINE | ES_AUTOHSCROLL | ES_READONLY | WS_VSCROLL | NOT WS_TABSTOP
RTEXT "Filter :", IDC_BABYGRID_STATIC,4,313,25,12
EDITTEXT IDC_BABYGRID_FILTER,31,312,415,12,ES_AUTOHSCROLL | ES_WANTRETURN
PUSHBUTTON "Modify",IDM_BABYGRID_MODIFY,118,330,47,14
PUSHBUTTON "Clear",IDM_BABYGRID_CLEAR,172,330,47,14
PUSHBUTTON "Delete",IDM_BABYGRID_DELETE,226,330,47,14
DEFPUSHBUTTON "Close",IDOK,280,330,47,14
END