CoreGraphics doesn't support repeating gradients natively so we have to
manually repeat them. This change missing support for interpolating a
stop for the center if it doesn't line up correctly. That will come later.
With FillRect we were setting the transform twice.
The patch looks really bad because I needed to move the implementation of
MaskSurface so that it was below the helper methods.
The actual change is:
- FillRect(Rect(aOffset.x, aOffset.y, size.width, size.height), aSource, aDrawOptions);
-
+ if (isGradient(aSource)) {
+ // we shouldn't need to clip to an additional rectangle
+ // as the cliping to the mask should be sufficient.
+ DrawGradient(cg, aSource);
+ } else {
+ SetFillFromPattern(cg, mColorSpace, aSource);
+ CGContextFillRect(cg, CGRectMake(aOffset.x, aOffset.y, size.width, size.height));
+ }
This also avoids setting up other state like alpha and the unboundness fixer twice.
--HG--
extra : rebase_source : 762f2d94ddaff129d584aab1e1f429ddfea99277
This is not the best approach but it works for now. We basically pull the cg
context from gfxASurface and wrap a DrawTarget around it. In the end we'll need
to plumb the DrawTarget through more.
--HG--
rename : dom/ipc/PTabContext.ipdlh => dom/ipc/PContent.ipdl
extra : rebase_source : 49eac0354864ae9f2e7434b8b1efacc37d69fc23
This gives a substantial performance improvement over the more general Mask():
Test (MaskSurface10x10): 1.93042ms +/- 0.305028
Test (MaskSurface100x100): 2.33435ms +/- 1.00807
Test (MaskSurface500x500): 28.0472ms +/- 0.820744
Test (MaskSurface1000x1000): 107.656ms +/- 6.44615
Test (Mask10x10): 13.5237ms +/- 0.0932034
Test (Mask100x100): 14.0742ms +/- 1.21005
Test (Mask500x500): 96.5596ms +/- 1.81415
Test (Mask1000x1000): 356.891ms +/- 9.30592
--HG--
extra : rebase_source : a3031305302fb4abe93aa480df35ed0936d68cd8
This gives a substantial performance improvement over the more general Mask():
Test (MaskSurface10x10): 1.93042ms +/- 0.305028
Test (MaskSurface100x100): 2.33435ms +/- 1.00807
Test (MaskSurface500x500): 28.0472ms +/- 0.820744
Test (MaskSurface1000x1000): 107.656ms +/- 6.44615
Test (Mask10x10): 13.5237ms +/- 0.0932034
Test (Mask100x100): 14.0742ms +/- 1.21005
Test (Mask500x500): 96.5596ms +/- 1.81415
Test (Mask1000x1000): 356.891ms +/- 9.30592
--HG--
rename : layout/reftests/svg/text/dynamic-non-scaling-stroke-ref.svg => layout/reftests/svg/non-scaling-stroke-03-ref.svg
rename : layout/reftests/svg/text/dynamic-non-scaling-stroke.svg => layout/reftests/svg/non-scaling-stroke-03.svg
extra : rebase_source : a1218b8bc5cdcec7d4dd94561d841fb6e2a8ce5d
CGContextSetTextMatrix has behaviour that depends on the text
drawing mode. We want consistency so avoid CGContextSetTextMatrix.
--HG--
extra : rebase_source : c6e46252823586d947ec1dd19db7df980dee23f8
This fixes crashes that can happen when we try to create
an image surface from a quartz surface larger than the maximum
size supported by image surfaces.
--HG--
extra : rebase_source : 6ef9c66a91068f75ddef90a3453a7360dd91fa78
When we fixed transformed clips it caused us to double transform gradients. We
fix this by avoiding ::PushClip when drawing gradients. This has the advantage
of saving a save and restore pair and it makes Fill() more closely match
Stroke()
This has big improvement in the performance of GetImageData() because
we make the snapshot lazily instead of using the vm_copy() method
of CGBitmapContextCreateImage()
This avoids an invalid free() during destruction found with the
online canvas test suite.
--HG--
extra : rebase_source : e1aeff36e557b045fbaff38d7b46fdf91956ae49