diff options
author | Robert Griebl <robert.griebl@qt.io> | 2024-01-26 11:56:04 +0100 |
---|---|---|
committer | Robert Griebl <robert.griebl@qt.io> | 2024-01-30 11:29:48 +0100 |
commit | bcae8071a6d5cf12e28b0403d90e8a0e824f5858 (patch) | |
tree | 69475f0431704a82318a0ee4b92d906b0252a752 | |
parent | b76b6f0735b0197996ea3c9db111cc3234d20c43 (diff) |
Fix AMW.color difference between single and multi-process mode
Change-Id: I75242f768d5766d489ce11c1f0477dc095c51fe8
Pick-to: 6.7
Reviewed-by: Dominik Holland <dominik.holland@qt.io>
3 files changed, 12 insertions, 3 deletions
diff --git a/src/application-main-lib/waylandapplicationmanagerwindowimpl.cpp b/src/application-main-lib/waylandapplicationmanagerwindowimpl.cpp index 8881b452..fb4c88d9 100644 --- a/src/application-main-lib/waylandapplicationmanagerwindowimpl.cpp +++ b/src/application-main-lib/waylandapplicationmanagerwindowimpl.cpp @@ -40,6 +40,8 @@ WaylandApplicationManagerWindowImpl::WaylandApplicationManagerWindowImpl(Applica , m_applicationMain(applicationMain) , m_qwindow(new AMQuickWindowQmlImpl(window)) { + m_color = qUnpremultiply(m_qwindow->color().rgba64()); + QObject::connect(m_qwindow, &AMQuickWindowQmlImpl::windowTitleChanged, window, &ApplicationManagerWindow::titleChanged); QObject::connect(m_qwindow, &AMQuickWindowQmlImpl::xChanged, @@ -347,13 +349,15 @@ void WaylandApplicationManagerWindowImpl::setOpacity(qreal opactity) QColor WaylandApplicationManagerWindowImpl::color() const { - return m_qwindow ? m_qwindow->color() : QColor { }; + return m_qwindow ? m_color : QColor { }; } void WaylandApplicationManagerWindowImpl::setColor(const QColor &c) { - if (m_qwindow) - m_qwindow->setColor(c); + if (m_qwindow) { + m_color = c; // qUnpremultiply(qPremultiply(...)) introduces rounding errors + m_qwindow->setColor(qPremultiply(c.rgba64())); + } } bool WaylandApplicationManagerWindowImpl::isActive() const diff --git a/src/application-main-lib/waylandapplicationmanagerwindowimpl.h b/src/application-main-lib/waylandapplicationmanagerwindowimpl.h index b0eb3d19..eaf638b9 100644 --- a/src/application-main-lib/waylandapplicationmanagerwindowimpl.h +++ b/src/application-main-lib/waylandapplicationmanagerwindowimpl.h @@ -74,6 +74,7 @@ public: private: QPointer<ApplicationMain> m_applicationMain; QPointer<AMQuickWindowQmlImpl> m_qwindow; + QColor m_color; }; diff --git a/src/shared-main-lib/applicationmanagerwindow.cpp b/src/shared-main-lib/applicationmanagerwindow.cpp index 9398f7fe..1d37abeb 100644 --- a/src/shared-main-lib/applicationmanagerwindow.cpp +++ b/src/shared-main-lib/applicationmanagerwindow.cpp @@ -532,6 +532,10 @@ void ApplicationManagerWindow::setOpacity(qreal opacity) The background color for the window. Setting this property is more efficient than using a separate Rectangle. + + \note Since version 6.7, if an alpha channel is used, it needs to be straight alpha. Pre 6.7 + it needed to be pre-multiplied alpha (which is what the \l{Window} QML type still expects) + in multi-process and straight alpha in single-process mode. */ QColor ApplicationManagerWindow::color() const { |