Browse Source

qt: disable acrylic effect when high-contrast theme is used on windows

pull/144/head
Pierre Lamot 3 years ago
committed by Jean-Baptiste Kempf
parent
commit
4d5606c58d
  1. 33
      modules/gui/qt/maininterface/compositor_dcomp_acrylicsurface.cpp
  2. 2
      modules/gui/qt/maininterface/compositor_dcomp_acrylicsurface.hpp

33
modules/gui/qt/maininterface/compositor_dcomp_acrylicsurface.cpp

@ -32,6 +32,15 @@ namespace
bool isTransparencyEnabled()
{
HIGHCONTRAST constrastInfo;
constrastInfo.cbSize = sizeof(HIGHCONTRAST);
bool ret = SystemParametersInfoA(SPI_GETHIGHCONTRAST, constrastInfo.cbSize, &constrastInfo, 0);
bool useHighContrast = ret && ((constrastInfo.dwFlags & HCF_HIGHCONTRASTON) == HCF_HIGHCONTRASTON);
if (useHighContrast)
return false;
static const char *TRANSPARENCY_SETTING_PATH = "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize";
static const char *TRANSPARENCY_SETTING_KEY = "EnableTransparency";
@ -128,16 +137,15 @@ bool CompositorDCompositionAcrylicSurface::nativeEventFilter(const QByteArray &,
{
if (!lstrcmpW(LPCWSTR(msg->lParam), L"ImmersiveColorSet"))
{
const auto transparencyEnabled = isTransparencyEnabled();
if (m_transparencyEnabled == transparencyEnabled)
break;
m_transparencyEnabled = transparencyEnabled;
m_mainCtx->setHasAcrylicSurface(m_transparencyEnabled);
setActive(m_transparencyEnabled && m_mainCtx->acrylicActive());
updateTransparencyState();
}
break;
}
case WM_SYSCOLORCHANGE:
{
updateTransparencyState();
break;
}
}
return false;
@ -173,6 +181,17 @@ bool CompositorDCompositionAcrylicSurface::init(ID3D11Device *device)
return true;
}
void CompositorDCompositionAcrylicSurface::updateTransparencyState()
{
const auto transparencyEnabled = isTransparencyEnabled();
if (m_transparencyEnabled == transparencyEnabled)
return;
m_transparencyEnabled = transparencyEnabled;
m_mainCtx->setHasAcrylicSurface(m_transparencyEnabled);
setActive(m_transparencyEnabled && m_mainCtx->acrylicActive());
}
bool CompositorDCompositionAcrylicSurface::loadFunctions()
try
{

2
modules/gui/qt/maininterface/compositor_dcomp_acrylicsurface.hpp

@ -187,6 +187,8 @@ private:
bool createDesktopVisual();
bool createBackHostVisual();
void updateTransparencyState();
void sync();
void updateVisual();
void commitChanges();

Loading…
Cancel
Save