[PATCH v2] gdi32: fix PatBlt() drawing with negative width/height

Damjan Jovanovic damjan.jov at gmail.com
Fri Apr 23 04:25:10 CDT 2021


In a (x, y, w, h) rectangle passed to PatBlt(), a negative w results in
the rectangle drawn being (x+w, y, -w, h), and negative h results in
(x, y+h, w, -h). Wine instead does (x+w+1, y, -w, h) and
(x, y+h+1, w, -h), so the rectangle drawn is misplaced:

Windows
 (0,0)
   +------+
   |+-----++
   ||     ||
   ++-----+|
    +------+
           Wine

This patch recalculates the rectangle dimensions correctly.

Try 2 tests brush patterns and multiple DIB/DDB formats.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=27584
Signed-off-by: Damjan Jovanovic <damjan.jov at gmail.com>
---
 dlls/gdi32/bitblt.c    | 11 ++++++
 dlls/gdi32/tests/dib.c | 86 ++++++++++++++++++++++++------------------
 2 files changed, 61 insertions(+), 36 deletions(-)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.winehq.org/pipermail/wine-devel/attachments/20210423/05d0a4d5/attachment-0001.htm>
-------------- next part --------------
diff --git a/dlls/gdi32/bitblt.c b/dlls/gdi32/bitblt.c
index d2cc746c3fe..445ce1ab1f2 100644
--- a/dlls/gdi32/bitblt.c
+++ b/dlls/gdi32/bitblt.c
@@ -539,6 +539,17 @@ BOOL WINAPI PatBlt( HDC hdc, INT left, INT top, INT width, INT height, DWORD rop
 
         update_dc( dc );
 
+        if (width < 0)
+        {
+            left += width;
+            width = -width;
+        }
+        if (height < 0)
+        {
+            top += height;
+            height = -height;
+        }
+
         dst.log_x      = left;
         dst.log_y      = top;
         dst.log_width  = width;
diff --git a/dlls/gdi32/tests/dib.c b/dlls/gdi32/tests/dib.c
index bdc3d9ed55b..fc43f95c76e 100644
--- a/dlls/gdi32/tests/dib.c
+++ b/dlls/gdi32/tests/dib.c
@@ -80,7 +80,7 @@ static const char *sha1_graphics_a8r8g8b8[] =
     "2426172d9e8fec27d9228088f382ef3c93717da9",
     "9e8f27ca952cdba01dbf25d07c34e86a7820c012",
     "664fac17803859a4015c6ae29e5538e314d5c827",
-    "17b2c177bdce5e94433574a928bda5c94a8cdfa5",
+    "c070896a2188d3b6a0abeb8d5c64b716c441b695",
     "fe6cc678fb13a3ead67839481bf22348adc69f52",
     "d51bd330cec510cdccf5394328bd8e5411901e9e",
     "df4aebf98d91f11be560dd232123b3ae327303d7",
@@ -91,7 +91,7 @@ static const char *sha1_graphics_a8r8g8b8[] =
     "6c530622a025d872a642e8f950867884d7b136cb",
     "7c07d91b8f68fb31821701b3dcb96de018bf0c66",
     "b2261353decda2712b83538ab434a49ce21f3172",
-    "35f731c0f6356b8f30651bb3cbe0d922c49deba5",
+    "a30c8797c21a4b077fd5e7111866601c68953324",
     "9b9874c1c1d92afa554137e191d34ea33acc322f",
     "c311dd74325e8cebfc8529a6d24a6fa4ecb7137e",
     "d7398de15b2837a58a62a701ca1b3384625afec4",
@@ -152,7 +152,7 @@ static const char *sha1_graphics_a8r8g8b8_bitfields[] =
     "2426172d9e8fec27d9228088f382ef3c93717da9",
     "9e8f27ca952cdba01dbf25d07c34e86a7820c012",
     "664fac17803859a4015c6ae29e5538e314d5c827",
-    "17b2c177bdce5e94433574a928bda5c94a8cdfa5",
+    "c070896a2188d3b6a0abeb8d5c64b716c441b695",
     "fe6cc678fb13a3ead67839481bf22348adc69f52",
     "d51bd330cec510cdccf5394328bd8e5411901e9e",
     "df4aebf98d91f11be560dd232123b3ae327303d7",
@@ -163,7 +163,7 @@ static const char *sha1_graphics_a8r8g8b8_bitfields[] =
     "6c530622a025d872a642e8f950867884d7b136cb",
     "7c07d91b8f68fb31821701b3dcb96de018bf0c66",
     "b2261353decda2712b83538ab434a49ce21f3172",
-    "35f731c0f6356b8f30651bb3cbe0d922c49deba5",
+    "a30c8797c21a4b077fd5e7111866601c68953324",
     "9b9874c1c1d92afa554137e191d34ea33acc322f",
     "c311dd74325e8cebfc8529a6d24a6fa4ecb7137e",
     "d7398de15b2837a58a62a701ca1b3384625afec4",
@@ -224,7 +224,7 @@ static const char *sha1_graphics_a8b8g8r8[] =
     "e0bc877697093ed440e125154e247ca9d65e933c",
     "c6d7faf5a502299f99d59eef3f7650bd63dbe108",
     "9d8c05c3ebd786e7d052418e905a80a64bf7853d",
-    "3da12af0a810fd993fa3dbe23328a4fcd2b6c92a",
+    "f6e685c28f56ee4cee61009e99aba283a9e4574f",
     "b91c8f21cc4d7994abc551feff5b6927d267a9db",
     "d49dd2c6a37e975b6dc3d201ccc217a788b30284",
     "ca6753f9eb44529cf8c67cd6abcd4ed1ef758904",
@@ -235,7 +235,7 @@ static const char *sha1_graphics_a8b8g8r8[] =
     "bf57a6a37fb107d29ed3d45695919887abcb7902",
     "3db0f8bcca3d94920aa57be6321202b8c3c08822",
     "1f1fc165a4dae7ba118ddccb58a279bfe3876b0a",
-    "8e09abb108e137c99527ab4c9bd07d95b9254bbb",
+    "b65d84bcdaa0a2c4112a2765702c33afc3c85273",
     "b0178632775d29bec2b16de7b9b8287115c40d0f",
     "ca7e859647b9498b53fdd92543ad8aea98ff46f3",
     "3369889a67d6c79a24ee15f7d14374f9995215e4",
@@ -296,7 +296,7 @@ static const char *sha1_graphics_r10g10b10[] =
     "b340b5d4750dd3dcd95d73c41b2c3a17f799210b",
     "b1db68f35022c5fd43519ec8e98047e16bc4fff8",
     "6e1902eb24865e74066fa9f2a7a49e6f9154f62f",
-    "35df9f4b0965fedf7bca36aa4f17b0fa20e2cd03",
+    "8fb8aea5aef62a13ff31b292ef4259c1e45a7b01",
     "5652e1feb7d4f22c8a2721fd141157e0b9ef965e",
     "22d89d5933f8b9bd60e9b22e42e7f5659269b63d",
     "0ad27de0c916c073d0d18484fff899bbdb258db7",
@@ -307,7 +307,7 @@ static const char *sha1_graphics_r10g10b10[] =
     "ca4b25a5459885ce1e0a36844612087893d425b1",
     "181bd4616796d89174cedc0332fb320b65aeb0e2",
     "6c417b1798ee319eeb404efe4aa136ed7ed37966",
-    "9a9f83e2035aa591d18101c919d1fd5b3456b46c",
+    "d7d1fa3b8c432e5daf688eb2da2f8d7c3b0c368e",
     "74ce9f5658cd8aeae4601fe72fcef07d9f75ec26",
     "536eaaa901d652805a8977ecb2dc73f651094c5b",
     "b8b1ac11bcc7174c5b23c18cc7919d09a04255c2",
@@ -368,7 +368,7 @@ static const char *sha1_graphics_r6g6b6[] =
     "a1adb32e70188a00f82fe58156b4da74f3ef7a0a",
     "5b9dab3d8411afb25fbbeba0313db526815ac189",
     "6415f551e28e1b38b2d721f0a9e003b7d215f6b2",
-    "2028d1b0d1acef35dc07027135023f35fb9746b9",
+    "daecf695dd8e31e79e8749540ccf7014e479ba31",
     "378713720dcb5aadb730435ad0989a68ab189114",
     "084152773feb01a85df6006f2f4f288a1442d37a",
     "97b824953f60fc9a91028045baacbe7b7dc82b14",
@@ -379,7 +379,7 @@ static const char *sha1_graphics_r6g6b6[] =
     "e51bcf80211cd06e7d10225534b7a79b5454be27",
     "9bf91a547f47b29bf370e9b60eae7cd6ce987617",
     "0b94e0a5b739ab0020130646522e53da35a149ad",
-    "eab6e532845dfd5dc2701ef90669a5f7b63e9539",
+    "aefe1a05104dab7c9a5c96ba1ca705aac2d7c693",
     "90deb2e2502186b3c62a58ec9b1c9d2b7b4089c1",
     "a4e451f76a77bbc3e224a41e9b4fa78cb841a8af",
     "084607a5c99a84140d93db57d1b0f3a0f51afdac",
@@ -440,7 +440,7 @@ static const char *sha1_graphics_24[] =
     "edbd7bab3d957fbc85e89612197cf918f5f5af20",
     "6a7efb3b6e0b49336df1bd2937ca09a11d976531",
     "236eb5ca9da70ec7cc719cd2fd291bab14000257",
-    "f98023c7cd8c068f2d7a77ce3600004b90ea12d6",
+    "a3eb1ece6c51500e82a2ea1d6a33cca46ae5ff46",
     "5c4cb9cea2226fc671bb4a11f8253343ee94bb4b",
     "fd4be592483623dbc800fe28210a1f0daa71999b",
     "788b8de98c47974fa9f232a6042ae4ca546ddb7d",
@@ -451,7 +451,7 @@ static const char *sha1_graphics_24[] =
     "0fa8cf332a56bb6d7e14e85861fdd60f51d70501",
     "593d694cdcc8349b3bfc8257041dbcb27e61da45",
     "1036b91d93e31cd1d4740d0c8642e115e5a38188",
-    "1898073cdb35ca4d2b21bba933ac16a0b4297317",
+    "b7c4548dad31005c92c8ac24c5387a6f7d6d0c3f",
     "5068bff794553cf5a3145ae407c9a2984357844c",
     "413a7989969c229dee4ab1798362f32f96cf0a10",
     "0bb222e540b82720d4971e4a2fc626899af03e03",
@@ -512,7 +512,7 @@ static const char *sha1_graphics_r5g5b5[] =
     "847005cf7371f511bcc837251cde07b1796f6113",
     "a8f75743a930843ec14d516cd048b6e0468e5d89",
     "d094f51ce9b9daa9c1d9594ea88be2a2db651459",
-    "cf3928e240c9149788e1635b115a4e5baea0dd8f",
+    "64092fae4a08576b3e3334f732036070e9942ab9",
     "a9034a905daa91757b4f63345c0e40638cd53ca8",
     "15ee915d989e49bb9bab5b834d8f355bd067cd8f",
     "99474fecf11df7b7035c35be6b8b697be9889418",
@@ -523,7 +523,7 @@ static const char *sha1_graphics_r5g5b5[] =
     "420e39ff3bdd04c4b6cc2c98e99cb7993c7a0de5",
     "1fabf0fdd046857b1974e31c1c1764fa9d1a762f",
     "449092689226a1172b6086ba1181d6b6d6499f26",
-    "1a92a60f190d33ef06d9decb56fd3fdd33f3af03",
+    "6ac53acaae75ecde90fb093a643defb5ee1a773d",
     "e61f5978c2e28c0c6d8f5eefe0f840c975586efc",
     "897d16f4d6a6ddad685d23ed7828d4f676539b75",
     "9d21bcfdeaf1ca5d47eb823bdefc24d7a95f4f56",
@@ -583,7 +583,7 @@ static const char *sha1_graphics_r4g4b4[] =
     "cfa0ab83ee93283ad914c3748f0532da1697af1d",
     "8bd18697d1ef27492805667a0bc956343ac08667",
     "e8501c830321584474654f90e40eaf27dc21e6a8",
-    "d95ab10fcfb8447b41742e89f1ae8cd297a32fc4",
+    "004da00e7d36aa719cba49447f1bb752b108e823",
     "821177710961d2cb5f7e7dfc0e06e767b6042753",
     "667124365ffadeea1d8791bedda77a0c7b898de8",
     "c9f23e684b600dea17575b4b17175fbd9106c3a9",
@@ -594,7 +594,7 @@ static const char *sha1_graphics_r4g4b4[] =
     "115a6bd382410a4a1d3c1fa71d8bf02536863e38",
     "65c6d1228e3b6d63d42647f14217bc1658b70d9a",
     "25fcb75aa687aac35b8f72640889fe92413e00c5",
-    "3bddf9d53e89560b083302b146cd33791b13d941",
+    "67773a67ff653c2539a192ed1326db046dbb55a2",
     "a81504498c7a7bb46340ce74476a42f70f2730b1",
     "e61a4f2657a444d8c49f84fb944f9f847667bf2b",
     "32b6e0aa79b7e96cd0ab2da167f6463c011023a8",
@@ -654,7 +654,7 @@ static const char *sha1_graphics_8_color[] =
     "e313bb57f699587b0bae2f17f5da5d977e6f2a61",
     "49024d6cbdf1614327dfda9eda17675e76805f7e",
     "63ba8ab7e7996857d52d4c2b995cfcd304daf25f",
-    "92295ae66712df050cfd6cc9fd2fd4101784c5fc",
+    "eed8cfd234683ef946c944f8adf4c12812ce6f85",
     "84d85009d35ae10abbc435f3913422544105cea2",
     "eae349c2a481d6e8bfdf9a7f4f49384a14716a5f",
     "6c51068ca1db36d948eaa34aed4a44d2cd1e8b32",
@@ -665,7 +665,7 @@ static const char *sha1_graphics_8_color[] =
     "108732d9909ee5f3542a9b90b3ad96ec82446ab9",
     "06c76c53dcf3ba5e213d483e27d841404c9aa90a",
     "ae8fcdbdd44ba58e9bd46a4c56eb54f37483913c",
-    "89711289be6d5c55734878410e4923d5cca9aca9",
+    "91c4edb9368242fafdb5659a763f5431540b1a6e",
     "8355caf57d51ad4e14275943088392e37dc75d33",
     "5992b2e331a0e0f752598cc8d083cbecb5f4dde6",
     "6f0570da9dea7f043f678088f8362ee458cd79fa",
@@ -725,7 +725,7 @@ static const char *sha1_graphics_8_grayscale[] =
     "df35491dd5038187c05bac06921402ba6d7773a8",
     "c8cd6d34e011d5f9ca4b1190eec3b416e5e68e53",
     "66a686ac22cd0ec326f2c97ef473781cabe9690b",
-    "9bddef7b97b8b03569f07011e66ddd67fe82d787",
+    "9b05996004d621dc61f40ff3045723121d5fff56",
     "2a4cea20974bcfb92cf40b05746fc7eb465c4b0f",
     "0a87689ca33f888f05dbfa21ddec11c069990d8b",
     "8d0a92e6333e1b99591962e2def9bc9121111cf5",
@@ -736,7 +736,7 @@ static const char *sha1_graphics_8_grayscale[] =
     "aa66ea7c9b7214339858b9fc9bd4720d05e8c843",
     "114bb377b4e78a1978e1ac09388c48861b5223a3",
     "8d0a92e6333e1b99591962e2def9bc9121111cf5",
-    "9dc511d6947fe816185cdff93bf0cfe0349b72b4",
+    "49a9b6883a8dde39779d97076900a27e16776e17",
     "216388ddf6b563dd2058a9df65b40b6f72df1715",
     "47f72be971bd2d3399dabd018201f4f5075e96fe",
     "f39ab890a2b99d0c31e6e047f2315244972f5ffd",
@@ -797,7 +797,7 @@ static const char *sha1_graphics_8[] =
     "512246d4886ab889a090b167ba194577cb95272e",
     "921e852d4564cb9e5ac15ff68b5207bebea871d1",
     "9636b0ebefc443ea11949ccd28f6ca454277dd41",
-    "aa9050da55e6b6957c60b7d603fce539cb5c0048",
+    "4a233bbc81f5f2252a02c2a969589e54c56498c1",
     "e2b93aca15fb1233ac09a713dced1f4cd950b1e4",
     "3e3a603fc26cc305aa27f88da7d2a3b0073877d8",
     "390b2bf70daba36310683f46af9cd50b9a061396",
@@ -808,7 +808,7 @@ static const char *sha1_graphics_8[] =
     "5ba8f99ca034666effa556748c49a0f5a015125f",
     "b67ba2f55659c75ac72c1112494461bb3086e1a4",
     "73e2859ce849f756f954718ce3c90f02e31712b6",
-    "b1dff0f5dd233b44ee568878c5d3f8ae1d80c6d9",
+    "e3a2a7790ed19c73c49d3cb1a7e1ca5704dac7e7",
     "1f27dc1a1316fb7a4a78fe40fcd4bdae3aaad218",
     "6e375e1485a1e45ac6ab10af49645d5fb2e76dff",
     "cfc67c325c7cdf96d90af9b3cceb8d0504cbb3b0",
@@ -868,7 +868,7 @@ static const char *sha1_graphics_4[] =
     "256d742b4da96b373b4fa5663d0ad3b5faab5c8e",
     "d96d8f4232b930bccd53b903b5efaf8c0bdb16f4",
     "9401799e6116c35e5f0e5bdca07ea25316757a72",
-    "482ae2b0ef1d64752b5ef11cc7f35a33eb55d07c",
+    "b7b31c5b983f3abeffbfe69d3ea81247894ce391",
     "dcfb3e01100b41c0f75a1c5f84b6de6b90138281",
     "2505598845fa026ea7187582461efbf06cb6904f",
     "3981a19363beca8f28d32a5928ac296fd22a5296",
@@ -879,7 +879,7 @@ static const char *sha1_graphics_4[] =
     "665bbbc749a5ffeedc0d62aef0661a5ce845b017",
     "1f26a01730f67d40ea711a50d9d801bac15a642e",
     "3b53d24178cfacba53103a44dfd5d072b15a6781",
-    "c52cfd57f26037723d37192722fc3a217f280c9e",
+    "e7616ed63c6864941d3c75cd67ac95f42fe2ab48",
     "e34da6500cf2e424d980714d92737cf6c31a7bda",
     "d17f4358ae529f920960ed89e535902ee13b0033",
     "0f44e12ecd1ea7e39433890443626d4fc35204a4",
@@ -939,7 +939,7 @@ static const char *sha1_graphics_4_grayscale[] =
     "6611ea6cb24bcf34c5f3688d57e2874aecb39c24",
     "5ab1d3f8f5938c5d20a2fa3237e319077b21e716",
     "1c201d149c0bd886ff8a427ad513f15a70991174",
-    "44646e67842a4d055bea1fad0434e6e4a0eb5465",
+    "2101954b2c2cc636f5d2e776de8c2e1d0d7ecabb",
     "315189097a02024d2eae61d524c4de07a396aee7",
     "73ac786015dea36ac466a6524dba757d5d238ece",
     "6e328cc4d53627f034b23706d8bf26afe18512ae",
@@ -950,7 +950,7 @@ static const char *sha1_graphics_4_grayscale[] =
     "7f1cb06597b14edbea03b860aec3cebc4ebc3d62",
     "ec3879342b5a44f6de6efe946243ae5ade00980d",
     "6e328cc4d53627f034b23706d8bf26afe18512ae",
-    "51b50968a3a0570d5ed690fe44ba1a78a4d62ce2",
+    "b309aee5780f96835a3f8f79df0464acbb131122",
     "d5bab61f78ac3355aa2e0776b2d5d9d71d61e77b",
     "fa47c5195405f6a0eefba3e3a60ad463c7ee94c7",
     "b2bda683edef912957845a33edc055902a801fed",
@@ -1010,7 +1010,7 @@ static const char *sha1_graphics_1[] =
     "61ade9054d4477fb89cf830539a5e8b4e45f0688",
     "ac530c5dbaf837e15b2337347e974184fad73643",
     "95fdcda26262d5948a9ade77d83fd698e0031050",
-    "1dd5cee06af78d026e5da8bfe3f45e1cf51faa13",
+    "f18dde3f44b4f6316dc184bbab5a3404a508bf23",
     "f6b61ecf03ad11752775faca1d4404c6bb5065f5",
     "d7ad44d6f377598268e9968333ae2cf23a0715ca",
     "5871339cd7e6cee12d4dc45934a89071c73efe6b",
@@ -1021,7 +1021,7 @@ static const char *sha1_graphics_1[] =
     "4c686508a994ca4c7a0a73b8c0fe52423c180d9c",
     "b0cc1f5e244ae0c0835a9866a46abdfcd56d1cb1",
     "7ddf19df5bbdf4475b6ec1bc042425e382502864",
-    "144c9a846e5e37ac6efd5ed3a97ec231479e8fca",
+    "8edd1609010d5d60ee00730f3677767105804827",
     "400a21caa01e015096ee1afcf1b54e7f8ec515bd",
     "144c9a846e5e37ac6efd5ed3a97ec231479e8fca",
     "a4964d8bbf80fe785f906bc0f7c5b113242a58fc",
@@ -1083,8 +1083,8 @@ static const char *sha1_graphics_1_ddb[] =
     "ff18f1f84bf1e9c83cedacadba4c10cfd5aaec1e",
     "cc54ff65557b63ed2ffd31af2013e5b9f06f18a6",
     "4325e5d95e1fd395c3bdff4559871aa3bd9d46bc",
-    "4d37b727337f642c71ab962a34ce1dbea638bd55",
-    "8e5c8e6006a11e516b1cf23bdd1d5ba4ff9fd0db",
+    "57cb45c2015687e06401e602b15c8a2aabd0d5b0",
+    "ea1b42368eb9e2c5417987ff40277db50b1a90f8",
     "34c609751431850b92af2ace6c39a69704af2ab9",
     "42cca4bd7471bfdad39b588cb376a8c79226e028",
     "9995abea51677434c840082221520116db3586cc",
@@ -1096,7 +1096,7 @@ static const char *sha1_graphics_1_ddb[] =
     "3f12111d820af648e4b3c2d2bbfbf7862049619f",
     "0e8f567f7dda687840c656be4ddee2647e39cf77",
     "baaef56da8622dd15bb69121cac97a8dc014f1a5",
-    "816e21e1185367ccd6e8e0e6ee16f93e6300b7fb",
+    "986b4609ebe8aa880c701f801246418c873b02c7",
     "86417cc40c76c2258614ce81490795dff20025d6",
     "816e21e1185367ccd6e8e0e6ee16f93e6300b7fb",
     "dd95e98da4fd06d9969e04cc4fcfd6df67296c7d",
@@ -1176,8 +1176,8 @@ static const char *sha1_graphics_1_ddb_inverted[] =
     "ee903dd1611aa68a41f5b46e9ebd2511da36ea32",
     "d8d2f298610311b3d49e03bd3b0ea7f2511a139d",
     "1cb1a544bf6e19780626c02c34756d259a50a77e",
-    "4d37b727337f642c71ab962a34ce1dbea638bd55",
-    "5de18a789a8ecc4ec53ecfe521a8a8294b19113d",
+    "679502d28952f4e7d04f9355ba09053e4de93a87",
+    "ea1b42368eb9e2c5417987ff40277db50b1a90f8",
     "fda1709b9b23e5294fff73e6764f29960ccc1eee",
     "babf8cc5cce61e2da52b1cd1a151c45774aa35d7",
     "c9005d98a9a5890f5b74dca436068e58a31db44d",
@@ -1189,7 +1189,7 @@ static const char *sha1_graphics_1_ddb_inverted[] =
     "3f12111d820af648e4b3c2d2bbfbf7862049619f",
     "0e8f567f7dda687840c656be4ddee2647e39cf77",
     "baaef56da8622dd15bb69121cac97a8dc014f1a5",
-    "816e21e1185367ccd6e8e0e6ee16f93e6300b7fb",
+    "986b4609ebe8aa880c701f801246418c873b02c7",
     "86417cc40c76c2258614ce81490795dff20025d6",
     "816e21e1185367ccd6e8e0e6ee16f93e6300b7fb",
     "dd95e98da4fd06d9969e04cc4fcfd6df67296c7d",
@@ -1269,7 +1269,7 @@ static const RECT graphics_bounds[] =
     { 10, 3, 219, 101 },
     { 100, 100, 301, 301 },
     { 0, 0, 201, 201 },
-    { 10, 10, 110, 320 },
+    { 10, 10, 210, 320 },
     { 10, 99, 300, 200 },
     { 99, 12, 201, 200 },
     { 90, 110, 300, 200 },
@@ -1280,7 +1280,7 @@ static const RECT graphics_bounds[] =
     { 99, 11, 201, 200 },
     { 90, 110, 300, 200 },
     { 90, 110, 300, 200 },
-    { 10, 10, 365, 405 },
+    { 10, 10, 465, 405 },
     { 10, 10, 365, 405 },
     { 10, 10, 365, 405 },
     { 10, 10, 365, 405 },
@@ -1840,6 +1840,18 @@ static void draw_graphics(HDC hdc, const BITMAPINFO *bmi, BYTE *bits)
         }
 
     }
+    for(i=0, y=20; i < 256; i++)
+    {
+        ret = PatBlt(hdc, 210, y, -100, -10, rop3[i]);
+
+        if(rop_uses_src(rop3[i]))
+            ok(ret == FALSE || broken(is_ddb), "got TRUE for %x\n", rop3[i]);
+        else
+        {
+            ok(ret, "got FALSE for %x\n", rop3[i]);
+            y += 20;
+        }
+    }
     compare_hash_broken_todo(hdc, bmi, bits, "solid patblt", is_ddb, is_ddb);
 
     /* clipped lines */
@@ -1956,6 +1968,8 @@ static void draw_graphics(HDC hdc, const BITMAPINFO *bmi, BYTE *bits)
         {
             ret = PatBlt(hdc, 10 + i, y, 100, 20, rop3[i]);
             ok(ret, "got FALSE for %x\n", rop3[i]);
+            ret = PatBlt(hdc, 210 + i, y + 20, -100, -20, rop3[i]);
+            ok(ret, "got FALSE for %x\n", rop3[i]);
             y += 25;
         }
     }


More information about the wine-devel mailing list