From 7732f0e56b0a4775d3b577a5d860c307184c8189 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niccol=C3=B2=20Venerandi?= Date: Tue, 30 Jan 2024 13:58:58 +0100 Subject: [PATCH] Ensure that translations never change the size of a contrast effect / blur regions BUG:480434 --- src/plugins/backgroundcontrast/contrast.cpp | 9 +-------- src/plugins/blur/blur.cpp | 9 +-------- 2 files changed, 2 insertions(+), 16 deletions(-) diff --git a/src/plugins/backgroundcontrast/contrast.cpp b/src/plugins/backgroundcontrast/contrast.cpp index 7698783888..4ea7ccb006 100644 --- a/src/plugins/backgroundcontrast/contrast.cpp +++ b/src/plugins/backgroundcontrast/contrast.cpp @@ -417,14 +417,7 @@ void ContrastEffect::drawWindow(const RenderTarget &renderTarget, const RenderVi // Only translated, not scaled } else if (translated) { - QRegion translated; - for (QRect r : shape) { - const QRectF t = QRectF(r).translated(data.xTranslation(), data.yTranslation()); - const QPoint topLeft(std::ceil(t.x()), std::ceil(t.y())); - const QPoint bottomRight(std::floor(t.x() + t.width() - 1), std::floor(t.y() + t.height() - 1)); - translated += QRect(topLeft, bottomRight); - } - shape = translated & region; + shape.translate(std::round(data.xTranslation()), std::round(data.yTranslation())); } if (!shape.isEmpty()) { diff --git a/src/plugins/blur/blur.cpp b/src/plugins/blur/blur.cpp index d16c4135ad..e5feee0bb5 100644 --- a/src/plugins/blur/blur.cpp +++ b/src/plugins/blur/blur.cpp @@ -550,14 +550,7 @@ void BlurEffect::blur(const RenderTarget &renderTarget, const RenderViewport &vi } blurShape = scaledShape; } else if (data.xTranslation() || data.yTranslation()) { - QRegion translated; - for (const QRect &r : blurShape) { - const QRectF t = QRectF(r).translated(data.xTranslation(), data.yTranslation()); - const QPoint topLeft(std::ceil(t.x()), std::ceil(t.y())); - const QPoint bottomRight(std::floor(t.x() + t.width() - 1), std::floor(t.y() + t.height() - 1)); - translated += QRect(topLeft, bottomRight); - } - blurShape = translated; + blurShape.translate(std::round(data.xTranslation()), std::round(data.yTranslation())); } const QRect backgroundRect = blurShape.boundingRect();