summaryrefslogtreecommitdiff
blob: 545bc96d0230dd5c26884fb74565f85a75a72179 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
From aa5fc42349052d040f45aca40749edce80ff8f1f Mon Sep 17 00:00:00 2001
From: ivan tkachenko <me@ratijas.tk>
Date: Fri, 22 Jul 2022 18:43:45 +0300
Subject: [PATCH] effects/colorpicker: Fix picking colors

Due to the wrong buffer format, the function failed with
GL_INVALID_OPERATION error, which was silently ignored by the effect.
It resulted in the constant phantom color being returned over and over
again.

Co-Authored-By: David Edmundson <kde@davidedmundson.co.uk>
BUG: 454974
FIXED-IN: 5.24.7, 5.25.4, 5.26
(cherry picked from commit df6331b60aa03e65f146e93d0229cdc6dc956bbd)
---
 src/effects/colorpicker/colorpicker.cpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/effects/colorpicker/colorpicker.cpp b/src/effects/colorpicker/colorpicker.cpp
index bc60225838..0625b3de47 100644
--- a/src/effects/colorpicker/colorpicker.cpp
+++ b/src/effects/colorpicker/colorpicker.cpp
@@ -61,12 +61,12 @@ void ColorPickerEffect::postPaintScreen()
     effects->postPaintScreen();
 
     if (m_scheduledPosition != QPoint(-1, -1) && (!m_paintedScreen || m_paintedScreen->geometry().contains(m_scheduledPosition))) {
-        uint8_t data[3];
+        uint8_t data[4];
         const QRect geo = GLRenderTarget::virtualScreenGeometry();
         const QPoint screenPosition(m_scheduledPosition.x() - geo.x(), m_scheduledPosition.y() - geo.y());
         const QPoint texturePosition(screenPosition.x() * GLRenderTarget::virtualScreenScale(), (geo.height() - screenPosition.y()) * GLRenderTarget::virtualScreenScale());
 
-        glReadnPixels(texturePosition.x(), texturePosition.y(), 1, 1, GL_RGB, GL_UNSIGNED_BYTE, 3, data);
+        glReadnPixels(texturePosition.x(), texturePosition.y(), 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, 4, data);
         QDBusConnection::sessionBus().send(m_replyMessage.createReply(QColor(data[0], data[1], data[2])));
         m_picking = false;
         m_scheduledPosition = QPoint(-1, -1);
-- 
GitLab