summaryrefslogtreecommitdiffstats
path: root/gentoo/dev-qt/qt/files/trinity-3.5.13.1..3.5.13.2/qt3-2013-05-04_17_28_30-Fix-ARGB-mode-stippled-focus-rectangle-showing-underlying-window-contents-Fix-TQColor-not-processing-alpha-channel-in-ARGB-mode-d2240de.patch
blob: cb9e29c8ff7f1b1e1c02dadee2f0095646fbd985 (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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
diff --git a/src/kernel/qcolor_x11.cpp b/src/kernel/qcolor_x11.cpp
index eeaee5e..dbd039e 100644
--- a/src/kernel/qcolor_x11.cpp
+++ b/src/kernel/qcolor_x11.cpp
@@ -407,8 +407,14 @@ uint QColor::alloc( int screen )
 	b = sd->blue_shift  > 0 ? b << sd->blue_shift  : b >> -sd->blue_shift;
 	pix = (b & sd->blue_mask) | (g & sd->green_mask) | (r & sd->red_mask)
 	      | ~(sd->blue_mask | sd->green_mask | sd->red_mask);
-	if ( screen == QPaintDevice::x11AppScreen() )
+	if (QPaintDevice::x11AppDepth(screen) == 32) {
+	    int a = qAlpha(d.argb);
+	    pix = pix & 0x00ffffff;
+	    pix = pix | (a << 24);
+	}
+	if ( screen == QPaintDevice::x11AppScreen() ) {
 	    d.d32.pix = pix;
+	}
 	return pix;
     }
     QColorData *c = sd->colorDict->find( (long)(d.argb) );
diff --git a/src/kernel/qpainter_x11.cpp b/src/kernel/qpainter_x11.cpp
index 126c0d6..267887e 100644
--- a/src/kernel/qpainter_x11.cpp
+++ b/src/kernel/qpainter_x11.cpp
@@ -1842,16 +1842,24 @@ void QPainter::drawWinFocusRect( int x, int y, int w, int h,
     RasterOp old_rop = (RasterOp)rop;
 
     if ( xorPaint ) {
-        if ( QColor::numBitPlanes() <= 8 )
+        if ( QColor::numBitPlanes() <= 8 ) {
             setPen( QPen(color1, 0, Qt::FineDotLine) );
-        else
+        }
+        else if ( QColor::numBitPlanes() <= 8 ) {
             setPen( QPen(white, 0, Qt::FineDotLine) );
+        }
+        else {
+            setPen( QPen(QColor(qRgba(255,255,255,0)), 0, Qt::FineDotLine) );
+        }
         setRasterOp( XorROP );
-    } else {
-        if ( qGray( bgColor.rgb() ) < 128 )
+    }
+    else {
+        if ( qGray( bgColor.rgb() ) < 128 ) {
             setPen( QPen(white, 0, Qt::FineDotLine) );
-        else
+        }
+        else {
             setPen( QPen(black, 0, Qt::FineDotLine) );
+        }
     }
 
     if ( testf(ExtDev|VxF|WxF) ) {
@@ -1876,6 +1884,7 @@ void QPainter::drawWinFocusRect( int x, int y, int w, int h,
     XSetLineAttributes( dpy, gc, 1, LineOnOffDash, CapButt, JoinMiter );
 
     XDrawRectangle( dpy, hd, gc, x, y, w-1, h-1 );
+
     XSetLineAttributes( dpy, gc, 0, LineSolid, CapButt, JoinMiter );
     setRasterOp( old_rop );
     setPen( old_pen );