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.
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