Title: [93386] trunk
Revision
93386
Author
[email protected]
Date
2011-08-18 21:51:38 -0700 (Thu, 18 Aug 2011)

Log Message

[skia] -webkit-transform breaks -webkit-mask
https://bugs.webkit.org/show_bug.cgi?id=66442

Source/WebCore:

The problem here is that in RenderBox::paintMaskImages, if we are in
a transform with a rotation, scale or skew we set the composite mode to
be DestinationIn and then create a transparency layer, then paint the
mask with SourceOver and end the transparency layer. (The normal case
is just to use DestinationIn to paint the mask.)

In skia when we create transparency layers we don't pass on the composite
mode, so when we end the transparency layer it is composited back using
SourceOver. The fix is to pass on the composite mode when creating
transparency layers in skia.

Patch by Ben Wells <[email protected]> on 2011-08-18
Reviewed by Stephen White.

* platform/graphics/skia/GraphicsContextSkia.cpp:
(WebCore::GraphicsContext::beginTransparencyLayer):
* platform/graphics/skia/PlatformContextSkia.cpp:
(WebCore::PlatformContextSkia::getXfermodeMode):
* platform/graphics/skia/PlatformContextSkia.h:

LayoutTests:

Patch by Ben Wells <[email protected]> on 2011-08-18
Reviewed by Stephen White.

* platform/chromium-linux/fast/css/transformed-mask-expected.png: Added.
* platform/chromium-linux/fast/css/transformed-mask-expected.txt: Added.
* platform/chromium/test_expectations.txt:

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (93385 => 93386)


--- trunk/LayoutTests/ChangeLog	2011-08-19 04:46:33 UTC (rev 93385)
+++ trunk/LayoutTests/ChangeLog	2011-08-19 04:51:38 UTC (rev 93386)
@@ -1,3 +1,14 @@
+2011-08-18  Ben Wells  <[email protected]>
+
+        [skia] -webkit-transform breaks -webkit-mask
+        https://bugs.webkit.org/show_bug.cgi?id=66442
+
+        Reviewed by Stephen White.
+
+        * platform/chromium-linux/fast/css/transformed-mask-expected.png: Added.
+        * platform/chromium-linux/fast/css/transformed-mask-expected.txt: Added.
+        * platform/chromium/test_expectations.txt:
+
 2011-08-18  Kent Tamura  <[email protected]>
 
         REGRESSION(r90971): Null pointer dereference with placeholder and webkit-scrollbar-corner

Modified: trunk/LayoutTests/platform/chromium/test_expectations.txt (93385 => 93386)


--- trunk/LayoutTests/platform/chromium/test_expectations.txt	2011-08-19 04:46:33 UTC (rev 93385)
+++ trunk/LayoutTests/platform/chromium/test_expectations.txt	2011-08-19 04:51:38 UTC (rev 93386)
@@ -2285,9 +2285,6 @@
 BUGCR10479 MAC WIN : svg/hixie/perf/001.xml = PASS IMAGE
 BUGCR10479 MAC WIN : svg/hixie/perf/002.xml = PASS IMAGE
 
-// From r69334. Mask seems broken on the reflected image.
-BUGCR58358 LINUX WIN : fast/css/transformed-mask.html = IMAGE+TEXT
-
 // FileWriter isn't in TestShell yet.
 BUGCR58587 SKIP : fast/filesystem/file-writer-gc-blob.html = FAIL
 
@@ -2971,6 +2968,8 @@
 BUGCR79110 LINUX WIN : fast/block/float/021.html = TEXT
 BUGCR79110 LINUX WIN : fast/overflow/infiniteRecursionGuard.html = IMAGE+TEXT
 
+// Needs rebaseline after fix for wk66442 lands
+BUGWK66442 WIN : fast/css/transformed-mask.html = IMAGE+TEXT
 
 BUGWK58308 LINUX WIN DEBUG GPU : compositing/z-order/negative-z-index.html = PASS CRASH
 

Added: trunk/LayoutTests/platform/chromium-linux/fast/css/transformed-mask-expected.png (0 => 93386)


