summaryrefslogtreecommitdiff
path: root/Tools/qt/patches/qtbase-5.4-fix-QTBUG-77231.patch
blob: 6858e585c6a8997a619564efd3f5e6083c675cab (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
--- a/src/gui/painting/qdrawhelper.cpp	2014-12-05 19:24:36.000000000 +0300
+++ b/src/gui/painting/qdrawhelper.cpp	2019-08-03 15:31:42.034910641 +0300
@@ -3506,8 +3506,10 @@
 }
 
 /*
-   if Sca.Da + Dca.Sa >= Sa.Da
+   if Sca.Da + Dca.Sa > Sa.Da
        Dca' = Sa.Da + Sca.(1 - Da) + Dca.(1 - Sa)
+   else if Sca == Sa
+       Dca' = Dca.Sa + Sca.(1 - Da) + Dca.(1 - Sa)
    otherwise
        Dca' = Dca.Sa/(1-Sca/Sa) + Sca.(1 - Da) + Dca.(1 - Sa)
 */
@@ -3518,8 +3520,10 @@
     const int src_da = src * da;
 
     const int temp = src * (255 - da) + dst * (255 - sa);
-    if (src_da + dst_sa >= sa_da)
+    if (src_da + dst_sa > sa_da)
         return qt_div_255(sa_da + temp);
+    else if (src == sa || sa == 0)
+        return qt_div_255(temp);
     else
         return qt_div_255(255 * dst_sa / (255 - 255 * src / sa) + temp);
 }
@@ -3589,8 +3593,10 @@
 }
 
 /*
-   if Sca.Da + Dca.Sa <= Sa.Da
+   if Sca.Da + Dca.Sa < Sa.Da
        Dca' = Sca.(1 - Da) + Dca.(1 - Sa)
+   else if Sca == 0
+       Dca' = Dca.Sa + Sca.(1 - Da) + Dca.(1 - Sa)
    otherwise
        Dca' = Sa.(Sca.Da + Dca.Sa - Sa.Da)/Sca + Sca.(1 - Da) + Dca.(1 - Sa)
 */
@@ -3602,8 +3608,10 @@
 
     const int temp = src * (255 - da) + dst * (255 - sa);
 
-    if (src == 0 || src_da + dst_sa <= sa_da)
+    if (src_da + dst_sa < sa_da)
         return qt_div_255(temp);
+    else if (src == 0)
+        return qt_div_255(dst_sa + temp);
     return qt_div_255(sa * (src_da + dst_sa - sa_da) / src + temp);
 }