diff --git a/ui/effects/animations.h b/ui/effects/animations.h index bdc3a45..a918cfc 100644 --- a/ui/effects/animations.h +++ b/ui/effects/animations.h @@ -10,6 +10,7 @@ #include #include +#include namespace Ui { namespace Animations { diff --git a/ui/gl/gl_detection.cpp b/ui/gl/gl_detection.cpp index 7c7ea3f..91af67f 100644 --- a/ui/gl/gl_detection.cpp +++ b/ui/gl/gl_detection.cpp @@ -79,10 +79,6 @@ Capabilities CheckCapabilities(QWidget *widget) { LOG(("OpenGL: Could not create window for widget.")); return {}; } - if (!widget->window()->windowHandle()->supportsOpenGL()) { - LOG_ONCE(("OpenGL: Not supported for window.")); - return {}; - } format = widget->window()->windowHandle()->format(); format.setAlphaBufferSize(8); widget->window()->windowHandle()->setFormat(format); diff --git a/ui/platform/linux/ui_utility_linux.cpp b/ui/platform/linux/ui_utility_linux.cpp index 9414c55..5066c0b 100644 --- a/ui/platform/linux/ui_utility_linux.cpp +++ b/ui/platform/linux/ui_utility_linux.cpp @@ -21,6 +21,7 @@ #endif // !DESKTOP_APP_DISABLE_X11_INTEGRATION #include +#include #include namespace Ui { @@ -236,9 +237,9 @@ std::optional XCBIsOverlapped( const auto mappedRect = QRect( rect.topLeft() - * widget->devicePixelRatioF() + * widget->windowHandle()->devicePixelRatio() + windowGeometry.topLeft(), - rect.size() * widget->devicePixelRatioF()); + rect.size() * widget->windowHandle()->devicePixelRatio()); const auto cookie = xcb_query_tree(connection, *root); const auto reply = base::Platform::XCB::MakeReplyPointer( @@ -304,7 +305,9 @@ void SetXCBFrameExtents(not_null widget, const QMargins &extents) { return; } - const auto nativeExtents = extents * widget->devicePixelRatioF(); + const auto nativeExtents = extents + * widget->windowHandle()->devicePixelRatio(); + const auto extentsVector = std::vector{ uint(nativeExtents.left()), uint(nativeExtents.right()), @@ -368,7 +371,7 @@ void ShowXCBWindowMenu(not_null widget, const QPoint &point) { } const auto globalPos = point - * widget->devicePixelRatioF() + * widget->windowHandle()->devicePixelRatio() + windowGeometry.topLeft(); xcb_client_message_event_t xev; diff --git a/ui/platform/ui_platform_window.cpp b/ui/platform/ui_platform_window.cpp index 2ce63a2..0a4a70f 100644 --- a/ui/platform/ui_platform_window.cpp +++ b/ui/platform/ui_platform_window.cpp @@ -262,10 +262,10 @@ void DefaultWindowHelper::init() { Qt::WindowStates windowState) { if (const auto handle = window()->windowHandle()) { handle->setFlag(Qt::FramelessWindowHint, titleShown); + updateWindowExtents(); } else { window()->setWindowFlag(Qt::FramelessWindowHint, titleShown); } - updateWindowExtents(); }, window()->lifetime()); window()->events() | rpl::start_with_next([=](not_null e) { @@ -315,7 +315,7 @@ void DefaultWindowHelper::updateRoundingOverlay() { rect.topRight() - QPoint(radiusWithFix, 0), radiusSize )) || clip.intersects(QRect( - rect.bottomRight() - QPoint(0, radiusWithFix), + rect.bottomLeft() - QPoint(0, radiusWithFix), radiusSize )) || clip.intersects(QRect( rect.bottomRight() - QPoint(radiusWithFix, radiusWithFix), diff --git a/ui/platform/win/ui_utility_win.cpp b/ui/platform/win/ui_utility_win.cpp index b63a936..6d3154d 100644 --- a/ui/platform/win/ui_utility_win.cpp +++ b/ui/platform/win/ui_utility_win.cpp @@ -9,6 +9,7 @@ #include "base/platform/win/base_windows_h.h" #include +#include #include #include @@ -75,7 +76,7 @@ std::optional IsOverlapped( const auto nativeRect = [&] { const auto topLeft = [&] { const auto qpoints = rect.topLeft() - * widget->devicePixelRatioF(); + * widget->windowHandle()->devicePixelRatio(); POINT result{ qpoints.x(), qpoints.y(), @@ -85,7 +86,7 @@ std::optional IsOverlapped( }(); const auto bottomRight = [&] { const auto qpoints = rect.bottomRight() - * widget->devicePixelRatioF(); + * widget->windowHandle()->devicePixelRatio(); POINT result{ qpoints.x(), qpoints.y(), @@ -122,7 +123,7 @@ std::optional IsOverlapped( void ShowWindowMenu(not_null widget, const QPoint &point) { const auto handle = HWND(widget->winId()); - const auto mapped = point * widget->devicePixelRatioF(); + const auto mapped = point * widget->windowHandle()->devicePixelRatio(); POINT p{ mapped.x(), mapped.y() }; ClientToScreen(handle, &p); SendMessage( diff --git a/ui/platform/win/ui_window_title_win.cpp b/ui/platform/win/ui_window_title_win.cpp index 4defa64..fdb8b89 100644 --- a/ui/platform/win/ui_window_title_win.cpp +++ b/ui/platform/win/ui_window_title_win.cpp @@ -205,7 +205,8 @@ void TitleWidget::refreshAdditionalPaddings( return -1; } const auto pixels = (factor + 50) / 100; - return int(base::SafeRound(pixels / window()->devicePixelRatioF())); + return int(base::SafeRound( + pixels / window()->windowHandle()->devicePixelRatio())); }(); if (padding < 0) { return; diff --git a/ui/platform/win/ui_window_win.cpp b/ui/platform/win/ui_window_win.cpp index 95957c0..995c8d5 100644 --- a/ui/platform/win/ui_window_win.cpp +++ b/ui/platform/win/ui_window_win.cpp @@ -244,6 +244,18 @@ void WindowHelper::setNativeFrame(bool enabled) { updateMargins(); updateWindowFrameColors(); fixMaximizedWindow(); + SetWindowPos( + _handle, + 0, + 0, + 0, + 0, + 0, + SWP_FRAMECHANGED + | SWP_NOMOVE + | SWP_NOSIZE + | SWP_NOZORDER + | SWP_NOACTIVATE); } void WindowHelper::initialShadowUpdate() { @@ -403,17 +415,14 @@ bool WindowHelper::handleNativeEvent( } return true; case WM_NCCALCSIZE: { - if (_title->isHidden()) { + if (_title->isHidden() || !wParam) { return false; } WINDOWPLACEMENT wp; wp.length = sizeof(WINDOWPLACEMENT); if (GetWindowPlacement(_handle, &wp) && (wp.showCmd == SW_SHOWMAXIMIZED)) { - const auto params = (LPNCCALCSIZE_PARAMS)lParam; - const auto r = (wParam == TRUE) - ? ¶ms->rgrc[0] - : (LPRECT)lParam; + const auto r = &((LPNCCALCSIZE_PARAMS)lParam)->rgrc[0]; const auto hMonitor = MonitorFromPoint( { (r->left + r->right) / 2, (r->top + r->bottom) / 2 }, MONITOR_DEFAULTTONEAREST); @@ -433,8 +442,10 @@ bool WindowHelper::handleNativeEvent( } } } + if (result) *result = 0; + } else { + if (result) *result = WVR_REDRAW; } - if (result) *result = 0; return true; } @@ -444,7 +455,8 @@ bool WindowHelper::handleNativeEvent( } POINT p{ GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam) }; ScreenToClient(_handle, &p); - const auto mapped = QPoint(p.x, p.y) / window()->devicePixelRatioF(); + const auto mapped = QPoint(p.x, p.y) + / window()->windowHandle()->devicePixelRatio(); ShowWindowMenu(window(), mapped); if (result) *result = 0; } return true; @@ -536,7 +548,8 @@ bool WindowHelper::handleNativeEvent( POINT p{ GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam) }; ScreenToClient(_handle, &p); - const auto mapped = QPoint(p.x, p.y) / window()->devicePixelRatioF(); + const auto mapped = QPoint(p.x, p.y) + / window()->windowHandle()->devicePixelRatio(); *result = [&] { if (!window()->rect().contains(mapped)) { return HTTRANSPARENT;