From c783bc1fe20e8244773f7def00f19aadaf528b17 Mon Sep 17 00:00:00 2001 From: Yuhang Zhao <2546789017@qq.com> Date: Thu, 12 Nov 2020 11:34:41 +0800 Subject: [PATCH] Minor tweaks. Signed-off-by: Yuhang Zhao <2546789017@qq.com> --- README_win32.md | 2 +- examples/Win32Demo/widget.cpp | 12 +- framelessquickhelper.cpp | 14 +-- framelesswindowsmanager.cpp | 28 ++--- winnativeeventfilter.cpp | 215 ++++++++++++++++------------------ winnativeeventfilter.h | 22 ++-- 6 files changed, 137 insertions(+), 156 deletions(-) diff --git a/README_win32.md b/README_win32.md index 70f753c..ba7296a 100644 --- a/README_win32.md +++ b/README_win32.md @@ -66,7 +66,7 @@ WinNativeEventFilter::addFramelessWindow(&widget, &data); // Or WinNativeEventFilter::setWindowData(&widget, &data); // Or modify the window data of a specific window directly: -const auto data = WinNativeEventFilter::windowData(&widget); +const auto data = WinNativeEventFilter::getWindowData(&widget); if (data) { data->borderWidth = 5; data->borderHeight = 5; diff --git a/examples/Win32Demo/widget.cpp b/examples/Win32Demo/widget.cpp index 80936be..a8988e9 100644 --- a/examples/Win32Demo/widget.cpp +++ b/examples/Win32Demo/widget.cpp @@ -313,18 +313,18 @@ bool Widget::shouldDrawBorder(const bool ignoreWindowState) const bool Widget::shouldDrawThemedBorder(const bool ignoreWindowState) const { - return (shouldDrawBorder(ignoreWindowState) && WinNativeEventFilter::colorizationEnabled()); + return (shouldDrawBorder(ignoreWindowState) && WinNativeEventFilter::isColorizationEnabled()); } bool Widget::shouldDrawThemedTitleBar() const { - return m_bIsWin10OrGreater && WinNativeEventFilter::colorizationEnabled(); + return m_bIsWin10OrGreater && WinNativeEventFilter::isColorizationEnabled(); } QColor Widget::activeBorderColor() { - return WinNativeEventFilter::colorizationEnabled() ? g_cColorizationColor - : g_cDefaultActiveBorderColor; + return WinNativeEventFilter::isColorizationEnabled() ? g_cColorizationColor + : g_cDefaultActiveBorderColor; } QColor Widget::inactiveBorderColor() @@ -583,7 +583,7 @@ void Widget::setupConnections() } WinNativeEventFilter::setBlurEffectEnabled(rawHandle(), enable, color); updateWindow(); - if (useAcrylicEffect && enable && WinNativeEventFilter::transparencyEffectEnabled()) { + if (useAcrylicEffect && enable && WinNativeEventFilter::isTransparencyEffectEnabled()) { QMessageBox::warning(this, tr("BUG Warning!"), tr("You have enabled the transparency effect in the personalize " @@ -630,7 +630,7 @@ void Widget::initializeVariables() m_bIsWin10OrGreater = isWin10OrGreater(); if (m_bIsWin10OrGreater) { m_bCanAcrylicBeEnabled = isWin10OrGreater(g_vAcrylicEffectVersion); - g_cColorizationColor = WinNativeEventFilter::colorizationColor(); + g_cColorizationColor = WinNativeEventFilter::getColorizationColor(); } } diff --git a/framelessquickhelper.cpp b/framelessquickhelper.cpp index d9a9b8a..54cbed6 100644 --- a/framelessquickhelper.cpp +++ b/framelessquickhelper.cpp @@ -111,37 +111,37 @@ bool FramelessQuickHelper::canHaveWindowFrame() const bool FramelessQuickHelper::colorizationEnabled() const { - return WinNativeEventFilter::colorizationEnabled(); + return WinNativeEventFilter::isColorizationEnabled(); } QColor FramelessQuickHelper::colorizationColor() const { - return WinNativeEventFilter::colorizationColor(); + return WinNativeEventFilter::getColorizationColor(); } bool FramelessQuickHelper::lightThemeEnabled() const { - return WinNativeEventFilter::lightThemeEnabled(); + return WinNativeEventFilter::isLightThemeEnabled(); } bool FramelessQuickHelper::darkThemeEnabled() const { - return WinNativeEventFilter::darkThemeEnabled(); + return WinNativeEventFilter::isDarkThemeEnabled(); } bool FramelessQuickHelper::highContrastModeEnabled() const { - return WinNativeEventFilter::highContrastModeEnabled(); + return WinNativeEventFilter::isHighContrastModeEnabled(); } bool FramelessQuickHelper::darkFrameEnabled() const { - return WinNativeEventFilter::darkFrameEnabled(rawHandle()); + return WinNativeEventFilter::isDarkFrameEnabled(rawHandle()); } bool FramelessQuickHelper::transparencyEffectEnabled() const { - return WinNativeEventFilter::transparencyEffectEnabled(); + return WinNativeEventFilter::isTransparencyEffectEnabled(); } #endif diff --git a/framelesswindowsmanager.cpp b/framelesswindowsmanager.cpp index 86c2ba4..3f47746 100644 --- a/framelesswindowsmanager.cpp +++ b/framelesswindowsmanager.cpp @@ -201,7 +201,7 @@ void FramelessWindowsManager::addIgnoreArea(QObject *window, const QRect &area) { Q_ASSERT(window); #ifdef Q_OS_WINDOWS - const auto data = WinNativeEventFilter::windowData(window); + const auto data = WinNativeEventFilter::getWindowData(window); if (data) { data->ignoreAreas.append(area); } @@ -214,7 +214,7 @@ void FramelessWindowsManager::addDraggableArea(QObject *window, const QRect &are { Q_ASSERT(window); #ifdef Q_OS_WINDOWS - const auto data = WinNativeEventFilter::windowData(window); + const auto data = WinNativeEventFilter::getWindowData(window); if (data) { data->draggableAreas.append(area); } @@ -227,7 +227,7 @@ void FramelessWindowsManager::addIgnoreObject(QObject *window, QObject *object) { Q_ASSERT(window); #ifdef Q_OS_WINDOWS - const auto data = WinNativeEventFilter::windowData(window); + const auto data = WinNativeEventFilter::getWindowData(window); if (data) { data->ignoreObjects.append(object); } @@ -240,7 +240,7 @@ void FramelessWindowsManager::addDraggableObject(QObject *window, QObject *objec { Q_ASSERT(window); #ifdef Q_OS_WINDOWS - const auto data = WinNativeEventFilter::windowData(window); + const auto data = WinNativeEventFilter::getWindowData(window); if (data) { data->draggableObjects.append(object); } @@ -265,7 +265,7 @@ void FramelessWindowsManager::setBorderWidth(QObject *window, const int value) { #ifdef Q_OS_WINDOWS Q_ASSERT(window); - const auto data = WinNativeEventFilter::windowData(window); + const auto data = WinNativeEventFilter::getWindowData(window); if (data) { data->borderWidth = value; } @@ -291,7 +291,7 @@ void FramelessWindowsManager::setBorderHeight(QObject *window, const int value) { #ifdef Q_OS_WINDOWS Q_ASSERT(window); - const auto data = WinNativeEventFilter::windowData(window); + const auto data = WinNativeEventFilter::getWindowData(window); if (data) { data->borderHeight = value; } @@ -317,7 +317,7 @@ void FramelessWindowsManager::setTitleBarHeight(QObject *window, const int value { #ifdef Q_OS_WINDOWS Q_ASSERT(window); - const auto data = WinNativeEventFilter::windowData(window); + const auto data = WinNativeEventFilter::getWindowData(window); if (data) { data->titleBarHeight = value; } @@ -331,7 +331,7 @@ bool FramelessWindowsManager::getResizable(QObject *window) { Q_ASSERT(window); #ifdef Q_OS_WINDOWS - const auto data = WinNativeEventFilter::windowData(window); + const auto data = WinNativeEventFilter::getWindowData(window); return data ? !data->fixedSize : true; #else return coreData()->framelessHelper.getResizable(window); @@ -352,7 +352,7 @@ QSize FramelessWindowsManager::getMinimumSize(QObject *window) { Q_ASSERT(window); #ifdef Q_OS_WINDOWS - const auto data = WinNativeEventFilter::windowData(window); + const auto data = WinNativeEventFilter::getWindowData(window); return data ? data->minimumSize : QSize(); #else if (window->isWindowType()) { @@ -374,7 +374,7 @@ void FramelessWindowsManager::setMinimumSize(QObject *window, const QSize &value { Q_ASSERT(window); #ifdef Q_OS_WINDOWS - const auto data = WinNativeEventFilter::windowData(window); + const auto data = WinNativeEventFilter::getWindowData(window); if (data) { data->minimumSize = value; } @@ -397,7 +397,7 @@ QSize FramelessWindowsManager::getMaximumSize(QObject *window) { Q_ASSERT(window); #ifdef Q_OS_WINDOWS - const auto data = WinNativeEventFilter::windowData(window); + const auto data = WinNativeEventFilter::getWindowData(window); return data ? data->maximumSize : QSize(); #else if (window->isWindowType()) { @@ -419,7 +419,7 @@ void FramelessWindowsManager::setMaximumSize(QObject *window, const QSize &value { Q_ASSERT(window); #ifdef Q_OS_WINDOWS - const auto data = WinNativeEventFilter::windowData(window); + const auto data = WinNativeEventFilter::getWindowData(window); if (data) { data->maximumSize = value; } @@ -442,7 +442,7 @@ bool FramelessWindowsManager::getTitleBarEnabled(QObject *window) { Q_ASSERT(window); #ifdef Q_OS_WINDOWS - const auto data = WinNativeEventFilter::windowData(window); + const auto data = WinNativeEventFilter::getWindowData(window); return data ? !data->disableTitleBar : true; #else return coreData()->framelessHelper.getTitleBarEnabled(window); @@ -453,7 +453,7 @@ void FramelessWindowsManager::setTitleBarEnabled(QObject *window, const bool val { Q_ASSERT(window); #ifdef Q_OS_WINDOWS - const auto data = WinNativeEventFilter::windowData(window); + const auto data = WinNativeEventFilter::getWindowData(window); if (data) { data->disableTitleBar = !value; } diff --git a/winnativeeventfilter.cpp b/winnativeeventfilter.cpp index c496af5..0ece571 100644 --- a/winnativeeventfilter.cpp +++ b/winnativeeventfilter.cpp @@ -698,7 +698,6 @@ using WNEF_CORE_DATA = struct _WNEF_CORE_DATA int m_borderWidth = -1, m_borderHeight = -1, m_titleBarHeight = -1; QScopedPointer m_instance; - QList m_framelessWindows = {}; }; } // namespace @@ -1226,9 +1225,6 @@ void install() qApp->removeNativeEventFilter(coreData()->m_instance.data()); coreData()->m_instance.reset(); } - if (!coreData()->m_framelessWindows.isEmpty()) { - coreData()->m_framelessWindows.clear(); - } } // The standard values of border width, border height and title bar height @@ -1261,10 +1257,18 @@ void WinNativeEventFilter::addFramelessWindow(void *window, Q_ASSERT(window); qCoreAppFixup(); const auto hwnd = reinterpret_cast(window); - if (WNEF_EXECUTE_WINAPI_RETURN(IsWindow, FALSE, hwnd) - && !coreData()->m_framelessWindows.contains(hwnd)) { - coreData()->m_framelessWindows.append(hwnd); - createUserData(hwnd, data); + if (WNEF_EXECUTE_WINAPI_RETURN(IsWindow, FALSE, hwnd)) { + createUserData(hwnd); + const auto oldData = getWindowData(window); + if (oldData && oldData->framelessModeEnabled) { + return; + } + const auto newData = new WINDOWDATA; + if (data) { + *newData = *data; + } + newData->framelessModeEnabled = true; + createUserData(hwnd, newData); install(); updateQtFrame_internal(hwnd); if ((x > 0) && (y > 0) && (width > 0) && (height > 0)) { @@ -1291,9 +1295,10 @@ void WinNativeEventFilter::addFramelessWindow(QObject *window, void WinNativeEventFilter::removeFramelessWindow(void *window) { Q_ASSERT(window); - const auto hwnd = reinterpret_cast(window); - if (coreData()->m_framelessWindows.contains(hwnd)) { - coreData()->m_framelessWindows.removeAll(hwnd); + createUserData(reinterpret_cast(window)); + const auto data = getWindowData(window); + if (data) { + data->framelessModeEnabled = false; } } @@ -1303,13 +1308,6 @@ void WinNativeEventFilter::removeFramelessWindow(QObject *window) removeFramelessWindow(getHWNDFromQObject(window)); } -void WinNativeEventFilter::clearFramelessWindows() -{ - if (!coreData()->m_framelessWindows.isEmpty()) { - coreData()->m_framelessWindows.clear(); - } -} - #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)) bool WinNativeEventFilter::nativeEventFilter(const QByteArray &eventType, void *message, @@ -1343,14 +1341,6 @@ bool WinNativeEventFilter::nativeEventFilter(const QByteArray &eventType, // Anyway, we should skip it in this case. return false; } - if (coreData()->m_framelessWindows.isEmpty()) { - // Only top level windows can be frameless. - if (!IsTopLevel(msg->hwnd)) { - return false; - } - } else if (!coreData()->m_framelessWindows.contains(msg->hwnd)) { - return false; - } const auto data = reinterpret_cast( WNEF_EXECUTE_WINAPI_RETURN(GetWindowLongPtrW, 0, msg->hwnd, GWLP_USERDATA)); if (!data) { @@ -1379,6 +1369,9 @@ bool WinNativeEventFilter::nativeEventFilter(const QByteArray &eventType, msg->lParam); return false; } + if (!data->framelessModeEnabled) { + return false; + } if (!data->initialized) { // Avoid initializing a same window twice. data->initialized = true; @@ -1803,99 +1796,89 @@ bool WinNativeEventFilter::nativeEventFilter(const QByteArray &eventType, return true; } const auto isInSpecificAreas = - [](const int x, const int y, const QList &areas, const qreal dpr) -> bool { - if (!areas.isEmpty()) { - for (auto &&area : qAsConst(areas)) { - if (!area.isValid()) { - continue; - } - if (QRectF(area.x() * dpr, - area.y() * dpr, - area.width() * dpr, - area.height() * dpr) - .contains(x, y)) { - return true; - } + [](const QPointF &mousePos, const QList &areas, const qreal dpr) -> bool { + if (areas.isEmpty()) { + return false; + } + for (auto &&area : qAsConst(areas)) { + if (!area.isValid()) { + continue; + } + if (QRectF(area.x() * dpr, + area.y() * dpr, + area.width() * dpr, + area.height() * dpr) + .contains(mousePos)) { + return true; } } return false; }; #if defined(QT_WIDGETS_LIB) || defined(QT_QUICK_LIB) - const auto isInSpecificObjects = [](const int x, - const int y, + const auto isInSpecificObjects = [](const QPointF &mousePos, const QList &objects, const qreal dpr) -> bool { - if (!objects.isEmpty()) { - for (auto &&object : qAsConst(objects)) { - if (!object) { - continue; - } + if (objects.isEmpty()) { + return false; + } + for (auto &&object : qAsConst(objects)) { + if (!object) { + continue; + } #ifdef QT_WIDGETS_LIB - const auto widget = qobject_cast(object); - if (widget) { + const auto widget = qobject_cast(object); + if (widget) { #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)) - const QPointF pos = widget->mapToGlobal(QPointF{0, 0}); + const QPointF pos = widget->mapToGlobal(QPointF{0, 0}); #else - const QPoint pos = widget->mapToGlobal(QPoint{0, 0}); + const QPoint pos = widget->mapToGlobal(QPoint{0, 0}); #endif - if (QRectF(pos.x() * dpr, - pos.y() * dpr, - widget->width() * dpr, - widget->height() * dpr) - .contains(x, y)) { - return true; - } + if (QRectF(pos.x() * dpr, + pos.y() * dpr, + widget->width() * dpr, + widget->height() * dpr) + .contains(mousePos)) { + return true; } + } #endif #ifdef QT_QUICK_LIB - const auto quickItem = qobject_cast(object); - if (quickItem) { - const QPointF pos = quickItem->mapToGlobal(QPointF{0, 0}); - if (QRectF(pos.x() * dpr, - pos.y() * dpr, - quickItem->width() * dpr, - quickItem->height() * dpr) - .contains(x, y)) { - return true; - } + const auto quickItem = qobject_cast(object); + if (quickItem) { + const QPointF pos = quickItem->mapToGlobal(QPointF{0, 0}); + if (QRectF(pos.x() * dpr, + pos.y() * dpr, + quickItem->width() * dpr, + quickItem->height() * dpr) + .contains(mousePos)) { + return true; } -#endif } +#endif } return false; }; #endif - // Don't use HIWORD(lParam) and LOWORD(lParam) to get cursor - // coordinates because their results are unsigned numbers, - // however the cursor position may be negative due to in a - // different monitor. - const POINT globalMouse{GET_X_LPARAM(msg->lParam), GET_Y_LPARAM(msg->lParam)}; - POINT localMouse = globalMouse; - WNEF_EXECUTE_WINAPI(ScreenToClient, msg->hwnd, &localMouse) const qreal dpr = GetDevicePixelRatioForWindow(msg->hwnd); - const bool isInIgnoreAreas = isInSpecificAreas(localMouse.x, - localMouse.y, - data->ignoreAreas, - dpr); + const QPointF globalMouse = QCursor::pos() * dpr; + POINT winLocalMouse = {qRound(globalMouse.x()), qRound(globalMouse.y())}; + WNEF_EXECUTE_WINAPI(ScreenToClient, msg->hwnd, &winLocalMouse) + const QPointF localMouse = {static_cast(winLocalMouse.x), + static_cast(winLocalMouse.y)}; + const bool isInIgnoreAreas = isInSpecificAreas(localMouse, data->ignoreAreas, dpr); const bool customDragAreas = !data->draggableAreas.isEmpty(); const bool isInDraggableAreas = customDragAreas - ? isInSpecificAreas(localMouse.x, - localMouse.y, + ? isInSpecificAreas(localMouse, data->draggableAreas, dpr) : true; #if defined(QT_WIDGETS_LIB) || defined(QT_QUICK_LIB) - // For this purpose, QCursor give more accurate position - // than windows when using several monitors. - const auto qtGlobalMousePos = QCursor::pos() * dpr; - const bool isInIgnoreObjects = isInSpecificObjects(qtGlobalMousePos.x(), - qtGlobalMousePos.y(), + const bool isInIgnoreObjects = isInSpecificObjects(globalMouse, data->ignoreObjects, dpr); const bool customDragObjects = !data->draggableObjects.isEmpty(); const bool isInDraggableObjects = customDragObjects - ? isInSpecificObjects(qtGlobalMousePos.x(), - qtGlobalMousePos.y(), + ? isInSpecificObjects(globalMouse, data->draggableObjects, dpr) : true; @@ -1909,12 +1892,12 @@ bool WinNativeEventFilter::nativeEventFilter(const QByteArray &eventType, #endif const bool customDrag = customDragAreas || customDragObjects; const bool isResizePermitted = !isInIgnoreAreas && !isInIgnoreObjects; - const LONG bh = getSystemMetric(msg->hwnd, SystemMetric::BorderHeight, true); - const LONG tbh = getSystemMetric(msg->hwnd, SystemMetric::TitleBarHeight, true); + const int bh = getSystemMetric(msg->hwnd, SystemMetric::BorderHeight, true); + const int tbh = getSystemMetric(msg->hwnd, SystemMetric::TitleBarHeight, true); const bool isTitleBar = (customDrag ? (isInDraggableAreas && isInDraggableObjects) - : (localMouse.y <= (tbh + bh))) + : (localMouse.y() <= (tbh + bh))) && isResizePermitted && !data->disableTitleBar; - const bool isTop = (localMouse.y <= bh) && isResizePermitted; + const bool isTop = (localMouse.y() <= bh) && isResizePermitted; if (shouldHaveWindowFrame()) { // This will handle the left, right and bottom parts of the frame // because we didn't change them. @@ -1944,28 +1927,26 @@ bool WinNativeEventFilter::nativeEventFilter(const QByteArray &eventType, *result = HTCLIENT; return true; } else { - const auto getHTResult = - [isTitleBar, localMouse, bh, isTop](const HWND _hWnd, - const WINDOWDATA &_data) -> LRESULT { - Q_ASSERT(_hWnd); + const auto getHitTestResult = + [msg, isTitleBar, &localMouse, bh, isTop, data]() -> LRESULT { RECT clientRect = {0, 0, 0, 0}; - WNEF_EXECUTE_WINAPI(GetClientRect, _hWnd, &clientRect) + WNEF_EXECUTE_WINAPI(GetClientRect, msg->hwnd, &clientRect) const LONG ww = clientRect.right; const LONG wh = clientRect.bottom; - const LONG bw = getSystemMetric(_hWnd, SystemMetric::BorderWidth, true); - if (IsMaximized(_hWnd)) { + const int bw = getSystemMetric(msg->hwnd, SystemMetric::BorderWidth, true); + if (IsMaximized(msg->hwnd)) { if (isTitleBar) { return HTCAPTION; } return HTCLIENT; } - const bool isBottom = (localMouse.y >= (wh - bh)); + const bool isBottom = (localMouse.y() >= (wh - bh)); // Make the border a little wider to let the user easy to resize // on corners. const int factor = (isTop || isBottom) ? 2 : 1; - const bool isLeft = (localMouse.x <= (bw * factor)); - const bool isRight = (localMouse.x >= (ww - (bw * factor))); - const bool fixedSize = _data.fixedSize; + const bool isLeft = (localMouse.x() <= (bw * factor)); + const bool isRight = (localMouse.x() >= (ww - (bw * factor))); + const bool fixedSize = data->fixedSize; const auto getBorderValue = [fixedSize](int value) -> int { // HTBORDER: non-resizeable window border. return fixedSize ? HTBORDER : value; @@ -1999,7 +1980,7 @@ bool WinNativeEventFilter::nativeEventFilter(const QByteArray &eventType, } return HTCLIENT; }; - *result = getHTResult(msg->hwnd, *data); + *result = getHitTestResult(); return true; } } @@ -2155,7 +2136,7 @@ void WinNativeEventFilter::setWindowData(QObject *window, const WINDOWDATA *data setWindowData(getHWNDFromQObject(window), data); } -WinNativeEventFilter::WINDOWDATA *WinNativeEventFilter::windowData(void *window) +WinNativeEventFilter::WINDOWDATA *WinNativeEventFilter::getWindowData(void *window) { Q_ASSERT(window); const auto hwnd = reinterpret_cast(window); @@ -2167,10 +2148,10 @@ WinNativeEventFilter::WINDOWDATA *WinNativeEventFilter::windowData(void *window) return nullptr; } -WinNativeEventFilter::WINDOWDATA *WinNativeEventFilter::windowData(QObject *window) +WinNativeEventFilter::WINDOWDATA *WinNativeEventFilter::getWindowData(QObject *window) { Q_ASSERT(window); - return windowData(getHWNDFromQObject(window)); + return getWindowData(getHWNDFromQObject(window)); } void WinNativeEventFilter::setBorderWidth(const int bw) @@ -2386,7 +2367,7 @@ bool WinNativeEventFilter::displaySystemMenu(void *handle, WNEF_EXECUTE_WINAPI(SetMenuItemInfoW, hMenu, SC_MAXIMIZE, FALSE, &mii) WNEF_EXECUTE_WINAPI(SetMenuItemInfoW, hMenu, SC_MINIMIZE, FALSE, &mii) mii.fState = MF_GRAYED; - const auto data = windowData(hwnd); + const auto data = getWindowData(hwnd); const bool fixedSize = data ? data->fixedSize : false; if (fixedSize) { WNEF_EXECUTE_WINAPI(SetMenuItemInfoW, hMenu, SC_SIZE, FALSE, &mii) @@ -2515,7 +2496,7 @@ void WinNativeEventFilter::setWindowResizable(void *handle, const bool resizable Q_ASSERT(handle); const auto hwnd = reinterpret_cast(handle); if (WNEF_EXECUTE_WINAPI_RETURN(IsWindow, FALSE, hwnd)) { - const auto data = windowData(hwnd); + const auto data = getWindowData(hwnd); if (data) { data->fixedSize = !resizable; } @@ -2532,7 +2513,7 @@ void WinNativeEventFilter::setWindowResizable(void *handle, const bool resizable } } -bool WinNativeEventFilter::colorizationEnabled() +bool WinNativeEventFilter::isColorizationEnabled() { if (!isWin10OrGreater()) { return false; @@ -2544,7 +2525,7 @@ bool WinNativeEventFilter::colorizationEnabled() return (ok && colorPrevalence); } -QColor WinNativeEventFilter::colorizationColor() +QColor WinNativeEventFilter::getColorizationColor() { DWORD color = 0; BOOL opaqueBlend = FALSE; @@ -2554,18 +2535,18 @@ QColor WinNativeEventFilter::colorizationColor() : Qt::white; } -bool WinNativeEventFilter::lightThemeEnabled() +bool WinNativeEventFilter::isLightThemeEnabled() { - return !darkThemeEnabled(); + return !isDarkThemeEnabled(); } -bool WinNativeEventFilter::darkThemeEnabled() +bool WinNativeEventFilter::isDarkThemeEnabled() { return coreData()->m_lpShouldSystemUseDarkMode ? coreData()->m_lpShouldSystemUseDarkMode() : false; } -bool WinNativeEventFilter::highContrastModeEnabled() +bool WinNativeEventFilter::isHighContrastModeEnabled() { HIGHCONTRASTW hc; SecureZeroMemory(&hc, sizeof(hc)); @@ -2575,7 +2556,7 @@ bool WinNativeEventFilter::highContrastModeEnabled() : false; } -bool WinNativeEventFilter::darkFrameEnabled(void *handle) +bool WinNativeEventFilter::isDarkFrameEnabled(void *handle) { Q_ASSERT(handle); if (!isWin10OrGreater(17763)) { @@ -2601,7 +2582,7 @@ bool WinNativeEventFilter::darkFrameEnabled(void *handle) return false; } -bool WinNativeEventFilter::transparencyEffectEnabled() +bool WinNativeEventFilter::isTransparencyEffectEnabled() { if (!isWin10OrGreater()) { return false; diff --git a/winnativeeventfilter.h b/winnativeeventfilter.h index 80d0f2c..f95c1ff 100644 --- a/winnativeeventfilter.h +++ b/winnativeeventfilter.h @@ -54,7 +54,8 @@ public: { bool initialized = false /* Internal use only, don't modify it from outside */, fixedSize = false, mouseTransparent = false, restoreDefaultWindowStyle = false, - enableLayeredWindow = false, disableTitleBar = false, enableBlurBehindWindow = false; + enableLayeredWindow = false, disableTitleBar = false, enableBlurBehindWindow = false, + framelessModeEnabled = false; int borderWidth = -1, borderHeight = -1, titleBarHeight = -1; QList ignoreAreas = {}, draggableAreas = {}; QList ignoreObjects = {}, draggableObjects = {}; @@ -87,7 +88,6 @@ public: const int height = -1); static void removeFramelessWindow(void *window /* HWND */); static void removeFramelessWindow(QObject *window); - static void clearFramelessWindows(); // Set borderWidth, borderHeight or titleBarHeight to a negative value to // restore default behavior. @@ -97,8 +97,8 @@ public: static void setWindowData(QObject *window, const WINDOWDATA *data); // You can modify the given window's data directly, it's the same with using // setWindowData. - static WINDOWDATA *windowData(void *window /* HWND */); - static WINDOWDATA *windowData(QObject *window); + static WINDOWDATA *getWindowData(void *window /* HWND */); + static WINDOWDATA *getWindowData(QObject *window); // Change settings globally, not a specific window. // These values will be scaled automatically according to DPI, don't scale @@ -154,25 +154,25 @@ public: static void setWindowResizable(void *handle /* HWND */, const bool resizable = true); // Query whether colorization is enabled or not. - static bool colorizationEnabled(); + static bool isColorizationEnabled(); // Acquire the theme/colorization color set by the user. - static QColor colorizationColor(); + static QColor getColorizationColor(); // Query whether the user is using the light theme or not. - static bool lightThemeEnabled(); + static bool isLightThemeEnabled(); // Query whether the user is using the dark theme or not. - static bool darkThemeEnabled(); + static bool isDarkThemeEnabled(); // Query whether the high contrast mode is enabled or not. - static bool highContrastModeEnabled(); + static bool isHighContrastModeEnabled(); // Query whether the given window is using dark frame or not. - static bool darkFrameEnabled(void *handle /* HWND */); + static bool isDarkFrameEnabled(void *handle /* HWND */); // Query whether the transparency effect is enabled or not. - static bool transparencyEffectEnabled(); + static bool isTransparencyEffectEnabled(); /////////////////////////////////////////////// /// CORE FUNCTION - THE SOUL OF THIS CODE