Changeset 225121 in webkit
- Timestamp:
- Nov 23, 2017, 1:33:44 PM (8 years ago)
- Location:
- trunk
- Files:
-
- 9 edited
- 2 copied
- 1 moved
-
LayoutTests/ChangeLog (modified) (1 diff)
-
LayoutTests/fast/canvas/canvas-pattern-transform-expected.txt (modified) (1 diff)
-
LayoutTests/fast/canvas/canvas-pattern-transform.html (modified) (1 diff)
-
LayoutTests/fast/canvas/canvas-pattern-with-transform-expected.txt (copied) (copied from trunk/LayoutTests/fast/canvas/canvas-pattern-transform-expected.txt )
-
LayoutTests/fast/canvas/canvas-pattern-with-transform.html (copied) (copied from trunk/LayoutTests/fast/canvas/canvas-pattern-transform.html ) (1 diff)
-
LayoutTests/fast/canvas/canvas-pattern-with-transform.js (moved) (moved from trunk/LayoutTests/fast/canvas/canvas-pattern-transform.js )
-
Source/WebCore/ChangeLog (modified) (1 diff)
-
Source/WebCore/html/canvas/CanvasPattern.cpp (modified) (3 diffs)
-
Source/WebCore/html/canvas/CanvasPattern.h (modified) (4 diffs)
-
Source/WebCore/html/canvas/CanvasPattern.idl (modified) (1 diff)
-
Source/WebCore/platform/graphics/Pattern.h (modified) (3 diffs)
-
Source/WebCore/platform/graphics/cairo/PlatformContextCairo.cpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r225116 r225121 1 2017-11-23 Simon Fraser <simon.fraser@apple.com> 2 3 Add support for CanvasPattern.setTransform() 4 https://bugs.webkit.org/show_bug.cgi?id=179935 5 6 Reviewed by Sam Weinig. 7 8 Moved the test previously known as canvas-pattern-transform.html to canvas-pattern-with-transform.html 9 and added a new test. 10 11 * fast/canvas/canvas-pattern-transform-expected.txt: 12 * fast/canvas/canvas-pattern-transform.html: 13 * fast/canvas/canvas-pattern-with-transform-expected.txt: Copied from LayoutTests/fast/canvas/canvas-pattern-transform-expected.txt. 14 * fast/canvas/canvas-pattern-with-transform.html: Copied from LayoutTests/fast/canvas/canvas-pattern-transform.html. 15 * fast/canvas/canvas-pattern-with-transform.js: Renamed from LayoutTests/fast/canvas/canvas-pattern-transform.js. 16 1 17 2017-11-23 Ms2ger <Ms2ger@igalia.com> 2 18 -
trunk/LayoutTests/fast/canvas/canvas-pattern-transform-expected.txt
r38308 r225121 1 Series of tests to ensure correct behaviour on transform of a pattern2 3 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".4 5 6 PASS imgdata[4] is 07 PASS imgdata[5] is 2558 PASS imgdata[6] is 09 PASS imgdata[4] is 25510 PASS imgdata[5] is 011 PASS imgdata[6] is 012 PASS imgdata[4] is 013 PASS imgdata[5] is 25514 PASS imgdata[6] is 015 1 PASS successfullyParsed is true 16 2 17 3 TEST COMPLETE 4 PASS function () { 5 ctx.setTransform({a: 1, m11: 11, b: 2, m12: 12, c: 3, m21: 21, d: 4, m22: 22, e: 5, m41: 41, f: 6, m42: 42}); 6 } threw exception TypeError: init.a and init.m11 do not match. 18 7 8 Testing canvas repeat transform pattern transform 9 Checking point 4 4 10 PASS imgdata[0] is expectedRed 11 PASS imgdata[1] is expectedGreen 12 PASS imgdata[2] is expectedBlue 13 Checking point 124 124 14 PASS imgdata[0] is expectedRed 15 PASS imgdata[1] is expectedGreen 16 PASS imgdata[2] is expectedBlue 17 Checking point 64 32 18 PASS imgdata[0] is expectedRed 19 PASS imgdata[1] is expectedGreen 20 PASS imgdata[2] is expectedBlue 21 Checking point 64 96 22 PASS imgdata[0] is expectedRed 23 PASS imgdata[1] is expectedGreen 24 PASS imgdata[2] is expectedBlue 25 Checking point 32 64 26 PASS imgdata[0] is expectedRed 27 PASS imgdata[1] is expectedGreen 28 PASS imgdata[2] is expectedBlue 29 Checking point 96 64 30 PASS imgdata[0] is expectedRed 31 PASS imgdata[1] is expectedGreen 32 PASS imgdata[2] is expectedBlue 33 Checking point 32 32 34 PASS imgdata[0] is expectedRed 35 PASS imgdata[1] is expectedGreen 36 PASS imgdata[2] is expectedBlue 37 Checking point 96 32 38 PASS imgdata[0] is expectedRed 39 PASS imgdata[1] is expectedGreen 40 PASS imgdata[2] is expectedBlue 41 Checking point 96 32 42 PASS imgdata[0] is expectedRed 43 PASS imgdata[1] is expectedGreen 44 PASS imgdata[2] is expectedBlue 45 Checking point 96 96 46 PASS imgdata[0] is expectedRed 47 PASS imgdata[1] is expectedGreen 48 PASS imgdata[2] is expectedBlue 49 50 Testing canvas no-repeat transform pattern transform scale(0.5) 51 Checking point 2 2 52 PASS imgdata[0] is expectedRed 53 PASS imgdata[1] is expectedGreen 54 PASS imgdata[2] is expectedBlue 55 Checking point 31 31 56 PASS imgdata[0] is expectedRed 57 PASS imgdata[1] is expectedGreen 58 PASS imgdata[2] is expectedBlue 59 Checking point 6 6 60 PASS imgdata[0] is expectedRed 61 PASS imgdata[1] is expectedGreen 62 PASS imgdata[2] is expectedBlue 63 Checking point 16 16 64 PASS imgdata[0] is expectedRed 65 PASS imgdata[1] is expectedGreen 66 PASS imgdata[2] is expectedBlue 67 Checking point 64 64 68 PASS imgdata[0] is expectedRed 69 PASS imgdata[1] is expectedGreen 70 PASS imgdata[2] is expectedBlue 71 Checking point 96 96 72 PASS imgdata[0] is expectedRed 73 PASS imgdata[1] is expectedGreen 74 PASS imgdata[2] is expectedBlue 75 76 Testing canvas repeat transform pattern transform rotate(45deg) 77 Checking point 2 2 78 PASS imgdata[0] is expectedRed 79 PASS imgdata[1] is expectedGreen 80 PASS imgdata[2] is expectedBlue 81 Checking point 42 2 82 PASS imgdata[0] is expectedRed 83 PASS imgdata[1] is expectedGreen 84 PASS imgdata[2] is expectedBlue 85 Checking point 42 64 86 PASS imgdata[0] is expectedRed 87 PASS imgdata[1] is expectedGreen 88 PASS imgdata[2] is expectedBlue 89 Checking point 32 32 90 PASS imgdata[0] is expectedRed 91 PASS imgdata[1] is expectedGreen 92 PASS imgdata[2] is expectedBlue 93 Checking point 96 96 94 PASS imgdata[0] is expectedRed 95 PASS imgdata[1] is expectedGreen 96 PASS imgdata[2] is expectedBlue 97 98 Testing canvas repeat transform pattern transform translate(32px, 0) 99 Checking point 4 4 100 PASS imgdata[0] is expectedRed 101 PASS imgdata[1] is expectedGreen 102 PASS imgdata[2] is expectedBlue 103 Checking point 124 124 104 PASS imgdata[0] is expectedRed 105 PASS imgdata[1] is expectedGreen 106 PASS imgdata[2] is expectedBlue 107 Checking point 64 32 108 PASS imgdata[0] is expectedRed 109 PASS imgdata[1] is expectedGreen 110 PASS imgdata[2] is expectedBlue 111 Checking point 2 96 112 PASS imgdata[0] is expectedRed 113 PASS imgdata[1] is expectedGreen 114 PASS imgdata[2] is expectedBlue 115 116 Testing canvas repeat transform pattern transform translate(32px, 32px) rotate(45deg) scale(0.5) 117 Checking point 24 24 118 PASS imgdata[0] is expectedRed 119 PASS imgdata[1] is expectedGreen 120 PASS imgdata[2] is expectedBlue 121 Checking point 104 104 122 PASS imgdata[0] is expectedRed 123 PASS imgdata[1] is expectedGreen 124 PASS imgdata[2] is expectedBlue 125 Checking point 22 64 126 PASS imgdata[0] is expectedRed 127 PASS imgdata[1] is expectedGreen 128 PASS imgdata[2] is expectedBlue 129 Checking point 90 112 130 PASS imgdata[0] is expectedRed 131 PASS imgdata[1] is expectedGreen 132 PASS imgdata[2] is expectedBlue 133 Checking point 16 32 134 PASS imgdata[0] is expectedRed 135 PASS imgdata[1] is expectedGreen 136 PASS imgdata[2] is expectedBlue 137 Checking point 82 58 138 PASS imgdata[0] is expectedRed 139 PASS imgdata[1] is expectedGreen 140 PASS imgdata[2] is expectedBlue 141 142 Testing canvas repeat transform scale(0.5) pattern transform rotate(45deg) 143 Checking point 4 4 144 PASS imgdata[0] is expectedRed 145 PASS imgdata[1] is expectedGreen 146 PASS imgdata[2] is expectedBlue 147 Checking point 62 62 148 PASS imgdata[0] is expectedRed 149 PASS imgdata[1] is expectedGreen 150 PASS imgdata[2] is expectedBlue 151 Checking point 2 24 152 PASS imgdata[0] is expectedRed 153 PASS imgdata[1] is expectedGreen 154 PASS imgdata[2] is expectedBlue 155 Checking point 24 2 156 PASS imgdata[0] is expectedRed 157 PASS imgdata[1] is expectedGreen 158 PASS imgdata[2] is expectedBlue 159 Checking point 24 2 160 PASS imgdata[0] is expectedRed 161 PASS imgdata[1] is expectedGreen 162 PASS imgdata[2] is expectedBlue 163 Checking point 32 48 164 PASS imgdata[0] is expectedRed 165 PASS imgdata[1] is expectedGreen 166 PASS imgdata[2] is expectedBlue 167 Checking point 66 4 168 PASS imgdata[0] is expectedRed 169 PASS imgdata[1] is expectedGreen 170 PASS imgdata[2] is expectedBlue 171 Checking point 4 66 172 PASS imgdata[0] is expectedRed 173 PASS imgdata[1] is expectedGreen 174 PASS imgdata[2] is expectedBlue 175 Checking point 104 104 176 PASS imgdata[0] is expectedRed 177 PASS imgdata[1] is expectedGreen 178 PASS imgdata[2] is expectedBlue 179 -
trunk/LayoutTests/fast/canvas/canvas-pattern-transform.html
r155263 r225121 1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">1 <!DOCTYPE HTML> 2 2 <html> 3 <head> 4 <script src="../../resources/js-test-pre.js"></script> 5 </head> 6 <body> 7 <script src="canvas-pattern-transform.js"></script> 8 <script src="../../resources/js-test-post.js"></script> 9 </body> 3 <head> 4 <style> 5 canvas { 6 border: 1px solid black; 7 margin: 10px; 8 } 9 </style> 10 <script src="../../resources/js-test-pre.js"></script> 11 <script> 12 var patternCanvas; 13 function drawOneCanvas(canvas, repeat, transform, patternTransform) 14 { 15 var context = canvas.getContext('2d'); 16 17 context.fillStyle = 'black'; 18 context.fillRect(0, 0, canvas.width, canvas.height); 19 20 var pattern = context.createPattern(patternCanvas, repeat); 21 22 var patternMatrix = new DOMMatrix; 23 if (patternTransform) 24 patternMatrix.setMatrixValue(patternTransform); 25 if ('setTransform' in pattern) 26 pattern.setTransform(patternMatrix); 27 28 if (transform) { 29 var matrix = new DOMMatrix; 30 matrix.setMatrixValue(transform); 31 context.setTransform(matrix); 32 } 33 34 context.fillStyle = pattern; 35 context.fillRect(0, 0, canvas.width, canvas.height); 36 } 37 38 function createPatternCanvas() 39 { 40 patternCanvas = document.createElement('canvas'); 41 patternCanvas.height = 64; 42 patternCanvas.width = 64; 43 44 var context = patternCanvas.getContext('2d'); 45 46 context.fillStyle = 'blue'; 47 context.fillRect(0, 0, patternCanvas.width, patternCanvas.height); 48 49 context.fillStyle = 'green'; 50 const borderWidth = 8; 51 context.fillRect(borderWidth, borderWidth, patternCanvas.width - 2 * borderWidth, patternCanvas.height - 2 * borderWidth); 52 } 53 54 function setupCanvas(data) 55 { 56 var canvas = document.createElement('canvas'); 57 canvas.height = 128; 58 canvas.width = 128; 59 60 drawOneCanvas(canvas, data.repeat, data.transform, data.patternTransform); 61 62 debug(''); 63 debug('Testing canvas ' + data.repeat + ' transform ' + data.transform + ' pattern transform ' + data.patternTransform); 64 return canvas; 65 } 66 67 function testCanvas(canvas, testData) 68 { 69 var test; 70 for (test of testData) 71 checkPixel(canvas, test.x, test.y, test.r, test.g, test.b); 72 } 73 74 var imgdata; 75 var expectedRed; 76 var expectedGreen; 77 var expectedBlue; 78 function checkPixel(canvas, x, y, r, g, b) 79 { 80 var context = canvas.getContext('2d'); 81 var imageData = context.getImageData(x, y, 1, 1); 82 imgdata = imageData.data; 83 84 debug('Checking point ' + x + ' ' + y); 85 expectedRed = r; 86 expectedGreen = g; 87 expectedBlue = b; 88 shouldBe("imgdata[0]", "expectedRed"); 89 shouldBe("imgdata[1]", "expectedGreen"); 90 shouldBe("imgdata[2]", "expectedBlue"); 91 } 92 93 function testInvalidMatrix() 94 { 95 var testCanvas = document.createElement('canvas'); 96 testCanvas.height = 64; 97 testCanvas.width = 64; 98 99 var ctx = testCanvas.getContext('2d'); 100 101 shouldThrowErrorName(function() { 102 ctx.setTransform({a: 1, m11: 11, b: 2, m12: 12, c: 3, m21: 21, d: 4, m22: 22, e: 5, m41: 41, f: 6, m42: 42}); 103 }, "TypeError"); 104 } 105 106 function doTest() 107 { 108 testInvalidMatrix(); 109 createPatternCanvas(); 110 111 const tests = [ 112 { 113 repeat : 'repeat', 114 transform : '', 115 patternTransform : '', 116 test : [ 117 // Check two corners for blue. 118 { x : 4, y : 4, r : 0, g : 0, b : 255 }, 119 { x : 124, y : 124, r : 0, g : 0, b : 255 }, 120 // Check for blue cross in the middle. 121 { x : 64, y : 32, r : 0, g : 0, b : 255 }, 122 { x : 64, y : 96, r : 0, g : 0, b : 255 }, 123 { x : 32, y : 64, r : 0, g : 0, b : 255 }, 124 { x : 96, y : 64, r : 0, g : 0, b : 255 }, 125 // Four fields of green. 126 { x : 32, y : 32, r : 0, g : 128, b : 0 }, 127 { x : 96, y : 32, r : 0, g : 128, b : 0 }, 128 { x : 96, y : 32, r : 0, g : 128, b : 0 }, 129 { x : 96, y : 96, r : 0, g : 128, b : 0 }, 130 ], 131 }, 132 { 133 repeat : 'no-repeat', 134 transform : '', 135 patternTransform : 'scale(0.5)', 136 test : [ 137 // Check two corners for blue. 138 { x : 2, y : 2, r : 0, g : 0, b : 255 }, 139 { x : 31, y : 31, r : 0, g : 0, b : 255 }, 140 // Green near corner and middle. 141 { x : 6, y : 6, r : 0, g : 128, b : 0 }, 142 { x : 16, y : 16, r : 0, g : 128, b : 0 }, 143 // Mostly black 144 { x : 64, y : 64, r : 0, g : 0, b : 0 }, 145 { x : 96, y : 96, r : 0, g : 0, b : 0 }, 146 ], 147 }, 148 { 149 repeat: 'repeat', 150 transform: '', 151 patternTransform: 'rotate(45deg)', 152 test : [ 153 // Check two corners for blue. 154 { x : 2, y : 2, r : 0, g : 0, b : 255 }, 155 // Green at top edge due to rotation. 156 { x : 42, y : 2, r : 0, g : 128, b : 0 }, 157 { x : 42, y : 64, r : 0, g : 128, b : 0 }, 158 // Blue diagonal. 159 { x : 32, y : 32, r : 0, g : 0, b : 255 }, 160 { x : 96, y : 96, r : 0, g : 0, b : 255 }, 161 ], 162 }, 163 { 164 repeat: 'repeat', 165 transform: '', 166 patternTransform: 'translate(32px, 0)', 167 test : [ 168 // Check two corners for blue. 169 { x : 4, y : 4, r : 0, g : 0, b : 255 }, 170 { x : 124, y : 124, r : 0, g : 0, b : 255 }, 171 // Green is offset half pattern width. 172 { x : 64, y : 32, r : 0, g : 128, b : 0 }, 173 { x : 2, y : 96, r : 0, g : 128, b : 0 }, 174 ], 175 }, 176 { 177 repeat: 'repeat', 178 transform: '', 179 patternTransform: 'translate(32px, 32px) rotate(45deg) scale(0.5)', 180 test : [ 181 // Blue diagonals 182 { x : 24, y : 24, r : 0, g : 0, b : 255 }, 183 { x : 104, y : 104, r : 0, g : 0, b : 255 }, 184 { x : 22, y : 64, r : 0, g : 0, b : 255 }, 185 { x : 90, y : 112, r : 0, g : 0, b : 255 }, 186 // Green centers. 187 { x : 16, y : 32, r : 0, g : 128, b : 0 }, 188 { x : 82, y : 58, r : 0, g : 128, b : 0 }, 189 ], 190 }, 191 { 192 repeat: 'repeat', 193 transform: 'scale(0.5)', 194 patternTransform: 'rotate(45deg)', 195 test : [ 196 // Blue diagonals 197 { x : 4, y : 4, r : 0, g : 0, b : 255 }, 198 { x : 62, y : 62, r : 0, g : 0, b : 255 }, 199 200 // Green centers. 201 { x : 2, y : 24, r : 0, g : 128, b : 0 }, 202 { x : 24, y : 2, r : 0, g : 128, b : 0 }, 203 { x : 24, y : 2, r : 0, g : 128, b : 0 }, 204 { x : 32, y : 48, r : 0, g : 128, b : 0 }, 205 206 // Mostly black 207 { x : 66, y : 4, r : 0, g : 0, b : 0 }, 208 { x : 4, y : 66, r : 0, g : 0, b : 0 }, 209 { x : 104, y : 104, r : 0, g : 0, b : 0 }, 210 ], 211 }, 212 ]; 213 214 var testData; 215 for (testData of tests) { 216 var canvas = setupCanvas(testData); 217 testCanvas(canvas, testData.test); 218 } 219 } 220 221 window.addEventListener('load', doTest, false); 222 </script> 223 </head> 224 <body> 225 </body> 226 <script src="../../resources/js-test-post.js"></script> 10 227 </html> -
trunk/LayoutTests/fast/canvas/canvas-pattern-with-transform.html
r225120 r225121 5 5 </head> 6 6 <body> 7 <script src="canvas-pattern- transform.js"></script>7 <script src="canvas-pattern-with-transform.js"></script> 8 8 <script src="../../resources/js-test-post.js"></script> 9 9 </body> -
trunk/Source/WebCore/ChangeLog
r225120 r225121 1 2017-11-23 Simon Fraser <simon.fraser@apple.com> 2 3 Add support for CanvasPattern.setTransform() 4 https://bugs.webkit.org/show_bug.cgi?id=179935 5 6 Reviewed by Sam Weinig. 7 8 Add support for setTransform() on CanvasPattern, per 9 <https://html.spec.whatwg.org/multipage/canvas.html#dom-canvaspattern-settransform> 10 It uses [MayThrowException] since the "validate and fixup" steps for DOMMatrix can throw 11 an exception. 12 13 Under the hood, the transform is just pushed onto Pattern as the patternSpaceTransform(). 14 15 Minor cleanup in Pattern. 16 17 Test: fast/canvas/canvas-pattern-with-transform.html 18 19 * html/canvas/CanvasPattern.cpp: 20 (WebCore::CanvasPattern::setTransform): 21 * html/canvas/CanvasPattern.h: 22 * html/canvas/CanvasPattern.idl: 23 * platform/graphics/Pattern.h: 24 1 25 2017-11-23 Sam Weinig <sam@webkit.org> 2 26 -
trunk/Source/WebCore/html/canvas/CanvasPattern.cpp
r223728 r225121 1 1 /* 2 * Copyright (C) 2006, 2008 Apple Inc. All rights reserved.2 * Copyright (C) 2006, 2008, 2017 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 27 27 #include "CanvasPattern.h" 28 28 29 #include "DOMMatrix2DInit.h" 30 #include "DOMMatrixReadOnly.h" 29 31 #include "Image.h" 30 32 #include "Pattern.h" … … 71 73 } 72 74 75 ExceptionOr<void> CanvasPattern::setTransform(DOMMatrix2DInit&& matrixInit) 76 { 77 auto checkValid = DOMMatrixReadOnly::validateAndFixup(matrixInit); 78 if (checkValid.hasException()) 79 return checkValid.releaseException(); 80 81 m_pattern->setPatternSpaceTransform({ matrixInit.a.value_or(1), matrixInit.b.value_or(0), matrixInit.c.value_or(0), matrixInit.d.value_or(1), matrixInit.e.value_or(0), matrixInit.f.value_or(0) }); 82 return { }; 83 } 84 73 85 } // namespace WebCore -
trunk/Source/WebCore/html/canvas/CanvasPattern.h
r207720 r225121 1 1 /* 2 * Copyright (C) 2006, 2008 Apple Inc. All rights reserved.2 * Copyright (C) 2006, 2008, 2017 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 26 26 #pragma once 27 27 28 #include "ExceptionOr.h" 28 29 #include <wtf/Forward.h> 29 30 #include <wtf/Ref.h> … … 34 35 class Image; 35 36 class Pattern; 37 struct DOMMatrix2DInit; 36 38 37 39 class CanvasPattern : public RefCounted<CanvasPattern> { … … 46 48 47 49 bool originClean() const { return m_originClean; } 50 51 ExceptionOr<void> setTransform(DOMMatrix2DInit&&); 48 52 49 53 private: -
trunk/Source/WebCore/html/canvas/CanvasPattern.idl
r221598 r225121 29 29 ] interface CanvasPattern { 30 30 // opaque object 31 // FIXME: Implement setTransform. 32 // void setTransform(optional DOMMatrix2DInit transform); 31 [MayThrowException] void setTransform(optional DOMMatrix2DInit transform); 33 32 }; -
trunk/Source/WebCore/platform/graphics/Pattern.h
r222971 r225121 26 26 */ 27 27 28 #ifndef Pattern_h 29 #define Pattern_h 28 #pragma once 30 29 31 30 #include "AffineTransform.h" … … 67 66 #endif 68 67 void setPatternSpaceTransform(const AffineTransform& patternSpaceTransformation); 69 const AffineTransform& getPatternSpaceTransform() { return m_patternSpaceTransformation; };68 const AffineTransform& patternSpaceTransform() { return m_patternSpaceTransformation; }; 70 69 bool repeatX() const { return m_repeatX; } 71 70 bool repeatY() const { return m_repeatY; } … … 75 74 76 75 Ref<Image> m_tileImage; 76 AffineTransform m_patternSpaceTransformation; 77 77 bool m_repeatX; 78 78 bool m_repeatY; 79 AffineTransform m_patternSpaceTransformation;80 79 }; 81 80 82 81 } //namespace 83 82 84 #endif -
trunk/Source/WebCore/platform/graphics/cairo/PlatformContextCairo.cpp
r223728 r225121 319 319 320 320 auto& patternImage = state.fillPattern->tileImage(); 321 const AffineTransform& patternTransform = state.fillPattern-> getPatternSpaceTransform();321 const AffineTransform& patternTransform = state.fillPattern->patternSpaceTransform(); 322 322 FloatRect patternRect = patternTransform.mapRect(FloatRect(0, 0, patternImage.width(), patternImage.height())); 323 323
Note:
See TracChangeset
for help on using the changeset viewer.