diff options
Diffstat (limited to 'test')
177 files changed, 2766 insertions, 1158 deletions
diff --git a/test/Makefile.am b/test/Makefile.am index 9b673d2..1648dd8 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -127,21 +127,24 @@ CLEANFILES += $(BUILT_SOURCES) REFERENCE_IMAGES = \ a1-bug.ref.png \ a1-bug.image16.ref.png \ + a1-bug.quartz.xfail.png \ a1-bug.xlib.ref.png \ a1-image-sample.ref.png \ a1-image-sample.gl.xfail.png \ - a1-image-sample.quartz.xfail.png \ a1-mask.ref.png \ a1-mask-sample.ref.png \ - a1-mask-sample.quartz.xfail.png \ a1-rasterisation-rectangles.ref.png \ + a1-rasterisation-rectangles.quartz.xfail.png \ a1-rasterisation-triangles.ref.png \ + a1-rasterisation-triangles.quartz.xfail.png \ a1-traps-sample.ref.png \ a1-traps-sample.quartz.xfail.png \ a8-clear.ref.png \ + a8-clear.quartz.ref.png \ a8-mask.ref.png \ aliasing.ref.png \ aliasing.image16.ref.png \ + aliasing.quartz.ref.png \ aliasing.xlib.ref.png \ alpha-similar.gl.argb32.xfail.png \ alpha-similar.gl.rgb24.xfail.png \ @@ -154,6 +157,11 @@ REFERENCE_IMAGES = \ alpha-similar.svg.argb32.xfail.png \ alpha-similar.svg.rgb24.xfail.png \ api-special-cases.ref.png \ + arc-infinite-loop.ref.png \ + arc-looping-dash.image16.ref.png \ + arc-looping-dash.ps.ref.png \ + arc-looping-dash.quartz.ref.png \ + arc-looping-dash.ref.png \ big-line.ref.png \ big-line.image16.ref.png \ big-line.ps.ref.png \ @@ -478,11 +486,15 @@ REFERENCE_IMAGES = \ extended-blend.image16.ref.png \ extended-blend.argb32.ref.png \ extended-blend.rgb24.ref.png \ + extended-blend.quartz.argb32.ref.png \ + extended-blend.quartz.rgb24.ref.png \ extended-blend.svg12.argb32.xfail.png \ extended-blend.svg12.rgb24.xfail.png \ extended-blend-alpha.image16.ref.png \ extended-blend-alpha.argb32.ref.png \ extended-blend-alpha.rgb24.ref.png \ + extended-blend-alpha.quartz.argb32.ref.png \ + extended-blend-alpha.quartz.rgb24.ref.png \ extended-blend-alpha.svg12.argb32.xfail.png \ extended-blend-alpha.svg12.rgb24.xfail.png \ extend-pad-border.image16.ref.png \ @@ -513,22 +525,27 @@ REFERENCE_IMAGES = \ extend-repeat.ps2.ref.png \ extend-repeat.ps3.ref.png \ extend-repeat.ref.png \ - fallback-resolution.ppi150x150.ref.png \ - fallback-resolution.ppi150x72.ref.png \ - fallback-resolution.ppi300x300.ref.png \ - fallback-resolution.ppi300x72.ref.png \ - fallback-resolution.ppi37.5x37.5.ref.png \ - fallback-resolution.ppi37.5x72.ref.png \ - fallback-resolution.ppi600x600.ref.png \ - fallback-resolution.ppi600x72.ref.png \ - fallback-resolution.ppi72x150.ref.png \ - fallback-resolution.ppi72x300.ref.png \ - fallback-resolution.ppi72x37.5.ref.png \ - fallback-resolution.ppi72x600.ref.png \ + fallback-resolution.ppi144x144.ps.ref.png \ + fallback-resolution.ppi144x144.ref.png \ + fallback-resolution.ppi144x72.ps.ref.png \ + fallback-resolution.ppi144x72.ref.png \ + fallback-resolution.ppi288x288.pdf.ref.png \ + fallback-resolution.ppi288x288.ps.ref.png \ + fallback-resolution.ppi288x288.svg.ref.png \ + fallback-resolution.ppi288x72.ps.ref.png \ + fallback-resolution.ppi288x72.ref.png \ + fallback-resolution.ppi576x576.pdf.ref.png \ + fallback-resolution.ppi576x576.ps.ref.png \ + fallback-resolution.ppi576x576.svg.ref.png \ + fallback-resolution.ppi576x72.ps.ref.png \ + fallback-resolution.ppi576x72.ref.png \ + fallback-resolution.ppi72x144.ps.ref.png \ + fallback-resolution.ppi72x144.ref.png \ + fallback-resolution.ppi72x288.ps.ref.png \ + fallback-resolution.ppi72x288.ref.png \ + fallback-resolution.ppi72x576.ps.ref.png \ + fallback-resolution.ppi72x576.ref.png \ fallback-resolution.ppi72x72.ref.png \ - fallback-resolution.ppi72x75.ref.png \ - fallback-resolution.ppi75x72.ref.png \ - fallback-resolution.ppi75x75.ref.png \ fill-alpha-pattern.image16.ref.png \ fill-alpha-pattern.ps3.argb32.ref.png \ fill-alpha-pattern.ps3.ref.png \ @@ -600,7 +617,6 @@ REFERENCE_IMAGES = \ filter-nearest-offset.pdf.xfail.png \ filter-nearest-offset.ps2.ref.png \ filter-nearest-offset.ps3.ref.png \ - filter-nearest-offset.quartz.xfail.png \ filter-nearest-offset.ref.png \ filter-nearest-offset.svg.xfail.png \ filter-nearest-transformed.image16.ref.png \ @@ -712,6 +728,7 @@ REFERENCE_IMAGES = \ huge-linear.image16.ref.png \ huge-linear.pdf.ref.png \ huge-linear.ps3.ref.png \ + huge-linear.quartz.ref.png \ huge-linear.ref.png \ huge-radial.image16.ref.png \ huge-radial.pdf.argb32.ref.png \ @@ -785,6 +802,7 @@ REFERENCE_IMAGES = \ linear-gradient.quartz.ref.png \ linear-gradient.ref.png \ linear-gradient.xlib.ref.png \ + linear-gradient-large.quartz.ref.png \ linear-gradient-large.ref.png \ linear-gradient-one-stop.argb32.ref.png \ linear-gradient-one-stop.rgb24.ref.png \ @@ -837,20 +855,20 @@ REFERENCE_IMAGES = \ mask.svg.rgb24.xfail.png \ mask.xlib.ref.png \ mask.xlib.rgb24.ref.png \ - recording-surface-pattern.image16.ref.png \ - recording-surface-pattern.gl.argb32.ref.png \ - recording-surface-pattern.pdf.argb32.ref.png \ - recording-surface-pattern.pdf.rgb24.ref.png \ - recording-surface-pattern.ps.argb32.ref.png \ - recording-surface-pattern.ps.rgb24.ref.png \ - recording-surface-pattern.quartz.argb32.ref.png \ - recording-surface-pattern.quartz.rgb24.ref.png \ - recording-surface-pattern.ref.png \ - recording-surface-pattern.rgb24.ref.png \ - recording-surface-pattern.svg.argb32.ref.png \ - recording-surface-pattern.svg.rgb24.ref.png \ - recording-surface-pattern.xlib.argb32.ref.png \ - recording-surface-pattern.xlib.rgb24.ref.png \ + mesh-pattern.image16.ref.png \ + mesh-pattern.ref.png \ + mesh-pattern-accuracy.image16.ref.png \ + mesh-pattern-accuracy.ref.png \ + mesh-pattern-conical.image16.ref.png \ + mesh-pattern-conical.ref.png \ + mesh-pattern-control-points.image16.ref.png \ + mesh-pattern-control-points.ref.png \ + mesh-pattern-fold.image16.ref.png \ + mesh-pattern-fold.ref.png \ + mesh-pattern-overlap.image16.ref.png \ + mesh-pattern-overlap.ref.png \ + mesh-pattern-transformed.image16.ref.png \ + mesh-pattern-transformed.ref.png \ mime-data.pdf.ref.png \ mime-data.ps.ref.png \ mime-data.ref.png \ @@ -948,6 +966,8 @@ REFERENCE_IMAGES = \ overlapping-glyphs.rgb24.ref.png \ overlapping-glyphs.pdf.argb32.xfail.png \ overlapping-glyphs.pdf.rgb24.xfail.png \ + overlapping-glyphs.quartz.argb32.ref.png \ + overlapping-glyphs.quartz.rgb24.ref.png \ overlapping-glyphs.svg.rgb24.ref.png \ overlapping-glyphs.svg.argb32.ref.png \ paint-repeat.ref.png \ @@ -960,6 +980,7 @@ REFERENCE_IMAGES = \ paint.ref.png \ partial-clip-text.ref.png \ partial-clip-text.ps.ref.png \ + partial-clip-text.quartz.ref.png \ partial-clip-text.svg.ref.png \ partial-coverage-half-reference.ref.png \ partial-coverage-half-triangles.ref.png \ @@ -994,6 +1015,7 @@ REFERENCE_IMAGES = \ pixman-rotate.ref.png \ pixman-rotate.rgb24.ref.png \ pixman-rotate.ps.argb32.ref.png \ + ps-eps.ref.png \ pthread-same-source.image16.ref.png \ pthread-same-source.quartz.xfail.png \ pthread-same-source.ref.png \ @@ -1020,6 +1042,7 @@ REFERENCE_IMAGES = \ push-group-color.image16.ref.png \ push-group-color.quartz.ref.png \ push-group-color.ref.png \ + push-group-color.ps2.ref.png \ push-group-color.ps3.ref.png \ push-group-color.xlib.ref.png \ quartz-surface-source.rgb24.ref.png \ @@ -1027,22 +1050,27 @@ REFERENCE_IMAGES = \ quartz-surface-source.ps2.ref.png \ quartz-surface-source.ps3.ref.png \ radial-gradient.image16.ref.png \ - radial-gradient.pdf.ref.png \ radial-gradient.ref.png \ - radial-gradient.svg.xfail.png \ + radial-gradient.quartz.ref.png \ + radial-gradient-extend.ps3.ref.png \ radial-gradient-extend.ref.png \ radial-gradient-source.image16.ref.png \ radial-gradient-source.argb32.ref.png \ radial-gradient-source.rgb24.ref.png \ - radial-gradient-source.pdf.argb32.ref.png \ - radial-gradient-mask.argb32.ref.png \ - radial-gradient-mask.rgb24.ref.png \ + radial-gradient-source.quartz.argb32.ref.png \ + radial-gradient-source.quartz.rgb24.ref.png \ + radial-gradient-mask.ref.png \ radial-gradient-mask.image16.ref.png \ + radial-gradient-mask.quartz.ref.png \ radial-gradient-mask-source.argb32.ref.png \ radial-gradient-mask-source.rgb24.ref.png \ radial-gradient-mask-source.image16.ref.png \ - radial-gradient-one-stop.argb32.ref.png \ - radial-gradient-one-stop.rgb24.ref.png \ + radial-gradient-mask-source.quartz.argb32.ref.png \ + radial-gradient-mask-source.quartz.rgb24.ref.png \ + radial-gradient-mask-source.xlib.argb32.ref.png \ + radial-gradient-mask-source.xlib.rgb24.ref.png \ + radial-gradient-one-stop.ref.png \ + radial-gradient-one-stop.quartz.ref.png \ random-intersections-eo.image16.ref.png \ random-intersections-eo.ps.ref.png \ random-intersections-eo.quartz.ref.png \ @@ -1067,6 +1095,20 @@ REFERENCE_IMAGES = \ random-intersections-curves-nz.ref.png \ random-intersections-curves-nz.xlib.ref.png \ random-intersections-curves-nz.xlib-fallback.ref.png \ + recording-surface-pattern.image16.ref.png \ + recording-surface-pattern.gl.argb32.ref.png \ + recording-surface-pattern.pdf.argb32.ref.png \ + recording-surface-pattern.pdf.rgb24.ref.png \ + recording-surface-pattern.ps.argb32.ref.png \ + recording-surface-pattern.ps.rgb24.ref.png \ + recording-surface-pattern.quartz.argb32.ref.png \ + recording-surface-pattern.quartz.rgb24.ref.png \ + recording-surface-pattern.ref.png \ + recording-surface-pattern.rgb24.ref.png \ + recording-surface-pattern.svg.argb32.ref.png \ + recording-surface-pattern.svg.rgb24.ref.png \ + recording-surface-pattern.xlib.argb32.ref.png \ + recording-surface-pattern.xlib.rgb24.ref.png \ rectangle-rounding-error.ref.png \ rectilinear-dash.quartz.xfail.png \ rectilinear-dash.ref.png \ @@ -1255,8 +1297,8 @@ REFERENCE_IMAGES = \ surface-pattern-operator.xlib.rgb24.ref.png \ surface-pattern-operator.pdf.argb32.xfail.png \ surface-pattern-operator.pdf.rgb24.xfail.png \ - surface-pattern-operator.quartz.argb32.xfail.png \ - surface-pattern-operator.quartz.rgb24.xfail.png \ + surface-pattern-operator.quartz.argb32.ref.png \ + surface-pattern-operator.quartz.rgb24.ref.png \ surface-pattern-scale-down.image16.ref.png \ surface-pattern-scale-down.pdf.ref.png \ surface-pattern-scale-down.ps2.ref.png \ @@ -1367,6 +1409,8 @@ REFERENCE_IMAGES = \ unbounded-operator.pdf.argb32.ref.png \ unbounded-operator.ps2.argb32.ref.png \ unbounded-operator.ps3.argb32.ref.png \ + unbounded-operator.quartz.argb32.ref.png \ + unbounded-operator.quartz.rgb24.ref.png \ unbounded-operator.ref.png \ unbounded-operator.rgb24.ref.png \ unbounded-operator.svg12.argb32.ref.png \ @@ -1399,6 +1443,7 @@ REFERENCE_IMAGES = \ user-font.ref.png \ user-font.svg.ref.png \ user-font.xlib.ref.png \ + xcb-stress-cache.ref.png \ xcb-surface-source.rgb24.ref.png \ xcb-surface-source.argb32.ref.png \ xcomposite-projection.ref.png \ @@ -1414,20 +1459,22 @@ REFERENCE_IMAGES = \ xlib-surface-source.ps3.ref.png \ xlib-surface-source.svg12.argb32.xfail.png \ xlib-surface-source.svg12.rgb24.xfail.png \ + white-in-noop.ref.png \ zero-mask.ref.png \ zero-mask.rgb24.ref.png \ zero-alpha.ref.png EXTRA_DIST += \ 6x13.pcf \ -make-html.pl \ +index.html \ +jp2.jp2 \ jpeg.jpg \ png.png \ -jp2.jp2 \ romedalen.jpg \ romedalen.png \ scarab.jpg \ surface-source.c \ +testtable.js \ $(REFERENCE_IMAGES) # Any test for which the code committed to CVS is expected to fail @@ -1662,7 +1709,6 @@ VALGRIND_FLAGS = \ CLEANFILES += \ valgrind-log \ - index.html \ ref.hash \ png-test.png \ png.out.png \ @@ -1674,7 +1720,6 @@ CLEANFILES += \ ps-surface-source.out.ps \ pdf-features.pdf \ pdf-mime-data.out* \ - ps-eps.eps \ ps-features.ps \ svg-clip.svg \ svg-surface.svg \ @@ -1705,24 +1750,16 @@ recheck: @echo Re-checking failed tests @$(MAKE) $(AM_MAKEFLAGS) $(recheck) -# Checks tests and creates index.html. +# Checks tests. # Target doesn't fail if tests fail. test: - @$(MAKE) $(AM_MAKEFLAGS) check; \ - $(MAKE) $(AM_MAKEFLAGS) html + @$(MAKE) $(AM_MAKEFLAGS) check -# Re-checks tests and creates index.html. +# Re-checks tests. # Target doesn't fail if tests fail. retest: @CAIRO_TESTS="$(FAILED_TESTS)"; \ - $(MAKE) $(AM_MAKEFLAGS) check; \ - $(MAKE) $(AM_MAKEFLAGS) html - -html-local: index.html - -# Make index.html with no dependency tracking, containing only the failed tests. -rehtml: - @CAIRO_TESTS="$(FAILED_TESTS)" $(MAKE) $(AM_MAKEFLAGS) html + $(MAKE) $(AM_MAKEFLAGS) check # Run tests under a tool specified by TOOL. For example, make run TOOL=gdb run: @@ -1740,11 +1777,6 @@ NOLOG_TESTS_LOG = $(NOLOG_TESTS:=.log) $(NOLOG_TESTS_LOG): @echo dummy > $@ -index.html: $(srcdir)/make-html.pl - @echo Creating index.html - @perl $(srcdir)/make-html.pl > $@ - - # Identify identical reference images check-ref-dups: @LANG=C; \ @@ -1795,6 +1827,17 @@ check-ref-missing: release-verify-sane-tests: check-ref-missing -.PHONY: check-valgrind test recheck retest rehtml check-ref-dups check-ref-missing release-verify-sane-tests +results.tar: + @tar cf $@ index.html testtable.js *.log; \ + for i in output/*.fail.png ; do \ + testname=$${i#output/} ; \ + testname=$${testname%%.*} ; \ + tar uf $@ $${testname}*.ref.png $${i%fail.png}out.png $${i%fail.png}diff.png ; \ + done + +results.tar.gz: results.tar + gzip -c $< > $@ + +.PHONY: check-valgrind test recheck retest check-ref-dups check-ref-missing release-verify-sane-tests EXTRA_DIST += Makefile.win32 diff --git a/test/Makefile.in b/test/Makefile.in index 5bcb7b6..c9bfced 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -127,19 +127,19 @@ am__cairo_test_suite_SOURCES_DIST = buffer-diff.c cairo-test.c \ cairo-test-private.h a1-bug.c a1-image-sample.c a1-mask.c \ a1-mask-sample.c a1-traps-sample.c a1-rasterisation.c \ a8-clear.c a8-mask.c aliasing.c alpha-similar.c \ - api-special-cases.c big-line.c big-trap.c bilevel-image.c \ - bug-bo-rectangular.c bug-extents.c bug-seams.c caps.c \ - caps-joins.c caps-joins-alpha.c caps-joins-curve.c \ - caps-sub-paths.c clear.c clear-source.c clip-all.c \ - clip-contexts.c clip-disjoint.c clip-device-offset.c \ - clip-draw-unbounded.c clip-empty.c clip-empty-group.c \ - clip-empty-save.c clip-fill.c clip-fill-no-op.c \ - clip-fill-rule.c clip-fill-rule-pixel-aligned.c \ - clip-group-shapes.c clip-image.c clip-nesting.c \ - clip-operator.c clip-push-group.c clip-shape.c clip-stroke.c \ - clip-stroke-no-op.c clip-text.c clip-twice.c \ - clip-twice-rectangle.c clip-unbounded.c clip-zero.c \ - clipped-group.c clipped-surface.c close-path.c \ + arc-infinite-loop.c arc-looping-dash.c api-special-cases.c \ + big-line.c big-trap.c bilevel-image.c bug-bo-rectangular.c \ + bug-extents.c bug-seams.c caps.c caps-joins.c \ + caps-joins-alpha.c caps-joins-curve.c caps-sub-paths.c clear.c \ + clear-source.c clip-all.c clip-contexts.c clip-disjoint.c \ + clip-device-offset.c clip-draw-unbounded.c clip-empty.c \ + clip-empty-group.c clip-empty-save.c clip-fill.c \ + clip-fill-no-op.c clip-fill-rule.c \ + clip-fill-rule-pixel-aligned.c clip-group-shapes.c \ + clip-image.c clip-nesting.c clip-operator.c clip-push-group.c \ + clip-shape.c clip-stroke.c clip-stroke-no-op.c clip-text.c \ + clip-twice.c clip-twice-rectangle.c clip-unbounded.c \ + clip-zero.c clipped-group.c clipped-surface.c close-path.c \ close-path-current-point.c \ composite-integer-translate-source.c \ composite-integer-translate-over.c \ @@ -169,11 +169,11 @@ am__cairo_test_suite_SOURCES_DIST = buffer-diff.c cairo-test.c \ get-group-target.c get-path-extents.c gradient-alpha.c \ gradient-constant-alpha.c gradient-zero-stops.c \ gradient-zero-stops-mask.c group-clip.c group-paint.c \ - group-unaligned.c half-coverage.c halo.c huge-linear.c \ - huge-radial.c image-surface-source.c implicit-close.c \ - infinite-join.c in-fill-empty-trapezoid.c in-fill-trapezoid.c \ - invalid-matrix.c inverse-text.c joins.c large-clip.c \ - large-font.c large-source.c large-source-roi.c \ + group-state.c group-unaligned.c half-coverage.c halo.c \ + huge-linear.c huge-radial.c image-surface-source.c \ + implicit-close.c infinite-join.c in-fill-empty-trapezoid.c \ + in-fill-trapezoid.c invalid-matrix.c inverse-text.c joins.c \ + large-clip.c large-font.c large-source.c large-source-roi.c \ large-twin-antialias-mixed.c leaky-dash.c \ leaky-dashed-rectangle.c leaky-dashed-stroke.c leaky-polygon.c \ line-width.c line-width-scale.c line-width-zero.c \ @@ -183,9 +183,12 @@ am__cairo_test_suite_SOURCES_DIST = buffer-diff.c cairo-test.c \ linear-step-function.c linear-uniform.c long-dashed-lines.c \ long-lines.c mask.c mask-alpha.c mask-ctm.c mask-glyphs.c \ mask-surface-ctm.c mask-transformed-image.c \ - mask-transformed-similar.c recording-surface-pattern.c \ - mime-data.c miter-precision.c move-to-show-surface.c \ - new-sub-path.c nil-surface.c operator.c operator-alpha.c \ + mask-transformed-similar.c mesh-pattern.c \ + mesh-pattern-accuracy.c mesh-pattern-conical.c \ + mesh-pattern-control-points.c mesh-pattern-fold.c \ + mesh-pattern-overlap.c mesh-pattern-transformed.c mime-data.c \ + miter-precision.c move-to-show-surface.c new-sub-path.c \ + nil-surface.c operator.c operator-alpha.c \ operator-alpha-alpha.c operator-clear.c operator-source.c \ over-above-source.c over-around-source.c over-below-source.c \ over-between-source.c overlapping-glyphs.c paint.c \ @@ -194,16 +197,14 @@ am__cairo_test_suite_SOURCES_DIST = buffer-diff.c cairo-test.c \ path-stroke-twice.c path-precision.c pattern-get-type.c \ pattern-getters.c pixman-rotate.c png.c push-group.c \ push-group-color.c push-group-path-offset.c radial-gradient.c \ - radial-gradient-extend.c radial-gradient-mask.c \ - radial-gradient-mask-source.c radial-gradient-one-stop.c \ - radial-gradient-source.c random-intersections-eo.c \ + radial-gradient-extend.c random-intersections-eo.c \ random-intersections-nonzero.c \ random-intersections-curves-eo.c \ - random-intersections-curves-nz.c rectangle-rounding-error.c \ - rectilinear-fill.c rectilinear-grid.c \ - rectilinear-miter-limit.c rectilinear-dash.c \ - rectilinear-stroke.c reflected-stroke.c rel-path.c \ - rgb24-ignore-alpha.c rotate-image-surface-paint.c \ + random-intersections-curves-nz.c recording-surface-pattern.c \ + rectangle-rounding-error.c rectilinear-fill.c \ + rectilinear-grid.c rectilinear-miter-limit.c \ + rectilinear-dash.c rectilinear-stroke.c reflected-stroke.c \ + rel-path.c rgb24-ignore-alpha.c rotate-image-surface-paint.c \ rotated-clip.c rounded-rectangle-fill.c \ rounded-rectangle-stroke.c scale-down-source-surface-paint.c \ scale-offset-image.c scale-offset-similar.c \ @@ -232,10 +233,10 @@ am__cairo_test_suite_SOURCES_DIST = buffer-diff.c cairo-test.c \ twin-antialias-none.c twin-antialias-subpixel.c \ unantialiased-shapes.c unbounded-operator.c user-data.c \ user-font.c user-font-mask.c user-font-proxy.c \ - user-font-rescale.c xcomposite-projection.c \ - xlib-expose-event.c zero-alpha.c zero-mask.c \ - pthread-same-source.c pthread-show-text.c pthread-similar.c \ - bitmap-font.c ft-font-create-for-ft-face.c \ + user-font-rescale.c white-in-noop.c xcb-stress-cache.c \ + xcomposite-projection.c xlib-expose-event.c zero-alpha.c \ + zero-mask.c pthread-same-source.c pthread-show-text.c \ + pthread-similar.c bitmap-font.c ft-font-create-for-ft-face.c \ ft-show-glyphs-positioning.c ft-show-glyphs-table.c \ ft-text-vertical-layout-type1.c \ ft-text-vertical-layout-type3.c ft-text-antialias-none.c \ @@ -306,6 +307,8 @@ am__objects_29 = cairo_test_suite-a1-bug.$(OBJEXT) \ cairo_test_suite-a8-mask.$(OBJEXT) \ cairo_test_suite-aliasing.$(OBJEXT) \ cairo_test_suite-alpha-similar.$(OBJEXT) \ + cairo_test_suite-arc-infinite-loop.$(OBJEXT) \ + cairo_test_suite-arc-looping-dash.$(OBJEXT) \ cairo_test_suite-api-special-cases.$(OBJEXT) \ cairo_test_suite-big-line.$(OBJEXT) \ cairo_test_suite-big-trap.$(OBJEXT) \ @@ -419,6 +422,7 @@ am__objects_29 = cairo_test_suite-a1-bug.$(OBJEXT) \ cairo_test_suite-gradient-zero-stops-mask.$(OBJEXT) \ cairo_test_suite-group-clip.$(OBJEXT) \ cairo_test_suite-group-paint.$(OBJEXT) \ + cairo_test_suite-group-state.$(OBJEXT) \ cairo_test_suite-group-unaligned.$(OBJEXT) \ cairo_test_suite-half-coverage.$(OBJEXT) \ cairo_test_suite-halo.$(OBJEXT) \ @@ -461,7 +465,13 @@ am__objects_29 = cairo_test_suite-a1-bug.$(OBJEXT) \ cairo_test_suite-mask-surface-ctm.$(OBJEXT) \ cairo_test_suite-mask-transformed-image.$(OBJEXT) \ cairo_test_suite-mask-transformed-similar.$(OBJEXT) \ - cairo_test_suite-recording-surface-pattern.$(OBJEXT) \ + cairo_test_suite-mesh-pattern.$(OBJEXT) \ + cairo_test_suite-mesh-pattern-accuracy.$(OBJEXT) \ + cairo_test_suite-mesh-pattern-conical.$(OBJEXT) \ + cairo_test_suite-mesh-pattern-control-points.$(OBJEXT) \ + cairo_test_suite-mesh-pattern-fold.$(OBJEXT) \ + cairo_test_suite-mesh-pattern-overlap.$(OBJEXT) \ + cairo_test_suite-mesh-pattern-transformed.$(OBJEXT) \ cairo_test_suite-mime-data.$(OBJEXT) \ cairo_test_suite-miter-precision.$(OBJEXT) \ cairo_test_suite-move-to-show-surface.$(OBJEXT) \ @@ -495,14 +505,11 @@ am__objects_29 = cairo_test_suite-a1-bug.$(OBJEXT) \ cairo_test_suite-push-group-path-offset.$(OBJEXT) \ cairo_test_suite-radial-gradient.$(OBJEXT) \ cairo_test_suite-radial-gradient-extend.$(OBJEXT) \ - cairo_test_suite-radial-gradient-mask.$(OBJEXT) \ - cairo_test_suite-radial-gradient-mask-source.$(OBJEXT) \ - cairo_test_suite-radial-gradient-one-stop.$(OBJEXT) \ - cairo_test_suite-radial-gradient-source.$(OBJEXT) \ cairo_test_suite-random-intersections-eo.$(OBJEXT) \ cairo_test_suite-random-intersections-nonzero.$(OBJEXT) \ cairo_test_suite-random-intersections-curves-eo.$(OBJEXT) \ cairo_test_suite-random-intersections-curves-nz.$(OBJEXT) \ + cairo_test_suite-recording-surface-pattern.$(OBJEXT) \ cairo_test_suite-rectangle-rounding-error.$(OBJEXT) \ cairo_test_suite-rectilinear-fill.$(OBJEXT) \ cairo_test_suite-rectilinear-grid.$(OBJEXT) \ @@ -585,6 +592,8 @@ am__objects_29 = cairo_test_suite-a1-bug.$(OBJEXT) \ cairo_test_suite-user-font-mask.$(OBJEXT) \ cairo_test_suite-user-font-proxy.$(OBJEXT) \ cairo_test_suite-user-font-rescale.$(OBJEXT) \ + cairo_test_suite-white-in-noop.$(OBJEXT) \ + cairo_test_suite-xcb-stress-cache.$(OBJEXT) \ cairo_test_suite-xcomposite-projection.$(OBJEXT) \ cairo_test_suite-xlib-expose-event.$(OBJEXT) \ cairo_test_suite-zero-alpha.$(OBJEXT) \ @@ -927,37 +936,38 @@ xlib_xrender_CFLAGS = @xlib_xrender_CFLAGS@ xlib_xrender_LIBS = @xlib_xrender_LIBS@ BUILT_SOURCES = cairo-test-constructors.c CLEANFILES = *.i *.s *.gch $(EXTRA_LTLIBRARIES) $(EXTRA_PROGRAMS) \ - $(check_PROGRAMS) $(BUILT_SOURCES) valgrind-log index.html \ - ref.hash png-test.png png.out.png create-for-stream.pdf \ + $(check_PROGRAMS) $(BUILT_SOURCES) valgrind-log ref.hash \ + png-test.png png.out.png create-for-stream.pdf \ create-for-stream.ps create-for-stream.svg \ svg-surface-source.out.svg pdf-surface-source.out.pdf \ ps-surface-source.out.ps pdf-features.pdf pdf-mime-data.out* \ - ps-eps.eps ps-features.ps svg-clip.svg svg-surface.svg \ - multi-page.pdf multi-page.ps $(NULL) + ps-features.ps svg-clip.svg svg-surface.svg multi-page.pdf \ + multi-page.ps $(NULL) DISTCLEANFILES = $(BUILT_SOURCES) EXTRA_DIST = $(BUILT_SOURCES) $(noinst_SCRIPTS) COPYING \ make-cairo-test-constructors.sh run-cairo-test-suite.sh \ - 6x13.pcf make-html.pl jpeg.jpg png.png jp2.jp2 romedalen.jpg \ - romedalen.png scarab.jpg surface-source.c $(REFERENCE_IMAGES) \ - Makefile.win32 + 6x13.pcf index.html jp2.jp2 jpeg.jpg png.png romedalen.jpg \ + romedalen.png scarab.jpg surface-source.c testtable.js \ + $(REFERENCE_IMAGES) Makefile.win32 EXTRA_LTLIBRARIES = MAINTAINERCLEANFILES = Makefile.in TESTS = cairo-test-suite$(EXEEXT) test_sources = a1-bug.c a1-image-sample.c a1-mask.c a1-mask-sample.c \ a1-traps-sample.c a1-rasterisation.c a8-clear.c a8-mask.c \ - aliasing.c alpha-similar.c api-special-cases.c big-line.c \ - big-trap.c bilevel-image.c bug-bo-rectangular.c bug-extents.c \ - bug-seams.c caps.c caps-joins.c caps-joins-alpha.c \ - caps-joins-curve.c caps-sub-paths.c clear.c clear-source.c \ - clip-all.c clip-contexts.c clip-disjoint.c \ - clip-device-offset.c clip-draw-unbounded.c clip-empty.c \ - clip-empty-group.c clip-empty-save.c clip-fill.c \ - clip-fill-no-op.c clip-fill-rule.c \ - clip-fill-rule-pixel-aligned.c clip-group-shapes.c \ - clip-image.c clip-nesting.c clip-operator.c clip-push-group.c \ - clip-shape.c clip-stroke.c clip-stroke-no-op.c clip-text.c \ - clip-twice.c clip-twice-rectangle.c clip-unbounded.c \ - clip-zero.c clipped-group.c clipped-surface.c close-path.c \ + aliasing.c alpha-similar.c arc-infinite-loop.c \ + arc-looping-dash.c api-special-cases.c big-line.c big-trap.c \ + bilevel-image.c bug-bo-rectangular.c bug-extents.c bug-seams.c \ + caps.c caps-joins.c caps-joins-alpha.c caps-joins-curve.c \ + caps-sub-paths.c clear.c clear-source.c clip-all.c \ + clip-contexts.c clip-disjoint.c clip-device-offset.c \ + clip-draw-unbounded.c clip-empty.c clip-empty-group.c \ + clip-empty-save.c clip-fill.c clip-fill-no-op.c \ + clip-fill-rule.c clip-fill-rule-pixel-aligned.c \ + clip-group-shapes.c clip-image.c clip-nesting.c \ + clip-operator.c clip-push-group.c clip-shape.c clip-stroke.c \ + clip-stroke-no-op.c clip-text.c clip-twice.c \ + clip-twice-rectangle.c clip-unbounded.c clip-zero.c \ + clipped-group.c clipped-surface.c close-path.c \ close-path-current-point.c \ composite-integer-translate-source.c \ composite-integer-translate-over.c \ @@ -987,11 +997,11 @@ test_sources = a1-bug.c a1-image-sample.c a1-mask.c a1-mask-sample.c \ get-group-target.c get-path-extents.c gradient-alpha.c \ gradient-constant-alpha.c gradient-zero-stops.c \ gradient-zero-stops-mask.c group-clip.c group-paint.c \ - group-unaligned.c half-coverage.c halo.c huge-linear.c \ - huge-radial.c image-surface-source.c implicit-close.c \ - infinite-join.c in-fill-empty-trapezoid.c in-fill-trapezoid.c \ - invalid-matrix.c inverse-text.c joins.c large-clip.c \ - large-font.c large-source.c large-source-roi.c \ + group-state.c group-unaligned.c half-coverage.c halo.c \ + huge-linear.c huge-radial.c image-surface-source.c \ + implicit-close.c infinite-join.c in-fill-empty-trapezoid.c \ + in-fill-trapezoid.c invalid-matrix.c inverse-text.c joins.c \ + large-clip.c large-font.c large-source.c large-source-roi.c \ large-twin-antialias-mixed.c leaky-dash.c \ leaky-dashed-rectangle.c leaky-dashed-stroke.c leaky-polygon.c \ line-width.c line-width-scale.c line-width-zero.c \ @@ -1001,9 +1011,12 @@ test_sources = a1-bug.c a1-image-sample.c a1-mask.c a1-mask-sample.c \ linear-step-function.c linear-uniform.c long-dashed-lines.c \ long-lines.c mask.c mask-alpha.c mask-ctm.c mask-glyphs.c \ mask-surface-ctm.c mask-transformed-image.c \ - mask-transformed-similar.c recording-surface-pattern.c \ - mime-data.c miter-precision.c move-to-show-surface.c \ - new-sub-path.c nil-surface.c operator.c operator-alpha.c \ + mask-transformed-similar.c mesh-pattern.c \ + mesh-pattern-accuracy.c mesh-pattern-conical.c \ + mesh-pattern-control-points.c mesh-pattern-fold.c \ + mesh-pattern-overlap.c mesh-pattern-transformed.c mime-data.c \ + miter-precision.c move-to-show-surface.c new-sub-path.c \ + nil-surface.c operator.c operator-alpha.c \ operator-alpha-alpha.c operator-clear.c operator-source.c \ over-above-source.c over-around-source.c over-below-source.c \ over-between-source.c overlapping-glyphs.c paint.c \ @@ -1012,16 +1025,14 @@ test_sources = a1-bug.c a1-image-sample.c a1-mask.c a1-mask-sample.c \ path-stroke-twice.c path-precision.c pattern-get-type.c \ pattern-getters.c pixman-rotate.c png.c push-group.c \ push-group-color.c push-group-path-offset.c radial-gradient.c \ - radial-gradient-extend.c radial-gradient-mask.c \ - radial-gradient-mask-source.c radial-gradient-one-stop.c \ - radial-gradient-source.c random-intersections-eo.c \ + radial-gradient-extend.c random-intersections-eo.c \ random-intersections-nonzero.c \ random-intersections-curves-eo.c \ - random-intersections-curves-nz.c rectangle-rounding-error.c \ - rectilinear-fill.c rectilinear-grid.c \ - rectilinear-miter-limit.c rectilinear-dash.c \ - rectilinear-stroke.c reflected-stroke.c rel-path.c \ - rgb24-ignore-alpha.c rotate-image-surface-paint.c \ + random-intersections-curves-nz.c recording-surface-pattern.c \ + rectangle-rounding-error.c rectilinear-fill.c \ + rectilinear-grid.c rectilinear-miter-limit.c \ + rectilinear-dash.c rectilinear-stroke.c reflected-stroke.c \ + rel-path.c rgb24-ignore-alpha.c rotate-image-surface-paint.c \ rotated-clip.c rounded-rectangle-fill.c \ rounded-rectangle-stroke.c scale-down-source-surface-paint.c \ scale-offset-image.c scale-offset-similar.c \ @@ -1050,12 +1061,12 @@ test_sources = a1-bug.c a1-image-sample.c a1-mask.c a1-mask-sample.c \ twin-antialias-none.c twin-antialias-subpixel.c \ unantialiased-shapes.c unbounded-operator.c user-data.c \ user-font.c user-font-mask.c user-font-proxy.c \ - user-font-rescale.c xcomposite-projection.c \ - xlib-expose-event.c zero-alpha.c zero-mask.c $(am__append_1) \ - $(am__append_2) $(am__append_3) $(am__append_4) \ - $(am__append_5) $(am__append_6) $(am__append_7) \ - $(am__append_8) $(am__append_9) $(am__append_10) \ - $(am__append_11) $(am__append_12) $(test) + user-font-rescale.c white-in-noop.c xcb-stress-cache.c \ + xcomposite-projection.c xlib-expose-event.c zero-alpha.c \ + zero-mask.c $(am__append_1) $(am__append_2) $(am__append_3) \ + $(am__append_4) $(am__append_5) $(am__append_6) \ + $(am__append_7) $(am__append_8) $(am__append_9) \ + $(am__append_10) $(am__append_11) $(am__append_12) $(test) pthread_test_sources = \ pthread-same-source.c \ pthread-show-text.c \ @@ -1163,21 +1174,24 @@ cairo_test_suite_DEPENDENCIES = \ REFERENCE_IMAGES = \ a1-bug.ref.png \ a1-bug.image16.ref.png \ + a1-bug.quartz.xfail.png \ a1-bug.xlib.ref.png \ a1-image-sample.ref.png \ a1-image-sample.gl.xfail.png \ - a1-image-sample.quartz.xfail.png \ a1-mask.ref.png \ a1-mask-sample.ref.png \ - a1-mask-sample.quartz.xfail.png \ a1-rasterisation-rectangles.ref.png \ + a1-rasterisation-rectangles.quartz.xfail.png \ a1-rasterisation-triangles.ref.png \ + a1-rasterisation-triangles.quartz.xfail.png \ a1-traps-sample.ref.png \ a1-traps-sample.quartz.xfail.png \ a8-clear.ref.png \ + a8-clear.quartz.ref.png \ a8-mask.ref.png \ aliasing.ref.png \ aliasing.image16.ref.png \ + aliasing.quartz.ref.png \ aliasing.xlib.ref.png \ alpha-similar.gl.argb32.xfail.png \ alpha-similar.gl.rgb24.xfail.png \ @@ -1190,6 +1204,11 @@ REFERENCE_IMAGES = \ alpha-similar.svg.argb32.xfail.png \ alpha-similar.svg.rgb24.xfail.png \ api-special-cases.ref.png \ + arc-infinite-loop.ref.png \ + arc-looping-dash.image16.ref.png \ + arc-looping-dash.ps.ref.png \ + arc-looping-dash.quartz.ref.png \ + arc-looping-dash.ref.png \ big-line.ref.png \ big-line.image16.ref.png \ big-line.ps.ref.png \ @@ -1514,11 +1533,15 @@ REFERENCE_IMAGES = \ extended-blend.image16.ref.png \ extended-blend.argb32.ref.png \ extended-blend.rgb24.ref.png \ + extended-blend.quartz.argb32.ref.png \ + extended-blend.quartz.rgb24.ref.png \ extended-blend.svg12.argb32.xfail.png \ extended-blend.svg12.rgb24.xfail.png \ extended-blend-alpha.image16.ref.png \ extended-blend-alpha.argb32.ref.png \ extended-blend-alpha.rgb24.ref.png \ + extended-blend-alpha.quartz.argb32.ref.png \ + extended-blend-alpha.quartz.rgb24.ref.png \ extended-blend-alpha.svg12.argb32.xfail.png \ extended-blend-alpha.svg12.rgb24.xfail.png \ extend-pad-border.image16.ref.png \ @@ -1549,22 +1572,27 @@ REFERENCE_IMAGES = \ extend-repeat.ps2.ref.png \ extend-repeat.ps3.ref.png \ extend-repeat.ref.png \ - fallback-resolution.ppi150x150.ref.png \ - fallback-resolution.ppi150x72.ref.png \ - fallback-resolution.ppi300x300.ref.png \ - fallback-resolution.ppi300x72.ref.png \ - fallback-resolution.ppi37.5x37.5.ref.png \ - fallback-resolution.ppi37.5x72.ref.png \ - fallback-resolution.ppi600x600.ref.png \ - fallback-resolution.ppi600x72.ref.png \ - fallback-resolution.ppi72x150.ref.png \ - fallback-resolution.ppi72x300.ref.png \ - fallback-resolution.ppi72x37.5.ref.png \ - fallback-resolution.ppi72x600.ref.png \ + fallback-resolution.ppi144x144.ps.ref.png \ + fallback-resolution.ppi144x144.ref.png \ + fallback-resolution.ppi144x72.ps.ref.png \ + fallback-resolution.ppi144x72.ref.png \ + fallback-resolution.ppi288x288.pdf.ref.png \ + fallback-resolution.ppi288x288.ps.ref.png \ + fallback-resolution.ppi288x288.svg.ref.png \ + fallback-resolution.ppi288x72.ps.ref.png \ + fallback-resolution.ppi288x72.ref.png \ + fallback-resolution.ppi576x576.pdf.ref.png \ + fallback-resolution.ppi576x576.ps.ref.png \ + fallback-resolution.ppi576x576.svg.ref.png \ + fallback-resolution.ppi576x72.ps.ref.png \ + fallback-resolution.ppi576x72.ref.png \ + fallback-resolution.ppi72x144.ps.ref.png \ + fallback-resolution.ppi72x144.ref.png \ + fallback-resolution.ppi72x288.ps.ref.png \ + fallback-resolution.ppi72x288.ref.png \ + fallback-resolution.ppi72x576.ps.ref.png \ + fallback-resolution.ppi72x576.ref.png \ fallback-resolution.ppi72x72.ref.png \ - fallback-resolution.ppi72x75.ref.png \ - fallback-resolution.ppi75x72.ref.png \ - fallback-resolution.ppi75x75.ref.png \ fill-alpha-pattern.image16.ref.png \ fill-alpha-pattern.ps3.argb32.ref.png \ fill-alpha-pattern.ps3.ref.png \ @@ -1636,7 +1664,6 @@ REFERENCE_IMAGES = \ filter-nearest-offset.pdf.xfail.png \ filter-nearest-offset.ps2.ref.png \ filter-nearest-offset.ps3.ref.png \ - filter-nearest-offset.quartz.xfail.png \ filter-nearest-offset.ref.png \ filter-nearest-offset.svg.xfail.png \ filter-nearest-transformed.image16.ref.png \ @@ -1748,6 +1775,7 @@ REFERENCE_IMAGES = \ huge-linear.image16.ref.png \ huge-linear.pdf.ref.png \ huge-linear.ps3.ref.png \ + huge-linear.quartz.ref.png \ huge-linear.ref.png \ huge-radial.image16.ref.png \ huge-radial.pdf.argb32.ref.png \ @@ -1821,6 +1849,7 @@ REFERENCE_IMAGES = \ linear-gradient.quartz.ref.png \ linear-gradient.ref.png \ linear-gradient.xlib.ref.png \ + linear-gradient-large.quartz.ref.png \ linear-gradient-large.ref.png \ linear-gradient-one-stop.argb32.ref.png \ linear-gradient-one-stop.rgb24.ref.png \ @@ -1873,20 +1902,20 @@ REFERENCE_IMAGES = \ mask.svg.rgb24.xfail.png \ mask.xlib.ref.png \ mask.xlib.rgb24.ref.png \ - recording-surface-pattern.image16.ref.png \ - recording-surface-pattern.gl.argb32.ref.png \ - recording-surface-pattern.pdf.argb32.ref.png \ - recording-surface-pattern.pdf.rgb24.ref.png \ - recording-surface-pattern.ps.argb32.ref.png \ - recording-surface-pattern.ps.rgb24.ref.png \ - recording-surface-pattern.quartz.argb32.ref.png \ - recording-surface-pattern.quartz.rgb24.ref.png \ - recording-surface-pattern.ref.png \ - recording-surface-pattern.rgb24.ref.png \ - recording-surface-pattern.svg.argb32.ref.png \ - recording-surface-pattern.svg.rgb24.ref.png \ - recording-surface-pattern.xlib.argb32.ref.png \ - recording-surface-pattern.xlib.rgb24.ref.png \ + mesh-pattern.image16.ref.png \ + mesh-pattern.ref.png \ + mesh-pattern-accuracy.image16.ref.png \ + mesh-pattern-accuracy.ref.png \ + mesh-pattern-conical.image16.ref.png \ + mesh-pattern-conical.ref.png \ + mesh-pattern-control-points.image16.ref.png \ + mesh-pattern-control-points.ref.png \ + mesh-pattern-fold.image16.ref.png \ + mesh-pattern-fold.ref.png \ + mesh-pattern-overlap.image16.ref.png \ + mesh-pattern-overlap.ref.png \ + mesh-pattern-transformed.image16.ref.png \ + mesh-pattern-transformed.ref.png \ mime-data.pdf.ref.png \ mime-data.ps.ref.png \ mime-data.ref.png \ @@ -1984,6 +2013,8 @@ REFERENCE_IMAGES = \ overlapping-glyphs.rgb24.ref.png \ overlapping-glyphs.pdf.argb32.xfail.png \ overlapping-glyphs.pdf.rgb24.xfail.png \ + overlapping-glyphs.quartz.argb32.ref.png \ + overlapping-glyphs.quartz.rgb24.ref.png \ overlapping-glyphs.svg.rgb24.ref.png \ overlapping-glyphs.svg.argb32.ref.png \ paint-repeat.ref.png \ @@ -1996,6 +2027,7 @@ REFERENCE_IMAGES = \ paint.ref.png \ partial-clip-text.ref.png \ partial-clip-text.ps.ref.png \ + partial-clip-text.quartz.ref.png \ partial-clip-text.svg.ref.png \ partial-coverage-half-reference.ref.png \ partial-coverage-half-triangles.ref.png \ @@ -2030,6 +2062,7 @@ REFERENCE_IMAGES = \ pixman-rotate.ref.png \ pixman-rotate.rgb24.ref.png \ pixman-rotate.ps.argb32.ref.png \ + ps-eps.ref.png \ pthread-same-source.image16.ref.png \ pthread-same-source.quartz.xfail.png \ pthread-same-source.ref.png \ @@ -2056,6 +2089,7 @@ REFERENCE_IMAGES = \ push-group-color.image16.ref.png \ push-group-color.quartz.ref.png \ push-group-color.ref.png \ + push-group-color.ps2.ref.png \ push-group-color.ps3.ref.png \ push-group-color.xlib.ref.png \ quartz-surface-source.rgb24.ref.png \ @@ -2063,22 +2097,27 @@ REFERENCE_IMAGES = \ quartz-surface-source.ps2.ref.png \ quartz-surface-source.ps3.ref.png \ radial-gradient.image16.ref.png \ - radial-gradient.pdf.ref.png \ radial-gradient.ref.png \ - radial-gradient.svg.xfail.png \ + radial-gradient.quartz.ref.png \ + radial-gradient-extend.ps3.ref.png \ radial-gradient-extend.ref.png \ radial-gradient-source.image16.ref.png \ radial-gradient-source.argb32.ref.png \ radial-gradient-source.rgb24.ref.png \ - radial-gradient-source.pdf.argb32.ref.png \ - radial-gradient-mask.argb32.ref.png \ - radial-gradient-mask.rgb24.ref.png \ + radial-gradient-source.quartz.argb32.ref.png \ + radial-gradient-source.quartz.rgb24.ref.png \ + radial-gradient-mask.ref.png \ radial-gradient-mask.image16.ref.png \ + radial-gradient-mask.quartz.ref.png \ radial-gradient-mask-source.argb32.ref.png \ radial-gradient-mask-source.rgb24.ref.png \ radial-gradient-mask-source.image16.ref.png \ - radial-gradient-one-stop.argb32.ref.png \ - radial-gradient-one-stop.rgb24.ref.png \ + radial-gradient-mask-source.quartz.argb32.ref.png \ + radial-gradient-mask-source.quartz.rgb24.ref.png \ + radial-gradient-mask-source.xlib.argb32.ref.png \ + radial-gradient-mask-source.xlib.rgb24.ref.png \ + radial-gradient-one-stop.ref.png \ + radial-gradient-one-stop.quartz.ref.png \ random-intersections-eo.image16.ref.png \ random-intersections-eo.ps.ref.png \ random-intersections-eo.quartz.ref.png \ @@ -2103,6 +2142,20 @@ REFERENCE_IMAGES = \ random-intersections-curves-nz.ref.png \ random-intersections-curves-nz.xlib.ref.png \ random-intersections-curves-nz.xlib-fallback.ref.png \ + recording-surface-pattern.image16.ref.png \ + recording-surface-pattern.gl.argb32.ref.png \ + recording-surface-pattern.pdf.argb32.ref.png \ + recording-surface-pattern.pdf.rgb24.ref.png \ + recording-surface-pattern.ps.argb32.ref.png \ + recording-surface-pattern.ps.rgb24.ref.png \ + recording-surface-pattern.quartz.argb32.ref.png \ + recording-surface-pattern.quartz.rgb24.ref.png \ + recording-surface-pattern.ref.png \ + recording-surface-pattern.rgb24.ref.png \ + recording-surface-pattern.svg.argb32.ref.png \ + recording-surface-pattern.svg.rgb24.ref.png \ + recording-surface-pattern.xlib.argb32.ref.png \ + recording-surface-pattern.xlib.rgb24.ref.png \ rectangle-rounding-error.ref.png \ rectilinear-dash.quartz.xfail.png \ rectilinear-dash.ref.png \ @@ -2291,8 +2344,8 @@ REFERENCE_IMAGES = \ surface-pattern-operator.xlib.rgb24.ref.png \ surface-pattern-operator.pdf.argb32.xfail.png \ surface-pattern-operator.pdf.rgb24.xfail.png \ - surface-pattern-operator.quartz.argb32.xfail.png \ - surface-pattern-operator.quartz.rgb24.xfail.png \ + surface-pattern-operator.quartz.argb32.ref.png \ + surface-pattern-operator.quartz.rgb24.ref.png \ surface-pattern-scale-down.image16.ref.png \ surface-pattern-scale-down.pdf.ref.png \ surface-pattern-scale-down.ps2.ref.png \ @@ -2403,6 +2456,8 @@ REFERENCE_IMAGES = \ unbounded-operator.pdf.argb32.ref.png \ unbounded-operator.ps2.argb32.ref.png \ unbounded-operator.ps3.argb32.ref.png \ + unbounded-operator.quartz.argb32.ref.png \ + unbounded-operator.quartz.rgb24.ref.png \ unbounded-operator.ref.png \ unbounded-operator.rgb24.ref.png \ unbounded-operator.svg12.argb32.ref.png \ @@ -2435,6 +2490,7 @@ REFERENCE_IMAGES = \ user-font.ref.png \ user-font.svg.ref.png \ user-font.xlib.ref.png \ + xcb-stress-cache.ref.png \ xcb-surface-source.rgb24.ref.png \ xcb-surface-source.argb32.ref.png \ xcomposite-projection.ref.png \ @@ -2450,6 +2506,7 @@ REFERENCE_IMAGES = \ xlib-surface-source.ps3.ref.png \ xlib-surface-source.svg12.argb32.xfail.png \ xlib-surface-source.svg12.rgb24.xfail.png \ + white-in-noop.ref.png \ zero-mask.ref.png \ zero-mask.rgb24.ref.png \ zero-alpha.ref.png @@ -2638,6 +2695,8 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-aliasing.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-alpha-similar.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-api-special-cases.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-arc-infinite-loop.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-arc-looping-dash.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-big-line.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-big-trap.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-bilevel-image.Po@am__quote@ @@ -2764,6 +2823,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-gradient-zero-stops.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-group-clip.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-group-paint.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-group-state.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-group-unaligned.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-half-coverage.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-halo.Po@am__quote@ @@ -2806,6 +2866,13 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-mask-transformed-image.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-mask-transformed-similar.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-mask.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-mesh-pattern-accuracy.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-mesh-pattern-conical.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-mesh-pattern-control-points.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-mesh-pattern-fold.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-mesh-pattern-overlap.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-mesh-pattern-transformed.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-mesh-pattern.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-mime-data.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-miter-precision.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-move-to-show-surface.Po@am__quote@ @@ -2849,10 +2916,6 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-push-group.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-quartz-surface-source.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-radial-gradient-extend.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-radial-gradient-mask-source.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-radial-gradient-mask.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-radial-gradient-one-stop.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-radial-gradient-source.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-radial-gradient.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-random-intersections-curves-eo.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-random-intersections-curves-nz.Po@am__quote@ @@ -2945,6 +3008,8 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-user-font-proxy.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-user-font-rescale.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-user-font.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-white-in-noop.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-xcb-stress-cache.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-xcb-surface-source.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-xcomposite-projection.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cairo_test_suite-xlib-expose-event.Po@am__quote@ @@ -3208,6 +3273,38 @@ cairo_test_suite-alpha-similar.obj: alpha-similar.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-alpha-similar.obj `if test -f 'alpha-similar.c'; then $(CYGPATH_W) 'alpha-similar.c'; else $(CYGPATH_W) '$(srcdir)/alpha-similar.c'; fi` +cairo_test_suite-arc-infinite-loop.o: arc-infinite-loop.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-arc-infinite-loop.o -MD -MP -MF $(DEPDIR)/cairo_test_suite-arc-infinite-loop.Tpo -c -o cairo_test_suite-arc-infinite-loop.o `test -f 'arc-infinite-loop.c' || echo '$(srcdir)/'`arc-infinite-loop.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-arc-infinite-loop.Tpo $(DEPDIR)/cairo_test_suite-arc-infinite-loop.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='arc-infinite-loop.c' object='cairo_test_suite-arc-infinite-loop.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-arc-infinite-loop.o `test -f 'arc-infinite-loop.c' || echo '$(srcdir)/'`arc-infinite-loop.c + +cairo_test_suite-arc-infinite-loop.obj: arc-infinite-loop.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-arc-infinite-loop.obj -MD -MP -MF $(DEPDIR)/cairo_test_suite-arc-infinite-loop.Tpo -c -o cairo_test_suite-arc-infinite-loop.obj `if test -f 'arc-infinite-loop.c'; then $(CYGPATH_W) 'arc-infinite-loop.c'; else $(CYGPATH_W) '$(srcdir)/arc-infinite-loop.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-arc-infinite-loop.Tpo $(DEPDIR)/cairo_test_suite-arc-infinite-loop.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='arc-infinite-loop.c' object='cairo_test_suite-arc-infinite-loop.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-arc-infinite-loop.obj `if test -f 'arc-infinite-loop.c'; then $(CYGPATH_W) 'arc-infinite-loop.c'; else $(CYGPATH_W) '$(srcdir)/arc-infinite-loop.c'; fi` + +cairo_test_suite-arc-looping-dash.o: arc-looping-dash.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-arc-looping-dash.o -MD -MP -MF $(DEPDIR)/cairo_test_suite-arc-looping-dash.Tpo -c -o cairo_test_suite-arc-looping-dash.o `test -f 'arc-looping-dash.c' || echo '$(srcdir)/'`arc-looping-dash.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-arc-looping-dash.Tpo $(DEPDIR)/cairo_test_suite-arc-looping-dash.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='arc-looping-dash.c' object='cairo_test_suite-arc-looping-dash.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-arc-looping-dash.o `test -f 'arc-looping-dash.c' || echo '$(srcdir)/'`arc-looping-dash.c + +cairo_test_suite-arc-looping-dash.obj: arc-looping-dash.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-arc-looping-dash.obj -MD -MP -MF $(DEPDIR)/cairo_test_suite-arc-looping-dash.Tpo -c -o cairo_test_suite-arc-looping-dash.obj `if test -f 'arc-looping-dash.c'; then $(CYGPATH_W) 'arc-looping-dash.c'; else $(CYGPATH_W) '$(srcdir)/arc-looping-dash.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-arc-looping-dash.Tpo $(DEPDIR)/cairo_test_suite-arc-looping-dash.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='arc-looping-dash.c' object='cairo_test_suite-arc-looping-dash.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-arc-looping-dash.obj `if test -f 'arc-looping-dash.c'; then $(CYGPATH_W) 'arc-looping-dash.c'; else $(CYGPATH_W) '$(srcdir)/arc-looping-dash.c'; fi` + cairo_test_suite-api-special-cases.o: api-special-cases.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-api-special-cases.o -MD -MP -MF $(DEPDIR)/cairo_test_suite-api-special-cases.Tpo -c -o cairo_test_suite-api-special-cases.o `test -f 'api-special-cases.c' || echo '$(srcdir)/'`api-special-cases.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-api-special-cases.Tpo $(DEPDIR)/cairo_test_suite-api-special-cases.Po @@ -5016,6 +5113,22 @@ cairo_test_suite-group-paint.obj: group-paint.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-group-paint.obj `if test -f 'group-paint.c'; then $(CYGPATH_W) 'group-paint.c'; else $(CYGPATH_W) '$(srcdir)/group-paint.c'; fi` +cairo_test_suite-group-state.o: group-state.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-group-state.o -MD -MP -MF $(DEPDIR)/cairo_test_suite-group-state.Tpo -c -o cairo_test_suite-group-state.o `test -f 'group-state.c' || echo '$(srcdir)/'`group-state.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-group-state.Tpo $(DEPDIR)/cairo_test_suite-group-state.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='group-state.c' object='cairo_test_suite-group-state.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-group-state.o `test -f 'group-state.c' || echo '$(srcdir)/'`group-state.c + +cairo_test_suite-group-state.obj: group-state.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-group-state.obj -MD -MP -MF $(DEPDIR)/cairo_test_suite-group-state.Tpo -c -o cairo_test_suite-group-state.obj `if test -f 'group-state.c'; then $(CYGPATH_W) 'group-state.c'; else $(CYGPATH_W) '$(srcdir)/group-state.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-group-state.Tpo $(DEPDIR)/cairo_test_suite-group-state.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='group-state.c' object='cairo_test_suite-group-state.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-group-state.obj `if test -f 'group-state.c'; then $(CYGPATH_W) 'group-state.c'; else $(CYGPATH_W) '$(srcdir)/group-state.c'; fi` + cairo_test_suite-group-unaligned.o: group-unaligned.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-group-unaligned.o -MD -MP -MF $(DEPDIR)/cairo_test_suite-group-unaligned.Tpo -c -o cairo_test_suite-group-unaligned.o `test -f 'group-unaligned.c' || echo '$(srcdir)/'`group-unaligned.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-group-unaligned.Tpo $(DEPDIR)/cairo_test_suite-group-unaligned.Po @@ -5688,21 +5801,117 @@ cairo_test_suite-mask-transformed-similar.obj: mask-transformed-similar.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-mask-transformed-similar.obj `if test -f 'mask-transformed-similar.c'; then $(CYGPATH_W) 'mask-transformed-similar.c'; else $(CYGPATH_W) '$(srcdir)/mask-transformed-similar.c'; fi` -cairo_test_suite-recording-surface-pattern.o: recording-surface-pattern.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-recording-surface-pattern.o -MD -MP -MF $(DEPDIR)/cairo_test_suite-recording-surface-pattern.Tpo -c -o cairo_test_suite-recording-surface-pattern.o `test -f 'recording-surface-pattern.c' || echo '$(srcdir)/'`recording-surface-pattern.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-recording-surface-pattern.Tpo $(DEPDIR)/cairo_test_suite-recording-surface-pattern.Po +cairo_test_suite-mesh-pattern.o: mesh-pattern.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-mesh-pattern.o -MD -MP -MF $(DEPDIR)/cairo_test_suite-mesh-pattern.Tpo -c -o cairo_test_suite-mesh-pattern.o `test -f 'mesh-pattern.c' || echo '$(srcdir)/'`mesh-pattern.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-mesh-pattern.Tpo $(DEPDIR)/cairo_test_suite-mesh-pattern.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='recording-surface-pattern.c' object='cairo_test_suite-recording-surface-pattern.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mesh-pattern.c' object='cairo_test_suite-mesh-pattern.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-recording-surface-pattern.o `test -f 'recording-surface-pattern.c' || echo '$(srcdir)/'`recording-surface-pattern.c +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-mesh-pattern.o `test -f 'mesh-pattern.c' || echo '$(srcdir)/'`mesh-pattern.c -cairo_test_suite-recording-surface-pattern.obj: recording-surface-pattern.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-recording-surface-pattern.obj -MD -MP -MF $(DEPDIR)/cairo_test_suite-recording-surface-pattern.Tpo -c -o cairo_test_suite-recording-surface-pattern.obj `if test -f 'recording-surface-pattern.c'; then $(CYGPATH_W) 'recording-surface-pattern.c'; else $(CYGPATH_W) '$(srcdir)/recording-surface-pattern.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-recording-surface-pattern.Tpo $(DEPDIR)/cairo_test_suite-recording-surface-pattern.Po +cairo_test_suite-mesh-pattern.obj: mesh-pattern.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-mesh-pattern.obj -MD -MP -MF $(DEPDIR)/cairo_test_suite-mesh-pattern.Tpo -c -o cairo_test_suite-mesh-pattern.obj `if test -f 'mesh-pattern.c'; then $(CYGPATH_W) 'mesh-pattern.c'; else $(CYGPATH_W) '$(srcdir)/mesh-pattern.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-mesh-pattern.Tpo $(DEPDIR)/cairo_test_suite-mesh-pattern.Po @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='recording-surface-pattern.c' object='cairo_test_suite-recording-surface-pattern.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mesh-pattern.c' object='cairo_test_suite-mesh-pattern.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-recording-surface-pattern.obj `if test -f 'recording-surface-pattern.c'; then $(CYGPATH_W) 'recording-surface-pattern.c'; else $(CYGPATH_W) '$(srcdir)/recording-surface-pattern.c'; fi` +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-mesh-pattern.obj `if test -f 'mesh-pattern.c'; then $(CYGPATH_W) 'mesh-pattern.c'; else $(CYGPATH_W) '$(srcdir)/mesh-pattern.c'; fi` + +cairo_test_suite-mesh-pattern-accuracy.o: mesh-pattern-accuracy.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-mesh-pattern-accuracy.o -MD -MP -MF $(DEPDIR)/cairo_test_suite-mesh-pattern-accuracy.Tpo -c -o cairo_test_suite-mesh-pattern-accuracy.o `test -f 'mesh-pattern-accuracy.c' || echo '$(srcdir)/'`mesh-pattern-accuracy.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-mesh-pattern-accuracy.Tpo $(DEPDIR)/cairo_test_suite-mesh-pattern-accuracy.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mesh-pattern-accuracy.c' object='cairo_test_suite-mesh-pattern-accuracy.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-mesh-pattern-accuracy.o `test -f 'mesh-pattern-accuracy.c' || echo '$(srcdir)/'`mesh-pattern-accuracy.c + +cairo_test_suite-mesh-pattern-accuracy.obj: mesh-pattern-accuracy.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-mesh-pattern-accuracy.obj -MD -MP -MF $(DEPDIR)/cairo_test_suite-mesh-pattern-accuracy.Tpo -c -o cairo_test_suite-mesh-pattern-accuracy.obj `if test -f 'mesh-pattern-accuracy.c'; then $(CYGPATH_W) 'mesh-pattern-accuracy.c'; else $(CYGPATH_W) '$(srcdir)/mesh-pattern-accuracy.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-mesh-pattern-accuracy.Tpo $(DEPDIR)/cairo_test_suite-mesh-pattern-accuracy.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mesh-pattern-accuracy.c' object='cairo_test_suite-mesh-pattern-accuracy.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-mesh-pattern-accuracy.obj `if test -f 'mesh-pattern-accuracy.c'; then $(CYGPATH_W) 'mesh-pattern-accuracy.c'; else $(CYGPATH_W) '$(srcdir)/mesh-pattern-accuracy.c'; fi` + +cairo_test_suite-mesh-pattern-conical.o: mesh-pattern-conical.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-mesh-pattern-conical.o -MD -MP -MF $(DEPDIR)/cairo_test_suite-mesh-pattern-conical.Tpo -c -o cairo_test_suite-mesh-pattern-conical.o `test -f 'mesh-pattern-conical.c' || echo '$(srcdir)/'`mesh-pattern-conical.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-mesh-pattern-conical.Tpo $(DEPDIR)/cairo_test_suite-mesh-pattern-conical.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mesh-pattern-conical.c' object='cairo_test_suite-mesh-pattern-conical.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-mesh-pattern-conical.o `test -f 'mesh-pattern-conical.c' || echo '$(srcdir)/'`mesh-pattern-conical.c + +cairo_test_suite-mesh-pattern-conical.obj: mesh-pattern-conical.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-mesh-pattern-conical.obj -MD -MP -MF $(DEPDIR)/cairo_test_suite-mesh-pattern-conical.Tpo -c -o cairo_test_suite-mesh-pattern-conical.obj `if test -f 'mesh-pattern-conical.c'; then $(CYGPATH_W) 'mesh-pattern-conical.c'; else $(CYGPATH_W) '$(srcdir)/mesh-pattern-conical.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-mesh-pattern-conical.Tpo $(DEPDIR)/cairo_test_suite-mesh-pattern-conical.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mesh-pattern-conical.c' object='cairo_test_suite-mesh-pattern-conical.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-mesh-pattern-conical.obj `if test -f 'mesh-pattern-conical.c'; then $(CYGPATH_W) 'mesh-pattern-conical.c'; else $(CYGPATH_W) '$(srcdir)/mesh-pattern-conical.c'; fi` + +cairo_test_suite-mesh-pattern-control-points.o: mesh-pattern-control-points.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-mesh-pattern-control-points.o -MD -MP -MF $(DEPDIR)/cairo_test_suite-mesh-pattern-control-points.Tpo -c -o cairo_test_suite-mesh-pattern-control-points.o `test -f 'mesh-pattern-control-points.c' || echo '$(srcdir)/'`mesh-pattern-control-points.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-mesh-pattern-control-points.Tpo $(DEPDIR)/cairo_test_suite-mesh-pattern-control-points.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mesh-pattern-control-points.c' object='cairo_test_suite-mesh-pattern-control-points.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-mesh-pattern-control-points.o `test -f 'mesh-pattern-control-points.c' || echo '$(srcdir)/'`mesh-pattern-control-points.c + +cairo_test_suite-mesh-pattern-control-points.obj: mesh-pattern-control-points.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-mesh-pattern-control-points.obj -MD -MP -MF $(DEPDIR)/cairo_test_suite-mesh-pattern-control-points.Tpo -c -o cairo_test_suite-mesh-pattern-control-points.obj `if test -f 'mesh-pattern-control-points.c'; then $(CYGPATH_W) 'mesh-pattern-control-points.c'; else $(CYGPATH_W) '$(srcdir)/mesh-pattern-control-points.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-mesh-pattern-control-points.Tpo $(DEPDIR)/cairo_test_suite-mesh-pattern-control-points.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mesh-pattern-control-points.c' object='cairo_test_suite-mesh-pattern-control-points.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-mesh-pattern-control-points.obj `if test -f 'mesh-pattern-control-points.c'; then $(CYGPATH_W) 'mesh-pattern-control-points.c'; else $(CYGPATH_W) '$(srcdir)/mesh-pattern-control-points.c'; fi` + +cairo_test_suite-mesh-pattern-fold.o: mesh-pattern-fold.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-mesh-pattern-fold.o -MD -MP -MF $(DEPDIR)/cairo_test_suite-mesh-pattern-fold.Tpo -c -o cairo_test_suite-mesh-pattern-fold.o `test -f 'mesh-pattern-fold.c' || echo '$(srcdir)/'`mesh-pattern-fold.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-mesh-pattern-fold.Tpo $(DEPDIR)/cairo_test_suite-mesh-pattern-fold.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mesh-pattern-fold.c' object='cairo_test_suite-mesh-pattern-fold.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-mesh-pattern-fold.o `test -f 'mesh-pattern-fold.c' || echo '$(srcdir)/'`mesh-pattern-fold.c + +cairo_test_suite-mesh-pattern-fold.obj: mesh-pattern-fold.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-mesh-pattern-fold.obj -MD -MP -MF $(DEPDIR)/cairo_test_suite-mesh-pattern-fold.Tpo -c -o cairo_test_suite-mesh-pattern-fold.obj `if test -f 'mesh-pattern-fold.c'; then $(CYGPATH_W) 'mesh-pattern-fold.c'; else $(CYGPATH_W) '$(srcdir)/mesh-pattern-fold.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-mesh-pattern-fold.Tpo $(DEPDIR)/cairo_test_suite-mesh-pattern-fold.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mesh-pattern-fold.c' object='cairo_test_suite-mesh-pattern-fold.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-mesh-pattern-fold.obj `if test -f 'mesh-pattern-fold.c'; then $(CYGPATH_W) 'mesh-pattern-fold.c'; else $(CYGPATH_W) '$(srcdir)/mesh-pattern-fold.c'; fi` + +cairo_test_suite-mesh-pattern-overlap.o: mesh-pattern-overlap.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-mesh-pattern-overlap.o -MD -MP -MF $(DEPDIR)/cairo_test_suite-mesh-pattern-overlap.Tpo -c -o cairo_test_suite-mesh-pattern-overlap.o `test -f 'mesh-pattern-overlap.c' || echo '$(srcdir)/'`mesh-pattern-overlap.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-mesh-pattern-overlap.Tpo $(DEPDIR)/cairo_test_suite-mesh-pattern-overlap.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mesh-pattern-overlap.c' object='cairo_test_suite-mesh-pattern-overlap.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-mesh-pattern-overlap.o `test -f 'mesh-pattern-overlap.c' || echo '$(srcdir)/'`mesh-pattern-overlap.c + +cairo_test_suite-mesh-pattern-overlap.obj: mesh-pattern-overlap.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-mesh-pattern-overlap.obj -MD -MP -MF $(DEPDIR)/cairo_test_suite-mesh-pattern-overlap.Tpo -c -o cairo_test_suite-mesh-pattern-overlap.obj `if test -f 'mesh-pattern-overlap.c'; then $(CYGPATH_W) 'mesh-pattern-overlap.c'; else $(CYGPATH_W) '$(srcdir)/mesh-pattern-overlap.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-mesh-pattern-overlap.Tpo $(DEPDIR)/cairo_test_suite-mesh-pattern-overlap.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mesh-pattern-overlap.c' object='cairo_test_suite-mesh-pattern-overlap.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-mesh-pattern-overlap.obj `if test -f 'mesh-pattern-overlap.c'; then $(CYGPATH_W) 'mesh-pattern-overlap.c'; else $(CYGPATH_W) '$(srcdir)/mesh-pattern-overlap.c'; fi` + +cairo_test_suite-mesh-pattern-transformed.o: mesh-pattern-transformed.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-mesh-pattern-transformed.o -MD -MP -MF $(DEPDIR)/cairo_test_suite-mesh-pattern-transformed.Tpo -c -o cairo_test_suite-mesh-pattern-transformed.o `test -f 'mesh-pattern-transformed.c' || echo '$(srcdir)/'`mesh-pattern-transformed.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-mesh-pattern-transformed.Tpo $(DEPDIR)/cairo_test_suite-mesh-pattern-transformed.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mesh-pattern-transformed.c' object='cairo_test_suite-mesh-pattern-transformed.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-mesh-pattern-transformed.o `test -f 'mesh-pattern-transformed.c' || echo '$(srcdir)/'`mesh-pattern-transformed.c + +cairo_test_suite-mesh-pattern-transformed.obj: mesh-pattern-transformed.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-mesh-pattern-transformed.obj -MD -MP -MF $(DEPDIR)/cairo_test_suite-mesh-pattern-transformed.Tpo -c -o cairo_test_suite-mesh-pattern-transformed.obj `if test -f 'mesh-pattern-transformed.c'; then $(CYGPATH_W) 'mesh-pattern-transformed.c'; else $(CYGPATH_W) '$(srcdir)/mesh-pattern-transformed.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-mesh-pattern-transformed.Tpo $(DEPDIR)/cairo_test_suite-mesh-pattern-transformed.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mesh-pattern-transformed.c' object='cairo_test_suite-mesh-pattern-transformed.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-mesh-pattern-transformed.obj `if test -f 'mesh-pattern-transformed.c'; then $(CYGPATH_W) 'mesh-pattern-transformed.c'; else $(CYGPATH_W) '$(srcdir)/mesh-pattern-transformed.c'; fi` cairo_test_suite-mime-data.o: mime-data.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-mime-data.o -MD -MP -MF $(DEPDIR)/cairo_test_suite-mime-data.Tpo -c -o cairo_test_suite-mime-data.o `test -f 'mime-data.c' || echo '$(srcdir)/'`mime-data.c @@ -6232,70 +6441,6 @@ cairo_test_suite-radial-gradient-extend.obj: radial-gradient-extend.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-radial-gradient-extend.obj `if test -f 'radial-gradient-extend.c'; then $(CYGPATH_W) 'radial-gradient-extend.c'; else $(CYGPATH_W) '$(srcdir)/radial-gradient-extend.c'; fi` -cairo_test_suite-radial-gradient-mask.o: radial-gradient-mask.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-radial-gradient-mask.o -MD -MP -MF $(DEPDIR)/cairo_test_suite-radial-gradient-mask.Tpo -c -o cairo_test_suite-radial-gradient-mask.o `test -f 'radial-gradient-mask.c' || echo '$(srcdir)/'`radial-gradient-mask.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-radial-gradient-mask.Tpo $(DEPDIR)/cairo_test_suite-radial-gradient-mask.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='radial-gradient-mask.c' object='cairo_test_suite-radial-gradient-mask.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-radial-gradient-mask.o `test -f 'radial-gradient-mask.c' || echo '$(srcdir)/'`radial-gradient-mask.c - -cairo_test_suite-radial-gradient-mask.obj: radial-gradient-mask.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-radial-gradient-mask.obj -MD -MP -MF $(DEPDIR)/cairo_test_suite-radial-gradient-mask.Tpo -c -o cairo_test_suite-radial-gradient-mask.obj `if test -f 'radial-gradient-mask.c'; then $(CYGPATH_W) 'radial-gradient-mask.c'; else $(CYGPATH_W) '$(srcdir)/radial-gradient-mask.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-radial-gradient-mask.Tpo $(DEPDIR)/cairo_test_suite-radial-gradient-mask.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='radial-gradient-mask.c' object='cairo_test_suite-radial-gradient-mask.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-radial-gradient-mask.obj `if test -f 'radial-gradient-mask.c'; then $(CYGPATH_W) 'radial-gradient-mask.c'; else $(CYGPATH_W) '$(srcdir)/radial-gradient-mask.c'; fi` - -cairo_test_suite-radial-gradient-mask-source.o: radial-gradient-mask-source.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-radial-gradient-mask-source.o -MD -MP -MF $(DEPDIR)/cairo_test_suite-radial-gradient-mask-source.Tpo -c -o cairo_test_suite-radial-gradient-mask-source.o `test -f 'radial-gradient-mask-source.c' || echo '$(srcdir)/'`radial-gradient-mask-source.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-radial-gradient-mask-source.Tpo $(DEPDIR)/cairo_test_suite-radial-gradient-mask-source.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='radial-gradient-mask-source.c' object='cairo_test_suite-radial-gradient-mask-source.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-radial-gradient-mask-source.o `test -f 'radial-gradient-mask-source.c' || echo '$(srcdir)/'`radial-gradient-mask-source.c - -cairo_test_suite-radial-gradient-mask-source.obj: radial-gradient-mask-source.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-radial-gradient-mask-source.obj -MD -MP -MF $(DEPDIR)/cairo_test_suite-radial-gradient-mask-source.Tpo -c -o cairo_test_suite-radial-gradient-mask-source.obj `if test -f 'radial-gradient-mask-source.c'; then $(CYGPATH_W) 'radial-gradient-mask-source.c'; else $(CYGPATH_W) '$(srcdir)/radial-gradient-mask-source.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-radial-gradient-mask-source.Tpo $(DEPDIR)/cairo_test_suite-radial-gradient-mask-source.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='radial-gradient-mask-source.c' object='cairo_test_suite-radial-gradient-mask-source.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-radial-gradient-mask-source.obj `if test -f 'radial-gradient-mask-source.c'; then $(CYGPATH_W) 'radial-gradient-mask-source.c'; else $(CYGPATH_W) '$(srcdir)/radial-gradient-mask-source.c'; fi` - -cairo_test_suite-radial-gradient-one-stop.o: radial-gradient-one-stop.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-radial-gradient-one-stop.o -MD -MP -MF $(DEPDIR)/cairo_test_suite-radial-gradient-one-stop.Tpo -c -o cairo_test_suite-radial-gradient-one-stop.o `test -f 'radial-gradient-one-stop.c' || echo '$(srcdir)/'`radial-gradient-one-stop.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-radial-gradient-one-stop.Tpo $(DEPDIR)/cairo_test_suite-radial-gradient-one-stop.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='radial-gradient-one-stop.c' object='cairo_test_suite-radial-gradient-one-stop.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-radial-gradient-one-stop.o `test -f 'radial-gradient-one-stop.c' || echo '$(srcdir)/'`radial-gradient-one-stop.c - -cairo_test_suite-radial-gradient-one-stop.obj: radial-gradient-one-stop.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-radial-gradient-one-stop.obj -MD -MP -MF $(DEPDIR)/cairo_test_suite-radial-gradient-one-stop.Tpo -c -o cairo_test_suite-radial-gradient-one-stop.obj `if test -f 'radial-gradient-one-stop.c'; then $(CYGPATH_W) 'radial-gradient-one-stop.c'; else $(CYGPATH_W) '$(srcdir)/radial-gradient-one-stop.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-radial-gradient-one-stop.Tpo $(DEPDIR)/cairo_test_suite-radial-gradient-one-stop.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='radial-gradient-one-stop.c' object='cairo_test_suite-radial-gradient-one-stop.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-radial-gradient-one-stop.obj `if test -f 'radial-gradient-one-stop.c'; then $(CYGPATH_W) 'radial-gradient-one-stop.c'; else $(CYGPATH_W) '$(srcdir)/radial-gradient-one-stop.c'; fi` - -cairo_test_suite-radial-gradient-source.o: radial-gradient-source.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-radial-gradient-source.o -MD -MP -MF $(DEPDIR)/cairo_test_suite-radial-gradient-source.Tpo -c -o cairo_test_suite-radial-gradient-source.o `test -f 'radial-gradient-source.c' || echo '$(srcdir)/'`radial-gradient-source.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-radial-gradient-source.Tpo $(DEPDIR)/cairo_test_suite-radial-gradient-source.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='radial-gradient-source.c' object='cairo_test_suite-radial-gradient-source.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-radial-gradient-source.o `test -f 'radial-gradient-source.c' || echo '$(srcdir)/'`radial-gradient-source.c - -cairo_test_suite-radial-gradient-source.obj: radial-gradient-source.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-radial-gradient-source.obj -MD -MP -MF $(DEPDIR)/cairo_test_suite-radial-gradient-source.Tpo -c -o cairo_test_suite-radial-gradient-source.obj `if test -f 'radial-gradient-source.c'; then $(CYGPATH_W) 'radial-gradient-source.c'; else $(CYGPATH_W) '$(srcdir)/radial-gradient-source.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-radial-gradient-source.Tpo $(DEPDIR)/cairo_test_suite-radial-gradient-source.Po -@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='radial-gradient-source.c' object='cairo_test_suite-radial-gradient-source.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-radial-gradient-source.obj `if test -f 'radial-gradient-source.c'; then $(CYGPATH_W) 'radial-gradient-source.c'; else $(CYGPATH_W) '$(srcdir)/radial-gradient-source.c'; fi` - cairo_test_suite-random-intersections-eo.o: random-intersections-eo.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-random-intersections-eo.o -MD -MP -MF $(DEPDIR)/cairo_test_suite-random-intersections-eo.Tpo -c -o cairo_test_suite-random-intersections-eo.o `test -f 'random-intersections-eo.c' || echo '$(srcdir)/'`random-intersections-eo.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-random-intersections-eo.Tpo $(DEPDIR)/cairo_test_suite-random-intersections-eo.Po @@ -6360,6 +6505,22 @@ cairo_test_suite-random-intersections-curves-nz.obj: random-intersections-curves @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-random-intersections-curves-nz.obj `if test -f 'random-intersections-curves-nz.c'; then $(CYGPATH_W) 'random-intersections-curves-nz.c'; else $(CYGPATH_W) '$(srcdir)/random-intersections-curves-nz.c'; fi` +cairo_test_suite-recording-surface-pattern.o: recording-surface-pattern.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-recording-surface-pattern.o -MD -MP -MF $(DEPDIR)/cairo_test_suite-recording-surface-pattern.Tpo -c -o cairo_test_suite-recording-surface-pattern.o `test -f 'recording-surface-pattern.c' || echo '$(srcdir)/'`recording-surface-pattern.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-recording-surface-pattern.Tpo $(DEPDIR)/cairo_test_suite-recording-surface-pattern.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='recording-surface-pattern.c' object='cairo_test_suite-recording-surface-pattern.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-recording-surface-pattern.o `test -f 'recording-surface-pattern.c' || echo '$(srcdir)/'`recording-surface-pattern.c + +cairo_test_suite-recording-surface-pattern.obj: recording-surface-pattern.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-recording-surface-pattern.obj -MD -MP -MF $(DEPDIR)/cairo_test_suite-recording-surface-pattern.Tpo -c -o cairo_test_suite-recording-surface-pattern.obj `if test -f 'recording-surface-pattern.c'; then $(CYGPATH_W) 'recording-surface-pattern.c'; else $(CYGPATH_W) '$(srcdir)/recording-surface-pattern.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-recording-surface-pattern.Tpo $(DEPDIR)/cairo_test_suite-recording-surface-pattern.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='recording-surface-pattern.c' object='cairo_test_suite-recording-surface-pattern.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-recording-surface-pattern.obj `if test -f 'recording-surface-pattern.c'; then $(CYGPATH_W) 'recording-surface-pattern.c'; else $(CYGPATH_W) '$(srcdir)/recording-surface-pattern.c'; fi` + cairo_test_suite-rectangle-rounding-error.o: rectangle-rounding-error.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-rectangle-rounding-error.o -MD -MP -MF $(DEPDIR)/cairo_test_suite-rectangle-rounding-error.Tpo -c -o cairo_test_suite-rectangle-rounding-error.o `test -f 'rectangle-rounding-error.c' || echo '$(srcdir)/'`rectangle-rounding-error.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-rectangle-rounding-error.Tpo $(DEPDIR)/cairo_test_suite-rectangle-rounding-error.Po @@ -7672,6 +7833,38 @@ cairo_test_suite-user-font-rescale.obj: user-font-rescale.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-user-font-rescale.obj `if test -f 'user-font-rescale.c'; then $(CYGPATH_W) 'user-font-rescale.c'; else $(CYGPATH_W) '$(srcdir)/user-font-rescale.c'; fi` +cairo_test_suite-white-in-noop.o: white-in-noop.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-white-in-noop.o -MD -MP -MF $(DEPDIR)/cairo_test_suite-white-in-noop.Tpo -c -o cairo_test_suite-white-in-noop.o `test -f 'white-in-noop.c' || echo '$(srcdir)/'`white-in-noop.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-white-in-noop.Tpo $(DEPDIR)/cairo_test_suite-white-in-noop.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='white-in-noop.c' object='cairo_test_suite-white-in-noop.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-white-in-noop.o `test -f 'white-in-noop.c' || echo '$(srcdir)/'`white-in-noop.c + +cairo_test_suite-white-in-noop.obj: white-in-noop.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-white-in-noop.obj -MD -MP -MF $(DEPDIR)/cairo_test_suite-white-in-noop.Tpo -c -o cairo_test_suite-white-in-noop.obj `if test -f 'white-in-noop.c'; then $(CYGPATH_W) 'white-in-noop.c'; else $(CYGPATH_W) '$(srcdir)/white-in-noop.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-white-in-noop.Tpo $(DEPDIR)/cairo_test_suite-white-in-noop.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='white-in-noop.c' object='cairo_test_suite-white-in-noop.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-white-in-noop.obj `if test -f 'white-in-noop.c'; then $(CYGPATH_W) 'white-in-noop.c'; else $(CYGPATH_W) '$(srcdir)/white-in-noop.c'; fi` + +cairo_test_suite-xcb-stress-cache.o: xcb-stress-cache.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-xcb-stress-cache.o -MD -MP -MF $(DEPDIR)/cairo_test_suite-xcb-stress-cache.Tpo -c -o cairo_test_suite-xcb-stress-cache.o `test -f 'xcb-stress-cache.c' || echo '$(srcdir)/'`xcb-stress-cache.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-xcb-stress-cache.Tpo $(DEPDIR)/cairo_test_suite-xcb-stress-cache.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='xcb-stress-cache.c' object='cairo_test_suite-xcb-stress-cache.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-xcb-stress-cache.o `test -f 'xcb-stress-cache.c' || echo '$(srcdir)/'`xcb-stress-cache.c + +cairo_test_suite-xcb-stress-cache.obj: xcb-stress-cache.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-xcb-stress-cache.obj -MD -MP -MF $(DEPDIR)/cairo_test_suite-xcb-stress-cache.Tpo -c -o cairo_test_suite-xcb-stress-cache.obj `if test -f 'xcb-stress-cache.c'; then $(CYGPATH_W) 'xcb-stress-cache.c'; else $(CYGPATH_W) '$(srcdir)/xcb-stress-cache.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-xcb-stress-cache.Tpo $(DEPDIR)/cairo_test_suite-xcb-stress-cache.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='xcb-stress-cache.c' object='cairo_test_suite-xcb-stress-cache.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -c -o cairo_test_suite-xcb-stress-cache.obj `if test -f 'xcb-stress-cache.c'; then $(CYGPATH_W) 'xcb-stress-cache.c'; else $(CYGPATH_W) '$(srcdir)/xcb-stress-cache.c'; fi` + cairo_test_suite-xcomposite-projection.o: xcomposite-projection.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cairo_test_suite_CFLAGS) $(CFLAGS) -MT cairo_test_suite-xcomposite-projection.o -MD -MP -MF $(DEPDIR)/cairo_test_suite-xcomposite-projection.Tpo -c -o cairo_test_suite-xcomposite-projection.o `test -f 'xcomposite-projection.c' || echo '$(srcdir)/'`xcomposite-projection.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cairo_test_suite-xcomposite-projection.Tpo $(DEPDIR)/cairo_test_suite-xcomposite-projection.Po @@ -8626,7 +8819,7 @@ dvi-am: html: html-recursive -html-am: html-local +html-am: info: info-recursive @@ -8689,7 +8882,7 @@ uninstall-am: clean-checkPROGRAMS clean-generic clean-libtool clean-local \ ctags ctags-recursive distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ - dvi-am html html-am html-local info info-am install install-am \ + dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ @@ -8772,24 +8965,16 @@ recheck: @echo Re-checking failed tests @$(MAKE) $(AM_MAKEFLAGS) $(recheck) -# Checks tests and creates index.html. +# Checks tests. # Target doesn't fail if tests fail. test: - @$(MAKE) $(AM_MAKEFLAGS) check; \ - $(MAKE) $(AM_MAKEFLAGS) html + @$(MAKE) $(AM_MAKEFLAGS) check -# Re-checks tests and creates index.html. +# Re-checks tests. # Target doesn't fail if tests fail. retest: @CAIRO_TESTS="$(FAILED_TESTS)"; \ - $(MAKE) $(AM_MAKEFLAGS) check; \ - $(MAKE) $(AM_MAKEFLAGS) html - -html-local: index.html - -# Make index.html with no dependency tracking, containing only the failed tests. -rehtml: - @CAIRO_TESTS="$(FAILED_TESTS)" $(MAKE) $(AM_MAKEFLAGS) html + $(MAKE) $(AM_MAKEFLAGS) check # Run tests under a tool specified by TOOL. For example, make run TOOL=gdb run: @@ -8805,10 +8990,6 @@ check-valgrind: $(NOLOG_TESTS_LOG): @echo dummy > $@ -index.html: $(srcdir)/make-html.pl - @echo Creating index.html - @perl $(srcdir)/make-html.pl > $@ - # Identify identical reference images check-ref-dups: @LANG=C; \ @@ -8859,7 +9040,18 @@ check-ref-missing: release-verify-sane-tests: check-ref-missing -.PHONY: check-valgrind test recheck retest rehtml check-ref-dups check-ref-missing release-verify-sane-tests +results.tar: + @tar cf $@ index.html testtable.js *.log; \ + for i in output/*.fail.png ; do \ + testname=$${i#output/} ; \ + testname=$${testname%%.*} ; \ + tar uf $@ $${testname}*.ref.png $${i%fail.png}out.png $${i%fail.png}diff.png ; \ + done + +results.tar.gz: results.tar + gzip -c $< > $@ + +.PHONY: check-valgrind test recheck retest check-ref-dups check-ref-missing release-verify-sane-tests # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff --git a/test/Makefile.sources b/test/Makefile.sources index 487fedd..3210745 100644 --- a/test/Makefile.sources +++ b/test/Makefile.sources @@ -9,6 +9,8 @@ test_sources = \ a8-mask.c \ aliasing.c \ alpha-similar.c \ + arc-infinite-loop.c \ + arc-looping-dash.c \ api-special-cases.c \ big-line.c \ big-trap.c \ @@ -122,6 +124,7 @@ test_sources = \ gradient-zero-stops-mask.c \ group-clip.c \ group-paint.c \ + group-state.c \ group-unaligned.c \ half-coverage.c \ halo.c \ @@ -164,7 +167,13 @@ test_sources = \ mask-surface-ctm.c \ mask-transformed-image.c \ mask-transformed-similar.c \ - recording-surface-pattern.c \ + mesh-pattern.c \ + mesh-pattern-accuracy.c \ + mesh-pattern-conical.c \ + mesh-pattern-control-points.c \ + mesh-pattern-fold.c \ + mesh-pattern-overlap.c \ + mesh-pattern-transformed.c \ mime-data.c \ miter-precision.c \ move-to-show-surface.c \ @@ -198,14 +207,11 @@ test_sources = \ push-group-path-offset.c \ radial-gradient.c \ radial-gradient-extend.c \ - radial-gradient-mask.c \ - radial-gradient-mask-source.c \ - radial-gradient-one-stop.c \ - radial-gradient-source.c \ random-intersections-eo.c \ random-intersections-nonzero.c \ random-intersections-curves-eo.c \ random-intersections-curves-nz.c \ + recording-surface-pattern.c \ rectangle-rounding-error.c \ rectilinear-fill.c \ rectilinear-grid.c \ @@ -288,6 +294,8 @@ test_sources = \ user-font-mask.c \ user-font-proxy.c \ user-font-rescale.c \ + white-in-noop.c \ + xcb-stress-cache.c \ xcomposite-projection.c \ xlib-expose-event.c \ zero-alpha.c \ diff --git a/test/Makefile.win32 b/test/Makefile.win32 index b45617b..8d8f1f8 100644 --- a/test/Makefile.win32 +++ b/test/Makefile.win32 @@ -33,20 +33,9 @@ cairo-test-suite.exe: $(OBJECTS) ./pdiff/pdiff.lib ../boilerplate/$(CFG)/boiler. ../boilerplate/$(CFG)/boiler.lib: (cd ../boilerplate ; $(MAKE) -f Makefile.win32) -.PHONY: check test html +.PHONY: check test check: cairo-test-suite.exe ./cairo-test-suite.exe -# define gen-html so that both 'test' and 'html' targets -# can generate html while having different dependencies -define gen-html -@echo Creating index.html... -@perl make-html.pl > index.html -endef - test: check - $(gen-html) - -html: - $(gen-html) diff --git a/test/README b/test/README index 0cd3433..f753ccb 100644 --- a/test/README +++ b/test/README @@ -128,7 +128,7 @@ Here are some of the relevant details: X server that uses only software for all rendering. One such X server is Xvfb which can be started like this: - Xvfb -screen 0 1280x1024x24 -ac -nolisten tcp :2 + Xvfb -screen 0 1680x1024x24 -ac -nolisten tcp :2 after which the test suite can be run against it like so: diff --git a/test/a1-bug.quartz.xfail.png b/test/a1-bug.quartz.xfail.png Binary files differnew file mode 100644 index 0000000..4ed3793 --- /dev/null +++ b/test/a1-bug.quartz.xfail.png diff --git a/test/a1-image-sample.quartz.xfail.png b/test/a1-image-sample.quartz.xfail.png Binary files differdeleted file mode 100644 index ca24391..0000000 --- a/test/a1-image-sample.quartz.xfail.png +++ /dev/null diff --git a/test/a1-mask-sample.quartz.xfail.png b/test/a1-mask-sample.quartz.xfail.png Binary files differdeleted file mode 100644 index ca24391..0000000 --- a/test/a1-mask-sample.quartz.xfail.png +++ /dev/null diff --git a/test/a1-rasterisation-rectangles.quartz.xfail.png b/test/a1-rasterisation-rectangles.quartz.xfail.png Binary files differnew file mode 100644 index 0000000..f8f3bf8 --- /dev/null +++ b/test/a1-rasterisation-rectangles.quartz.xfail.png diff --git a/test/a1-rasterisation-triangles.quartz.xfail.png b/test/a1-rasterisation-triangles.quartz.xfail.png Binary files differnew file mode 100644 index 0000000..f8f3bf8 --- /dev/null +++ b/test/a1-rasterisation-triangles.quartz.xfail.png diff --git a/test/a8-clear.quartz.ref.png b/test/a8-clear.quartz.ref.png Binary files differnew file mode 100644 index 0000000..5b7c67f --- /dev/null +++ b/test/a8-clear.quartz.ref.png diff --git a/test/aliasing.quartz.ref.png b/test/aliasing.quartz.ref.png Binary files differnew file mode 100644 index 0000000..f4b6e22 --- /dev/null +++ b/test/aliasing.quartz.ref.png diff --git a/test/arc-infinite-loop.c b/test/arc-infinite-loop.c new file mode 100644 index 0000000..8b469ea --- /dev/null +++ b/test/arc-infinite-loop.c @@ -0,0 +1,61 @@ +/* -*- Mode: c; c-basic-offset: 4; indent-tabs-mode: t; tab-width: 8; -*- */ +/* + * Copyright 2010 Andrea Canciani + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Author: Andrea Canciani <ranma42@gmail.com> + */ + +#include "cairo-test.h" +#include <float.h> + +#define SIZE 8 + +/* + cairo_arc can hang in an infinite loop if given huge (so big that + adding/subtracting 4*M_PI to them doesn't change the value because + of floating point rounding). + + The purpose of this test is to check that cairo doesn't hang or crash. +*/ + +static cairo_test_status_t +draw (cairo_t *cr, int width, int height) +{ + cairo_set_source_rgb (cr, 1, 1, 1); + cairo_paint (cr); + + /* Check if the code that guarantees start <= end hangs */ + cairo_arc (cr, 0, 0, 1, 1024 / DBL_EPSILON * M_PI, 0); + + /* Check if the code that handles huge angles hangs */ + cairo_arc (cr, 0, 0, 1, 0, 1024 / DBL_EPSILON * M_PI); + + return CAIRO_TEST_SUCCESS; +} + +CAIRO_TEST (arc_infinite_loop, + "Test cairo_arc with huge angles", + "arc", /* keywords */ + NULL, /* requirements */ + SIZE, SIZE, + NULL, draw) diff --git a/test/arc-infinite-loop.ref.png b/test/arc-infinite-loop.ref.png Binary files differnew file mode 100644 index 0000000..82d645f --- /dev/null +++ b/test/arc-infinite-loop.ref.png diff --git a/test/arc-looping-dash.c b/test/arc-looping-dash.c new file mode 100644 index 0000000..2ad55f6 --- /dev/null +++ b/test/arc-looping-dash.c @@ -0,0 +1,77 @@ +/* -*- Mode: c; c-basic-offset: 4; indent-tabs-mode: t; tab-width: 8; -*- */ +/* + * Copyright 2010 Andrea Canciani + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Author: Andrea Canciani <ranma42@gmail.com> + */ + +#include "cairo-test.h" + +#define SIZE 32 + +/* + When cairo_arc is used to draw an arc of more than 2pi radians + (i.e. a circle "looping over itself"), various different behaviors + are possible: + + - draw exactly a circle (an arc of 2pi radians) + + - draw an arc such that the current point is the expected one and + that does at least a complete circle (an arc of [2pi, 4pi) + radians) + + - draw an arc with the original number of loops + + This test produces different results for each of these three cases. +*/ + +static cairo_test_status_t +draw (cairo_t *cr, int width, int height) +{ + double dashes[] = { 0.3, 7 }; + + cairo_set_source_rgb (cr, 1, 1, 1); + cairo_paint (cr); + + cairo_save (cr); + + cairo_translate (cr, SIZE * .5, SIZE * .5); + cairo_scale (cr, SIZE * 3 / 8., SIZE * 3 / 8.); + + cairo_arc (cr, 0, 0, 1, 0, 11 * M_PI); + + cairo_set_line_width (cr, 8. / SIZE); + + cairo_set_source_rgb (cr, 0, 0, 0); + cairo_set_dash (cr, dashes, 2, 0); + cairo_stroke (cr); + + return CAIRO_TEST_SUCCESS; +} + +CAIRO_TEST (arc_looping_dash, + "Test cairo_arc for angles describing more than a complete circle", + "arc", /* keywords */ + NULL, /* requirements */ + SIZE, SIZE, + NULL, draw) diff --git a/test/arc-looping-dash.image16.ref.png b/test/arc-looping-dash.image16.ref.png Binary files differnew file mode 100644 index 0000000..addc93c --- /dev/null +++ b/test/arc-looping-dash.image16.ref.png diff --git a/test/arc-looping-dash.ps.ref.png b/test/arc-looping-dash.ps.ref.png Binary files differnew file mode 100644 index 0000000..ab19b19 --- /dev/null +++ b/test/arc-looping-dash.ps.ref.png diff --git a/test/arc-looping-dash.quartz.ref.png b/test/arc-looping-dash.quartz.ref.png Binary files differnew file mode 100644 index 0000000..70304ca --- /dev/null +++ b/test/arc-looping-dash.quartz.ref.png diff --git a/test/arc-looping-dash.ref.png b/test/arc-looping-dash.ref.png Binary files differnew file mode 100644 index 0000000..516e66c --- /dev/null +++ b/test/arc-looping-dash.ref.png diff --git a/test/cairo-test-constructors.c b/test/cairo-test-constructors.c index 7a608d9..a0c09d0 100644 --- a/test/cairo-test-constructors.c +++ b/test/cairo-test-constructors.c @@ -15,6 +15,8 @@ extern void _register_a8_clear (void); extern void _register_a8_mask (void); extern void _register_aliasing (void); extern void _register_alpha_similar (void); +extern void _register_arc_infinite_loop (void); +extern void _register_arc_looping_dash (void); extern void _register_api_special_cases (void); extern void _register_big_line (void); extern void _register_big_trap (void); @@ -137,6 +139,7 @@ extern void _register_gradient_zero_stops (void); extern void _register_gradient_zero_stops_mask (void); extern void _register_group_clip (void); extern void _register_group_paint (void); +extern void _register_group_state (void); extern void _register_group_unaligned (void); extern void _register_half_coverage_rectangles (void); extern void _register_half_coverage_triangles (void); @@ -181,7 +184,13 @@ extern void _register_mask_glyphs (void); extern void _register_mask_surface_ctm (void); extern void _register_mask_transformed_image (void); extern void _register_mask_transformed_similar (void); -extern void _register_recording_surface_pattern (void); +extern void _register_mesh_pattern (void); +extern void _register_mesh_pattern_accuracy (void); +extern void _register_mesh_pattern_conical (void); +extern void _register_mesh_pattern_control_points (void); +extern void _register_mesh_pattern_fold (void); +extern void _register_mesh_pattern_overlap (void); +extern void _register_mesh_pattern_transformed (void); extern void _register_mime_data (void); extern void _register_miter_precision (void); extern void _register_move_to_show_surface (void); @@ -224,15 +233,16 @@ extern void _register_push_group (void); extern void _register_push_group_color (void); extern void _register_push_group_path_offset (void); extern void _register_radial_gradient (void); -extern void _register_radial_gradient_extend (void); extern void _register_radial_gradient_mask (void); +extern void _register_radial_gradient_source (void); extern void _register_radial_gradient_mask_source (void); extern void _register_radial_gradient_one_stop (void); -extern void _register_radial_gradient_source (void); +extern void _register_radial_gradient_extend (void); extern void _register_random_intersections_eo (void); extern void _register_random_intersections_nonzero (void); extern void _register_random_intersections_curves_eo (void); extern void _register_random_intersections_curves_nz (void); +extern void _register_recording_surface_pattern (void); extern void _register_rectangle_rounding_error (void); extern void _register_rectilinear_fill (void); extern void _register_rectilinear_grid (void); @@ -318,6 +328,8 @@ extern void _register_user_font (void); extern void _register_user_font_mask (void); extern void _register_user_font_proxy (void); extern void _register_user_font_rescale (void); +extern void _register_white_in_noop (void); +extern void _register_xcb_stress_cache (void); extern void _register_xcomposite_projection (void); extern void _register_xlib_expose_event (void); extern void _register_zero_alpha (void); @@ -361,6 +373,8 @@ _cairo_test_runner_register_tests (void) _register_a8_mask (); _register_aliasing (); _register_alpha_similar (); + _register_arc_infinite_loop (); + _register_arc_looping_dash (); _register_api_special_cases (); _register_big_line (); _register_big_trap (); @@ -483,6 +497,7 @@ _cairo_test_runner_register_tests (void) _register_gradient_zero_stops_mask (); _register_group_clip (); _register_group_paint (); + _register_group_state (); _register_group_unaligned (); _register_half_coverage_rectangles (); _register_half_coverage_triangles (); @@ -527,7 +542,13 @@ _cairo_test_runner_register_tests (void) _register_mask_surface_ctm (); _register_mask_transformed_image (); _register_mask_transformed_similar (); - _register_recording_surface_pattern (); + _register_mesh_pattern (); + _register_mesh_pattern_accuracy (); + _register_mesh_pattern_conical (); + _register_mesh_pattern_control_points (); + _register_mesh_pattern_fold (); + _register_mesh_pattern_overlap (); + _register_mesh_pattern_transformed (); _register_mime_data (); _register_miter_precision (); _register_move_to_show_surface (); @@ -570,15 +591,16 @@ _cairo_test_runner_register_tests (void) _register_push_group_color (); _register_push_group_path_offset (); _register_radial_gradient (); - _register_radial_gradient_extend (); _register_radial_gradient_mask (); + _register_radial_gradient_source (); _register_radial_gradient_mask_source (); _register_radial_gradient_one_stop (); - _register_radial_gradient_source (); + _register_radial_gradient_extend (); _register_random_intersections_eo (); _register_random_intersections_nonzero (); _register_random_intersections_curves_eo (); _register_random_intersections_curves_nz (); + _register_recording_surface_pattern (); _register_rectangle_rounding_error (); _register_rectilinear_fill (); _register_rectilinear_grid (); @@ -664,6 +686,8 @@ _cairo_test_runner_register_tests (void) _register_user_font_mask (); _register_user_font_proxy (); _register_user_font_rescale (); + _register_white_in_noop (); + _register_xcb_stress_cache (); _register_xcomposite_projection (); _register_xlib_expose_event (); _register_zero_alpha (); diff --git a/test/cairo-test-runner.c b/test/cairo-test-runner.c index 5aea643..539817e 100644 --- a/test/cairo-test-runner.c +++ b/test/cairo-test-runner.c @@ -125,6 +125,18 @@ _log (cairo_test_context_t *ctx, va_end (ap); } +static void +_tests_reverse () +{ + cairo_test_t *list, *next; + + for (list = tests, tests = NULL; list != NULL; list = next) { + next = list->next; + list->next = tests; + tests = list; + } +} + static cairo_test_list_t * _list_prepend (cairo_test_list_t *head, const cairo_test_t *test) { @@ -705,6 +717,7 @@ main (int argc, char **argv) #endif _cairo_test_runner_register_tests (); + _tests_reverse (); memset (&runner, 0, sizeof (runner)); runner.num_device_offsets = 1; diff --git a/test/clip-fill-eo-unbounded.quartz.argb32.ref.png b/test/clip-fill-eo-unbounded.quartz.argb32.ref.png Binary files differindex 2ea24a3..3423000 100644 --- a/test/clip-fill-eo-unbounded.quartz.argb32.ref.png +++ b/test/clip-fill-eo-unbounded.quartz.argb32.ref.png diff --git a/test/clip-fill-eo-unbounded.quartz.rgb24.ref.png b/test/clip-fill-eo-unbounded.quartz.rgb24.ref.png Binary files differindex 2705008..1612801 100644 --- a/test/clip-fill-eo-unbounded.quartz.rgb24.ref.png +++ b/test/clip-fill-eo-unbounded.quartz.rgb24.ref.png diff --git a/test/clip-fill-nz-unbounded.quartz.argb32.ref.png b/test/clip-fill-nz-unbounded.quartz.argb32.ref.png Binary files differindex 2ea24a3..3423000 100644 --- a/test/clip-fill-nz-unbounded.quartz.argb32.ref.png +++ b/test/clip-fill-nz-unbounded.quartz.argb32.ref.png diff --git a/test/clip-fill-nz-unbounded.quartz.rgb24.ref.png b/test/clip-fill-nz-unbounded.quartz.rgb24.ref.png Binary files differindex 2705008..1612801 100644 --- a/test/clip-fill-nz-unbounded.quartz.rgb24.ref.png +++ b/test/clip-fill-nz-unbounded.quartz.rgb24.ref.png diff --git a/test/clip-operator.pdf.argb32.ref.png b/test/clip-operator.pdf.argb32.ref.png Binary files differindex 79600af..7f8c93e 100644 --- a/test/clip-operator.pdf.argb32.ref.png +++ b/test/clip-operator.pdf.argb32.ref.png diff --git a/test/clip-operator.pdf.rgb24.ref.png b/test/clip-operator.pdf.rgb24.ref.png Binary files differindex 163d54c..fc4f431 100644 --- a/test/clip-operator.pdf.rgb24.ref.png +++ b/test/clip-operator.pdf.rgb24.ref.png diff --git a/test/clip-operator.quartz.argb32.ref.png b/test/clip-operator.quartz.argb32.ref.png Binary files differindex bf71993..ecf6ee2 100644 --- a/test/clip-operator.quartz.argb32.ref.png +++ b/test/clip-operator.quartz.argb32.ref.png diff --git a/test/clip-operator.quartz.rgb24.ref.png b/test/clip-operator.quartz.rgb24.ref.png Binary files differindex 51a30b0..67c628f 100644 --- a/test/clip-operator.quartz.rgb24.ref.png +++ b/test/clip-operator.quartz.rgb24.ref.png diff --git a/test/clip-stroke-unbounded.quartz.argb32.ref.png b/test/clip-stroke-unbounded.quartz.argb32.ref.png Binary files differindex c6124dd..8bd5b36 100644 --- a/test/clip-stroke-unbounded.quartz.argb32.ref.png +++ b/test/clip-stroke-unbounded.quartz.argb32.ref.png diff --git a/test/clip-stroke-unbounded.quartz.rgb24.ref.png b/test/clip-stroke-unbounded.quartz.rgb24.ref.png Binary files differindex c6e0eb9..5349f84 100644 --- a/test/clip-stroke-unbounded.quartz.rgb24.ref.png +++ b/test/clip-stroke-unbounded.quartz.rgb24.ref.png diff --git a/test/extended-blend-alpha.quartz.argb32.ref.png b/test/extended-blend-alpha.quartz.argb32.ref.png Binary files differnew file mode 100644 index 0000000..e5701a6 --- /dev/null +++ b/test/extended-blend-alpha.quartz.argb32.ref.png diff --git a/test/extended-blend-alpha.quartz.rgb24.ref.png b/test/extended-blend-alpha.quartz.rgb24.ref.png Binary files differnew file mode 100644 index 0000000..477d346 --- /dev/null +++ b/test/extended-blend-alpha.quartz.rgb24.ref.png diff --git a/test/extended-blend.quartz.argb32.ref.png b/test/extended-blend.quartz.argb32.ref.png Binary files differnew file mode 100644 index 0000000..173c6e2 --- /dev/null +++ b/test/extended-blend.quartz.argb32.ref.png diff --git a/test/extended-blend.quartz.rgb24.ref.png b/test/extended-blend.quartz.rgb24.ref.png Binary files differnew file mode 100644 index 0000000..56a1214 --- /dev/null +++ b/test/extended-blend.quartz.rgb24.ref.png diff --git a/test/fallback-resolution.c b/test/fallback-resolution.c index 8ae952a..1d05973 100644 --- a/test/fallback-resolution.c +++ b/test/fallback-resolution.c @@ -328,27 +328,19 @@ preamble (cairo_test_context_t *ctx) struct { double x, y; } ppi[] = { - { 600, 600 }, - { 600, 72 }, + { 576, 576 }, + { 576, 72 }, - { 300, 300 }, - { 300, 72 }, + { 288, 288 }, + { 288, 72 }, - { 150, 150 }, - { 150, 72 }, + { 144, 144 }, + { 144, 72 }, - { 75, 75 }, - { 75, 72 }, - - { 72, 600 }, - { 72, 300 }, - { 72, 150 }, - { 72, 75 }, + { 72, 576 }, + { 72, 288 }, + { 72, 144 }, { 72, 72 }, - { 72, 37.5 }, - - { 37.5, 72 }, - { 37.5, 37.5 }, }; unsigned int i; int n, num_ppi; @@ -444,15 +436,13 @@ preamble (cairo_test_context_t *ctx) fflush (stdout); if (target->force_fallbacks != NULL) - target->force_fallbacks (surface, ~0U); + target->force_fallbacks (surface, ppi[n].x, ppi[n].y); cr = cairo_create (surface); #if SET_TOLERANCE cairo_set_tolerance (cr, 3.0); #endif cairo_surface_set_device_offset (surface, 25, 25); - cairo_surface_set_fallback_resolution (surface, - ppi[n].x, ppi[n].y); cairo_save (cr); { cairo_set_source_rgb (cr, 1, 1, 1); diff --git a/test/fallback-resolution.ppi144x144.ps.ref.png b/test/fallback-resolution.ppi144x144.ps.ref.png Binary files differnew file mode 100644 index 0000000..0922f03 --- /dev/null +++ b/test/fallback-resolution.ppi144x144.ps.ref.png diff --git a/test/fallback-resolution.ppi144x144.ref.png b/test/fallback-resolution.ppi144x144.ref.png Binary files differnew file mode 100644 index 0000000..cbe93ca --- /dev/null +++ b/test/fallback-resolution.ppi144x144.ref.png diff --git a/test/fallback-resolution.ppi144x72.ps.ref.png b/test/fallback-resolution.ppi144x72.ps.ref.png Binary files differnew file mode 100644 index 0000000..2f8d82d --- /dev/null +++ b/test/fallback-resolution.ppi144x72.ps.ref.png diff --git a/test/fallback-resolution.ppi144x72.ref.png b/test/fallback-resolution.ppi144x72.ref.png Binary files differnew file mode 100644 index 0000000..4c16ca1 --- /dev/null +++ b/test/fallback-resolution.ppi144x72.ref.png diff --git a/test/fallback-resolution.ppi150x150.ref.png b/test/fallback-resolution.ppi150x150.ref.png Binary files differdeleted file mode 100644 index 40e68a9..0000000 --- a/test/fallback-resolution.ppi150x150.ref.png +++ /dev/null diff --git a/test/fallback-resolution.ppi150x72.ref.png b/test/fallback-resolution.ppi150x72.ref.png Binary files differdeleted file mode 100644 index 47e0c58..0000000 --- a/test/fallback-resolution.ppi150x72.ref.png +++ /dev/null diff --git a/test/fallback-resolution.ppi288x288.pdf.ref.png b/test/fallback-resolution.ppi288x288.pdf.ref.png Binary files differnew file mode 100644 index 0000000..181e110 --- /dev/null +++ b/test/fallback-resolution.ppi288x288.pdf.ref.png diff --git a/test/fallback-resolution.ppi288x288.ps.ref.png b/test/fallback-resolution.ppi288x288.ps.ref.png Binary files differnew file mode 100644 index 0000000..99bccef --- /dev/null +++ b/test/fallback-resolution.ppi288x288.ps.ref.png diff --git a/test/fallback-resolution.ppi288x288.svg.ref.png b/test/fallback-resolution.ppi288x288.svg.ref.png Binary files differnew file mode 100644 index 0000000..e71ff81 --- /dev/null +++ b/test/fallback-resolution.ppi288x288.svg.ref.png diff --git a/test/fallback-resolution.ppi288x72.ps.ref.png b/test/fallback-resolution.ppi288x72.ps.ref.png Binary files differnew file mode 100644 index 0000000..89b9c51 --- /dev/null +++ b/test/fallback-resolution.ppi288x72.ps.ref.png diff --git a/test/fallback-resolution.ppi288x72.ref.png b/test/fallback-resolution.ppi288x72.ref.png Binary files differnew file mode 100644 index 0000000..b213587 --- /dev/null +++ b/test/fallback-resolution.ppi288x72.ref.png diff --git a/test/fallback-resolution.ppi300x300.ref.png b/test/fallback-resolution.ppi300x300.ref.png Binary files differdeleted file mode 100644 index 61af74c..0000000 --- a/test/fallback-resolution.ppi300x300.ref.png +++ /dev/null diff --git a/test/fallback-resolution.ppi300x72.ref.png b/test/fallback-resolution.ppi300x72.ref.png Binary files differdeleted file mode 100644 index d790a38..0000000 --- a/test/fallback-resolution.ppi300x72.ref.png +++ /dev/null diff --git a/test/fallback-resolution.ppi37.5x37.5.ref.png b/test/fallback-resolution.ppi37.5x37.5.ref.png Binary files differdeleted file mode 100644 index 172fbcd..0000000 --- a/test/fallback-resolution.ppi37.5x37.5.ref.png +++ /dev/null diff --git a/test/fallback-resolution.ppi37.5x72.ref.png b/test/fallback-resolution.ppi37.5x72.ref.png Binary files differdeleted file mode 100644 index cac416a..0000000 --- a/test/fallback-resolution.ppi37.5x72.ref.png +++ /dev/null diff --git a/test/fallback-resolution.ppi576x576.pdf.ref.png b/test/fallback-resolution.ppi576x576.pdf.ref.png Binary files differnew file mode 100644 index 0000000..5b37619 --- /dev/null +++ b/test/fallback-resolution.ppi576x576.pdf.ref.png diff --git a/test/fallback-resolution.ppi576x576.ps.ref.png b/test/fallback-resolution.ppi576x576.ps.ref.png Binary files differnew file mode 100644 index 0000000..9dc4735 --- /dev/null +++ b/test/fallback-resolution.ppi576x576.ps.ref.png diff --git a/test/fallback-resolution.ppi576x576.svg.ref.png b/test/fallback-resolution.ppi576x576.svg.ref.png Binary files differnew file mode 100644 index 0000000..b5a97e3 --- /dev/null +++ b/test/fallback-resolution.ppi576x576.svg.ref.png diff --git a/test/fallback-resolution.ppi576x72.ps.ref.png b/test/fallback-resolution.ppi576x72.ps.ref.png Binary files differnew file mode 100644 index 0000000..9ac6be4 --- /dev/null +++ b/test/fallback-resolution.ppi576x72.ps.ref.png diff --git a/test/fallback-resolution.ppi576x72.ref.png b/test/fallback-resolution.ppi576x72.ref.png Binary files differnew file mode 100644 index 0000000..b63e66e --- /dev/null +++ b/test/fallback-resolution.ppi576x72.ref.png diff --git a/test/fallback-resolution.ppi600x600.ref.png b/test/fallback-resolution.ppi600x600.ref.png Binary files differdeleted file mode 100644 index 34a2e56..0000000 --- a/test/fallback-resolution.ppi600x600.ref.png +++ /dev/null diff --git a/test/fallback-resolution.ppi600x72.ref.png b/test/fallback-resolution.ppi600x72.ref.png Binary files differdeleted file mode 100644 index ed45777..0000000 --- a/test/fallback-resolution.ppi600x72.ref.png +++ /dev/null diff --git a/test/fallback-resolution.ppi72x144.ps.ref.png b/test/fallback-resolution.ppi72x144.ps.ref.png Binary files differnew file mode 100644 index 0000000..50b5a99 --- /dev/null +++ b/test/fallback-resolution.ppi72x144.ps.ref.png diff --git a/test/fallback-resolution.ppi72x144.ref.png b/test/fallback-resolution.ppi72x144.ref.png Binary files differnew file mode 100644 index 0000000..9d232c0 --- /dev/null +++ b/test/fallback-resolution.ppi72x144.ref.png diff --git a/test/fallback-resolution.ppi72x150.ref.png b/test/fallback-resolution.ppi72x150.ref.png Binary files differdeleted file mode 100644 index db61cba..0000000 --- a/test/fallback-resolution.ppi72x150.ref.png +++ /dev/null diff --git a/test/fallback-resolution.ppi72x288.ps.ref.png b/test/fallback-resolution.ppi72x288.ps.ref.png Binary files differnew file mode 100644 index 0000000..b4ff82d --- /dev/null +++ b/test/fallback-resolution.ppi72x288.ps.ref.png diff --git a/test/fallback-resolution.ppi72x288.ref.png b/test/fallback-resolution.ppi72x288.ref.png Binary files differnew file mode 100644 index 0000000..fdbc382 --- /dev/null +++ b/test/fallback-resolution.ppi72x288.ref.png diff --git a/test/fallback-resolution.ppi72x300.ref.png b/test/fallback-resolution.ppi72x300.ref.png Binary files differdeleted file mode 100644 index 76b5b0c..0000000 --- a/test/fallback-resolution.ppi72x300.ref.png +++ /dev/null diff --git a/test/fallback-resolution.ppi72x37.5.ref.png b/test/fallback-resolution.ppi72x37.5.ref.png Binary files differdeleted file mode 100644 index a459d52..0000000 --- a/test/fallback-resolution.ppi72x37.5.ref.png +++ /dev/null diff --git a/test/fallback-resolution.ppi72x576.ps.ref.png b/test/fallback-resolution.ppi72x576.ps.ref.png Binary files differnew file mode 100644 index 0000000..6a3ddcb --- /dev/null +++ b/test/fallback-resolution.ppi72x576.ps.ref.png diff --git a/test/fallback-resolution.ppi72x576.ref.png b/test/fallback-resolution.ppi72x576.ref.png Binary files differnew file mode 100644 index 0000000..c943f08 --- /dev/null +++ b/test/fallback-resolution.ppi72x576.ref.png diff --git a/test/fallback-resolution.ppi72x600.ref.png b/test/fallback-resolution.ppi72x600.ref.png Binary files differdeleted file mode 100644 index 38235a3..0000000 --- a/test/fallback-resolution.ppi72x600.ref.png +++ /dev/null diff --git a/test/fallback-resolution.ppi72x72.ref.png b/test/fallback-resolution.ppi72x72.ref.png Binary files differindex b76fd94..5d1df2c 100644 --- a/test/fallback-resolution.ppi72x72.ref.png +++ b/test/fallback-resolution.ppi72x72.ref.png diff --git a/test/fallback-resolution.ppi72x75.ref.png b/test/fallback-resolution.ppi72x75.ref.png Binary files differdeleted file mode 100644 index 3c22cca..0000000 --- a/test/fallback-resolution.ppi72x75.ref.png +++ /dev/null diff --git a/test/fallback-resolution.ppi75x72.ref.png b/test/fallback-resolution.ppi75x72.ref.png Binary files differdeleted file mode 100644 index 161edb0..0000000 --- a/test/fallback-resolution.ppi75x72.ref.png +++ /dev/null diff --git a/test/fallback-resolution.ppi75x75.ref.png b/test/fallback-resolution.ppi75x75.ref.png Binary files differdeleted file mode 100644 index 3769d09..0000000 --- a/test/fallback-resolution.ppi75x75.ref.png +++ /dev/null diff --git a/test/filter-nearest-offset.quartz.xfail.png b/test/filter-nearest-offset.quartz.xfail.png Binary files differdeleted file mode 100644 index ee69e36..0000000 --- a/test/filter-nearest-offset.quartz.xfail.png +++ /dev/null diff --git a/test/filter-nearest-transformed.quartz.xfail.png b/test/filter-nearest-transformed.quartz.xfail.png Binary files differindex c616d64..246cdf4 100644 --- a/test/filter-nearest-transformed.quartz.xfail.png +++ b/test/filter-nearest-transformed.quartz.xfail.png diff --git a/test/ft-show-glyphs-positioning.pdf.ref.png b/test/ft-show-glyphs-positioning.pdf.ref.png Binary files differindex 796d4eb..0d62fd3 100644 --- a/test/ft-show-glyphs-positioning.pdf.ref.png +++ b/test/ft-show-glyphs-positioning.pdf.ref.png diff --git a/test/get-path-extents.c b/test/get-path-extents.c index 3a05eff..a9a6ad1 100644 --- a/test/get-path-extents.c +++ b/test/get-path-extents.c @@ -156,8 +156,7 @@ draw (cairo_t *cr, int width, int height) phase = "Degenerate arc (Θ=0)"; errors += !check_extents (ctx, phase, cr2, FILL, EQUALS, 0, 0, 0, 0); errors += !check_extents (ctx, phase, cr2, STROKE, EQUALS, 0, 0, 0, 0); - /*XXX: I'd expect these extents to be oriented at 200, 400 */ - errors += !check_extents (ctx, phase, cr2, PATH, EQUALS, 0, 0, 0, 0); + errors += !check_extents (ctx, phase, cr2, PATH, EQUALS, 210, 400, 0, 0); cairo_new_path (cr2); cairo_restore (cr2); diff --git a/test/group-state.c b/test/group-state.c new file mode 100644 index 0000000..a96b2e3 --- /dev/null +++ b/test/group-state.c @@ -0,0 +1,96 @@ +/* -*- Mode: c; c-basic-offset: 4; indent-tabs-mode: t; tab-width: 8; -*- */ +/* + * Copyright 2011 Andrea Canciani + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Author: Andrea Canciani <ranma42@gmail.com> + */ + +#include "cairo-test.h" + +#define CHECK_STATUS(status) \ + do { \ + if (cairo_status (cr) != (status)) { \ + cairo_test_log (ctx, "Expected status: %s\n", \ + cairo_status_to_string (status)); \ + cairo_test_log (ctx, "Actual status: %s\n", \ + cairo_status_to_string (cairo_status (cr))); \ + result = CAIRO_TEST_FAILURE; \ + } \ + } while (0) + +static void +reinit_cairo (cairo_t **cr) +{ + if (*cr) + cairo_destroy (*cr); + + *cr = cairo_create (cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 1, 1)); + cairo_surface_destroy (cairo_get_target (*cr)); +} + +static cairo_test_status_t +preamble (cairo_test_context_t *ctx) +{ + cairo_t *cr; + cairo_test_status_t result = CAIRO_TEST_SUCCESS; + + cr = NULL; + + reinit_cairo (&cr); + + /* cairo_restore() must fail with CAIRO_STATUS_INVALID_RESTORE if + * no matching cairo_save() call has been performed. */ + cairo_test_log (ctx, "Checking save(); push(); restore();\n"); + cairo_save (cr); + CHECK_STATUS (CAIRO_STATUS_SUCCESS); + cairo_push_group (cr); + CHECK_STATUS (CAIRO_STATUS_SUCCESS); + cairo_restore (cr); + CHECK_STATUS (CAIRO_STATUS_INVALID_RESTORE); + + + reinit_cairo (&cr); + + /* cairo_restore() must fail with CAIRO_STATUS_INVALID_RESTORE if + * no matching cairo_save() call has been performed. */ + cairo_test_log (ctx, "Checking push(); save(); pop();\n"); + cairo_push_group (cr); + CHECK_STATUS (CAIRO_STATUS_SUCCESS); + cairo_save (cr); + CHECK_STATUS (CAIRO_STATUS_SUCCESS); + cairo_pop_group_to_source (cr); + CHECK_STATUS (CAIRO_STATUS_INVALID_POP_GROUP); + + + cairo_destroy (cr); + + return result; +} + +CAIRO_TEST (group_state, + "Tests the interaction between state (cairo_save, cairo_restore) " + "and group (cairo_push_group/cairo_pop_group) API", + "api", /* keywords */ + NULL, /* requirements */ + 0, 0, + preamble, NULL) diff --git a/test/huge-linear.c b/test/huge-linear.c index e57d299..f84b4ea 100644 --- a/test/huge-linear.c +++ b/test/huge-linear.c @@ -27,7 +27,7 @@ #include "cairo-test.h" /* set this to 0.1 to make this test work */ -#define FACTOR 1 +#define FACTOR 1.e6 /* XXX poppler-cairo doesn't handle gradients very well... */ diff --git a/test/huge-linear.image16.ref.png b/test/huge-linear.image16.ref.png Binary files differindex 30297b9..56dc58a 100644 --- a/test/huge-linear.image16.ref.png +++ b/test/huge-linear.image16.ref.png diff --git a/test/huge-linear.pdf.ref.png b/test/huge-linear.pdf.ref.png Binary files differindex cf1f8fc..8313470 100644 --- a/test/huge-linear.pdf.ref.png +++ b/test/huge-linear.pdf.ref.png diff --git a/test/huge-linear.quartz.ref.png b/test/huge-linear.quartz.ref.png Binary files differnew file mode 100644 index 0000000..3d12f7b --- /dev/null +++ b/test/huge-linear.quartz.ref.png diff --git a/test/huge-radial.c b/test/huge-radial.c index 7356244..21524b7 100644 --- a/test/huge-radial.c +++ b/test/huge-radial.c @@ -29,7 +29,7 @@ #include "cairo-test.h" /* set this to 0.1 to make this test work */ -#define FACTOR 1 +#define FACTOR 1.e6 /* XXX poppler-cairo doesn't handle gradients very well... */ diff --git a/test/index.html b/test/index.html new file mode 100644 index 0000000..54c65cd --- /dev/null +++ b/test/index.html @@ -0,0 +1,42 @@ +<html><head> +<title>Cairo Test Results</title> +<style type="text/css"> +#HcolHeader { text-align: center; } + +img { max-width: 15em; min-width: 3em; min-height: 3em; margin: 3px; } +a img { border: solid 1px #FFF; } + +td { vertical-align: top; } +span { cursor: pointer; } + +td.PASS { background-color: #0B0; min-width: 1em; } +span.PASS { color: #0B0; } + +td.NEW { background-color: #B70; } +span.NEW { color: #B70; } + +td.FAIL { background-color: #B00; } +span.FAIL { color: #D00; } + +td.XFAIL { background-color: #BB0; } +span.XFAIL { color: #BB0; } + +td.UNTESTED { background-color: #555; } +span.UNTESTED { color: #555; } + +td.CRASHED { background-color: #F00; color: #FF0; } +span.CRASHED { color: #F00; } + +.test { } +.target { } +.format { } +.offset { } +.similar { } + +</style> +<script language="JavaScript" src="testtable.js"></script> +</head> +<body oncontextmenu='ignoreEvent (event)' onmouseup='noDrag (event)'> +<table id="testTable" border="1"></table> +</body> +</html> diff --git a/test/large-source-roi.c b/test/large-source-roi.c index e429f98..dfd3554 100644 --- a/test/large-source-roi.c +++ b/test/large-source-roi.c @@ -47,7 +47,9 @@ static cairo_test_status_t draw (cairo_t *cr, int width, int height) { cairo_surface_t *source; - double source_width = 32767.0; + /* Since 1cc750ed92a936d84b47cac696aaffd226e1c02e pixman will not + * paint on the source surface if source_width > 30582. */ + double source_width = 30000.0; cairo_set_source_rgb (cr, 1,1,1); cairo_paint (cr); diff --git a/test/linear-gradient-large.quartz.ref.png b/test/linear-gradient-large.quartz.ref.png Binary files differnew file mode 100644 index 0000000..68f0829 --- /dev/null +++ b/test/linear-gradient-large.quartz.ref.png diff --git a/test/linear-gradient-large.ref.png b/test/linear-gradient-large.ref.png Binary files differindex 753fe2a..f1f37ab 100644 --- a/test/linear-gradient-large.ref.png +++ b/test/linear-gradient-large.ref.png diff --git a/test/linear-gradient-subset.quartz.ref.png b/test/linear-gradient-subset.quartz.ref.png Binary files differindex 8183411..85d80ad 100644 --- a/test/linear-gradient-subset.quartz.ref.png +++ b/test/linear-gradient-subset.quartz.ref.png diff --git a/test/linear-gradient.quartz.ref.png b/test/linear-gradient.quartz.ref.png Binary files differindex 47332d3..1c3e7c2 100644 --- a/test/linear-gradient.quartz.ref.png +++ b/test/linear-gradient.quartz.ref.png diff --git a/test/make-html.pl b/test/make-html.pl deleted file mode 100755 index 9c0626d..0000000 --- a/test/make-html.pl +++ /dev/null @@ -1,303 +0,0 @@ -#!/usr/bin/perl -# -# Copyright © 2005 Mozilla Corporation -# -# Permission to use, copy, modify, distribute, and sell this software -# and its documentation for any purpose is hereby granted without -# fee, provided that the above copyright notice appear in all copies -# and that both that copyright notice and this permission notice -# appear in supporting documentation, and that the name of -# Mozilla Corporation not be used in advertising or publicity pertaining to -# distribution of the software without specific, written prior -# permission. Mozilla Corporation makes no representations about the -# suitability of this software for any purpose. It is provided "as -# is" without express or implied warranty. -# -# MOZILLA CORPORTAION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS -# SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -# FITNESS, IN NO EVENT SHALL MOZILLA CORPORATION BE LIABLE FOR ANY SPECIAL, -# INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER -# RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -# IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -# -# Author: Vladimir Vukicevic <vladimir@pobox.com> -# - -use MIME::Base64; - -## -## Takes all the *.log files in the current directory (or those provided -## on the command line) and spits out html to stdout that can be used to -## view all the test results at once. -## - -# show reference images -$config_show_ref = $ENV{'CAIRO_TEST_SHOW_REF'} || 0; - -# show fail images -$config_show_fail = $ENV{'CAIRO_TEST_SHOW_FAIL'} || 1; - -# show all results, even passes -$config_show_all = $ENV{'CAIRO_TEST_SHOW_ALL'} || 0; - -# include test results inline -$config_show_inline = $ENV{'CAIRO_TEST_SHOW_INLINE'} || 0; - -# end of config options - -$tests = {}; -$teststats = {}; -$logs = {}; - -if ($#ARGV >= 0) { @files = @ARGV; } else { @files = <*.log>; } - -foreach (<@files>) { - my $testname; - my $out_path, $diff_path, $ref_path; - my $fn = $_; - (open LOG, $fn) || next; - while (<LOG>) { - if (/^OUTPUT: (.*)$/) { - $out_path = $1; - next; - } - if (/^DIFFERENCE: (.*)$/) { - $diff_path = $1; - next; - } - if (/^REFERENCE: (.*)$/) { - $ref_path = $1; - next; - } - next unless /^TEST: (.*) TARGET: (.*) FORMAT: (.*) OFFSET: (.*) SIMILAR: (.*) RESULT: ([A-Z]*).*$/; - $testname = $1 if !defined($testname); - $tests->{$1} = {} unless $tests->{$1}; - $tests->{$1}->{$2} = {} unless $tests->{$1}->{$2}; - $tests->{$1}->{$2}->{$3} = {} unless $tests->{$1}->{$2}->{$3}; - $tests->{$1}->{$2}->{$3}->{$4} = {} unless $tests->{$1}->{$2}->{$3}->{$4}; - $tests->{$1}->{$2}->{$3}->{$4}->{$5}->{'out'} = $out_path; - $tests->{$1}->{$2}->{$3}->{$4}->{$5}->{'diff'} = $diff_path; - $tests->{$1}->{$2}->{$3}->{$4}->{$5}->{'ref'} = $ref_path; - $tests->{$1}->{$2}->{$3}->{$4}->{$5}->{'result'} = $6; - - $teststats->{$2} = {"PASS" => 0, "FAIL" => 0, "NEW" => 0, "XFAIL" => 0, "UNTESTED" => 0, "CRASHED" =>0} - unless $teststats->{$2}; - ($teststats->{$2}->{$6})++; - - undef $out_path; - undef $diff_path; - undef $ref_path; - } - close LOG; - - (open LOG, $fn) || die "I could open it earlier, but I can't now: $!"; - { - local $/; - $logs->{$testname} = <LOG>; - } - close LOG; -} - -my $targeth = {}; -my $formath = {}; -my $offseth = {}; -my $similarh = {}; - -foreach my $testname (sort(keys %$tests)) { - my $v0 = $tests->{$testname}; - foreach my $targetname (sort(keys %$v0)) { - my $v1 = $v0->{$targetname}; - - $targeth->{$targetname} = 1; - foreach my $formatname (sort(keys %$v1)) { - my $v2 = $v1->{$formatname}; - - $formath->{$formatname} = 1; - foreach my $offsetval (sort(keys %$v2)) { - my $v3 = $v2->{$offsetval}; - - $offseth->{$offsetval} = 1; - foreach my $similarval (sort(keys %$v3)) { - $similarh->{$similarval} = 1; - } - } - } - } -} - -my @targets = sort(keys %$targeth); -my @formats = sort(keys %$formath); -my @offsets = sort(keys %$offseth); -my @similars = sort(keys %$similarh); - -sub printl { - print @_, "\n"; -} - -# convert file into a data URI -sub file_to_data { - my ($ctype,$fname) = @_; - my $fdata; - open FILE, $fname || return "data:" . $ctype . ","; - { - local $/; - $fdata = encode_base64(<FILE>); - } - close FILE; - return "data:" . $ctype . ";base64," . $fdata; -} - -# convert string into a data URI -sub string_to_data { - my ($ctype,$str) = @_; - $str =~ s/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg; - return "data:" . $ctype . "," . $str; -} - -printl '<html><head>'; -printl '<title>Cairo Test Results</title>'; -printl '<style type="text/css">'; -printl 'a img { border: solid 1px #FFF; }'; -printl '.PASS { background-color: #0B0; min-width: 1em; }'; -printl '.NEW { background-color: #B70; }'; -printl '.FAIL { background-color: #B00; }'; -printl '.XFAIL { background-color: #BB0; }'; -printl '.UNTESTED { background-color: #555; }'; -printl '.CRASHED { background-color: #F00; color: #FF0; }'; -printl '.PASSstr { color: #0B0; }'; -printl '.FAILstr { color: #D00; }'; -printl '.XFAILstr { color: #BB0; }'; -printl '.CRASHEDstr { color: #F00; }'; -printl '.UNTESTEDstr { color: #555; }'; -printl 'img { max-width: 15em; min-width: 3em; min-height: 3em; margin: 3px; }'; -printl 'td { vertical-align: top; }'; -printl '</style>'; -printl '</script>'; -printl '</head>'; -printl '<body>'; - -printl '<table border="1">'; -print '<tr><th>Test</th>'; - -foreach my $target (@targets) { - print '<th>', $target, '</th>'; -} -printl '</tr>'; - -print '<tr><td></td>'; - -foreach my $target (@targets) { - print '<td>'; - print '<span class="PASSstr">', $teststats->{$target}->{"PASS"}, '</span>/'; - print '<span class="FAILstr">', - $teststats->{$target}->{"FAIL"} + - $teststats->{$target}->{"NEW"} + - $teststats->{$target}->{"CRASHED"}, - '</span>/'; - print '<span class="XFAILstr">', $teststats->{$target}->{"XFAIL"}, '</span>/'; - print '<span class="UNTESTEDstr">', $teststats->{$target}->{"UNTESTED"}, '</span>'; - print '</td>'; -} -printl '</tr>'; - -sub img_for { - my ($fn, $withlink) = @_; - - return "" unless defined $fn; - - if ($config_show_inline) { - $fn = file_to_data("image/png", $fn); - # never return links, people can just right-click view image, - # and we don't clutter the document - return '<img src="' . $fn . '">'; - } else { - if ($withlink) { - return '<a href="' . $fn . '"><img src="' . $fn . '"></a>'; - } else { - return '<img src="' . $fn . '">'; - } - } -} - -foreach my $test (sort(keys %$tests)) { - foreach my $offset (@offsets) { - foreach my $similar (@similars) { - foreach my $format (@formats) { - my $testline = ""; - - foreach my $target (@targets) { - my $tgtdata = $tests->{$test}->{$target}; - if ($tgtdata) { - my $testres = $tgtdata->{$format}->{$offset}->{$similar}; - if ($testres) { - my %testfiles; - $testfiles{'out'} = $testres->{'out'}; - $testfiles{'diff'} = $testres->{'diff'}; - $testfiles{'ref'} = $testres->{'ref'}; - - $testline .= "<td class=\"$testres->{'result'}\">"; - $teststats{$target}{$testres}++; - if ($testres->{'result'} eq "PASS") { - if ($config_show_all) { - $testline .= img_for($testfiles{'out'},1); - } - } elsif ($testres->{'result'} eq "FAIL") { - if ($config_show_fail || $config_show_all) { - $testline .= img_for($testfiles{'out'},1); - $testline .= " "; - $testline .= img_for($testfiles{'diff'},1); - $testline .= " "; - $testline .= img_for($testfiles{'ref'},1); - } - } elsif ($testres->{'result'} eq "NEW") { - if ($config_show_fail || $config_show_all) { - $testline .= img_for($testfiles{'new'},1); - } - } elsif ($testres->{'result'} eq "CRASHED") { - $testline .= "!!!CRASHED!!!"; - } elsif ($testres->{'result'} eq "XFAIL") { - #nothing - if ($config_show_all) { - $testline .= img_for($testfiles{'out'},1); - #$testline .= "<hr size=\"1\">"; - $testline .= " "; - $testline .= img_for($testfiles{'diff'},1); - $testline .= " "; - $testline .= img_for($testfiles{'ref'},1); - } - } elsif ($testres->{'result'} eq "UNTESTED") { - #nothing - } else { - $testline .= "UNSUPPORTED STATUS '$testres->{'result'}' (update make-html.pl)"; - } - - $testline .= "</td>"; - } else { - $testline .= '<td></td>'; - } - } else { - $testline .= '<td></td>'; - } - } - print '<tr><td>'; - - if ($config_show_inline) { - print "$test ($format/$offset) "; - print "(<a href=\"" . string_to_data("text/plain",$logs->{$test}) . "\">log</a>)"; - } else { - print $test, ' (', $format, '/', $offset, ($similar ? ' similar' : ''), ') '; - print "(<a href=\"$test.log\">log</a>)"; - } - - print '</td>'; - - print $testline; - - print "</tr>\n"; - } - } - } -} - -print "</table></body></html>\n"; diff --git a/test/mask.quartz.argb32.ref.png b/test/mask.quartz.argb32.ref.png Binary files differindex 53d034a..c7ab76e 100644 --- a/test/mask.quartz.argb32.ref.png +++ b/test/mask.quartz.argb32.ref.png diff --git a/test/mesh-pattern-accuracy.c b/test/mesh-pattern-accuracy.c new file mode 100644 index 0000000..0f756c5 --- /dev/null +++ b/test/mesh-pattern-accuracy.c @@ -0,0 +1,99 @@ +/* + * Copyright © 2009 Adrian Johnson + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Author: Adrian Johnson <ajohnson@redneon.com> + */ + +#include "cairo-test.h" +#include <float.h> + +#define SIZE 256 + +/* This test is designed to test the accuracy of the rendering of mesh + * patterns. + * + * Color accuracy is tested by a square patch covering the whole + * surface with black and white corners. + * + * Extents accuracy is checked by a small red square patch at the + * center of the surface which should measure 2x2 pixels. + */ + +static cairo_test_status_t +draw (cairo_t *cr, int width, int height) +{ + cairo_pattern_t *pattern; + double offset; + + cairo_test_paint_checkered (cr); + + pattern = cairo_pattern_create_mesh (); + + cairo_pattern_mesh_begin_patch (pattern); + + cairo_pattern_mesh_move_to (pattern, 0, 0); + cairo_pattern_mesh_line_to (pattern, 1, 0); + cairo_pattern_mesh_line_to (pattern, 1, 1); + cairo_pattern_mesh_line_to (pattern, 0, 1); + + cairo_pattern_mesh_set_corner_color_rgb (pattern, 0, 0, 0, 0); + cairo_pattern_mesh_set_corner_color_rgb (pattern, 1, 1, 1, 1); + cairo_pattern_mesh_set_corner_color_rgb (pattern, 2, 0, 0, 0); + cairo_pattern_mesh_set_corner_color_rgb (pattern, 3, 1, 1, 1); + + cairo_pattern_mesh_end_patch (pattern); + + cairo_pattern_mesh_begin_patch (pattern); + + /* A small 1x1 red patch, that should be rendered as a 2x2 red + * square in the center of the image */ + + offset = 0.5 / SIZE; + + cairo_pattern_mesh_move_to (pattern, 0.5 + offset, 0.5 + offset); + cairo_pattern_mesh_line_to (pattern, 0.5 + offset, 0.5 - offset); + cairo_pattern_mesh_line_to (pattern, 0.5 - offset, 0.5 - offset); + cairo_pattern_mesh_line_to (pattern, 0.5 - offset, 0.5 + offset); + + cairo_pattern_mesh_set_corner_color_rgb (pattern, 0, 1, 0, 0); + cairo_pattern_mesh_set_corner_color_rgb (pattern, 1, 1, 0, 0); + cairo_pattern_mesh_set_corner_color_rgb (pattern, 2, 1, 0, 0); + cairo_pattern_mesh_set_corner_color_rgb (pattern, 3, 1, 0, 0); + + cairo_pattern_mesh_end_patch (pattern); + + cairo_scale (cr, SIZE, SIZE); + + cairo_set_source (cr, pattern); + cairo_paint (cr); + cairo_pattern_destroy (pattern); + + return CAIRO_TEST_SUCCESS; +} + +CAIRO_TEST (mesh_pattern_accuracy, + "Paint mesh pattern", + "mesh,pattern", /* keywords */ + NULL, /* requirements */ + SIZE, SIZE, + NULL, draw) diff --git a/test/mesh-pattern-accuracy.image16.ref.png b/test/mesh-pattern-accuracy.image16.ref.png Binary files differnew file mode 100644 index 0000000..a82e4fb --- /dev/null +++ b/test/mesh-pattern-accuracy.image16.ref.png diff --git a/test/mesh-pattern-accuracy.ref.png b/test/mesh-pattern-accuracy.ref.png Binary files differnew file mode 100644 index 0000000..dfc19ff --- /dev/null +++ b/test/mesh-pattern-accuracy.ref.png diff --git a/test/mesh-pattern-conical.c b/test/mesh-pattern-conical.c new file mode 100644 index 0000000..aa3e182 --- /dev/null +++ b/test/mesh-pattern-conical.c @@ -0,0 +1,135 @@ +/* + * Copyright © 2009 Adrian Johnson + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Author: Adrian Johnson <ajohnson@redneon.com> + */ + +#include "cairo-test.h" +#include <math.h> + +#define PAT_WIDTH 100 +#define PAT_HEIGHT 100 +#define SIZE PAT_WIDTH +#define PAD 2 +#define WIDTH (PAD + SIZE + PAD) +#define HEIGHT WIDTH + + +/* + * This test is designed to paint a mesh pattern which contains 8 + * circular sectors approximating a conical gradient. + */ + +#define CENTER_X 50 +#define CENTER_Y 50 +#define RADIUS 50 + +static void +sector_patch (cairo_pattern_t *pattern, + double angle_A, + double A_r, double A_g, double A_b, + double angle_B, + double B_r, double B_g, double B_b) +{ + double r_sin_A, r_cos_A; + double r_sin_B, r_cos_B; + double h; + + r_sin_A = RADIUS * sin (angle_A); + r_cos_A = RADIUS * cos (angle_A); + r_sin_B = RADIUS * sin (angle_B); + r_cos_B = RADIUS * cos (angle_B); + + h = 4.0/3.0 * tan ((angle_B - angle_A) / 4.0); + + cairo_pattern_mesh_begin_patch (pattern); + + cairo_pattern_mesh_move_to (pattern, CENTER_X, CENTER_Y); + cairo_pattern_mesh_line_to (pattern, + CENTER_X + r_cos_A, + CENTER_Y + r_sin_A); + + cairo_pattern_mesh_curve_to (pattern, + CENTER_X + r_cos_A - h * r_sin_A, + CENTER_Y + r_sin_A + h * r_cos_A, + CENTER_X + r_cos_B + h * r_sin_B, + CENTER_Y + r_sin_B - h * r_cos_B, + CENTER_X + r_cos_B, + CENTER_Y + r_sin_B); + + cairo_pattern_mesh_set_corner_color_rgb (pattern, 0, 1, 1, 1); + cairo_pattern_mesh_set_corner_color_rgb (pattern, 1, A_r, A_g, A_b); + cairo_pattern_mesh_set_corner_color_rgb (pattern, 2, B_r, B_g, B_b); + + cairo_pattern_mesh_end_patch (pattern); +} + +static cairo_test_status_t +draw (cairo_t *cr, int width, int height) +{ + cairo_pattern_t *pattern; + + cairo_set_source_rgb (cr, 1, 1, 1); + cairo_paint (cr); + + cairo_translate (cr, PAD, PAD); + + pattern = cairo_pattern_create_mesh (); + sector_patch (pattern, + 0, 1, 0, 0, + M_PI/4, 1, 1, 0); + sector_patch (pattern, + M_PI/4, 0, 1, 0, + M_PI/2, 0, 1, 1); + sector_patch (pattern, + M_PI/2, 0, 0, 1, + 3*M_PI/4, 1, 0, 1); + sector_patch (pattern, + 3*M_PI/4, 1, 0, 0, + M_PI, 1, 1, 0); + sector_patch (pattern, + -M_PI, 1, 1, 0, + -3*M_PI/4, 0, 1, 0); + sector_patch (pattern, + -3*M_PI/4, 0, 1, 0, + -M_PI/2, 0, 1, 1); + sector_patch (pattern, + -M_PI/2, 0, 1, 1, + -M_PI/4, 0, 0, 1); + sector_patch (pattern, + -M_PI/4, 0, 0, 1, + 0, 1, 0, 0); + + cairo_set_source (cr, pattern); + cairo_paint (cr); + cairo_pattern_destroy (pattern); + + return CAIRO_TEST_SUCCESS; +} + +CAIRO_TEST (mesh_pattern_conical, + "Paint a conical pattern using a mesh pattern", + "conical,mesh,pattern", /* keywords */ + NULL, /* requirements */ + WIDTH, HEIGHT, + NULL, draw) diff --git a/test/mesh-pattern-conical.image16.ref.png b/test/mesh-pattern-conical.image16.ref.png Binary files differnew file mode 100644 index 0000000..b8f9416 --- /dev/null +++ b/test/mesh-pattern-conical.image16.ref.png diff --git a/test/mesh-pattern-conical.ref.png b/test/mesh-pattern-conical.ref.png Binary files differnew file mode 100644 index 0000000..f5dc21d --- /dev/null +++ b/test/mesh-pattern-conical.ref.png diff --git a/test/mesh-pattern-control-points.c b/test/mesh-pattern-control-points.c new file mode 100644 index 0000000..54ff850 --- /dev/null +++ b/test/mesh-pattern-control-points.c @@ -0,0 +1,114 @@ +/* + * Copyright © 2009 Adrian Johnson + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Author: Adrian Johnson <ajohnson@redneon.com> + */ + +#include "cairo-test.h" + +#define SIZE 90 +#define PAD 10 +#define WIDTH (PAD + 2 * (SIZE + PAD)) +#define HEIGHT (PAD + SIZE + PAD) + + +/* + * This test is designed to paint a two mesh patches. One with default + * control points and one with a control point at a no default + * location. The control points of both of them are drawn as squares + * to make them visible. + */ + +static cairo_test_status_t +draw (cairo_t *cr, int width, int height) +{ + cairo_pattern_t *pattern; + unsigned int i, j; + unsigned int num_patches; + double x, y; + + cairo_set_source_rgb (cr, 1, 1, 1); + cairo_paint (cr); + + cairo_translate (cr, PAD, PAD); + + pattern = cairo_pattern_create_mesh (); + cairo_pattern_mesh_begin_patch (pattern); + + cairo_pattern_mesh_move_to (pattern, 0, 0); + cairo_pattern_mesh_line_to (pattern, SIZE, 0); + cairo_pattern_mesh_line_to (pattern, SIZE, SIZE); + cairo_pattern_mesh_line_to (pattern, 0, SIZE); + + cairo_pattern_mesh_set_corner_color_rgb (pattern, 0, 1, 0, 0); + cairo_pattern_mesh_set_corner_color_rgb (pattern, 1, 0, 1, 0); + cairo_pattern_mesh_set_corner_color_rgb (pattern, 2, 0, 0, 1); + cairo_pattern_mesh_set_corner_color_rgb (pattern, 3, 1, 1, 0); + + cairo_pattern_mesh_set_control_point (pattern, 0, SIZE * .7, SIZE * .7); + cairo_pattern_mesh_set_control_point (pattern, 1, SIZE * .9, SIZE * .7); + cairo_pattern_mesh_set_control_point (pattern, 2, SIZE * .9, SIZE * .9); + cairo_pattern_mesh_set_control_point (pattern, 3, SIZE * .7, SIZE * .9); + + cairo_pattern_mesh_end_patch (pattern); + + cairo_pattern_mesh_begin_patch (pattern); + + cairo_pattern_mesh_move_to (pattern, SIZE + PAD, 0); + cairo_pattern_mesh_line_to (pattern, 2*SIZE + PAD, 0); + cairo_pattern_mesh_line_to (pattern, 2*SIZE + PAD, SIZE); + cairo_pattern_mesh_line_to (pattern, SIZE + PAD, SIZE); + + cairo_pattern_mesh_set_corner_color_rgb (pattern, 0, 1, 0, 0); + cairo_pattern_mesh_set_corner_color_rgb (pattern, 1, 0, 1, 0); + cairo_pattern_mesh_set_corner_color_rgb (pattern, 2, 0, 0, 1); + cairo_pattern_mesh_set_corner_color_rgb (pattern, 3, 1, 1, 0); + + cairo_pattern_mesh_end_patch (pattern); + + cairo_set_source (cr, pattern); + cairo_paint (cr); + + /* mark the location of the control points */ + cairo_set_source_rgb (cr, 0, 0, 0); + cairo_pattern_mesh_get_patch_count (pattern, &num_patches); + for (i = 0; i < num_patches; i++) { + for (j = 0; j < 4; j++) { + cairo_pattern_mesh_get_control_point (pattern, i, j, &x, &y); + cairo_rectangle (cr, x - 5, y - 5, 10, 10); + cairo_fill (cr); + } + } + + cairo_pattern_destroy (pattern); + + return CAIRO_TEST_SUCCESS; +} + + +CAIRO_TEST (mesh_pattern_control_points, + "Paint mesh pattern with non default control points", + "mesh,pattern", /* keywords */ + NULL, /* requirements */ + WIDTH, HEIGHT, + NULL, draw) diff --git a/test/mesh-pattern-control-points.image16.ref.png b/test/mesh-pattern-control-points.image16.ref.png Binary files differnew file mode 100644 index 0000000..b664ef9 --- /dev/null +++ b/test/mesh-pattern-control-points.image16.ref.png diff --git a/test/mesh-pattern-control-points.ref.png b/test/mesh-pattern-control-points.ref.png Binary files differnew file mode 100644 index 0000000..841fc3e --- /dev/null +++ b/test/mesh-pattern-control-points.ref.png diff --git a/test/mesh-pattern-fold.c b/test/mesh-pattern-fold.c new file mode 100644 index 0000000..586b0cd --- /dev/null +++ b/test/mesh-pattern-fold.c @@ -0,0 +1,82 @@ +/* + * Copyright © 2009 Adrian Johnson + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Author: Adrian Johnson <ajohnson@redneon.com> + */ + +#include "cairo-test.h" + +#define SIZE 100 +#define PAD 15 +#define WIDTH (5*SIZE) +#define HEIGHT (5*SIZE) + + +/* This test is designed to paint a mesh pattern which folds along + * both parameters. */ + +static cairo_test_status_t +draw (cairo_t *cr, int width, int height) +{ + cairo_pattern_t *pattern; + + cairo_test_paint_checkered (cr); + + pattern = cairo_pattern_create_mesh (); + + cairo_pattern_mesh_begin_patch (pattern); + + cairo_pattern_mesh_move_to (pattern, 1, 1); + + cairo_pattern_mesh_curve_to (pattern, 6, 0, -1, 0, 4, 1); + cairo_pattern_mesh_curve_to (pattern, 5, 6, 5, -1, 4, 4); + cairo_pattern_mesh_curve_to (pattern, -1, 3, 6, 3, 1, 4); + cairo_pattern_mesh_curve_to (pattern, 2, -1, 2, 6, 1, 1); + + cairo_pattern_mesh_set_control_point (pattern, 0, 2, 3); + cairo_pattern_mesh_set_control_point (pattern, 1, 3, 3); + cairo_pattern_mesh_set_control_point (pattern, 2, 3, 2); + cairo_pattern_mesh_set_control_point (pattern, 3, 2, 2); + + cairo_pattern_mesh_set_corner_color_rgb (pattern, 0, 1, 0, 0); + cairo_pattern_mesh_set_corner_color_rgb (pattern, 1, 0, 0, 1); + cairo_pattern_mesh_set_corner_color_rgb (pattern, 2, 0, 0, 0); + cairo_pattern_mesh_set_corner_color_rgb (pattern, 3, 0, 1, 0); + + cairo_pattern_mesh_end_patch (pattern); + + cairo_scale (cr, SIZE, SIZE); + + cairo_set_source (cr, pattern); + cairo_paint (cr); + cairo_pattern_destroy (pattern); + + return CAIRO_TEST_SUCCESS; +} + +CAIRO_TEST (mesh_pattern_fold, + "Paint a mesh pattern with complex folds", + "mesh,pattern", /* keywords */ + NULL, /* requirements */ + WIDTH, HEIGHT, + NULL, draw) diff --git a/test/mesh-pattern-fold.image16.ref.png b/test/mesh-pattern-fold.image16.ref.png Binary files differnew file mode 100644 index 0000000..4264ad2 --- /dev/null +++ b/test/mesh-pattern-fold.image16.ref.png diff --git a/test/mesh-pattern-fold.ref.png b/test/mesh-pattern-fold.ref.png Binary files differnew file mode 100644 index 0000000..6275b82 --- /dev/null +++ b/test/mesh-pattern-fold.ref.png diff --git a/test/mesh-pattern-overlap.c b/test/mesh-pattern-overlap.c new file mode 100644 index 0000000..63cf024 --- /dev/null +++ b/test/mesh-pattern-overlap.c @@ -0,0 +1,76 @@ +/* + * Copyright © 2009 Adrian Johnson + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Author: Adrian Johnson <ajohnson@redneon.com> + */ + +#include "cairo-test.h" + +#define SIZE 100 +#define PAD 15 +#define WIDTH (PAD + SIZE + PAD) +#define HEIGHT WIDTH + + +/* This test is designed to paint a mesh pattern with a simple + * fold. */ + +static cairo_test_status_t +draw (cairo_t *cr, int width, int height) +{ + cairo_pattern_t *pattern; + + cairo_test_paint_checkered (cr); + + cairo_translate (cr, PAD, PAD); + + pattern = cairo_pattern_create_mesh (); + + cairo_pattern_mesh_begin_patch (pattern); + + cairo_pattern_mesh_move_to (pattern, 0, 0); + cairo_pattern_mesh_curve_to (pattern, 30, -30, 60, 30, 100, 0); + cairo_pattern_mesh_curve_to (pattern, 130, 140, 60, -40, 100, 100); + cairo_pattern_mesh_curve_to (pattern, 60, 70, 30, 130, 0, 100); + cairo_pattern_mesh_curve_to (pattern, -30, -40, 30, 140, 0, 0); + + cairo_pattern_mesh_set_corner_color_rgb (pattern, 0, 1, 0, 0); + cairo_pattern_mesh_set_corner_color_rgb (pattern, 1, 0, 1, 0); + cairo_pattern_mesh_set_corner_color_rgb (pattern, 2, 0, 0, 1); + cairo_pattern_mesh_set_corner_color_rgb (pattern, 3, 1, 1, 0); + + cairo_pattern_mesh_end_patch (pattern); + + cairo_set_source (cr, pattern); + cairo_paint (cr); + cairo_pattern_destroy (pattern); + + return CAIRO_TEST_SUCCESS; +} + +CAIRO_TEST (mesh_pattern_overlap, + "Paint a mesh pattern with a simple fold", + "mesh,pattern", /* keywords */ + NULL, /* requirements */ + WIDTH, HEIGHT, + NULL, draw) diff --git a/test/mesh-pattern-overlap.image16.ref.png b/test/mesh-pattern-overlap.image16.ref.png Binary files differnew file mode 100644 index 0000000..a67f7dd --- /dev/null +++ b/test/mesh-pattern-overlap.image16.ref.png diff --git a/test/mesh-pattern-overlap.ref.png b/test/mesh-pattern-overlap.ref.png Binary files differnew file mode 100644 index 0000000..1394c9e --- /dev/null +++ b/test/mesh-pattern-overlap.ref.png diff --git a/test/mesh-pattern-transformed.c b/test/mesh-pattern-transformed.c new file mode 100644 index 0000000..278e4a8 --- /dev/null +++ b/test/mesh-pattern-transformed.c @@ -0,0 +1,107 @@ +/* + * Copyright © 2009 Adrian Johnson + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Author: Adrian Johnson <ajohnson@redneon.com> + */ + +#include "cairo-test.h" + +#define PAT_WIDTH 170 +#define PAT_HEIGHT 170 +#define SIZE PAT_WIDTH +#define PAD 10 +#define WIDTH 190 +#define HEIGHT 140 + + +/* This test is designed to paint a mesh pattern containing two + * overlapping patches transformed in different ways. */ + +static cairo_test_status_t +draw (cairo_t *cr, int width, int height) +{ + cairo_pattern_t *pattern; + + cairo_test_paint_checkered (cr); + + cairo_translate (cr, PAD, PAD); + + pattern = cairo_pattern_create_mesh (); + + cairo_pattern_mesh_begin_patch (pattern); + + cairo_pattern_mesh_move_to (pattern, 0, 0); + cairo_pattern_mesh_curve_to (pattern, 30, -30, 60, 30, 100, 0); + cairo_pattern_mesh_curve_to (pattern, 60, 30, 130, 60, 100, 100); + cairo_pattern_mesh_curve_to (pattern, 60, 70, 30, 130, 0, 100); + cairo_pattern_mesh_curve_to (pattern, 30, 70, -30, 30, 0, 0); + + cairo_pattern_mesh_set_corner_color_rgb (pattern, 0, 1, 0, 0); + cairo_pattern_mesh_set_corner_color_rgb (pattern, 1, 0, 1, 0); + cairo_pattern_mesh_set_corner_color_rgb (pattern, 2, 0, 0, 1); + cairo_pattern_mesh_set_corner_color_rgb (pattern, 3, 1, 1, 0); + + cairo_pattern_mesh_end_patch (pattern); + + cairo_pattern_mesh_begin_patch (pattern); + + cairo_pattern_mesh_move_to (pattern, 50, 50); + cairo_pattern_mesh_curve_to (pattern, 80, 20, 110, 80, 150, 50); + + cairo_pattern_mesh_curve_to (pattern, 110, 80, 180, 110, 150, 150); + + cairo_pattern_mesh_curve_to (pattern, 110, 120, 80, 180, 50, 150); + + cairo_pattern_mesh_curve_to (pattern, 80, 120, 20, 80, 50, 50); + + cairo_pattern_mesh_set_corner_color_rgba (pattern, 0, 1, 0, 0, 0.3); + cairo_pattern_mesh_set_corner_color_rgb (pattern, 1, 0, 1, 0); + cairo_pattern_mesh_set_corner_color_rgba (pattern, 2, 0, 0, 1, 0.3); + cairo_pattern_mesh_set_corner_color_rgb (pattern, 3, 1, 1, 0); + + cairo_pattern_mesh_end_patch (pattern); + + cairo_scale (cr, .5, .5); + + cairo_set_source (cr, pattern); + cairo_paint (cr); + + cairo_translate (cr, PAT_WIDTH, PAT_HEIGHT); + cairo_translate (cr, PAT_WIDTH/2, PAT_HEIGHT/2); + cairo_rotate (cr, M_PI/4); + cairo_translate (cr, -PAT_WIDTH, -PAT_HEIGHT); + cairo_set_source (cr, pattern); + cairo_paint (cr); + + cairo_pattern_destroy (pattern); + + return CAIRO_TEST_SUCCESS; +} + +CAIRO_TEST (mesh_pattern_transformed, + "Paint mesh pattern with a transformation", + "mesh,pattern", /* keywords */ + NULL, /* requirements */ + WIDTH, HEIGHT, + NULL, draw) + diff --git a/test/mesh-pattern-transformed.image16.ref.png b/test/mesh-pattern-transformed.image16.ref.png Binary files differnew file mode 100644 index 0000000..0645b86 --- /dev/null +++ b/test/mesh-pattern-transformed.image16.ref.png diff --git a/test/mesh-pattern-transformed.ref.png b/test/mesh-pattern-transformed.ref.png Binary files differnew file mode 100644 index 0000000..9aa482f --- /dev/null +++ b/test/mesh-pattern-transformed.ref.png diff --git a/test/mesh-pattern.c b/test/mesh-pattern.c new file mode 100644 index 0000000..bcd49be --- /dev/null +++ b/test/mesh-pattern.c @@ -0,0 +1,94 @@ +/* + * Copyright © 2009 Adrian Johnson + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Author: Adrian Johnson <ajohnson@redneon.com> + */ + +#include "cairo-test.h" + +#define PAT_WIDTH 170 +#define PAT_HEIGHT 170 +#define SIZE PAT_WIDTH +#define PAD 2 +#define WIDTH (PAD + SIZE + PAD) +#define HEIGHT WIDTH + + +/* This test is designed to paint a mesh pattern. The mesh contains + * two overlapping patches */ + +static cairo_test_status_t +draw (cairo_t *cr, int width, int height) +{ + cairo_pattern_t *pattern; + + cairo_test_paint_checkered (cr); + + cairo_translate (cr, PAD, PAD); + cairo_translate (cr, 10, 10); + + pattern = cairo_pattern_create_mesh (); + + cairo_pattern_mesh_begin_patch (pattern); + + cairo_pattern_mesh_move_to (pattern, 0, 0); + cairo_pattern_mesh_curve_to (pattern, 30, -30, 60, 30, 100, 0); + cairo_pattern_mesh_curve_to (pattern, 60, 30, 130, 60, 100, 100); + cairo_pattern_mesh_curve_to (pattern, 60, 70, 30, 130, 0, 100); + cairo_pattern_mesh_curve_to (pattern, 30, 70, -30, 30, 0, 0); + + cairo_pattern_mesh_set_corner_color_rgb (pattern, 0, 1, 0, 0); + cairo_pattern_mesh_set_corner_color_rgb (pattern, 1, 0, 1, 0); + cairo_pattern_mesh_set_corner_color_rgb (pattern, 2, 0, 0, 1); + cairo_pattern_mesh_set_corner_color_rgb (pattern, 3, 1, 1, 0); + + cairo_pattern_mesh_end_patch (pattern); + + cairo_pattern_mesh_begin_patch (pattern); + + cairo_pattern_mesh_move_to (pattern, 50, 50); + cairo_pattern_mesh_curve_to (pattern, 80, 20, 110, 80, 150, 50); + cairo_pattern_mesh_curve_to (pattern, 110, 80, 180, 110, 150, 150); + cairo_pattern_mesh_curve_to (pattern, 110, 120, 80, 180, 50, 150); + cairo_pattern_mesh_curve_to (pattern, 80, 120, 20, 80, 50, 50); + + cairo_pattern_mesh_set_corner_color_rgba (pattern, 0, 1, 0, 0, 0.3); + cairo_pattern_mesh_set_corner_color_rgb (pattern, 1, 0, 1, 0); + cairo_pattern_mesh_set_corner_color_rgba (pattern, 2, 0, 0, 1, 0.3); + cairo_pattern_mesh_set_corner_color_rgb (pattern, 3, 1, 1, 0); + + cairo_pattern_mesh_end_patch (pattern); + + cairo_set_source (cr, pattern); + cairo_paint (cr); + cairo_pattern_destroy (pattern); + + return CAIRO_TEST_SUCCESS; +} + +CAIRO_TEST (mesh_pattern, + "Paint mesh pattern", + "mesh,pattern", /* keywords */ + NULL, /* requirements */ + WIDTH, HEIGHT, + NULL, draw) diff --git a/test/mesh-pattern.image16.ref.png b/test/mesh-pattern.image16.ref.png Binary files differnew file mode 100644 index 0000000..bd63538 --- /dev/null +++ b/test/mesh-pattern.image16.ref.png diff --git a/test/mesh-pattern.ref.png b/test/mesh-pattern.ref.png Binary files differnew file mode 100644 index 0000000..1f76639 --- /dev/null +++ b/test/mesh-pattern.ref.png diff --git a/test/operator-alpha-alpha.c b/test/operator-alpha-alpha.c index b76faf5..2cef858 100644 --- a/test/operator-alpha-alpha.c +++ b/test/operator-alpha-alpha.c @@ -93,9 +93,9 @@ subdraw (cairo_t *cr, int width, int height) cairo_surface_t *bg, *fg; bg = cairo_surface_create_similar (cairo_get_target (cr), - CAIRO_CONTENT_COLOR_ALPHA, SIZE * STEPS, SIZE * STEPS); + CAIRO_CONTENT_ALPHA, SIZE * STEPS, SIZE * STEPS); fg = cairo_surface_create_similar (cairo_get_target (cr), - CAIRO_CONTENT_COLOR_ALPHA, SIZE * STEPS, SIZE * STEPS); + CAIRO_CONTENT_ALPHA, SIZE * STEPS, SIZE * STEPS); bgcr = cairo_create (bg); fgcr = cairo_create (fg); cairo_scale (bgcr, SIZE, SIZE); diff --git a/test/operator-source.quartz.argb32.ref.png b/test/operator-source.quartz.argb32.ref.png Binary files differindex 4e15991..83d788c 100644 --- a/test/operator-source.quartz.argb32.ref.png +++ b/test/operator-source.quartz.argb32.ref.png diff --git a/test/operator-source.quartz.rgb24.ref.png b/test/operator-source.quartz.rgb24.ref.png Binary files differindex c40c242..038662f 100644 --- a/test/operator-source.quartz.rgb24.ref.png +++ b/test/operator-source.quartz.rgb24.ref.png diff --git a/test/overlapping-glyphs.quartz.argb32.ref.png b/test/overlapping-glyphs.quartz.argb32.ref.png Binary files differnew file mode 100644 index 0000000..eaa0cb9 --- /dev/null +++ b/test/overlapping-glyphs.quartz.argb32.ref.png diff --git a/test/overlapping-glyphs.quartz.rgb24.ref.png b/test/overlapping-glyphs.quartz.rgb24.ref.png Binary files differnew file mode 100644 index 0000000..c2b5fc0 --- /dev/null +++ b/test/overlapping-glyphs.quartz.rgb24.ref.png diff --git a/test/partial-clip-text.quartz.ref.png b/test/partial-clip-text.quartz.ref.png Binary files differnew file mode 100644 index 0000000..33ac283 --- /dev/null +++ b/test/partial-clip-text.quartz.ref.png diff --git a/test/pattern-get-type.c b/test/pattern-get-type.c index d2ef5bf..c807b14 100644 --- a/test/pattern-get-type.c +++ b/test/pattern-get-type.c @@ -29,7 +29,7 @@ static cairo_test_status_t preamble (cairo_test_context_t *Ctx) { cairo_surface_t *surface; - cairo_pattern_t *solid_rgb, *solid_rgba, *surface_pattern, *linear, *radial; + cairo_pattern_t *solid_rgb, *solid_rgba, *surface_pattern, *linear, *radial, *mesh; cairo_test_status_t result = CAIRO_TEST_SUCCESS; solid_rgb = cairo_pattern_create_rgb (0.0, 0.1, 0.2); @@ -40,6 +40,7 @@ preamble (cairo_test_context_t *Ctx) linear = cairo_pattern_create_linear (0.0, 0.0, 10.0, 10.0); radial = cairo_pattern_create_radial (10.0, 10.0, 0.1, 10.0, 10.0, 1.0); + mesh = cairo_pattern_create_mesh (); if (cairo_pattern_get_type (solid_rgb) != CAIRO_PATTERN_TYPE_SOLID) result = CAIRO_TEST_FAILURE; @@ -56,12 +57,16 @@ preamble (cairo_test_context_t *Ctx) if (cairo_pattern_get_type (radial) != CAIRO_PATTERN_TYPE_RADIAL) result = CAIRO_TEST_FAILURE; + if (cairo_pattern_get_type (mesh) != CAIRO_PATTERN_TYPE_MESH) + result = CAIRO_TEST_FAILURE; + cairo_pattern_destroy (solid_rgb); cairo_pattern_destroy (solid_rgba); cairo_pattern_destroy (surface_pattern); cairo_surface_destroy (surface); cairo_pattern_destroy (linear); cairo_pattern_destroy (radial); + cairo_pattern_destroy (mesh); return result; } diff --git a/test/pattern-getters.c b/test/pattern-getters.c index 657159c..2d7d904 100644 --- a/test/pattern-getters.c +++ b/test/pattern-getters.c @@ -183,6 +183,88 @@ draw (cairo_t *cr, int width, int height) cairo_pattern_destroy (pat); } + /* Test mesh getters */ + { + unsigned int count; + int i; + pat = cairo_pattern_create_mesh (); + + status = cairo_pattern_mesh_get_patch_count (pat, &count); + CHECK_SUCCESS; + + if (count != 0) { + cairo_pattern_destroy (pat); + return CAIRO_TEST_FAILURE; + } + + cairo_pattern_mesh_begin_patch (pat); + cairo_pattern_mesh_move_to (pat, 0, 0); + cairo_pattern_mesh_line_to (pat, 0, 3); + cairo_pattern_mesh_line_to (pat, 3, 3); + cairo_pattern_mesh_line_to (pat, 3, 0); + + status = cairo_pattern_mesh_get_patch_count (pat, &count); + CHECK_SUCCESS; + + if (count != 0) { + cairo_pattern_destroy (pat); + return CAIRO_TEST_FAILURE; + } + + cairo_pattern_mesh_end_patch (pat); + + status = cairo_pattern_mesh_get_patch_count (pat, &count); + CHECK_SUCCESS; + + if (count != 1) { + cairo_pattern_destroy (pat); + return CAIRO_TEST_FAILURE; + } + + for (i = 0; i < 4; i++) { + double cp_x[4] = { 1, 1, 2, 2 }; + double cp_y[4] = { 1, 2, 2, 1 }; + double x, y; + + status = cairo_pattern_mesh_get_control_point (pat, 0, i, &x, &y); + CHECK_SUCCESS; + + if (!CAIRO_TEST_DOUBLE_EQUALS(x,cp_x[i]) || + !CAIRO_TEST_DOUBLE_EQUALS(y,cp_y[i])) + { + cairo_pattern_destroy (pat); + return CAIRO_TEST_FAILURE; + } + } + + cairo_pattern_mesh_begin_patch (pat); + cairo_pattern_mesh_move_to (pat, 0, 0); + cairo_pattern_mesh_line_to (pat, 1, 0); + cairo_pattern_mesh_line_to (pat, 1, 1); + cairo_pattern_mesh_set_corner_color_rgb (pat, 0, 1, 1, 1); + cairo_pattern_mesh_end_patch (pat); + + for (i = 0; i < 4; i++) { + double corner_color[4] = { 1, 0, 0, 1 }; + double a, r, g, b; + + status = cairo_pattern_mesh_get_corner_color_rgba (pat, 1, i, + &r, &g, &b, &a); + CHECK_SUCCESS; + + if (!CAIRO_TEST_DOUBLE_EQUALS(a,corner_color[i]) || + !CAIRO_TEST_DOUBLE_EQUALS(r,corner_color[i]) || + !CAIRO_TEST_DOUBLE_EQUALS(g,corner_color[i]) || + !CAIRO_TEST_DOUBLE_EQUALS(b,corner_color[i])) + { + cairo_pattern_destroy (pat); + return CAIRO_TEST_FAILURE; + } + } + + cairo_pattern_destroy (pat); + } + cairo_set_source_rgb (cr, 0, 1, 0); cairo_paint (cr); diff --git a/test/ps-eps.c b/test/ps-eps.c index 726cb46..33802f3 100644 --- a/test/ps-eps.c +++ b/test/ps-eps.c @@ -1,6 +1,7 @@ /* * Copyright © 2006 Red Hat, Inc. * Copyright © 2009 Adrian Johnson + * Copyright © 2008 Chris Wilson * * Permission to use, copy, modify, distribute, and sell this software * and its documentation for any purpose is hereby granted without @@ -22,59 +23,342 @@ * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Author: Carl D. Worth <cworth@cworth.org> - * Author: Adrian Johnson <ajohnson@redneon.com> + * Adrian Johnson <ajohnson@redneon.com> + * Chris Wilson <chris@chris-wilson.co.uk> */ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + #include <stdio.h> +#include <stdlib.h> #include <math.h> #include <cairo.h> #include <cairo-ps.h> +#ifdef HAVE_UNISTD_H +#include <unistd.h> +#include <errno.h> +#endif +#if HAVE_SYS_STAT_H +#include <sys/stat.h> +#endif + #include "cairo-test.h" +#include "buffer-diff.h" /* Test EPS output. */ -static cairo_test_status_t -preamble (cairo_test_context_t *ctx) +#define WIDTH 595 +#define HEIGHT 842 + +/* Reference Bounding Box */ +#define LLX 95 +#define LLY 687 +#define URX 155 +#define URY 747 + +static void +_xunlink (const cairo_test_context_t *ctx, const char *pathname) { - cairo_surface_t *surface; - cairo_t *cr; + if (unlink (pathname) < 0 && errno != ENOENT) { + cairo_test_log (ctx, "Error: Cannot remove %s: %s\n", + pathname, strerror (errno)); + exit (1); + } +} + +static cairo_bool_t +check_result (cairo_test_context_t *ctx, + const cairo_boilerplate_target_t *target, + const char *test_name, + const char *base_name, + cairo_surface_t *surface) +{ + const char *format; + char *ref_name; + char *png_name; + char *diff_name; + cairo_surface_t *test_image, *ref_image, *diff_image; + buffer_diff_result_t result; cairo_status_t status; - const char *filename; + cairo_bool_t ret; - if (! (cairo_test_is_target_enabled (ctx, "ps2") || - cairo_test_is_target_enabled (ctx, "ps3"))) - { - return CAIRO_TEST_UNTESTED; + /* XXX log target, OUTPUT, REFERENCE, DIFFERENCE for index.html */ + + if (target->finish_surface != NULL) { + status = target->finish_surface (surface); + if (status) { + cairo_test_log (ctx, "Error: Failed to finish surface: %s\n", + cairo_status_to_string (status)); + cairo_surface_destroy (surface); + return FALSE; + } } - filename = "ps-eps.out.eps"; + xasprintf (&png_name, "%s.out.png", base_name); + xasprintf (&diff_name, "%s.diff.png", base_name); - surface = cairo_ps_surface_create (filename, 595, 842); - cairo_ps_surface_set_eps (surface, TRUE); - cr = cairo_create (surface); + test_image = target->get_image_surface (surface, 0, WIDTH, HEIGHT); + if (cairo_surface_status (test_image)) { + cairo_test_log (ctx, "Error: Failed to extract page: %s\n", + cairo_status_to_string (cairo_surface_status (test_image))); + cairo_surface_destroy (test_image); + free (png_name); + free (diff_name); + return FALSE; + } - cairo_new_sub_path (cr); - cairo_arc (cr, 100, 100, 25, 0, 2*M_PI); - cairo_set_line_width (cr, 10); - cairo_stroke (cr); + _xunlink (ctx, png_name); + status = cairo_surface_write_to_png (test_image, png_name); + if (status) { + cairo_test_log (ctx, "Error: Failed to write output image: %s\n", + cairo_status_to_string (status)); + cairo_surface_destroy (test_image); + free (png_name); + free (diff_name); + return FALSE; + } - cairo_show_page (cr); + format = cairo_boilerplate_content_name (target->content); + ref_name = cairo_test_reference_filename (ctx, + base_name, + test_name, + target->name, + target->basename, + format, + CAIRO_TEST_REF_SUFFIX, + CAIRO_TEST_PNG_EXTENSION); + if (ref_name == NULL) { + cairo_test_log (ctx, "Error: Cannot find reference image for %s\n", + base_name); + cairo_surface_destroy (test_image); + free (png_name); + free (diff_name); + return FALSE; + } - status = cairo_status (cr); + ref_image = cairo_test_get_reference_image (ctx, ref_name, + target->content == CAIRO_TEST_CONTENT_COLOR_ALPHA_FLATTENED); + if (cairo_surface_status (ref_image)) { + cairo_test_log (ctx, "Error: Cannot open reference image for %s: %s\n", + ref_name, + cairo_status_to_string (cairo_surface_status (ref_image))); + cairo_surface_destroy (ref_image); + cairo_surface_destroy (test_image); + free (png_name); + free (diff_name); + free (ref_name); + return FALSE; + } - cairo_destroy (cr); - cairo_surface_destroy (surface); + diff_image = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, + WIDTH, HEIGHT); + ret = TRUE; + status = image_diff (ctx, + test_image, ref_image, diff_image, + &result); + _xunlink (ctx, diff_name); if (status) { - cairo_test_log (ctx, "Failed to create ps surface for file %s: %s\n", - filename, cairo_status_to_string (status)); - return CAIRO_TEST_FAILURE; + cairo_test_log (ctx, "Error: Failed to compare images: %s\n", + cairo_status_to_string (status)); + ret = FALSE; + } else if (image_diff_is_failure (&result, target->error_tolerance)) + { + ret = FALSE; + + status = cairo_surface_write_to_png (diff_image, diff_name); + if (status) { + cairo_test_log (ctx, "Error: Failed to write differences image: %s\n", + cairo_status_to_string (status)); + } + } + + cairo_surface_destroy (test_image); + cairo_surface_destroy (diff_image); + free (png_name); + free (diff_name); + free (ref_name); + + return ret; +} + + +#define DOCUMENT_BBOX "%%BoundingBox:" +#define PAGE_BBOX "%%PageBoundingBox:" + +static cairo_bool_t +check_bbox (cairo_test_context_t *ctx, + const char *base_name) +{ + char *filename; + FILE *f; + char buf[256]; + cairo_bool_t bbox_pass, page_bbox_pass; + int llx, lly, urx, ury; + int ret; + + xasprintf (&filename, "%s.out.ps", base_name); + f = fopen (filename, "r"); + if (!f) { + cairo_test_log (ctx, "Error: Cannot open EPS output: %s\n", + base_name); + free (filename); + return FALSE; + } + + bbox_pass = FALSE; + page_bbox_pass = FALSE; + while (!feof(f)) { + fgets (buf, sizeof(buf), f); + + if (strncmp (buf, DOCUMENT_BBOX, strlen (DOCUMENT_BBOX)) == 0) { + ret = sscanf (buf+strlen (DOCUMENT_BBOX), "%d %d %d %d", &llx, &lly, &urx, &ury); + if (ret == 4 && llx == LLX && lly == LLY && urx == URX && ury == URY) + bbox_pass = TRUE; + } + + if (strncmp (buf, PAGE_BBOX, strlen (PAGE_BBOX)) == 0) { + ret = sscanf (buf+strlen (PAGE_BBOX), "%d %d %d %d", &llx, &lly, &urx, &ury); + if (ret == 4 && llx == LLX && lly == LLY && urx == URX && ury == URY) + page_bbox_pass = TRUE; + } + } + fclose (f); + + if (!bbox_pass || !page_bbox_pass) { + cairo_test_log (ctx, "Error: EPS Bounding Box does not match reference Bounding Box\n"); + return FALSE; + } + + free (filename); + + return TRUE; +} + +static cairo_bool_t +_cairo_test_mkdir (const char *path) +{ +#if ! HAVE_MKDIR + return FALSE; +#elif HAVE_MKDIR == 1 + if (mkdir (path) == 0) + return TRUE; +#elif HAVE_MKDIR == 2 + if (mkdir (path, 0770) == 0) + return TRUE; +#else +#error Bad value for HAVE_MKDIR +#endif + + return errno == EEXIST; +} + +static cairo_test_status_t +preamble (cairo_test_context_t *ctx) +{ + cairo_t *cr; + cairo_test_status_t ret = CAIRO_TEST_UNTESTED; + const char *path = _cairo_test_mkdir (CAIRO_TEST_OUTPUT_DIR) ? CAIRO_TEST_OUTPUT_DIR : "."; + unsigned int i; + + for (i = 0; i < ctx->num_targets; i++) { + const cairo_boilerplate_target_t *target = ctx->targets_to_test[i]; + cairo_surface_t *surface = NULL; + char *base_name; + void *closure; + const char *format; + cairo_status_t status; + cairo_bool_t pass; + char *test_name; + + if (! cairo_test_is_target_enabled (ctx, target->name)) + continue; + + format = cairo_boilerplate_content_name (target->content); + xasprintf (&test_name, "ps-eps"); + xasprintf (&base_name, "%s/ps-eps.%s.%s", + path, target->name, format); + + surface = (target->create_surface) (base_name, + target->content, + WIDTH, HEIGHT, + WIDTH, HEIGHT, + CAIRO_BOILERPLATE_MODE_TEST, + 0, + &closure); + + if (surface == NULL) { + free (base_name); + free (test_name); + continue; + } + + cairo_ps_surface_set_eps (surface, TRUE); + if (!cairo_ps_surface_get_eps (surface)) { + cairo_surface_destroy (surface); + if (target->cleanup) + target->cleanup (closure); + + free (base_name); + free (test_name); + continue; + } + + cairo_test_log (ctx, + "Testing ps-eps with %s target\n", + target->name); + printf ("%s:\t", base_name); + fflush (stdout); + + cairo_surface_set_device_offset (surface, 25, 25); + cr = cairo_create (surface); + + cairo_new_sub_path (cr); + cairo_arc (cr, 100, 100, 25, 0, 2*M_PI); + cairo_set_line_width (cr, 10); + cairo_stroke (cr); + + cairo_show_page (cr); + + status = cairo_status (cr); + cairo_destroy (cr); + + if (status) { + cairo_test_log (ctx, "Error: Failed to create target surface: %s\n", + cairo_status_to_string (status)); + pass = FALSE; + } else { + pass = TRUE; + /* extract the image and compare it to our reference */ + if (! check_result (ctx, target, test_name, base_name, surface)) + pass = FALSE; + + /* check the bounding box of the EPS file and compare it to our reference */ + if (! check_bbox (ctx, base_name)) + pass = FALSE; + } + cairo_surface_destroy (surface); + if (target->cleanup) + target->cleanup (closure); + + free (base_name); + free (test_name); + + if (pass) { + printf ("PASS\n"); + ret = CAIRO_TEST_SUCCESS; + } else { + printf ("FAIL\n"); + ret = CAIRO_TEST_FAILURE; + } + fflush (stdout); } - printf ("ps-eps: Please check that %s looks/prints the same as ps-eps.ref.eps.\n", filename); - return CAIRO_TEST_SUCCESS; + return ret; } CAIRO_TEST (ps_eps, diff --git a/test/ps-eps.ref.png b/test/ps-eps.ref.png Binary files differnew file mode 100644 index 0000000..9aadb08 --- /dev/null +++ b/test/ps-eps.ref.png diff --git a/test/pthread-same-source.quartz.xfail.png b/test/pthread-same-source.quartz.xfail.png Binary files differindex cc0998f..ffed619 100644 --- a/test/pthread-same-source.quartz.xfail.png +++ b/test/pthread-same-source.quartz.xfail.png diff --git a/test/pthread-show-text.quartz.ref.png b/test/pthread-show-text.quartz.ref.png Binary files differindex 9b6d774..cc9bb25 100644 --- a/test/pthread-show-text.quartz.ref.png +++ b/test/pthread-show-text.quartz.ref.png diff --git a/test/push-group-color.ps2.ref.png b/test/push-group-color.ps2.ref.png Binary files differnew file mode 100644 index 0000000..daf827e --- /dev/null +++ b/test/push-group-color.ps2.ref.png diff --git a/test/radial-gradient-extend.ps3.ref.png b/test/radial-gradient-extend.ps3.ref.png Binary files differnew file mode 100644 index 0000000..e84041e --- /dev/null +++ b/test/radial-gradient-extend.ps3.ref.png diff --git a/test/radial-gradient-mask-source.argb32.ref.png b/test/radial-gradient-mask-source.argb32.ref.png Binary files differindex e01459d..2bf65b3 100644 --- a/test/radial-gradient-mask-source.argb32.ref.png +++ b/test/radial-gradient-mask-source.argb32.ref.png diff --git a/test/radial-gradient-mask-source.c b/test/radial-gradient-mask-source.c deleted file mode 100644 index 27b5270..0000000 --- a/test/radial-gradient-mask-source.c +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright © 2005, 2007 Red Hat, Inc. - * - * Permission is hereby granted, free of charge, to any person - * obtaining a copy of this software and associated documentation - * files (the "Software"), to deal in the Software without - * restriction, including without limitation the rights to use, copy, - * modify, merge, publish, distribute, sublicense, and/or sell copies - * of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS - * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * Author: Carl D. Worth <cworth@cworth.org> - */ - -#include "cairo-test.h" - -#define NUM_GRADIENTS 4 -#define NUM_EXTEND 4 -#define SIZE 60 -#define WIDTH (SIZE * NUM_GRADIENTS * NUM_GRADIENTS) -#define HEIGHT (SIZE * NUM_EXTEND) - -static void -draw_gradient (cairo_t *cr, - int x, - int y, - int size, - double r1_offset, - double r1_radius, - double r2_offset, - double r2_radius, - cairo_extend_t extend) -{ - cairo_pattern_t *pattern; - - cairo_save (cr); - - pattern = cairo_pattern_create_radial (x + size/2.0 + r1_offset, - y + size/2.0 + r1_offset, - r1_radius, - x + size/2.0 + r2_offset, - y + size/2.0 + r2_offset, - r2_radius); - cairo_pattern_add_color_stop_rgba (pattern, 0.0, - 1.0, 0.0, 0.0, 1.0); - cairo_pattern_add_color_stop_rgba (pattern, sqrt (1.0 / 2.0), - 0.0, 1.0, 0.0, 0.0); - cairo_pattern_add_color_stop_rgba (pattern, 1.0, - 0.0, 0.0, 1.0, 0.5); - cairo_pattern_set_extend (pattern, extend); - - cairo_rectangle (cr, x, y, size, size); - cairo_clip (cr); - - cairo_set_source_rgb (cr, 1, 0, 1); - cairo_mask (cr, pattern); - - cairo_pattern_destroy (pattern); - - cairo_restore (cr); -} - -static cairo_test_status_t -draw (cairo_t *cr, int width, int height) -{ - int i, j, k; - cairo_extend_t extend[NUM_EXTEND] = { - CAIRO_EXTEND_NONE, - CAIRO_EXTEND_REPEAT, - CAIRO_EXTEND_REFLECT, - CAIRO_EXTEND_PAD - }; - - cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE); - for (j = 0; j < NUM_EXTEND; j++) { - for (i = 0; i < NUM_GRADIENTS; i++) { - double r1_offset = i % 2 ? SIZE / 12.0 : 0.0; - double r1_radius = i >= NUM_GRADIENTS / 2 ? SIZE / 6.0 : 0.0; - for (k = 0; k < NUM_GRADIENTS; k++) { - double r2_offset = k % 2 ? SIZE / 12.0 : 0.0; - double r2_radius = k >= NUM_GRADIENTS / 2 ? SIZE / 3.0 : SIZE / 12.; - draw_gradient (cr, - i * SIZE * NUM_GRADIENTS + k * SIZE, j * SIZE, SIZE, - r1_offset, r1_radius, - r2_offset, r2_radius, - extend[j]); - } - } - } - - return CAIRO_TEST_SUCCESS; -} - -CAIRO_TEST (radial_gradient_mask_source, - "Simple test of radial gradients using a MASK with a SOURCE operator", - "gradient,mask,source", /* keywords */ - NULL, /* requirements */ - WIDTH, HEIGHT, - NULL, draw) diff --git a/test/radial-gradient-mask-source.image16.ref.png b/test/radial-gradient-mask-source.image16.ref.png Binary files differindex 7c9072a..edb93a9 100644 --- a/test/radial-gradient-mask-source.image16.ref.png +++ b/test/radial-gradient-mask-source.image16.ref.png diff --git a/test/radial-gradient-mask-source.quartz.argb32.ref.png b/test/radial-gradient-mask-source.quartz.argb32.ref.png Binary files differnew file mode 100644 index 0000000..5f734f6 --- /dev/null +++ b/test/radial-gradient-mask-source.quartz.argb32.ref.png diff --git a/test/radial-gradient-mask-source.quartz.rgb24.ref.png b/test/radial-gradient-mask-source.quartz.rgb24.ref.png Binary files differnew file mode 100644 index 0000000..4ae71f7 --- /dev/null +++ b/test/radial-gradient-mask-source.quartz.rgb24.ref.png diff --git a/test/radial-gradient-mask-source.rgb24.ref.png b/test/radial-gradient-mask-source.rgb24.ref.png Binary files differindex 55959ab..5533519 100644 --- a/test/radial-gradient-mask-source.rgb24.ref.png +++ b/test/radial-gradient-mask-source.rgb24.ref.png diff --git a/test/radial-gradient-mask-source.xlib.argb32.ref.png b/test/radial-gradient-mask-source.xlib.argb32.ref.png Binary files differnew file mode 100644 index 0000000..1c901c9 --- /dev/null +++ b/test/radial-gradient-mask-source.xlib.argb32.ref.png diff --git a/test/radial-gradient-mask-source.xlib.rgb24.ref.png b/test/radial-gradient-mask-source.xlib.rgb24.ref.png Binary files differnew file mode 100644 index 0000000..e50fe8f --- /dev/null +++ b/test/radial-gradient-mask-source.xlib.rgb24.ref.png diff --git a/test/radial-gradient-mask.argb32.ref.png b/test/radial-gradient-mask.argb32.ref.png Binary files differdeleted file mode 100644 index e01459d..0000000 --- a/test/radial-gradient-mask.argb32.ref.png +++ /dev/null diff --git a/test/radial-gradient-mask.c b/test/radial-gradient-mask.c deleted file mode 100644 index ba03a12..0000000 --- a/test/radial-gradient-mask.c +++ /dev/null @@ -1,110 +0,0 @@ -/* - * Copyright © 2005, 2007 Red Hat, Inc. - * - * Permission is hereby granted, free of charge, to any person - * obtaining a copy of this software and associated documentation - * files (the "Software"), to deal in the Software without - * restriction, including without limitation the rights to use, copy, - * modify, merge, publish, distribute, sublicense, and/or sell copies - * of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS - * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * Author: Carl D. Worth <cworth@cworth.org> - */ - -#include "cairo-test.h" - -#define NUM_GRADIENTS 4 -#define NUM_EXTEND 4 -#define SIZE 60 -#define WIDTH (SIZE * NUM_GRADIENTS * NUM_GRADIENTS) -#define HEIGHT (SIZE * NUM_EXTEND) - -static void -draw_gradient (cairo_t *cr, - int x, - int y, - int size, - double r1_offset, - double r1_radius, - double r2_offset, - double r2_radius, - cairo_extend_t extend) -{ - cairo_pattern_t *pattern; - - cairo_save (cr); - - pattern = cairo_pattern_create_radial (x + size/2.0 + r1_offset, - y + size/2.0 + r1_offset, - r1_radius, - x + size/2.0 + r2_offset, - y + size/2.0 + r2_offset, - r2_radius); - cairo_pattern_add_color_stop_rgba (pattern, 0.0, - 1.0, 0.0, 0.0, 1.0); - cairo_pattern_add_color_stop_rgba (pattern, sqrt (1.0 / 2.0), - 0.0, 1.0, 0.0, 0.0); - cairo_pattern_add_color_stop_rgba (pattern, 1.0, - 0.0, 0.0, 1.0, 0.5); - cairo_pattern_set_extend (pattern, extend); - - cairo_rectangle (cr, x, y, size, size); - cairo_clip (cr); - - cairo_set_source_rgb (cr, 1, 0, 1); - cairo_mask (cr, pattern); - - cairo_pattern_destroy (pattern); - - cairo_restore (cr); -} - -static cairo_test_status_t -draw (cairo_t *cr, int width, int height) -{ - int i, j, k; - cairo_extend_t extend[NUM_EXTEND] = { - CAIRO_EXTEND_NONE, - CAIRO_EXTEND_REPEAT, - CAIRO_EXTEND_REFLECT, - CAIRO_EXTEND_PAD - }; - - for (j = 0; j < NUM_EXTEND; j++) { - for (i = 0; i < NUM_GRADIENTS; i++) { - double r1_offset = i % 2 ? SIZE / 12.0 : 0.0; - double r1_radius = i >= NUM_GRADIENTS / 2 ? SIZE / 6.0 : 0.0; - for (k = 0; k < NUM_GRADIENTS; k++) { - double r2_offset = k % 2 ? SIZE / 12.0 : 0.0; - double r2_radius = k >= NUM_GRADIENTS / 2 ? SIZE / 3.0 : SIZE / 12.; - draw_gradient (cr, - i * SIZE * NUM_GRADIENTS + k * SIZE, j * SIZE, SIZE, - r1_offset, r1_radius, - r2_offset, r2_radius, - extend[j]); - } - } - } - - return CAIRO_TEST_SUCCESS; -} - -CAIRO_TEST (radial_gradient_mask, - "Simple test of radial gradients using a MASK", - "gradient,mask", /* keywords */ - NULL, /* requirements */ - WIDTH, HEIGHT, - NULL, draw) diff --git a/test/radial-gradient-mask.image16.ref.png b/test/radial-gradient-mask.image16.ref.png Binary files differindex 7c9072a..78712ca 100644 --- a/test/radial-gradient-mask.image16.ref.png +++ b/test/radial-gradient-mask.image16.ref.png diff --git a/test/radial-gradient-mask.quartz.ref.png b/test/radial-gradient-mask.quartz.ref.png Binary files differnew file mode 100644 index 0000000..c1bd506 --- /dev/null +++ b/test/radial-gradient-mask.quartz.ref.png diff --git a/test/radial-gradient-mask.ref.png b/test/radial-gradient-mask.ref.png Binary files differnew file mode 100644 index 0000000..4db39aa --- /dev/null +++ b/test/radial-gradient-mask.ref.png diff --git a/test/radial-gradient-mask.rgb24.ref.png b/test/radial-gradient-mask.rgb24.ref.png Binary files differdeleted file mode 100644 index 55959ab..0000000 --- a/test/radial-gradient-mask.rgb24.ref.png +++ /dev/null diff --git a/test/radial-gradient-one-stop.argb32.ref.png b/test/radial-gradient-one-stop.argb32.ref.png Binary files differdeleted file mode 100644 index bdc64dc..0000000 --- a/test/radial-gradient-one-stop.argb32.ref.png +++ /dev/null diff --git a/test/radial-gradient-one-stop.c b/test/radial-gradient-one-stop.c deleted file mode 100644 index 552de23..0000000 --- a/test/radial-gradient-one-stop.c +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright © 2005, 2007 Red Hat, Inc. - * - * Permission is hereby granted, free of charge, to any person - * obtaining a copy of this software and associated documentation - * files (the "Software"), to deal in the Software without - * restriction, including without limitation the rights to use, copy, - * modify, merge, publish, distribute, sublicense, and/or sell copies - * of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS - * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * Author: Carl D. Worth <cworth@cworth.org> - */ - -#include "cairo-test.h" - -#define NUM_GRADIENTS 4 -#define NUM_EXTEND 4 -#define SIZE 60 -#define WIDTH (SIZE * NUM_GRADIENTS * NUM_GRADIENTS) -#define HEIGHT (SIZE * NUM_EXTEND) - -static void -draw_gradient (cairo_t *cr, - int x, - int y, - int size, - double r1_offset, - double r1_radius, - double r2_offset, - double r2_radius, - cairo_extend_t extend) -{ - cairo_pattern_t *pattern; - - cairo_save (cr); - - pattern = cairo_pattern_create_radial (x + size/2.0 + r1_offset, - y + size/2.0 + r1_offset, - r1_radius, - x + size/2.0 + r2_offset, - y + size/2.0 + r2_offset, - r2_radius); - cairo_pattern_add_color_stop_rgb (pattern, 0.25, 1, 0, 0); - cairo_pattern_set_extend (pattern, extend); - - cairo_rectangle (cr, x, y, size, size); - cairo_clip (cr); - - cairo_set_source (cr, pattern); - cairo_paint (cr); - - cairo_pattern_destroy (pattern); - - cairo_restore (cr); -} - -static cairo_test_status_t -draw (cairo_t *cr, int width, int height) -{ - int i, j, k; - cairo_extend_t extend[NUM_EXTEND] = { - CAIRO_EXTEND_NONE, - CAIRO_EXTEND_REPEAT, - CAIRO_EXTEND_REFLECT, - CAIRO_EXTEND_PAD - }; - - cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE); - - for (j = 0; j < NUM_EXTEND; j++) { - for (i = 0; i < NUM_GRADIENTS; i++) { - double r1_offset = i % 2 ? SIZE / 12.0 : 0.0; - double r1_radius = i >= NUM_GRADIENTS / 2 ? SIZE / 6.0 : 0.0; - for (k = 0; k < NUM_GRADIENTS; k++) { - double r2_offset = k % 2 ? SIZE / 12.0 : 0.0; - double r2_radius = k >= NUM_GRADIENTS / 2 ? SIZE / 3.0 : SIZE / 12.; - draw_gradient (cr, - i * SIZE * NUM_GRADIENTS + k * SIZE, j * SIZE, SIZE, - r1_offset, r1_radius, - r2_offset, r2_radius, - extend[j]); - } - } - } - - return CAIRO_TEST_SUCCESS; -} - -CAIRO_TEST (radial_gradient_one_stop, - "Tests radial gradients with a single stop", - "gradient,radial", /* keywords */ - NULL, /* requirements */ - WIDTH, HEIGHT, - NULL, draw) diff --git a/test/radial-gradient-one-stop.quartz.ref.png b/test/radial-gradient-one-stop.quartz.ref.png Binary files differnew file mode 100644 index 0000000..da991b1 --- /dev/null +++ b/test/radial-gradient-one-stop.quartz.ref.png diff --git a/test/radial-gradient-one-stop.ref.png b/test/radial-gradient-one-stop.ref.png Binary files differnew file mode 100644 index 0000000..fb35be6 --- /dev/null +++ b/test/radial-gradient-one-stop.ref.png diff --git a/test/radial-gradient-one-stop.rgb24.ref.png b/test/radial-gradient-one-stop.rgb24.ref.png Binary files differdeleted file mode 100644 index d9f471b..0000000 --- a/test/radial-gradient-one-stop.rgb24.ref.png +++ /dev/null diff --git a/test/radial-gradient-source.argb32.ref.png b/test/radial-gradient-source.argb32.ref.png Binary files differindex 4733471..4ab4796 100644 --- a/test/radial-gradient-source.argb32.ref.png +++ b/test/radial-gradient-source.argb32.ref.png diff --git a/test/radial-gradient-source.c b/test/radial-gradient-source.c deleted file mode 100644 index b546157..0000000 --- a/test/radial-gradient-source.c +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Copyright © 2005, 2007 Red Hat, Inc. - * - * Permission is hereby granted, free of charge, to any person - * obtaining a copy of this software and associated documentation - * files (the "Software"), to deal in the Software without - * restriction, including without limitation the rights to use, copy, - * modify, merge, publish, distribute, sublicense, and/or sell copies - * of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS - * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * Author: Carl D. Worth <cworth@cworth.org> - */ - -/* 20091017: A simple variant on radial-gradient, using the SOURCE operator - * instead as a potential bug was found in pixman under those conditions. - */ - -#include "cairo-test.h" - -#define NUM_GRADIENTS 4 -#define NUM_EXTEND 4 -#define SIZE 60 -#define WIDTH (SIZE * NUM_GRADIENTS * NUM_GRADIENTS) -#define HEIGHT (SIZE * NUM_EXTEND) - -static void -draw_gradient (cairo_t *cr, - int x, - int y, - int size, - double r1_offset, - double r1_radius, - double r2_offset, - double r2_radius, - cairo_extend_t extend) -{ - cairo_pattern_t *pattern; - - cairo_save (cr); - - pattern = cairo_pattern_create_radial (x + size/2.0 + r1_offset, - y + size/2.0 + r1_offset, - r1_radius, - x + size/2.0 + r2_offset, - y + size/2.0 + r2_offset, - r2_radius); - cairo_pattern_add_color_stop_rgba (pattern, 0.0, - 1.0, 0.0, 0.0, 1.0); - cairo_pattern_add_color_stop_rgba (pattern, sqrt (1.0 / 2.0), - 0.0, 1.0, 0.0, 0.0); - cairo_pattern_add_color_stop_rgba (pattern, 1.0, - 0.0, 0.0, 1.0, 0.5); - cairo_pattern_set_extend (pattern, extend); - - cairo_rectangle (cr, x, y, size, size); - cairo_clip (cr); - - cairo_set_source (cr, pattern); - cairo_paint (cr); - - cairo_pattern_destroy (pattern); - - cairo_restore (cr); -} - -static cairo_test_status_t -draw (cairo_t *cr, int width, int height) -{ - int i, j, k; - cairo_extend_t extend[NUM_EXTEND] = { - CAIRO_EXTEND_NONE, - CAIRO_EXTEND_REPEAT, - CAIRO_EXTEND_REFLECT, - CAIRO_EXTEND_PAD - }; - - cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE); - for (j = 0; j < NUM_EXTEND; j++) { - for (i = 0; i < NUM_GRADIENTS; i++) { - double r1_offset = i % 2 ? SIZE / 12.0 : 0.0; - double r1_radius = i >= NUM_GRADIENTS / 2 ? SIZE / 6.0 : 0.0; - for (k = 0; k < NUM_GRADIENTS; k++) { - double r2_offset = k % 2 ? SIZE / 12.0 : 0.0; - double r2_radius = k >= NUM_GRADIENTS / 2 ? SIZE / 3.0 : SIZE / 12.; - draw_gradient (cr, - i * SIZE * NUM_GRADIENTS + k * SIZE, j * SIZE, SIZE, - r1_offset, r1_radius, - r2_offset, r2_radius, - extend[j]); - } - } - } - - return CAIRO_TEST_SUCCESS; -} - -CAIRO_TEST (radial_gradient_source, - "Simple test of radial gradients using the SOURCE operator", - "gradient,source", /* keywords */ - NULL, /* requirements */ - WIDTH, HEIGHT, - NULL, draw) diff --git a/test/radial-gradient-source.image16.ref.png b/test/radial-gradient-source.image16.ref.png Binary files differindex 2a78cc5..f992b6f 100644 --- a/test/radial-gradient-source.image16.ref.png +++ b/test/radial-gradient-source.image16.ref.png diff --git a/test/radial-gradient-source.pdf.argb32.ref.png b/test/radial-gradient-source.pdf.argb32.ref.png Binary files differdeleted file mode 100644 index 7c32d81..0000000 --- a/test/radial-gradient-source.pdf.argb32.ref.png +++ /dev/null diff --git a/test/radial-gradient-source.quartz.argb32.ref.png b/test/radial-gradient-source.quartz.argb32.ref.png Binary files differnew file mode 100644 index 0000000..421c0b9 --- /dev/null +++ b/test/radial-gradient-source.quartz.argb32.ref.png diff --git a/test/radial-gradient-source.quartz.rgb24.ref.png b/test/radial-gradient-source.quartz.rgb24.ref.png Binary files differnew file mode 100644 index 0000000..22f2b90 --- /dev/null +++ b/test/radial-gradient-source.quartz.rgb24.ref.png diff --git a/test/radial-gradient-source.rgb24.ref.png b/test/radial-gradient-source.rgb24.ref.png Binary files differindex 27e9927..afaa241 100644 --- a/test/radial-gradient-source.rgb24.ref.png +++ b/test/radial-gradient-source.rgb24.ref.png diff --git a/test/radial-gradient.c b/test/radial-gradient.c index a6d145c..3ad4bb9 100644 --- a/test/radial-gradient.c +++ b/test/radial-gradient.c @@ -26,56 +26,113 @@ #include "cairo-test.h" -#define NUM_GRADIENTS 4 +#define NUM_GRADIENTS 7 #define NUM_EXTEND 4 -#define SIZE 60 -#define WIDTH (SIZE * NUM_GRADIENTS * NUM_GRADIENTS) +#define SIZE 120 +#define WIDTH (SIZE * NUM_GRADIENTS) #define HEIGHT (SIZE * NUM_EXTEND) -static void -draw_gradient (cairo_t *cr, - int x, - int y, - int size, - double r1_offset, - double r1_radius, - double r2_offset, - double r2_radius, - cairo_extend_t extend) +typedef void (*composite_t)(cairo_t *cr, cairo_pattern_t *pattern); +typedef void (*add_stops_t)(cairo_pattern_t *pattern); + +/* + * We want to test all the possible relative positions of the start + * and end circle: + * + * - The start circle can be smaller/equal/bigger than the end + * circle. A radial gradient can be classified in one of these + * three cases depending on the sign of dr. + * + * - The smaller circle can be completely inside/internally + * tangent/outside (at least in part) of the bigger circle. This + * classification is the same as the one which can be computed by + * examining the sign of a = (dx^2 + dy^2 - dr^2). + * + * - If the two circles have the same size, neither can be inside or + * internally tangent + * + * This test draws radial gradients whose circles always have the same + * centers (0, 0) and (1, 0), but with different radiuses. From left + * to right: + * + * - Small start circle completely inside the end circle + * 0.25 -> 1.75; dr = 1.5 > 0; a = 1 - 1.50^2 < 0 + * + * - Small start circle internally tangent to the end circle + * 0.50 -> 1.50; dr = 1.0 > 0; a = 1 - 1.00^2 = 0 + * + * - Small start circle outside of the end circle + * 0.50 -> 1.00; dr = 0.5 > 0; a = 1 - 0.50^2 > 0 + * + * - Start circle with the same size as the end circle + * 1.00 -> 1.00; dr = 0.0 = 0; a = 1 - 0.00^2 > 0 + * + * - Small end circle outside of the start circle + * 1.00 -> 0.50; dr = -0.5 > 0; a = 1 - 0.50^2 > 0 + * + * - Small end circle internally tangent to the start circle + * 1.50 -> 0.50; dr = -1.0 > 0; a = 1 - 1.00^2 = 0 + * + * - Small end circle completely inside the start circle + * 1.75 -> 0.25; dr = -1.5 > 0; a = 1 - 1.50^2 < 0 + * + */ + +const static double radiuses[NUM_GRADIENTS] = { + 0.25, + 0.50, + 0.50, + 1.00, + 1.00, + 1.50, + 1.75 +}; + +static cairo_pattern_t * +create_pattern (int index) { - cairo_pattern_t *pattern; - - cairo_save (cr); - - pattern = cairo_pattern_create_radial (x + size/2.0 + r1_offset, - y + size/2.0 + r1_offset, - r1_radius, - x + size/2.0 + r2_offset, - y + size/2.0 + r2_offset, - r2_radius); - cairo_pattern_add_color_stop_rgba (pattern, 0.0, - 1.0, 0.0, 0.0, 1.0); - cairo_pattern_add_color_stop_rgba (pattern, sqrt (1.0 / 2.0), - 0.0, 1.0, 0.0, 0.0); - cairo_pattern_add_color_stop_rgba (pattern, 1.0, - 0.0, 0.0, 1.0, 0.5); - cairo_pattern_set_extend (pattern, extend); - - cairo_rectangle (cr, x, y, size, size); - cairo_clip (cr); + double x0, x1, radius0, radius1, left, right, center; - cairo_set_source (cr, pattern); - cairo_paint (cr); + x0 = 0; + x1 = 1; + radius0 = radiuses[index]; + radius1 = radiuses[NUM_GRADIENTS - index - 1]; + + /* center the gradient */ + left = fmin (x0 - radius0, x1 - radius1); + right = fmax (x0 + radius0, x1 + radius1); + center = (left + right) * 0.5; + x0 -= center; + x1 -= center; - cairo_pattern_destroy (pattern); + /* scale to make it fit within a 1x1 rect centered in (0,0) */ + x0 *= 0.25; + x1 *= 0.25; + radius0 *= 0.25; + radius1 *= 0.25; - cairo_restore (cr); + return cairo_pattern_create_radial (x0, 0, radius0, x1, 0, radius1); } +static void +pattern_add_stops (cairo_pattern_t *pattern) +{ + cairo_pattern_add_color_stop_rgba (pattern, 0.0, 1, 0, 0, 0.75); + cairo_pattern_add_color_stop_rgba (pattern, sqrt (0.5), 0, 1, 0, 0); + cairo_pattern_add_color_stop_rgba (pattern, 1.0, 0, 0, 1, 1); +} + +static void +pattern_add_single_stop (cairo_pattern_t *pattern) +{ + cairo_pattern_add_color_stop_rgba (pattern, 0.25, 1, 0, 0, 1); +} + + static cairo_test_status_t -draw (cairo_t *cr, int width, int height) +draw (cairo_t *cr, add_stops_t add_stops, composite_t composite) { - int i, j, k; + int i, j; cairo_extend_t extend[NUM_EXTEND] = { CAIRO_EXTEND_NONE, CAIRO_EXTEND_REPEAT, @@ -83,30 +140,117 @@ draw (cairo_t *cr, int width, int height) CAIRO_EXTEND_PAD }; - cairo_test_paint_checkered (cr); + cairo_scale (cr, SIZE, SIZE); + cairo_translate (cr, 0.5, 0.5); for (j = 0; j < NUM_EXTEND; j++) { + cairo_save (cr); for (i = 0; i < NUM_GRADIENTS; i++) { - double r1_offset = i % 2 ? SIZE / 12.0 : 0.0; - double r1_radius = i >= NUM_GRADIENTS / 2 ? SIZE / 6.0 : 0.0; - for (k = 0; k < NUM_GRADIENTS; k++) { - double r2_offset = k % 2 ? SIZE / 12.0 : 0.0; - double r2_radius = k >= NUM_GRADIENTS / 2 ? SIZE / 3.0 : SIZE / 12.; - draw_gradient (cr, - i * SIZE * NUM_GRADIENTS + k * SIZE, j * SIZE, SIZE, - r1_offset, r1_radius, - r2_offset, r2_radius, - extend[j]); - } + cairo_pattern_t *pattern; + + pattern = create_pattern (i); + add_stops (pattern); + cairo_pattern_set_extend (pattern, extend[j]); + + cairo_save (cr); + cairo_rectangle (cr, -0.5, -0.5, 1, 1); + cairo_clip (cr); + composite (cr, pattern); + cairo_restore (cr); + cairo_pattern_destroy (pattern); + + cairo_translate (cr, 1, 0); } + cairo_restore (cr); + cairo_translate (cr, 0, 1); } return CAIRO_TEST_SUCCESS; } + +static void +composite_simple (cairo_t *cr, cairo_pattern_t *pattern) +{ + cairo_set_source (cr, pattern); + cairo_paint (cr); +} + +static void +composite_mask (cairo_t *cr, cairo_pattern_t *pattern) +{ + cairo_set_source_rgb (cr, 1, 0, 1); + cairo_mask (cr, pattern); +} + + +static cairo_test_status_t +draw_simple (cairo_t *cr, int width, int height) +{ + cairo_test_paint_checkered (cr); + return draw (cr, pattern_add_stops, composite_simple); +} + +static cairo_test_status_t +draw_mask (cairo_t *cr, int width, int height) +{ + cairo_test_paint_checkered (cr); + return draw (cr, pattern_add_stops, composite_mask); +} + +static cairo_test_status_t +draw_source (cairo_t *cr, int width, int height) +{ + cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE); + return draw (cr, pattern_add_stops, composite_simple); +} + + +static cairo_test_status_t +draw_mask_source (cairo_t *cr, int width, int height) +{ + cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE); + return draw (cr, pattern_add_stops, composite_mask); +} + +static cairo_test_status_t +draw_one_stop (cairo_t *cr, int width, int height) +{ + cairo_test_paint_checkered (cr); + return draw (cr, pattern_add_single_stop, composite_simple); +} + CAIRO_TEST (radial_gradient, "Simple test of radial gradients", "gradient", /* keywords */ NULL, /* requirements */ WIDTH, HEIGHT, - NULL, draw) + NULL, draw_simple) + +CAIRO_TEST (radial_gradient_mask, + "Simple test of radial gradients using a MASK", + "gradient,mask", /* keywords */ + NULL, /* requirements */ + WIDTH, HEIGHT, + NULL, draw_mask) + +CAIRO_TEST (radial_gradient_source, + "Simple test of radial gradients using the SOURCE operator", + "gradient,source", /* keywords */ + NULL, /* requirements */ + WIDTH, HEIGHT, + NULL, draw_source) + +CAIRO_TEST (radial_gradient_mask_source, + "Simple test of radial gradients using a MASK with a SOURCE operator", + "gradient,mask,source", /* keywords */ + NULL, /* requirements */ + WIDTH, HEIGHT, + NULL, draw_mask_source) + +CAIRO_TEST (radial_gradient_one_stop, + "Tests radial gradients with a single stop", + "gradient,radial", /* keywords */ + NULL, /* requirements */ + WIDTH, HEIGHT, + NULL, draw_one_stop) diff --git a/test/radial-gradient.image16.ref.png b/test/radial-gradient.image16.ref.png Binary files differindex 76a57fc..91202d3 100644 --- a/test/radial-gradient.image16.ref.png +++ b/test/radial-gradient.image16.ref.png diff --git a/test/radial-gradient.pdf.ref.png b/test/radial-gradient.pdf.ref.png Binary files differdeleted file mode 100644 index 1c288b4..0000000 --- a/test/radial-gradient.pdf.ref.png +++ /dev/null diff --git a/test/radial-gradient.quartz.ref.png b/test/radial-gradient.quartz.ref.png Binary files differnew file mode 100644 index 0000000..f01c6eb --- /dev/null +++ b/test/radial-gradient.quartz.ref.png diff --git a/test/radial-gradient.ref.png b/test/radial-gradient.ref.png Binary files differindex bec83b7..a2cbbc8 100644 --- a/test/radial-gradient.ref.png +++ b/test/radial-gradient.ref.png diff --git a/test/radial-gradient.svg.xfail.png b/test/radial-gradient.svg.xfail.png Binary files differdeleted file mode 100644 index ab54a3d..0000000 --- a/test/radial-gradient.svg.xfail.png +++ /dev/null diff --git a/test/rotate-image-surface-paint.quartz.ref.png b/test/rotate-image-surface-paint.quartz.ref.png Binary files differindex 1b317f9..a716b63 100644 --- a/test/rotate-image-surface-paint.quartz.ref.png +++ b/test/rotate-image-surface-paint.quartz.ref.png diff --git a/test/scale-offset-image.quartz.ref.png b/test/scale-offset-image.quartz.ref.png Binary files differindex 3d8e71a..f7a5e72 100644 --- a/test/scale-offset-image.quartz.ref.png +++ b/test/scale-offset-image.quartz.ref.png diff --git a/test/scale-offset-similar.quartz.ref.png b/test/scale-offset-similar.quartz.ref.png Binary files differindex 3d8e71a..f7a5e72 100644 --- a/test/scale-offset-similar.quartz.ref.png +++ b/test/scale-offset-similar.quartz.ref.png diff --git a/test/smask-mask.quartz.ref.png b/test/smask-mask.quartz.ref.png Binary files differindex 97359b4..98ba299 100644 --- a/test/smask-mask.quartz.ref.png +++ b/test/smask-mask.quartz.ref.png diff --git a/test/smask-paint.quartz.ref.png b/test/smask-paint.quartz.ref.png Binary files differindex 1d56558..4ee25fd 100644 --- a/test/smask-paint.quartz.ref.png +++ b/test/smask-paint.quartz.ref.png diff --git a/test/smask.quartz.ref.png b/test/smask.quartz.ref.png Binary files differindex b8dd1af..f9ab00f 100644 --- a/test/smask.quartz.ref.png +++ b/test/smask.quartz.ref.png diff --git a/test/surface-pattern-operator.quartz.argb32.ref.png b/test/surface-pattern-operator.quartz.argb32.ref.png Binary files differnew file mode 100644 index 0000000..5e934b2 --- /dev/null +++ b/test/surface-pattern-operator.quartz.argb32.ref.png diff --git a/test/surface-pattern-operator.quartz.argb32.xfail.png b/test/surface-pattern-operator.quartz.argb32.xfail.png Binary files differdeleted file mode 100644 index eb6e890..0000000 --- a/test/surface-pattern-operator.quartz.argb32.xfail.png +++ /dev/null diff --git a/test/surface-pattern-operator.quartz.rgb24.ref.png b/test/surface-pattern-operator.quartz.rgb24.ref.png Binary files differnew file mode 100644 index 0000000..30408c1 --- /dev/null +++ b/test/surface-pattern-operator.quartz.rgb24.ref.png diff --git a/test/surface-pattern-operator.quartz.rgb24.xfail.png b/test/surface-pattern-operator.quartz.rgb24.xfail.png Binary files differdeleted file mode 100644 index 6275a48..0000000 --- a/test/surface-pattern-operator.quartz.rgb24.xfail.png +++ /dev/null diff --git a/test/testtable.js b/test/testtable.js new file mode 100644 index 0000000..f51b0fd --- /dev/null +++ b/test/testtable.js @@ -0,0 +1,426 @@ +/* configuration */ +/* TODO: UNTESTED count can't be shown because it's not tracked explicitly */ +headerResults = [ "PASS", "NEW", "FAIL", "XFAIL", "CRASHED" ]; +logResults = [ "PASS", "NEW", "FAIL", "XFAIL", "CRASH!" ]; +resultToImgs = { + "PASS" : [], + "NEW" : [ "output" ], + "FAIL" : [ "output", "difference", "reference" ], + "XFAIL" : [], + "UNTESTED" : [], + "CRASHED" : [] +}; + +resultToString = { + "PASS" : "", + "NEW" : "", + "FAIL" : "", + "XFAIL" : "", + "UNTESTED" : "", + "CRASHED" : "CRASHED!" +}; + +resultField = "result"; +rowFields = [ "test", "offset", "similar" ]; +colFields = [ "target", "format" ]; +allFields = [ resultField ].concat (rowFields, colFields); + + +/* globals: */ +function resetGlobals () { + dragElement = undefined; + table = document.getElementById ("testTable"); + while (table.rows.length) + table.deleteRow (0); + colsArray = [ "HrowHeader" ]; + colsMap = undefined; + headerId = "HcolHeader"; + + fTrue = function (x) { return true; }; + + empty = new Row (); + header = new Row (); + header[colsArray[0]].toString = function () { return ""; }; + + untested = new Test (); + untested[resultField] = "UNTESTED"; +} + + +/* utility functions */ +function normalizeKey (key) { return key.toLowerCase ().replace (/[^a-z0-9]/, ""); } +function isVisible (x) { return x.style.display != "none"; } + +function link (html, url) { return "<a href='" + url + "'>" + html + "</a>"; } +function image (url) { return "<img src='" + url + "'>"; } +function span (html, id, cls) { return "<span id='" + id + "' class='" + cls + "' onmousedown='startDrag (event)' onmouseup='mouseUp (event)'>" + html + "</span>"; } + +function fieldsToHTML (bColumns, values) { + var fields = bColumns ? colFields : rowFields; + var prefix = bColumns ? "c" : "r"; + var tmpRE = arrayApply (function (x) { return "[^/]*"; }, fields); + var r = Array (); + for (var i = 0; i < fields.length; i++) + if (fields[i] == "test") { + r.push (link (values[fields[i]], values[fields[i]] + ".log")); + } else { + tmpRE[i] = values[fields[i]]; + r.push (span (values[fields[i]], prefix + "/" + tmpRE.join ("/") + "/", fields[i])); + tmpRE[i] = "[^/]*"; + } + return r.join ("/"); +} + +function inArray (value, array) { + for (var i = 0; i < array.length; i++) + if (value == array[i]) + return true; + return false; +} + +function arrayApply (fun, array) { + var r = new Array (); + for (var i = 0; i < array.length; i++) + r.push (fun(array[i])); + return r; +} + +function arrayPred (pred, array) { + var r = new Array (); + for (var i = 0; i < array.length; i++) + if (pred (array[i])) + r.push (array[i]); + return r; +} + +function arrayMap (map, array) { return arrayApply (function (x) { return map[x]; }, array); } + +function binSearch (rows, newId){ + var min = 0; + var max = rows.length; + + while (max - min > 1) { + var mid = (max + min) >> 1; + if (rows[mid].id > newId) + max = mid; + else + min = mid; + } + + if (max == min) + return max; + else + return rows[min].id > newId ? min : max; +} + +/* dynamic table utils */ +function updateCurrent () { + for (var i = 0; i < table.rows.length; i++) { + var row = table.rows[i]; + if (isVisible (row)) { + /* j starts from 1 because we want to ignore _rowHeader */ + for (var j = 1; j < row.cells.length; j++) + if (row.id[0] == "H") + for (var k = 0; k < headerResults.length; k++) + header[row.cells[j].id].current[headerResults[k]] = 0; + else if (isVisible (row.cells[j])) + header[row.cells[j].id].current[row.cells[j].className]++; + } + } + + updateHeader (); +} + +function setVisible (array, subsetPred, visibilityPred, visibleFlag) { + var modified = false, somethingVisible = false; + for (var i = 0; i < array.length; i++) + if (array[i].id[0] != "H") { + if (subsetPred (array[i])) { + var wanted = visibilityPred (array[i]); + if (isVisible (array[i]) != wanted) { + modified = true; + array[i].style.display = wanted ? visibleFlag : "none"; + } + } + somethingVisible = somethingVisible || isVisible (array[i]); + } + return modified && somethingVisible; +} + +function setVisibleOnly (array, pred, visibleFlag) { + return setVisible (array, fTrue, pred, visibleFlag); +} + +function flipVisible (array, subsetPred, visibleFlag) { + return setVisible (array, subsetPred, function (x) { return !isVisible (x); }, visibleFlag); +} + + +/* event handling */ +function ignoreEvent (event) { + if (event.preventDefault) + event.preventDefault(); + else + event.returnValue= false; + return false; +} + +function mouseUp (event) { + var visFun; + if (event.button == 0) + visFun = setVisibleOnly; + else if (event.button == 2) + visFun = flipVisible; + else + return false; + + var structureFun; + if (event.target.id[0] == "r") /* rows */ + structureFun = function (f, p) { return f (table.rows, p, "table-row"); }; + else if (event.target.id[0] == "c") /* cols */ + structureFun = function (f, p) { return inArray (true, arrayApply (function (row) { return f (row.cells, p, "table-cell") }, table.rows)) }; + else + return false; + + var pred; + if (event.target.id[1] == "/") { /* regexp */ + var re = new RegExp (event.target.id); + pred = function (x) { return re.test (x.id); }; + } else if (event.target.id[1] == "#") { /* counters */ + var s = event.target.id.substr (2).split ("/"); + pred = function (row) { return row.cells[s[0]].className == s[1]; } + } else + return false; + + if (!structureFun (visFun, pred)) + if (!structureFun (flipVisible, fTrue)) + structureFun (flipVisible, fTrue); + + updateCurrent (); + + return false; +} + +function noDrag (event) { + dragElement = undefined; + return false; +} + +function startDrag (event) { + if (event.button == 0) + dragElement = event.target; + else + dragElement = undefined; + return false; +} + +function endDrag (event) { + if (!dragElement) + return false; + + if (event.currentTarget.id == colsArray[0] && + inArray (dragElement.className, colFields)) { + rowFields.push (dragElement.className); + colFields = arrayPred (function (x) { return x != dragElement.className; }, colFields); + } else if (event.currentTarget.id == headerId && + inArray (dragElement.className, rowFields)) { + colFields.push (dragElement.className); + rowFields = arrayPred (function (x) { return x != dragElement.className; }, rowFields); + } else + return true; + + reloadAll (); + return false; +} + + +/* table content */ +function Row (id, t) { + this[colsArray[0]] = new RowHeader (id, t); + + this.get = function (c) { return this[c] != undefined ? this[c] : untested; } + this.getHTML = function (c) { return this.get(c).toString (); }; + this.setStyle = function (c, element) { return this.get(c).setStyle (element); }; +} + +function ColumnHeader (id, values) { + this.id = id; + this.values = values; + this.total = new Object (); + this.current = new Object (); + + for (var i = 0; i < headerResults.length; i++) { + this.total[headerResults[i]] = 0; + this.current[headerResults[i]] = 0; + } + + this.toString = function () { + var counts = new Array (); + for (var i = 0; i < headerResults.length; i++) { + var hr = headerResults[i]; + var s = span (this.current[hr], "r#" + colsMap[this.id] + "/" + hr, hr); + if (this.current[hr] != this.total[hr]) + s += span ("[" + this.total[hr] + "]", "r#" + colsMap[this.id] + "/" + hr, hr); + counts.push (s); + } + + return fieldsToHTML (true, this.values) + "<br>" + counts.join ("/"); + } + + this.setStyle = function (element) { }; +} + +function RowHeader (id, values) { + this.id = id; + this.values = values; + this.toString = function () { return fieldsToHTML (false, this.values); } + this.setStyle = function (element) { element.onmouseup = endDrag; }; +} + +function Test () { + this.rowId = function () { return "r/" + arrayMap (this, rowFields).join("/") + "/"; }; + this.colId = function () { return "c/" + arrayMap (this, colFields).join("/") + "/"; }; + this.isComplete = function () { return !inArray (undefined, arrayMap (this, allFields)); } + this.toString = function () { + var images = arrayMap (this, resultToImgs[this[resultField]]); + images = arrayPred (function (x) { return x != undefined; }, images); + images = arrayApply (function (x) { return link (image (x), x); }, images); + images.push (resultToString[this[resultField]]); + return images.join (" "); + }; + + this.setStyle = function (element) { element.className = this[resultField]; }; + + this.addData = function (array) { + for (var i = 0; i < array.length - 1; i += 2) + this[normalizeKey (array[i])] = array[i+1]; + }; +} + + +/* table creation */ +function insertCell (domRow, nid, tests) { + var domCell = domRow.insertCell (nid); + domCell.id = colsArray[nid]; + domCell.innerHTML = tests.getHTML (colsArray[nid]); + tests.setStyle (colsArray[nid], domCell); +} + +function updateRow (row, tests) { + var domRow = document.getElementById (row); + if (!domRow) { + domRow = table.insertRow (binSearch (table.rows, row)); + domRow.id = row; + } + + for (var i = 0; i < colsArray.length; i++) + if (i >= domRow.cells.length || domRow.cells[i].id != colsArray[i]) + insertCell (domRow, i, tests); +} + +function updateHeader () { + var visibility; + var domRow = document.getElementById (headerId); + if (domRow) { + visibility = new Object (); + for (var i = 0; i < domRow.cells.length; i++) + visibility[domRow.cells[i].id] = domRow.cells[i].style.display; + table.deleteRow (domRow.rowIndex); + } + + updateRow (headerId, header); + table.rows[0].onmouseup = endDrag; + + if (visibility) + for (var i = 0; i < colsArray.length; i++) + if (visibility[colsArray[i]]) + table.rows[0].cells[colsMap[colsArray[i]]].style.display = visibility[colsArray[i]]; +} + +function updateTable () { + colsArray.sort (); + + colsMap = new Object (); + for (var i = 0; i < colsArray.length; i++) + colsMap[colsArray[i]] = i; + + updateHeader (); + for (var i = 0; i < table.rows.length; i++) + updateRow (table.rows[i].id, empty); +} + + +/* log file parsing */ +function parseTest (testData) { + var colsChanged = false; + var rows = new Array (); + var data = new Object (); + var t = new Test (); + var lines = testData.split ("\n"); + for (var i = 0; i < lines.length; i++) { + t.addData (lines[i].split (" ")); + if (t.isComplete ()) { + var c = t.colId (); + if (header[c] == undefined) { + colsArray.push (c); + header[c] = new ColumnHeader (c, t); + colsChanged = true; + } + + var r = t.rowId (); + if (!data[r]) { + rows.push (r); + data[r] = new Row (r, t); + } + + data[r][c] = t; + header[c].total[t[resultField]]++; + header[c].current[t[resultField]]++; + t = new Test (); + } + } + + if (colsChanged) + updateTable (); + else + updateHeader (); + + for (var i = 0; i < rows.length; i++) + updateRow (rows[i], data[rows[i]]); +} + +function parseFile (fileName, parser) { + var req = new XMLHttpRequest (); + req.onreadystatechange = function () { + if (req.readyState == 4) + parser (req.responseText); + } + + try { + req.open ("GET", fileName); + req.send (null); + } catch (e) {} +} + +function parseTestList (listData) { + var summaryRE = /\d+ Passed, \d+ Failed \x5b\d+ crashed, \d+ expected\x5d, \d+ Skipped/; + var lines = listData.split ("\n"); + for (var i = 0; i < lines.length; i++) { + if (summaryRE.test (lines[i])) + return; + + var words = lines[i].split (" "); + if (words.length >= 2 && + words[0][words[0].length-1] == ":" && + inArray (words[1], logResults)) + parseFile (words[0].substr (0, words[0].length-1) + ".log", parseTest); + } +} + +function reloadAll() { + resetGlobals (); + + parseFile ("cairo-test-suite.log", parseTestList); +} + +window.onload = reloadAll;
\ No newline at end of file diff --git a/test/trap-clip.quartz.argb32.ref.png b/test/trap-clip.quartz.argb32.ref.png Binary files differindex 8ad99ce..e045ea4 100644 --- a/test/trap-clip.quartz.argb32.ref.png +++ b/test/trap-clip.quartz.argb32.ref.png diff --git a/test/trap-clip.quartz.rgb24.ref.png b/test/trap-clip.quartz.rgb24.ref.png Binary files differindex 110ac6e..1044d86 100644 --- a/test/trap-clip.quartz.rgb24.ref.png +++ b/test/trap-clip.quartz.rgb24.ref.png diff --git a/test/unbounded-operator.quartz.argb32.ref.png b/test/unbounded-operator.quartz.argb32.ref.png Binary files differnew file mode 100644 index 0000000..b2e9916 --- /dev/null +++ b/test/unbounded-operator.quartz.argb32.ref.png diff --git a/test/unbounded-operator.quartz.rgb24.ref.png b/test/unbounded-operator.quartz.rgb24.ref.png Binary files differnew file mode 100644 index 0000000..ea41dc8 --- /dev/null +++ b/test/unbounded-operator.quartz.rgb24.ref.png diff --git a/test/white-in-noop.c b/test/white-in-noop.c new file mode 100644 index 0000000..e6a93e8 --- /dev/null +++ b/test/white-in-noop.c @@ -0,0 +1,52 @@ +/* -*- Mode: c; c-basic-offset: 4; indent-tabs-mode: t; tab-width: 8; -*- */ +/* + * Copyright 2011 Andrea Canciani + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Author: Andrea Canciani <ranma42@gmail.com> + */ + +#include "cairo-test.h" + +#define HEIGHT 4 +#define WIDTH 4 + +static cairo_test_status_t +draw (cairo_t *cr, int width, int height) +{ + cairo_set_source_rgb (cr, 0, 0, 0); + cairo_paint (cr); + + cairo_set_operator (cr, CAIRO_OPERATOR_IN); + + cairo_set_source_rgb (cr, 1, 1, 1); + cairo_paint (cr); + + return CAIRO_TEST_SUCCESS; +} + +CAIRO_TEST (white_in_noop, + "Test an invalid optimization of the IN operator with white sources", + "operator", /* keywords */ + NULL, /* requirements */ + WIDTH, HEIGHT, + NULL, draw) diff --git a/test/white-in-noop.ref.png b/test/white-in-noop.ref.png Binary files differnew file mode 100644 index 0000000..f42bb8d --- /dev/null +++ b/test/white-in-noop.ref.png diff --git a/test/xcb-stress-cache.c b/test/xcb-stress-cache.c new file mode 100644 index 0000000..3c7ee15 --- /dev/null +++ b/test/xcb-stress-cache.c @@ -0,0 +1,118 @@ +/* + * Copyright © 2011 Uli Schlachter + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, copy, + * modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Author: Uli Schlachter <psychon@znc.in> + */ + +#include "cairo-test.h" + +#define WIDTH 512 +#define HEIGHT 512 + +/* This is a random pick. This results in 512 (width) * 512 (height) * + * 2 (surfaces per run) * 4 (ARGB32) * ITERATIONS = 200 MiB of image data. */ +#define ITERATIONS 100 + +/* This tries to trigger a bug in the xcb backend where a Picture is freed to + * early. It goes something like this: + * + * - _composite_mask calls _cairo_xcb_picture_for_pattern to get a xcb_picture_t + * for the source. + * - _cairo_xcb_picture_for_pattern calls _cairo_xcb_surface_picture which calls + * _cairo_xcb_screen_store_surface_picture which adds the picture to a cache. + * - _cairo_xcb_surface_picture also attached the picture as a snapshot to + * the source surface using cairo_surface_finish as detach_func. + * - _composite_mask calls _cairo_xcb_picture_for_pattern to get a xcb_picture_t + * for the mask. + * - The resulting picture surface is added to the cache again, but the cache is + * already full, so a random cache entry is picked and removed. + * - The surface that was added before is picked and gets fed to + * _surface_cache_entry_destroy. + * - This calls _cairo_surface_detach_snapshot which causes the + * detach_func from above to be called, so the surface is finished and the + * associated picture is FreePicture'd. + * - _composite_mask now uses a Picture that was already freed. + * + * So this depends on the screen's surface cache to be full which is why we do + * all this looping. + */ + +static cairo_surface_t * +create_image () +{ + cairo_surface_t *surface; + cairo_t *cr; + + surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, WIDTH, HEIGHT); + /* Paint something random to the image */ + cr = cairo_create (surface); + cairo_paint (cr); + cairo_set_source_rgb (cr, 0, 1, 1); + cairo_rectangle (cr, 0, 0, WIDTH/2.0, HEIGHT/2.0); + cairo_fill (cr); + cairo_set_source_rgb (cr, 1, 0, 1); + cairo_rectangle (cr, WIDTH/2.0, HEIGHT/2.0, WIDTH/2.0, HEIGHT/2.0); + cairo_fill (cr); + cairo_destroy (cr); + + return surface; +} + +static cairo_surface_t * +dirty_cache (cairo_t *cr) +{ + cairo_surface_t *surface; + + /* Set a source surface... */ + surface = create_image (); + cairo_set_source_surface (cr, surface, 0, 0); + cairo_surface_destroy (surface); + /* ...and create a mask surface, so that we can hit the early FreePicture */ + surface = create_image (); + cairo_mask_surface (cr, surface, 0, 0); + + return surface; +} + +static cairo_test_status_t +draw (cairo_t *cr, int width, int height) +{ + int i; + cairo_surface_t *array[ITERATIONS]; + + /* We have to keep the associated cairo_surface_t alive so that they aren't + * removed from the cache */ + for (i = 0; i < ITERATIONS; i++) + array[i] = dirty_cache (cr); + for (i = 0; i < ITERATIONS; i++) + cairo_surface_destroy (array[i]); + + return CAIRO_TEST_SUCCESS; +} + +CAIRO_TEST (xcb_stress_cache, + "Stress test for a image surface cache in cairo-xcb", + "xcb, stress", /* keywords */ + NULL, /* requirements */ + 2, 2, + NULL, draw) diff --git a/test/xcb-stress-cache.ref.png b/test/xcb-stress-cache.ref.png Binary files differnew file mode 100644 index 0000000..850ce59 --- /dev/null +++ b/test/xcb-stress-cache.ref.png diff --git a/test/xcomposite-projection.quartz.ref.png b/test/xcomposite-projection.quartz.ref.png Binary files differindex c7b6f5c..0221607 100644 --- a/test/xcomposite-projection.quartz.ref.png +++ b/test/xcomposite-projection.quartz.ref.png |