Minor fixes

1. Fix MainWindow example issue
2. Add a comment about the inverted argument
3. Fix some memory leaks

Signed-off-by: Yuhang Zhao <2546789017@qq.com>
This commit is contained in:
Yuhang Zhao 2021-04-01 09:52:38 +08:00
parent 16f7d78035
commit ef34a7c699
6 changed files with 21 additions and 6 deletions

View File

@ -34,6 +34,7 @@
Widget::Widget(QWidget *parent) : QtAcrylicWidget(parent)
{
createWinId();
setAcrylicEnabled(true);
setupUi();
startTimer(500);
}
@ -54,7 +55,6 @@ void Widget::showEvent(QShowEvent *event)
static bool inited = false;
if (!inited) {
FramelessWindowsManager::addWindow(windowHandle());
setAcrylicEnabled(true);
inited = true;
}
}

View File

@ -106,10 +106,13 @@ bool QtAcrylicWinEventFilter::nativeEventFilter(const QByteArray &eventType, voi
shouldUpdate = true;
}
} break;
case WM_DPICHANGED: {
shouldClearWallpaper = true;
shouldUpdate = true;
} break;
case WM_THEMECHANGED:
case WM_DWMCOMPOSITIONCHANGED:
case WM_DWMCOLORIZATIONCOLORCHANGED:
case WM_DPICHANGED:
shouldUpdate = true;
break;
default :

View File

@ -165,6 +165,7 @@ void QtAcrylicMainWindow::showEvent(QShowEvent *event)
m_acrylicHelper.install(windowHandle());
m_acrylicHelper.updateAcrylicBrush(tintColor());
connect(&m_acrylicHelper, &QtAcrylicEffectHelper::needsRepaint, this, qOverload<>(&QtAcrylicMainWindow::update));
Utilities::setBlurEffectEnabled(windowHandle(), m_acrylicEnabled);
m_inited = true;
}
}

View File

@ -164,6 +164,7 @@ void QtAcrylicWidget::showEvent(QShowEvent *event)
m_acrylicHelper.install(windowHandle());
m_acrylicHelper.updateAcrylicBrush(tintColor());
connect(&m_acrylicHelper, &QtAcrylicEffectHelper::needsRepaint, this, qOverload<>(&QtAcrylicWidget::update));
Utilities::setBlurEffectEnabled(windowHandle(), m_acrylicEnabled);
m_inited = true;
}
}

View File

@ -165,6 +165,8 @@ static inline void expblur(QImage &img, const qreal radius, const bool improvedQ
qt_blurrow<aprec, zprec, alphaOnly>(img, row, alpha);
}
}
// TODO: QImage(int width, int height, QImage::Format format)
// Why the argument order is inverted here?
QImage temp(img.height(), img.width(), img.format());
temp.setDevicePixelRatio(img.devicePixelRatio());
if (transposed >= 0) {

View File

@ -514,8 +514,12 @@ QImage Utilities::getDesktopWallpaperImage(const int screen)
if (SUCCEEDED(pDesktopWallpaper->GetMonitorDevicePathAt(monitorIndex, &monitorId)) && monitorId) {
LPWSTR wallpaperPath = nullptr;
if (SUCCEEDED(pDesktopWallpaper->GetWallpaper(monitorId, &wallpaperPath)) && wallpaperPath) {
return QImage(QString::fromWCharArray(wallpaperPath));
CoTaskMemFree(monitorId);
const QString _path = QString::fromWCharArray(wallpaperPath);
CoTaskMemFree(wallpaperPath);
return QImage(_path);
} else {
CoTaskMemFree(monitorId);
qWarning() << "IDesktopWallpaper::GetWallpaper() failed.";
}
} else {
@ -543,10 +547,12 @@ QImage Utilities::getDesktopWallpaperImage(const int screen)
});
#endif
if (SUCCEEDED(CoCreateInstance(CLSID_ActiveDesktop, nullptr, CLSCTX_INPROC_SERVER, IID_IActiveDesktop, reinterpret_cast<void **>(&pActiveDesktop))) && pActiveDesktop) {
WCHAR wallpaperPath[MAX_PATH] = {};
const auto wallpaperPath = new WCHAR[MAX_PATH];
// TODO: AD_GETWP_BMP, AD_GETWP_IMAGE, AD_GETWP_LAST_APPLIED. What's the difference?
if (SUCCEEDED(pActiveDesktop->GetWallpaper(wallpaperPath, MAX_PATH, AD_GETWP_LAST_APPLIED))) {
return QImage(QString::fromWCharArray(wallpaperPath));
const QString _path = QString::fromWCharArray(wallpaperPath);
delete [] wallpaperPath;
return QImage(_path);
} else {
qWarning() << "IActiveDesktop::GetWallpaper() failed.";
}
@ -559,7 +565,9 @@ QImage Utilities::getDesktopWallpaperImage(const int screen)
qDebug() << "Shell API failed. Using SystemParametersInfoW instead.";
LPWSTR wallpaperPath = nullptr;
if (SystemParametersInfoW(SPI_GETDESKWALLPAPER, MAX_PATH, wallpaperPath, 0) != FALSE) {
return QImage(QString::fromWCharArray(wallpaperPath));
const QString _path = QString::fromWCharArray(wallpaperPath);
CoTaskMemFree(wallpaperPath);
return QImage(_path);
}
qWarning() << "SystemParametersInfoW failed. Reading from the registry instead.";
const QSettings settings(g_desktopRegistryKey, QSettings::NativeFormat);