summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobert Griebl <robert.griebl@qt.io>2024-01-26 11:56:04 +0100
committerRobert Griebl <robert.griebl@qt.io>2024-01-30 11:29:48 +0100
commitbcae8071a6d5cf12e28b0403d90e8a0e824f5858 (patch)
tree69475f0431704a82318a0ee4b92d906b0252a752
parentb76b6f0735b0197996ea3c9db111cc3234d20c43 (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>
-rw-r--r--src/application-main-lib/waylandapplicationmanagerwindowimpl.cpp10
-rw-r--r--src/application-main-lib/waylandapplicationmanagerwindowimpl.h1
-rw-r--r--src/shared-main-lib/applicationmanagerwindow.cpp4
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
{