Plugin dark mode customization improvement for tree view

Allow plugins to handle Custom Draw in TreeView controls.

Fix #15077, close #15078
This commit is contained in:
Ovidiu Rădoi 2024-05-03 09:38:15 +03:00 committed by Don Ho
parent 126ad0bc07
commit 8055b5687b
1 changed files with 29 additions and 22 deletions

View File

@ -2707,7 +2707,7 @@ namespace NppDarkMode
return ::DefSubclassProc(hWnd, uMsg, wParam, lParam);
}
LRESULT darkTreeViewNotifyCustomDraw(LPARAM lParam)
LRESULT darkTreeViewNotifyCustomDraw(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, bool isPlugin)
{
auto lptvcd = reinterpret_cast<LPNMTVCUSTOMDRAW>(lParam);
@ -2715,63 +2715,70 @@ namespace NppDarkMode
{
case CDDS_PREPAINT:
{
LRESULT defaultValue = isPlugin ? DefSubclassProc(hWnd, uMsg, wParam, lParam) : CDRF_DODEFAULT;
if (NppDarkMode::isEnabled())
{
return CDRF_NOTIFYITEMDRAW;
return defaultValue | CDRF_NOTIFYITEMDRAW;
}
return CDRF_DODEFAULT;
return defaultValue;
}
case CDDS_ITEMPREPAINT:
{
if ((lptvcd->nmcd.uItemState & CDIS_SELECTED) == CDIS_SELECTED)
LRESULT defaultValue = isPlugin ? DefSubclassProc(hWnd, uMsg, wParam, lParam) : CDRF_DODEFAULT;
if (NppDarkMode::isEnabled() && (lptvcd->nmcd.uItemState & CDIS_SELECTED) == CDIS_SELECTED)
{
lptvcd->clrText = NppDarkMode::getTextColor();
lptvcd->clrTextBk = NppDarkMode::getSofterBackgroundColor();
::FillRect(lptvcd->nmcd.hdc, &lptvcd->nmcd.rc, NppDarkMode::getSofterBackgroundBrush());
return CDRF_NEWFONT | CDRF_NOTIFYPOSTPAINT;
return defaultValue | CDRF_NEWFONT | CDRF_NOTIFYPOSTPAINT;
}
if ((lptvcd->nmcd.uItemState & CDIS_HOT) == CDIS_HOT)
if (NppDarkMode::isEnabled() && (lptvcd->nmcd.uItemState & CDIS_HOT) == CDIS_HOT)
{
lptvcd->clrText = NppDarkMode::getTextColor();
lptvcd->clrTextBk = NppDarkMode::getHotBackgroundColor();
auto notifyResult = CDRF_DODEFAULT;
auto notifyResult = defaultValue;
if (g_isAtLeastWindows10 || g_treeViewStyle == TreeViewStyle::light)
{
::FillRect(lptvcd->nmcd.hdc, &lptvcd->nmcd.rc, NppDarkMode::getHotBackgroundBrush());
notifyResult = CDRF_NOTIFYPOSTPAINT;
notifyResult |= CDRF_NOTIFYPOSTPAINT;
}
return CDRF_NEWFONT | notifyResult;
}
return CDRF_DODEFAULT;
return defaultValue;
}
case CDDS_ITEMPOSTPAINT:
{
RECT rcFrame = lptvcd->nmcd.rc;
rcFrame.left -= 1;
rcFrame.right += 1;
LRESULT defaultValue = isPlugin ? DefSubclassProc(hWnd, uMsg, wParam, lParam) : CDRF_DODEFAULT;
if ((lptvcd->nmcd.uItemState & CDIS_HOT) == CDIS_HOT)
if (NppDarkMode::isEnabled())
{
NppDarkMode::paintRoundFrameRect(lptvcd->nmcd.hdc, rcFrame, NppDarkMode::getHotEdgePen(), 0, 0);
}
else if ((lptvcd->nmcd.uItemState & CDIS_SELECTED) == CDIS_SELECTED)
{
NppDarkMode::paintRoundFrameRect(lptvcd->nmcd.hdc, rcFrame, NppDarkMode::getEdgePen(), 0, 0);
RECT rcFrame = lptvcd->nmcd.rc;
rcFrame.left -= 1;
rcFrame.right += 1;
if ((lptvcd->nmcd.uItemState & CDIS_HOT) == CDIS_HOT)
{
NppDarkMode::paintRoundFrameRect(lptvcd->nmcd.hdc, rcFrame, NppDarkMode::getHotEdgePen(), 0, 0);
}
else if ((lptvcd->nmcd.uItemState & CDIS_SELECTED) == CDIS_SELECTED)
{
NppDarkMode::paintRoundFrameRect(lptvcd->nmcd.hdc, rcFrame, NppDarkMode::getEdgePen(), 0, 0);
}
}
return CDRF_DODEFAULT;
return defaultValue;
}
default:
return CDRF_DODEFAULT;
return isPlugin ? DefSubclassProc(hWnd, uMsg, wParam, lParam) : CDRF_DODEFAULT;
}
}
@ -2891,7 +2898,7 @@ namespace NppDarkMode
if (wcscmp(className, WC_TREEVIEW) == 0)
{
return NppDarkMode::darkTreeViewNotifyCustomDraw(lParam);
return NppDarkMode::darkTreeViewNotifyCustomDraw(hWnd, uMsg, wParam, lParam, true);
}
}
break;
@ -3044,7 +3051,7 @@ namespace NppDarkMode
if (wcscmp(className, WC_TREEVIEW) == 0)
{
return NppDarkMode::darkTreeViewNotifyCustomDraw(lParam);
return NppDarkMode::darkTreeViewNotifyCustomDraw(hWnd, uMsg, wParam, lParam, false);
}
}
break;