--- trunk/LayoutTests/platform/chromium-linux/fast/css/transformed-mask-expected.png	                        (rev 0)
+++ trunk/LayoutTests/platform/chromium-linux/fast/css/transformed-mask-expected.png	2011-08-19 04:51:38 UTC (rev 93386)
@@ -0,0 +1,59 @@
+\x89PNG
+
+
+IHDR X')tEXtchecksum01e08d4e6c33000f3c7988c120ef7280\xD2?
+S IDATx\x9C\xED\xDDk\x8C\\xE5y\xF0\xB3\xBE\xEDz\x8D\xC1 &\x848\x86Ĺ\xB4\xF1\x8DP\xD1B'\xD0$J\x85\x8AH\xA9 \xF9U\xFDV\xB5\xA5I\xF1)RU\xB5jDڨP\x9A6JZ%\xA5B"\x94\xAA\x80 \x89i)\xBE\xA2F4P/&\x98b\x8C\x99\xC5^_\xD6k\xEF\xF4\xC3\xD0aؙ\x9D\x9D\xD9}f\xCE{\xCE\xF9\xFD>-\xC3\xECy\x9F9s\xC6\xF3\xDF\xE7\xBC\xE7=#\xF5z= β\xBC( \x98\x80L\xC0&`\xB0\x82	X\xC1,\x80`@0 \x98\x80L\xC0&`\xB0\x82	X\xC1,\x80`@0 \x98\x80lހ\xF5\xD4SO\x8D\xFC\xBF\x8F}\xECc\x8D\xFF\xF8\x8F\xFF\xB8\xF9෿\xFD\xED\xA8"z\xE8\xA1w\xBD\xEB]\x83\xD8\xC2ҷ\\xF8\xC0\xFAz~\xD4~k\x8E;33\xF3\xC5/~\xF1\xE2\x8B/\xBE\xF8\xE2\x8B\xFF\xEA\xAF\xFEj\xE9[\xCE݂\xBBh\xA0\xC7^s\x9E\xFE\xF9\x97^z\xE9R6\xD5\xEF\xB1@/F\xEA\xF5\xFA|\xFF\xEF\xE5\x97_\xFE\xFA׿\xFE裏~\xEF{\xDF[\xBE|y\x96egϞ\xFD\xD5_\xFD\xD5O|\xE2\xB7\xDCr˦M\x9B\xA2\x8A\xB8\xFC\xF2\xCB_x\xE1\x85.\x95,\xE8\x8A+\xAEx\xFE\xF9\xE7۷p\xD9e\x97\xBD\xF8\xE2\x8BK\xD9r5ͷ?\xED\xF6\xDBo\xBF\xEE\xBA뮿\xFE\xFA\x87~\xF8\xF6\xDBo\xE6\x99g\xA2\xB6\x9C\x97\xAD\xA5\xD5]4\xF7\xE7\x95W^y\xF4\xE8QG8@j\xBA\xAC\x86k\xAE\xB9\xE6\xCF\xFE\xEC\xCFn\xB8\xE1\x86,\xCBn\xBA\xE9\xA6\xDF\xFD\xDD\xDF\xFD\xF0\x87?[\xC4\xF4\xF4\xF4\xD8\xD8\xD8R\xBE$\xE6\xDB\xC2ҷ\x9Ce\xD9\xC8\xC8\xC2{\xA9d\x96\xB2\xDF:\xEE\xAE
+6<\xF3\xCC3+W\xAE\\xFA\xA61\xDF.j\xD6r\xECͧ\xB9?7J\xCA;\xA0\x9E\x83u\xFB\xED\xB77\xCE\xE9\xFC\xF3?\xFF\xF3\x9A5k\xA2\xD2U\xBD^?q\xE2D\xE3\xE7\xD1\xD1\xD1%nm\xBE-,}\xCB\xFF\xF5_\xFF\xD5\xE5\xFF\xB6\xBE\x8A2Y\xF4~\x9Bow=\xFF\xFC\xF3\xFD\xA6\xAB\xF6M%\xB5\xB7;\xEE\xA2֚\x97~\xECu\xD1ܟ\x8B\xA5\xFB!ݻ\xA4\xDE\x80\xE4\xD42;;\xBBy\xF3\xE6]\xBBvmڴ\xA9qʣս\xF7޻~\xFD\xFA7\xBD\xE9Mw\xDF}w\xE3\x91\xD6\xCD\xCE7ĝw\xDE966\xF6\x99\xCF|\xA6\xF5\x99O?\xFD\xF45\xD7\\xB3v\xEDگ\xFD\xEB\x8B\xD8~\xEB@\xDF\xFD\xEEw\xDF\xFD\xEEw\x9Fw\xDEy\xF7\xDCsO{=\xF4л\xDF\xFD\xEEg\x9Ey\xE6\xDAk\xAF]\xBBv\xED\xDF\xFC\xCD\xDFt\xEE=\xEFyOc\x94\x9Bo\xBEy\xC1Wq\xEAԩ\xCF}\xEEs\xABW\xAF޼y\xF3\xCF\xFE\xF3.\xB6\xFA\xC67\xBE\xB1q\xE3\xC6+V\~\xF9\xE5\xFD\xD7ݱ\xC2\xC6ɲ\xEC\xF3\x9F\xFF|\xBD^\xFF\x9D\xDF\xF9\x9D\xC6?~\xBC\xB9\x9D\x87~\xF8\xBD\xEF}\xEF\xEEݻ\xB7l\xD92>>\xFEO\xFF\xF4O\x8D\xC7|\xF0\xC1M\x9B6\xD5[:\xF7\xDF\xEBбŽo\xDC|\xA5\xDEu\xD7]\x97^z\xE9\xFB\xDF\xFF\xFE\xD6\xDD\xD5>nc\x9B\xED\xA9\xD7\xEB\xE7Ν\xFB\xC2\xBEp\xC1\xAC_\xBF\xFEo\xFF\xF6o\xDB\xF7|\xFB\xDE\xF9\xDEߎ\x87S\x97#\xA4\xFB\xA15\xA7\xE6\x8EGu\xF7㡽\xEC\xF6\xE7\xCFٟ\xDD\xBF\xEE;\xB6\xF9ͷ\xE6\xDB\xDD\xDFz\xFA\xC7\xF1;\xDF\xF9΅^x\xC7w\xCCy\xFC'?\xF9ɍ7\xDE\xF8\xF2\xCB/\xFF\xFB߿\xE0\x82{\xEC\xB1z\xBD>11\xD1\xFC7\xF7\xBF\xFF\xFB\xBF;\xFE\xFB{\xFE\xF9\xE7OLL4\xBE\xE6_\xAB#˾\xF6\xB5\xAF\xD5j\xB5\x87~x\xFD\xFA\xF5\x8B\xD8~\xF3\x87Gy\xE4\xD7\xFD\xD78P\xABվ\xFC\xE5/\xB7p\xD9e\x975\x86;z\xF4\xE8\x83>x\xF1\xC5w\xAE>O\xD4\xE8\xF8*\xFE\xF0\xFF\xF0\xFE\xE1N\x9F>\xFD\xD0C}\xF4\xA3\xED\xF2`\xAB\xB7\xBD\xEDm\x9C\x99\x99\xF9я~\xB4f͚\x8E\x9E;w\xEE\x89'\x9E\xF8\xA5_\xFA\xA5#G\x8E\xD4\xEB\xF5\xD9\xD9\xD9+\xAE\xB8b\xF7\xEEݭ\xDBiLv\xBE\xFB\xEE\xBB_}\xF5\xD5\\xFD\xF5\xFF\xF2/\xFF\xD2\xDCZ\xBD^\xE5\x95W~\xEF\xF7~\xEF+_\xF9\xCA\xD4\xD4ԧ?\xFD\xE9\xCF\xFE\xF3\xD3\xD3\xD3\xF3U\xD8\xF1U\xB7\x97z\xC9%\x97dY\xF6\xC04\x9F\xD3\xFC\xC5\xE6\xB8s\xB6־\x91z\xBD\xFE'\xF2'\xFA\xA7z\xEAԩo~\xF3\x9B7nl\xFF\xAD\xF6\xBD\xDDoa\xBDN\xF3!Zsj\xEExTw?\xDA\xCB^\xF0\xDD\xE9~\xF8u߱\xAD\xEFQ\xC7\xFD3߮\xE8\xFEv\xD0\xD3?\x8EgϞͲlfff\xCE\xE3\xD7]w\xDD\xC4\xC4D\xE3\xE7o~\xF3\x9B\xBF\xFC˿\xFC\xDAF;\xFD\xEB\xDF\xEA=\xEFy\xCF\xDDw\xDFݺ\xC1\xE6\xD3Ξ=\xBBlٲEl\xBF\xF9\xC3u\xD7]\xF7\xD4SO5~\x9E\x9C\x9Cl/\xE0\xF4\xE9ӭõ\xFE\xE2\x82\xC3uo}\xEB[\x9B\xAD\x85\xF1\xF1\xF1.\xB6\x97\xF4w\xF7w۶mk\x8C5_\x85\xF4G\xF4\xE7\xFE\xE7\xF5z\xFD\xB1\xC7\xBB\xFE\xFA\xEB\xE7l\xA4q\xBE\xA6\xF9\x9F\xBBv\xEDz\xE7;\xDFY\xAF\xD7O\x9D:\xD5\xFA\xF8\xAD\xB7\xDEz\xD7]w}\xF1\x8B_<w\xEE\\x97
+\xE7{\xD5]J\x9D\xF3\x8B\xAD\xE3\xCEyΜ\x8D\xD4\xEB\xF5
+6\xD4j\xB59c\xB5\xFEV\xFB\xDE\xDE\xA7.GH\xF7C\xAB\xE3\xD6\xEAo<\xAA\xBB\xEDe/\xF8\xEE4\xEE\xF8\xCC\xEE;\xB6\xF5=\xEA\xB8\xE6\xDB\xBE\xD7\xEB_\x9F\xBFKV\xADZu\xE2ĉ\xC6\xCFSSS\xA3\xA3\xA3\xEDO\xEE\xF8\x8B\xFC\xAD\xDF\xFA\xAD+\xAF\xBC\xF2\x89'\x9E\xE8\xF2+}m\xBF\xF9\xC3\xEAիϜ9ӽ\x80E\xD7\xFDU4\xA5U\xC7[\xED޽\xFB\x9Ak\xAE\xF9\xF2\x97\xBF\xFC\xD4SOuL$͟8\xB0iӦ\xD9\xD9ٛo\xBE\xB9yp\xBE\xD7u\xE6̙\x8E/\xE1\xDE{\xEF]\xBBvm\xE3
+\xB8.v|\xD5\x96:_\xE5\xADv\xDC\xC8\xF2\xE5˻\xD7о\xB7\xFB-lq\x87S=\xE2\xD0j\xFDy\xC1\xE3a\xCEf|w\xBAoy\xC1\xBB\xB8\x8F[\xF7\xB7\x80%\xACm۶\xDDw\xDF}\x8D\x9F>\xFC\xA1}\xA8\xF9\xE4\xD9\xD9\xD9\xE6ύ\xF3P\xED}\xF4\xD1
+6\xB4o\xBF\xF9s_\xDBo\xFE\xD6g?\xFB\xD9\xFF\xF8\x8F\xFFh\xFC\xFCꫯv,\xA0\xDF\xE1:\xD6\xDF\xFE*\xB6m\xDB\xD6|\xFC\xDB\xDF\xFEv\x97[]y啍\xBE\xC8ѣG\xBB\xC1\xD7\xEB\xF5\x8F}\xECc\xDF\xFAַ\xDE\xF2\x96\xB7tܫY\x965\xC0\xD3O?\xBDe˖\xF6-\{\xED\xB5\xF9\x97\xF9\x9B\xBF\xF9\x9B\xCDG:V\xD8\xF1U/X\xEA|\x95\xB7>\xD8q#_|\xF1ٳg\xDB_ΜGZ\xF7v\xBF\x85-\xEEp\xAAGZ\xF57f\xCD;\xEDe\xB7?\xBF\xF7-/\xB8c\xFB:\xFE\xE7\xD46\xDF\xDB\xC0\xC2kvv\xF6\xA7?\xFDi\x96e?\xF9\xC9O\x9A'\x95\x9Ex≍7\xFE\xE7\xFE\xE7\xE1Ço\xB9\xE5\x96]\xBBv5\xBF袋~\xF8\xE1Z\xADָ\xFC\xF0\xF2\xCB/\x9F;j\x96\xDD{\xEF\xBD?\xFF\xF9\xCF\xDF\xF4\xA67\xD5\xEB\xF5\x83fYv\xE8Сz\xBD\xFE\xE2\x8B/fY\xF6\x8B_\xFC\xA2\xAF\xED?\xF7\xDCsY\x965\x96nz\xF1\xC5?\xF0\x81\xFC\xFB\xBF\xFF\xFB\xD4\xD4\xD4m\xB7ݖe\xD9e\x97]\xD6:zc\xDAMc\xB8^xa\xC1\xE1V\xACX\xF1\xA3\xFD\xA8yFi\xBEWQ\xAF׿\xF4\xA5/}\xEB[ߚ\x9A\x9A\xBA\xE7\x9E{>\xFE\xF1\x8Fwy\xB0պu\xEB\xEE\xBF\xFF\xFEC\x87}\xF5\xAB_]\xB6l\xD9ɓ'竰^\xAF?\xF0\xC0ccc_\xFAҗ:\xBEYY\x96\xFD\xFE\xEF\xFF\xFE\xB1c\xC7:\xF4\x91\x8F|\xA4\xF1-\xDB\xD89\xCF=\xF7\xDC\xC4\xC4\xC4\xCD7\xDF|\xCF=\xF7\xD4\xEB\xF5{\xEE\xB9\xE7\xB7\xFB\xB7_~\xF9\xE5\x8E\xB6\xEE\xCF\xEE\xA5\xFE\xE2\xBFȲ\xEC\xF4\xE9\xD3\xCD\xE74wWs\xDC\xC6s\xF6\xEC\xD93\xDFF\xEA\xF5\xFA-\xB7\xDC\xF2\xC8#\x8F\x9C;w\xEEg?\xFB\xD9UW]վ\xE7\xDB\xF7v\xBF\x85\xF5~8ͷ\xFF<\xB4Zk\x9E\xEF\xA8\xEE~<\xB4\x97\xDD\xFE\xFC\xD6\xFD\xD9\xFANu\xDCr\xF7\xDB|\x8F\xE6\xDB?\xF3\xED\x8A\xEEo\xAC\xEC\x8D\xE6\xFC\xDF;\xEF\xBCsݺu\x97]vٽ\xF7\xDE\xDB|\xF0\xAB_\xFD\xEA\x9A5k\xAE\xBE\xFA꧟~zӦM>\xF8`\xFB6\xFF\xFE\xEF\xFF\xFE\xFC\xF3Ͽ\xF3\xCE;[\x87\x98\xF3s\xEF۟\xF3[\xFB\xF7\xEF\xE7;\xDFy\xF9\xE5\x97\xEF{\xDF{\xC7;\xDE\xF1o\xFF\xF6o_Q\x8F\xC3}\x{1B37FD}\xF0\xC2}\xF4\xD1^\xAF;v즛nZ\xB5j\xD5\xF6\xEDۛ\x97qu|\xB0\xD5׾\xF6\xB5\xF1\xF1\xF1_\xF9\x95_\x99\x9C\x9C|\xEF{\xDF\xFB\x85/|\xA1K\x85333\xE3\xE3\xE3\xCF>\xFBl\xFBvO\xBE뮻\xC6\xC7\xC7\xDF\xFAַ6/\xD0\xCB\xDA\xCC\xD9l{\x85\xF3\xBD\xDD\xF3\x95z\xC5W\xB4\xEF\xAE\xF6ql\xDFH\xBD^?|\xF8\xF0o\xFC\xC6o\x8C\x8D\x8Dm߾\xFD\xFF\xF1\xDB\xF7|\xFB\xDE\xF9\xDE\xDF\xEE\x87S_\x87VǗ\xBF\xE0ޞ\xF3\xCE)\xBB˻3g\xC7v\xDCr\xF7;\xE7յ\xEF\x9F\xF9^E\xFB\xDB\xF1k\xBF\xF6k\xED\xEF@eYo\xB0`~\xFC\xE3\xFF\xC5_\xFCſ\xFE\xEB\xBFv\xFC\xBF\x90\x80\xB8\xD9s\x91\xCC\xCC\xCC\xDCq\xC7\xF0\xD0\xF1\xFF>|8˲\xC6\xD9( G\x85\xB1u\xEB֣G\x8F~\xE3\xDF\xF8\xC8G>\xD2\xF1	###\x8D\xBC\xA7\x90/ \x98S\x84\xC1,\x80`@0 \x98\x80L\xC0&`\xB0\x82	X\xC1,\x80`@0 \x98\x80L\xC0&`\xB0\x82	X\xC1,\x80`@0 \x98\x80L\xC0&`\xB0\x82	X\xC1,\x80`@0 \x98\x80lE\xDE\x90\xB4\xDBn\xBBm\xF7\xEE\xDD[\xB7nݶmۆ
+>\xF8\xC1\xE6]\xC0H\xBD^ϻ\xD2\xF5\xFE\xF7\xBF׮]\xAD\x8Flܸq\xEB֭[\xB6lٺu\xEB\xDB\xDF\xFE\xF6-[\xB6\xE4U$K\xC0\xA2\x9B\x91\x91\x91\x9F\xB3cǎ\x8D7nذaǎ[\xB6lY\xB7n\xDD
+\x80\x94	X\xCCk\xEF޽۶m\xEB\xF7\xB7.\xBC\xF0\xC2F\xCBYE*K\xC0b^<\xF0\xC0M7ݴ\xF4\xED8\xAB@՘\xE4μ\x9E|\xF2ɐ\xEDLLLLLL\xDC\xFF\xFD\xCDG\x9CU\xA0\xDCt\xB0\x98ק?\xFD\xE9\xFB\xEE\xBBo9\xAB@\xC9X\xCC몫\xAE:p\[email protected];\xAB@\xA1
+$`\xF5r\xE9
+)ܤ\xDEǪ\x9DU\xBC\xF1\xC6\xF0\x83\xE4]E1<\xF6\xD8c;v\xECȻ
+\x8070\x8B\xCE\xFC\xF1\xBCKx\x83\xC7\xBC\xB5\xA4ҟUܱc\x87\x80գ\x9D;w
+X@j,:{\xEE\xB9\xE7\xF2.\xA1\x9BZ\xAD6'r\x95\xEC\xAC\xE2\xDB\xDE\xF6\xB6\xBCK(\x8Cg\x9F}6\xEF\xE6\xB0\xE8l\xFF\xFE\xFDy\x97П\x92]\xAB(`\xF5N\xC0dVΒ\x9D\x83U\xBE9@\x85;\xAB\xE8sԻd?G@e	X9K\xF6\x8Bᢋ.\xAA\xD5jyW1X\x89\x9FU\xBC\xFA\xEA\xABw\xEFޝwŰgϞ\xAD[\xB7\xE6]\xC0\xEB\x9C"\xA4\x83\xC9\xC9\xC9ҧ\xAB,\xF9\xB3\x8A7n\xB0zt\xF0\xE0AH\x8A\x80E{\xF7\xEEͻ\x84|$u\xAD\xE2֭[\x87\xB3\xD0k	<\xF9䓟\xFAԧ\xF2\xAE\xE0u\xECܹ3\xEF\x92\x90﵊\xEF{\xDF\xFB\xB7\xF1\x92\xA9\xEC\x9F@\xB2,:pY\xD6|:\x9EUܶm\xDBw\xDC>Vjs\xC2R\xB6gϞ\xBCKx\x8B\xAC\xDE=\xFE\xF8\xE3˗/Ė\xDF\xFE\xF6\xB7b\xB3\xA5\x94\xD7=\x9D\xE6\xB3,\xEFHQ\xC9h\xB4\xC1M\xAF\xBE\xE1\x86\xB4\xE5\xF2I\xED\xDE@\xC5	X\xCCe:K\xBF6o\xDE<\xA0-kb\xF5.\xF1{U#`1\xD7\xC1\x83\xF3.\xA1`\xB7\xEA\xBAiX\xBD+ܽ\x80r\xB0\x98\xEB\xC9'\x9F̻\x84\x82ܝ\x86]H\xD8;\x9DW )s\xF9\xA2\xEA\xCBƍ\xB7q\x8Bg\xF6΢\xAC@R,\xE6r\xC5{_\xB6o\xDF>\xB8\x8D\xAF[\xB7\xAEX\xF7\xA8\xCEQ\xADV\x9B\x9C\x9C̻
+\x80\xD7X\xCC\xE5\x8A\xF7\xBE\xBA\xC9t\xF5\xD5Wt\xFBe\xA2\xF9
+\xA4C\xC0\xE2
+\\xEBޯAO\x93\xDC\xAF\xF2q o\xE0Z\xF7~mذa\xA0\xDB\xDC%\x8A\xE5c\x81\ o\xE0Z\xF7~
+\xFA\xA1\x80\xD5;H\x87\x80\xC5\x98\xC5җ!\xAC\xB4\xEEa\xEF܁H\x87\x80\xC5\xB8ֽ/\xC3Yi}\xA0*\x96\x8C\xBF\x80DX\xBCnrr\xB2V\xAB\xE5]E\x91'`
+t\xA9\xAD\x92q \xAF\xF3\xD7\xBF\xAE\xBF\xFE\xFA!\x8Cb\xB9\xD1޹\x90\x8B׹ʽ_É>n\x98\xD3;$\x89\xB0x\x9D\x8B\xB0\xFA2\xB4e\xD6\xBDD\x998\x86\x81DX\xBCΗS_\x86\xB6ƺS\x84\xBD۵kW\xDE%d\x99\x80E+W\xB9\xF7e\x98\xB9g\xEBA\x94\x86\xBB)\xB0x\x8D\xC9+\xFDڼy\xF3\xD0\xC6\xCE\xE5\x8A\xE5\xE0n@
+,^\xE3\xFA\xF6~
+s\x8Du\xABw\x90\x8B׸\xBE\xBD_\xC3\c}8\xEBA\x94\x83S\x84@
+,^\xE3a_\x86\xBC\xF8\xA7y\xEE\xBDs7 \xAFٳgO\xDE%ɐo_3\xB4%!J\xA0V\xABMNN\xE6]Pu\xAF9p\xE0@\xDE%\xC9\xF0[JC[\xA2\xB4c\x81\xDC	Xd\x99i+\xFD\xFE\xEA\xEA\xCE\xF6΄B wY\xE6«\xFE
+u\xF5a\xAE
+Qt\xFB\xF6\xED˻\xA0\xEA,\xB2,\xCB\xF6\xEFߟw	3\xFC~\xD20W\x85(:\xF7$r'`\x91e\xE6\xAC\xF4)\x97uՇ\xB9*Dѹ'\x90;\x8B,se{\x9F\xF2Z\xF6s\xC8kC\x9A&\x90/\x8Blrr\xB2V\xAB\xE5]E\x91\xE4\xB0\x86\xBC6D\xA1\x99\x86\xE4K\xC0\xC2\xF9\xC1\xBE嵮\xBA	{\xE7BB _\xD9Ν;\xF3.\xA1`\xF2
+:\xC3_\xA2\xB8\xFC\xD9\xE4K\xC0\xC2l\x95\xFE丨\xFA\xF0׆(.G5\x90/_E\xFD\xC9qEu\xA7{\xB7k׮\xBCK*M\xC0\xC25\xED\xFD\xC97\xE5\xE4\xB2BDA\xB9?\x90#\xAB\xEALU\xE9W\xBE+\xAA\xE7uc\xB9?\x90#\xAB\xEA<\x98w	\x93\xEF\x8A\xEAV\xEF, GVչ\x9A\xBD_\xF9\xAE\xA8\x9E\xD7
+E\xE4!\x90#\xAB\xEA\x9C"\xECK\xEEk\xA9\x9B\xE7\xDE;\xF7'r$`Uݞ={\xF2.\xA1Hr_K=\xC7E"
+\xA7V\xABMNN\xE6]PQV\xD58p \xEF\x8A$\x85R\x8E\xEBD\x8E-\x90\xAB\xD2LR\xE9W
+k\xA9\xA7\xF2\x8A\xC2C /V\xA5\xB9̪_)\xAC\xA5\x9E\xEF:\xC5\xE2\x96\xCF@^\xACJۿ\xDE%L
+ݣ|׉(w)\xF2"`U\x9A*}Id\xF5|׉(w)\xF2"`U\x9A\xEB\xD8\xFB\x92\xCE"\x9F\xB9\xAFQ \x9AX@.\xACꚜ\x9C\xAC\xD5jyWQ$\xE9\xAC\xDCW\x8B(Ӱ\x80\X\xD5\xE5\xFC`\xBF\xD2YE=\x85\xA9`E\xE1BB Vu\xEDܹ3\xEF
+&\x9DX\x93\xC2jE\xE1	 Vu\x99\x9Bҗ\xA4\x96POa\xB5\x88\xA2p\x9C\xB9\xB0\xAA\xCBO_\x92Z?=\x9D^Z\xFAv\xEDڕw	@	X\xD5\xE5
+\x{1BE916}iY3\xA2ܱ>\xAB\xA2LL\xE9Wj맧sIc\xFAܱ>\xAB\xA2<\x98w	\x93\xDA\xFA\xE9V\xEF,`\xF8\xAC\x8Ar\xEDz\xBFR[?=\x9D5#\xD2\xE7!0|VE9EؗWNOmNX\xCAܱ>\xAB\xA2\xF6\xECٓw	E\x92\xE0\xCA\xE9I-\x91\xB8Z\xAD699\x99w@\xB5Xu\xE0\xC0\x81\xBCK(\x924\xDBEI\xAD\x918-[`\xC8\xAC*2%\xA5_i\xAE\x9C\x9Ef\xECK\x93I\x87\xC0\x90	XU䢪~\xA5\xB9rzj+G\xA4\xCC-\x9F\x81!\xB0\xAAh\xFF\xFE\xFDy\x97P0i\xF6\x8AR[9"e\xEE[\x99\x80UE\xE6\xA3\xF4%\xD95\xD3S[9"e\xEE[\x99\x80UE\xAEZ\xEFK\xCAKz&\xB8~D\xB24\xB1\x80a\xB0*grr\xB2V\xAB\xE5]E\x91\xA4\xB0\?"Y\xA6a\xC3$`U\x8E\xF3\x83\xFDJy\xCD\xF44'\x87\xA5Ʌ\x84\xC00	X\x95\xB3s\xE7μK(\x98\x94CL\x9A\xEBG\xA4ɟ\xC00	X\x95c&J__0=\xCD\xF5#\xD2\xE4\xC8\x86I\xC0\xAA_3}I|\xB5\xF4\x94\xBBk\xA9ٵkW\xDE%"`U\x8E\xEB\xD5\xFB\x92~\x82Iv\x89\xB9\x8704V\xB5\x98\x86ү\xF4WKO\xF9"\xC7Ը\x8704V\xB5<x0\xEF
+&\xFD\xD5\xD2\xAC\xDE	X\xC0\xD0X\xD5\xE2J\xF5~\xA5\xBFZzʫH\xA4\xC6)B`h\xACjq\x8A\xB0/\x85X'=\xFDYb\xE9p`h\xACjٳgO\xDE%I!\xD6IO|!\x89\xA4\xD4j\xB5\xC9\xC9ɼ\xAB*A\xC0\xAA\x96\xE4]B\x91\xA59\x94\xF8ZI\xD1\xC4\x86C\xC0\xAAP\xFAU\x94uҋS`"0V\x85\xB8\x84\xAA_EY'=\xFD\xB5$\xD2\xE1\x96\xCF\xC0pX\xB2\xFF\xFE\xBCK(\x98\xA2t\x86\xD2_K"\xEEd\x87\x80U!f\x9F\xF4\xA5@+\xA4\xA7\xBF\x96D:\xDC\xC9\xABB6o\xDE\xFC\xC1~0\xEF*
+\xA3XxbE\x89DhbC\xB0"\xEF\x9E[o\xBD\xF5\xD6[oͲ\xEC\xF0\xE1\xC3/\xBD\xF4ҳ\xCF>\xBBo߾\xBD{\xF7\xFA\xBE\xE9\xA8Xk\xFB\xF6\xEDyWQ\xFB\xF6\xED+֛\x91\x80U!###\x8D֯_\xFF\xE67\xBF\xF9}\xEF{\xDF'?\xF9\xC9\xC6#\xFF\xF3?\xFFs\xE4ȑ\xA7\x9F~z\xEF޽\xFB\xF6\xED\xB3VPV\xB4ҷn\xDDz\xDF}\xF7\xE5]E1<\xF9䓟\xFAԧ\xF2\xAE(9\xAB\xA2\x9Aa\xAB\xE1\xEFx\xC7UW]u\xED\xB5\xD7~\xEEs\x9F˲lzz\xFA\xF9\xE7\x9F߻w\xEF\xFF\xFE\xEF\xFFNLL\xFC\xF0\x87?̩\xCC<e\x86{CQV\x94H\x81Ɉ\xC0XU\xF1\xCA+\xAF\xB4\x86\xAAz\xBD>\xE7	\xAD\xFFwll\xAC\xB9\x9A\x8FT\xED\xACb\xE1\x96G/ʊ)(\xFD\xD1\xA4`\xA4\xFD\x8B6`\xA3o\xEC\x8E\xD0\xC5 \xF6G\x87z饗\x96XI\xEBs\xCA}V\xF1\x86nx\xE4\x91G\xF2\xAE\xA2?>w\xBD\xDA\xE7\xA8,+gC\xFB\x87\xBE\xFD\xB4ȂC\xF7\x{14449D}U\xBC\xED\xB6۾\xF2\x95\xAF\xE4]En\xBC\xF1Fk\xF4\xE8\xB1\xC7\xB3\xB60PNVל\xDC\xFD\xA4a\xC7\xE7\x94\xF8\xACb\xD7Fwe\\xEF\xDC\xD54\xAB*\xFAJK\x9F\xD0\xFE\x9C\xEEOX\xBF~\xFD\xFA\xF5\xEBz\xADb\xD7F\xB0z'`\x83\xE6aΆs\x8A\xF0ĉ\xCF<\xF3\xCC\xD2+\xA9\xCEY\xC5"\xCE\xD1y\xFC\xF1\xC7?\xF4\xA1\xE5]E1q\x8EP,\xE9`\xFD\xF4\xA7?\xC4fY\xB4\x93'O\xBF\x83\xB5\xE0(ɞU,\xE8\xAA\xE8;v\xEC\xF0\xD1\xEB\xD1\xE8\xE8h\xDE%%7\x90\x80\xA5\x83\x95\x9AӧO\xB7?\x9B\x96z\xDCH!\xCE*n߾}\xA3\xC2\xD8\xD8\xD8\xF4\xF4t\xDEU\xC0\x993g\xF2.(9s\xB0*arrrii\xE9w\x94\V@-\xD6\xA3\xAD֭[w\xF8\xF0Ἣ@\xABFF:L\xB6K\xF0\xA4\xE1\x82O\xCEY\xC5⮊\xBEv\xED\xDA0:XU\x91HZ
+eg\x8B\xBB*\xFA\xF9矟w	\x85\xF1\xCA+\xAF\t\xD1EyW\x94\xD6@\xAE"t\xAB\xAF\xDE
+\xE1l\xD4ɓ''&&\x86\x91`"\xA3,\xE2\xACb/!l\xF2\xE9\xEBѥ\x97^\xFA\x96\xB7\xBC%\xEF*\x80\xD2\xD2\xC1*\xBF\xE3Ǐg\xE5\xED`-\xB8\x91~\xCF*\xDEp\xC3
+\xF0\xD2K/	X\xC0\xE0\x98\x83U~ǎ+\xF4\xAC\xF0Q\xBA\x9FUܲeKVdk׮\x9D\x9A\x9Aʻ
+\x80\xAA\xC8)\xC2}\xFB\xF6\x85o\xB3\xAC\x86\xF0u\xFE\xB3\x9F\xFD\xAC\xE3\xE3E<\xDF7\x84Q\xAE\xBE\xFA\xEA\x9F\x99\xB2#G\x8E\xBC\xF0\xC2yWQE\xD3@\xCAt\xB0ʯ\xF9vzI\x85\xF2\x8DRD\xE3\xE3\xE3\xE5x!\x85fV\x85\xF1t^\xBE\xA3њ5k\xF2.\xA10\x8E9r\xC9%\x97\xE4]PN:X%\xF7ꫯ.\xBA\x83\xD5\xFE\x9CB\xA7\xA5^F)\xC7T|{\xD4\xF1!t\xB0J\xAE\xF5\xC6)\xE9\xE4\x98dG\xB9\xE0\x822*crr\xF2\x8A+\xAEȻ
+\xA0\x9Ct\xB0J\xAEV\xAB\xE9`\xF5>\xCAڵk\xB3\xE2\xBB\xE4\x92K^~\xF9弫\xA84\xAC
+I'\xC7$;J9VB˻\x80\xAA\xD3\xC1*\xB9\xD6\xF7"\x9DS\x94Q
+jݺu\x87ʻ\x8Ab8y\xF2\xE4\xF8\xF8x\xDEU%\xA4\x83U!\xE5^Ra\xA3PzǏ\xB0\x80A\xD0\xC1*\xB3\xD6	XY\xA1ZG\xB9\x8Cr\xDEy\xE7ee\xE13\xD8#\xA2\x83UfgΜi\xFD\xCFDrL\xB2\xA3\x94i\xA9\x95+W\xCE\xCC\xCC\xE4]E\x9C8q"\xEF\x80r\xD2\xC1*\xB3\xE3Ǐ\xEB`\xF5\xBE\x91r\xCCpo\xB8\xE0\x82\x8E=\x9Awե\x83U!\x89\xE4\x98dG)\xD3\\x9C\xF1\xF1q G:Xe\xD6oL)SZZ\xC4(er\xDEy\xE7\xF9\xF6hjj\xAAL\xD3\xEF\x80D\xE8`\x95V\xFB\xEC\xDDDrL\xB2\xA3PM'O\x9E\xB0\x80p:X\xA5u\xE2ĉ!Ĕt\x96TX\xE2F\xCAw\x93\xC3\xD5j\xB5K/\xBD4\xEF*\x80\xB2\xD1\xC1*\xADS\xA7N\xCDy$\xD9\xD6Q
+\xA3\x94\xE3&9\xAD\xC6\xC7\xC7O\x9E<\x99w\xA5\x83UZ333	\xE6\x98dG)_kll\xAC=d0:X\xA5522\x92`\x8EI|\x9429\xEF\xBC\xF3j\xB5Z\xDEUT\x94V\x99%\x9Bc\x92\xA5LV\xAF^\xED\x93أZ\xADv\xE1\x85\xE6]P*:X\xE5455\xA5\x83\xD5\xFB(+W\xAĘ\xB09\xF7<X:\xACr:{\xF6lV\x90\xCB\xF77Jl\xE5\x9B\xE1\xDE\xE0\x93أ\xE3Ǐ\xBF\xF9\xCDoλ
+\xA0T\xACr:v\xECX{+K\xAFu\xB4\xE8Qb\x93_\x99\xD6po\xB5v\xEDک\xA9\xA9\xBC\xAB\xA8"\xA7ˬ(i)\xF7Qʺ\xCE\xE4\xF8\xF8\xB8\x80\x90\xACrj\xBC\xA9\xE5\x98\xF4G)\x99\xB5k\xD79r$\xEF*\x8A\xE1\xF4\xE9\xD3cccyW\x94\x87V\x99%\x9Bc\x92\x85\xCA:q℀\xD2\xC1*\xA1\xC6%\x84Y\xC29&\xA9QV\xAF^\x9D\x95\x97c\x8F\H\xC4\xD2\xC1*\xA1\xE6WER9&\xD9Q\xCAݷX\xB9r\xE5\xCC\xCCL\xDEU@\xFB\xCD\xD1\x96B\xAB\x84N\x9D:\xD5c\xAB\xFD9\\xB8\xA1\xAC3\xDC֬Y\xF3ꫯ\xE6]@\xE5\xE8`\x95Y⭣\xD8Q\x9D\xFC\xCA\xDD\xC1\xB0\x86O\xAB\x84\x9A\xFB\xBF\xB8i)\xAFQ\xCA\xC7
+szw\xEAԩrO\xC8\x86I\xABlZ\xE7\xEA&\x9Bc\x92\x85*\x9B\x9E\x9E\xB0\x80(:Xe3==\xAD\x83\xD5\xFB(e\xBDIN+\x9F\xC7;vlݺuyW\x94\x84Vٜ:u\xAA\xF9s:9&\xD9Q\xCAz\x93\x9CV\xA3\xA3\xA3\xD3\xD3\xD3yWP-:Xe3;;\xAB\x83\xD5\xFB(径\xB0att\xD4"OC\xA6\x83Uf\xC9.\xA9\x90\xCE(U\xB0z\xF5\xEA\xE3Ǐ\xE7]@\xB5\xE8`\x95M\xF7\xC6O:\xAD\xA3DF\xA9\x82\xD1\xD1Q\xC9MMMU\xA1\xA9	\x81V\xA9\xB4N\xC0jH$Ǥ9\xCA\xF2\xE5\xCB3h\xE1\*E\xABTΝ;\xA7\x83\xD5\xFB(\xD5\xE9U\xF8H\xF6\xA8\xFDO\x80\xC5\xD1\xC1*\x95\x93'O\xCEy$\x85\x93\xEC(\xA3\xA3\xA3Y5\x8C\x8F\x8F\xB7\x8EV\xA9\xA4\x99c\x92\xA5:\xABJ\x8E\x8D\x8D\xE9\xCD\x93V\xC9\xEB\xBE\xCB\xC3\xA5"V\xAF^]\xAB\xD5\xF2\xAE\xA2Μ9\xB3jժ\xBC\xAB
+O\xABT	CZ\xB8\xA1:|*{4==-`K\xA7\x83U\xA7O\x9Fn0\xD9\xD6Q\xEE\xA3Tg}\x99\x99\x99ɻ\xA0t\xB0\xCA\xE3\xECٳ	\xE6\x98dG\xA9Z\x97bŊ\xE7Ν˻\x8A\xB0RB\xAB<:~1\xE4\x9Ec\x92\xA5:3\xDC\xC6\xC6\xC6N\x9C8\x91wU\xA1\x83U*	\xE6\x98dG\xA9ZkժUVj\xAC\xF2I0\xC7$>Ju\x98sֻ\xE9\xE9i\xBBX"\xAC\x928{\xF6l\x96\xF0\xE5{\xC9f\xB2J\xF1\xC1\xEC\xD1\xCČ\x80,\x91VI4g\xB8\xA7\x86RK~U\x9B\x80E_N\x9E<Y\x9D\xDB(\xA2\x83U\xCDkˋ\xD2:\xCAw\x94j\xF6'V\xADZe
+\x80\xE1\xD0\xC1*\x89\xD9\xD9ٔ;X\xA9\x8DR\xCD\xD6ʕ+,\x80\xE1\xD0\xC1*\x9B\xA4rL!F\xA9\x8E\xD1\xD1Qw$\xAC\x92h&\x89dsL\xB2\xA3TNJ>\xEF\xBD:u\xEAT5ۜ@\xAC2h=\xEF\x93l\x8EIg\x94\xE5˗gU\xE5\xB3\xD9#\xAB\xDEK\xE4/\xDA2hN\xC0ʒ\xBF|o\xA0e\xF48\xCA\xD8\xD8X]MOO\xBB\x90X
+\xAC2h\xBDINQ\xC2P\x8E\xC9o\xE5ʕYU\x8D\x8E\x8E\xBA\xD7\xC0\xE8`\x95Ak\x8CH\xB9u\x94\xC8(\xD5\\xA3\xA1a\xE5ʕ\xC0\xE8`\x95M:9\xA6(\xA3T\xCA\xE8\xE8\xA8;\xF6\xE8\xECٳ.\xCD?e\xA0\x83\xB5\x94Q\xA0\xA3\x99\x99X4\xAC›\xB3td\xB29&\x91Q|e\xFAx\xF6ȅ\x84\xC0RT\xFD˦Z/!̒\xC91Ɏ"`-[\xB6lvv6\xEF*
+\xA0qu\x80\xC5\xD1\xC1*\xBC9g\xA7|\xF9^
+\xA3Ty\x86{êU\xAB\xA6\xA7\xA7\xF3\xAE\xA0\xE4\xAC\xC2+J\xEB(\x91Qt\xB0V\xACX\xE1BB\x80A\xAB\xFA\x97M\xF9$\x92cR\xA5\xE2D\xCC޹\x90X4\xACb\xAB\xD7\xEB\xC9\xE6\x98dG\xC1'\xB4G\xE7Ν\xB0\x80\xC5\xF1oG\xB1\xB5_\xE8\x94N\x8EIp\x94U\xABVeг3gΘ\xB4,\x8EV\xB1͹\x840K#\xC7$;\x8AnDÊ+\xACA0P\xBEo\xCA&\x85\x93\xEC(:X
+˗/\xB0J\xAB\xF0J\xBC\xA4€FaŊs֧ \x96V\xB1\x8D\x8C\x8C\xA2u\x94\xD4(,[\xB6,\xEF
+cfff\xE5ʕyW\x8FV\x815\x92D\xB29&\xB5Q\x96\xAD\xEC\x8DY\xF5X\xACk\xACѐZ\x8EIv\xB0X\x93Հ\xC5\xD1\xC1*\xB0\xC6\xDF֩\xE5\x98dGY\xBE|y\xC6\xFFs!!\xC0@\xE9`X#I\xA4\x96c\x92\xC5
+\xAD\H0P:X\x85\x97Z\x8EI\xB2,[\xBE|\xB9\xCFi\x8F\xDA\xEF\x97\xB0 \xD3X\x8F\xAC\xF6\xE7hI\x85A\x8C}q\xC3`t\xB0\x8A\xAA\xCB\xC5qɶ\x8Er\xC5\xACv>\xA7=r!!\xB0\xFE,+\xAA\xE6\xB7cR9&\xD9Q\xACv/A\xA5\x9D\xBD,\x82VQ\xE9`\xF55\x8A\x80\xD5\xCE<w\x80\xC1\xD1\xC1**\xAC\xBEF\xB1vy;\x8EV\xE1%\x95c
+1
+
+˖-\xF3Q\xED\x91	\x81~\xE9`\x95P"9&\xD9Q\xA0_\xD0/\xACJ(qZ\xEAe\xE7\xE7\xE3\xA3ڣ\xD9\xD9YG\xD0\xAC**tZZ\xC4(\xBE\xE7\xE3BB\x80\xD1\xC1"\xCB
+\x95\x961\x8AK\xE7\xE3\xA3
+0 :Xt\x96lZZ\xC4(\xCCgٲeVj,z\x92NZZ\xC4(tawq\xF5@\x95\xB2IDAT\xF5\xC8<w\xA0/:X,RQ:X\xBE\xBE\x81Lqu\x8E\xA6w%\xFE\xFA\xEF\xE50X\xF09K²e\xCBLr\xEF§\xB5w%\xFE\xB4\xE1t\xB0\xACBp!!\xC0 \xF8\xB7\x95<
+\xA1\x83\xE5B\x86O\x8B<\xB9\x8A\x80R\xD2\xC1"i!s\xB0\xE2\xCA\x80\x9EXL_\x91kdd\xC4,\x86O\xC0\xA2\xF0\xBA\xC3\xD2\xB90\x8B\xC2[p"\x99@0\xF3\x82	X\xC1,\x80`@0 \x98\x80L\xC0&`\xB0\x82	X\xC1,\x80`@0 \x98\x80L\xC0&`\xB0\x82	X\xC1,\x80`@0 \x98\x80L\xC0&`\xB0\x82	X\xC1,\x80`@0 \x98\x80L\xC0&`\xB0\x82	X\xC1,\x80`@0 \x98\x80L\xC0&`\xB0\x82	X\xC1,\x80`@0 \x98\x80L\xC0&`\xB0\x82	X\xC1,\x80`@0 \x98\x80L\xC0&`\xB0\x82	X\xC1,\x80`@0 \x98\x80L\xC0&`\xB0\x82	X\xC1,\x80`@0 \x98\x80L\xC0&`\xB0\x82	X\xC1,\x80`@0 \x98\x80L\xC0&`\xB0\x82	X\xC1,\x80`@0 \x98\x80L\xC0&`\xB0\x82	X\xC1,\x80`@0 \x98\x80L\xC0&`\xB0\x82	X\xC1,\x80`@0 \x98\x80L\xC0&`\xB0\x82	X\xC1,\x80`@0 \x98\x80L\xC0&`\xB0\x82	X\xC1,\x80`@0 \x98\x80L\xC0&`\xB0\x82	X\xC1,\x80`@0 \x98\x80L\xC0&`\xB0\x82	X\xC1,\x80`@0 \x98\x80L\xC0&`\xB0\x82	X\xC1,\x80`@0 \x98\x80L\xC0&`\xB0\x82	X\xC1,\x80`@0 \x98\x80L\xC0&`\xB0\x82	X\xC1,\x80`@0 \x98\x80L\xC0&`\xB0\x82	X\xC1,\x80`@0 \x98\x80L\xC0&`\xB0\x82	X\xC1,\x80`@0 \x98\x80L\xC0&`\xB0\x82	X\xC1,\x80`@0 \x98\x80L\xC0&`\xB0\x82	X\xC1,\x80`@0 \x98\x80L\xC0&`\xB0\x82	X\xC1,\x80`@0 \x98\x80L\xC0&`\xB0\x82	X\xC1,\x80`@0 \x98\x80L\xC0&`\xB0\x82	X\xC1,\x80`@0 \x98\x80L\xC0&`\xB0\x82	X\xC1,\x80`@0 \x98\x80L\xC0&`\xB0\x82	X\xC1,\x80`@0 \x98\x80L\xC0&`\xB0\x82	X\xC1,\x80`@0 \x98\x80L\xC0&`\xB0\x82	X\xC1,\x80`@0 \x98\x80L\xC0&`\xB0\x82	X\xC1,\x80`@0 \x98\x80L\xC0&`\xB0\x82	X\xC1,\x80`@0 \x98\x80L\xC0&`\xB0\x82	X\xC1,\x80`@0 \x98\x80L\xC0&`\xB0\x82	X\xC1,\x80`@0 \x98\x80L\xC0&`\xB0\x82	X\xC1,\x80`@0 \x98\x80L\xC0&`\xB0\x82	X\xC1,\x80`@0 \x98\x80L\xC0&`\xB0\x82	X\xC1,\x80`@0 \x98\x80L\xC0&`\xB0\x82	X\xC1,\x80`@0 \x98\x80L\xC0&`\xB0\x82	X\xC1,\x80`@0 \x98\x80L\xC0&`\xB0\x82	X\xC1\xFE*bG\xE7\xF9v\x9BIEND\xAEB`\x82
\ No newline at end of file

Added: trunk/LayoutTests/platform/chromium-linux/fast/css/transformed-mask-expected.txt (0 => 93386)


--- trunk/LayoutTests/platform/chromium-linux/fast/css/transformed-mask-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/platform/chromium-linux/fast/css/transformed-mask-expected.txt	2011-08-19 04:51:38 UTC (rev 93386)
@@ -0,0 +1,20 @@
+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x205
+  RenderBlock {HTML} at (0,0) size 800x205
+    RenderBody {BODY} at (8,16) size 784x181
+      RenderBlock {P} at (0,0) size 784x20
+        RenderText {#text} at (0,0) size 361x19
+          text run at (0,0) width 361: "You should not see any pixel artifacts around the reflections."
+      RenderBlock (anonymous) at (0,36) size 784x145
+        RenderText {#text} at (140,125) size 4x19
+          text run at (140,125) width 4: " "
+        RenderText {#text} at (284,125) size 4x19
+          text run at (284,125) width 4: " "
+        RenderText {#text} at (0,0) size 0x0
+layer at (28,72) size 100x100
+  RenderBlock {DIV} at (20,20) size 100x100 [bgcolor=#000000]
+layer at (172,72) size 100x100
+  RenderBlock {DIV} at (164,20) size 100x100 [bgcolor=#000000]
+layer at (316,72) size 100x100
+  RenderBlock {DIV} at (308,20) size 100x100 [bgcolor=#000000]

Modified: trunk/Source/WebCore/ChangeLog (93385 => 93386)


--- trunk/Source/WebCore/ChangeLog	2011-08-19 04:46:33 UTC (rev 93385)
+++ trunk/Source/WebCore/ChangeLog	2011-08-19 04:51:38 UTC (rev 93386)
@@ -1,3 +1,27 @@
+2011-08-18  Ben Wells  <[email protected]>
+
+        [skia] -webkit-transform breaks -webkit-mask
+        https://bugs.webkit.org/show_bug.cgi?id=66442
+
+        The problem here is that in RenderBox::paintMaskImages, if we are in
+        a transform with a rotation, scale or skew we set the composite mode to
+        be DestinationIn and then create a transparency layer, then paint the
+        mask with SourceOver and end the transparency layer. (The normal case
+        is just to use DestinationIn to paint the mask.)
+
+        In skia when we create transparency layers we don't pass on the composite
+        mode, so when we end the transparency layer it is composited back using
+        SourceOver. The fix is to pass on the composite mode when creating
+        transparency layers in skia.
+
+        Reviewed by Stephen White.
+
+        * platform/graphics/skia/GraphicsContextSkia.cpp:
+        (WebCore::GraphicsContext::beginTransparencyLayer):
+        * platform/graphics/skia/PlatformContextSkia.cpp:
+        (WebCore::PlatformContextSkia::getXfermodeMode):
+        * platform/graphics/skia/PlatformContextSkia.h:
+
 2011-08-18  Hayato Ito  <[email protected]>
 
         Isolate EventDispatchMediator into a separate file.

Modified: trunk/Source/WebCore/platform/graphics/skia/GraphicsContextSkia.cpp (93385 => 93386)


--- trunk/Source/WebCore/platform/graphics/skia/GraphicsContextSkia.cpp	2011-08-19 04:46:33 UTC (rev 93385)
+++ trunk/Source/WebCore/platform/graphics/skia/GraphicsContextSkia.cpp	2011-08-19 04:51:38 UTC (rev 93386)
@@ -271,9 +271,14 @@
     // (the surface of the page) but layers on top may have transparent parts.
     // Without explicitly setting the alpha flag, the layer will inherit the
     // opaque setting of the base and some things won't work properly.
-    platformContext()->canvas()->saveLayerAlpha(
+
+    SkPaint layerPaint;
+    layerPaint.setAlpha(static_cast<unsigned char>(opacity * 255));
+    layerPaint.setXfermodeMode(platformContext()->getXfermodeMode());
+
+    platformContext()->canvas()->saveLayer(
         0,
-        static_cast<unsigned char>(opacity * 255),
+        &layerPaint,
         static_cast<SkCanvas::SaveFlags>(SkCanvas::kHasAlphaLayer_SaveFlag |
                                          SkCanvas::kFullColorLayer_SaveFlag));
 }

Modified: trunk/Source/WebCore/platform/graphics/skia/PlatformContextSkia.cpp (93385 => 93386)


--- trunk/Source/WebCore/platform/graphics/skia/PlatformContextSkia.cpp	2011-08-19 04:46:33 UTC (rev 93385)
+++ trunk/Source/WebCore/platform/graphics/skia/PlatformContextSkia.cpp	2011-08-19 04:51:38 UTC (rev 93386)
@@ -511,6 +511,11 @@
     return alpha;
 }
 
+SkXfermode::Mode PlatformContextSkia::getXfermodeMode() const
+{
+    return m_state->m_xferMode;
+}
+
 void PlatformContextSkia::setTextDrawingMode(TextDrawingModeFlags mode)
 {
     // TextModeClip is never used, so we assert that it isn't set:

Modified: trunk/Source/WebCore/platform/graphics/skia/PlatformContextSkia.h (93385 => 93386)


--- trunk/Source/WebCore/platform/graphics/skia/PlatformContextSkia.h	2011-08-19 04:46:33 UTC (rev 93385)
+++ trunk/Source/WebCore/platform/graphics/skia/PlatformContextSkia.h	2011-08-19 04:51:38 UTC (rev 93386)
@@ -136,6 +136,7 @@
     TextDrawingModeFlags getTextDrawingMode() const;
     float getAlpha() const;
     int getNormalizedAlpha() const;
+    SkXfermode::Mode getXfermodeMode() const;
 
     void canvasClipPath(const SkPath&);
 
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to