summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhk57.kim <hk57.kim@samsung.com>2015-06-03 15:16:56 +0900
committerhk57.kim <hk57.kim@samsung.com>2015-06-03 15:16:56 +0900
commit4078c98a5d481778482f52d3aaf7a1777ffe6088 (patch)
treec18ae9d21e2b29c349231c5b61d742e9fca9c1d9
parentcce6a0e298fac08c588204b085e7a807fa75813d (diff)
downloadcairo-4078c98a5d481778482f52d3aaf7a1777ffe6088.tar.gz
cairo-4078c98a5d481778482f52d3aaf7a1777ffe6088.tar.bz2
cairo-4078c98a5d481778482f52d3aaf7a1777ffe6088.zip
Cairo 1.12.14
Change-Id: Ibc39e63896ec42cab29fbbbf615a46f2d58319a8 Signed-off-by: hk57.kim <hk57.kim@samsung.com>
-rwxr-xr-xAUTHORS111
-rwxr-xr-xBIBLIOGRAPHY109
-rwxr-xr-xBUGS85
-rwxr-xr-xCODING_STYLE291
-rwxr-xr-xCOPYING33
-rwxr-xr-xCOPYING-LGPL-2.1510
-rwxr-xr-xCOPYING-MPL-1.1470
-rwxr-xr-xHACKING186
-rwxr-xr-xINSTALL184
-rwxr-xr-xKNOWN_ISSUES10
-rwxr-xr-xMakefile.am86
-rwxr-xr-xMakefile.win3224
-rwxr-xr-xNEWS7030
-rwxr-xr-xPORTING_GUIDE265
-rwxr-xr-xREADME194
-rwxr-xr-xREADME.win3266
-rwxr-xr-xRELEASING140
-rwxr-xr-xacinclude.m455
-rwxr-xr-xautogen.sh31
-rwxr-xr-xboilerplate/.gitignore24
-rwxr-xr-xboilerplate/Makefile.am76
-rwxr-xr-xboilerplate/Makefile.sources43
-rwxr-xr-xboilerplate/Makefile.win3224
-rwxr-xr-xboilerplate/Makefile.win32.features586
-rwxr-xr-xboilerplate/README14
-rwxr-xr-xboilerplate/cairo-boilerplate-beos.cpp273
-rwxr-xr-xboilerplate/cairo-boilerplate-cogl.c206
-rwxr-xr-xboilerplate/cairo-boilerplate-directfb.c235
-rwxr-xr-xboilerplate/cairo-boilerplate-drm.c106
-rwxr-xr-xboilerplate/cairo-boilerplate-egl.c184
-rwxr-xr-xboilerplate/cairo-boilerplate-evas-gl.c143
-rwxr-xr-xboilerplate/cairo-boilerplate-getopt.c247
-rwxr-xr-xboilerplate/cairo-boilerplate-getopt.h63
-rwxr-xr-xboilerplate/cairo-boilerplate-glx.c454
-rwxr-xr-xboilerplate/cairo-boilerplate-pdf.c280
-rwxr-xr-xboilerplate/cairo-boilerplate-private.h53
-rwxr-xr-xboilerplate/cairo-boilerplate-ps.c369
-rwxr-xr-xboilerplate/cairo-boilerplate-qt.cpp114
-rwxr-xr-xboilerplate/cairo-boilerplate-quartz.c76
-rwxr-xr-xboilerplate/cairo-boilerplate-scaled-font.h34
-rwxr-xr-xboilerplate/cairo-boilerplate-script.c141
-rwxr-xr-xboilerplate/cairo-boilerplate-skia.c55
-rwxr-xr-xboilerplate/cairo-boilerplate-svg.c344
-rwxr-xr-xboilerplate/cairo-boilerplate-system.c166
-rwxr-xr-xboilerplate/cairo-boilerplate-system.h59
-rwxr-xr-xboilerplate/cairo-boilerplate-test-surfaces.c462
-rwxr-xr-xboilerplate/cairo-boilerplate-tg.c81
-rwxr-xr-xboilerplate/cairo-boilerplate-vg.c363
-rwxr-xr-xboilerplate/cairo-boilerplate-wgl.c239
-rwxr-xr-xboilerplate/cairo-boilerplate-win32-printing.c407
-rwxr-xr-xboilerplate/cairo-boilerplate-win32.c77
-rwxr-xr-xboilerplate/cairo-boilerplate-xcb.c876
-rwxr-xr-xboilerplate/cairo-boilerplate-xlib.c632
-rwxr-xr-xboilerplate/cairo-boilerplate-xlib.h33
-rwxr-xr-xboilerplate/cairo-boilerplate.c989
-rwxr-xr-xboilerplate/cairo-boilerplate.h243
-rwxr-xr-xboilerplate/check-link.c24
-rwxr-xr-xboilerplate/make-cairo-boilerplate-constructors.sh29
-rwxr-xr-xbuild/.gitignore12
-rwxr-xr-xbuild/Makefile.am.analysis37
-rwxr-xr-xbuild/Makefile.am.changelog82
-rwxr-xr-xbuild/Makefile.am.common14
-rwxr-xr-xbuild/Makefile.am.gtk-doc190
-rwxr-xr-xbuild/Makefile.am.releasing194
-rwxr-xr-xbuild/Makefile.win32.common63
-rwxr-xr-xbuild/Makefile.win32.features47
-rwxr-xr-xbuild/Makefile.win32.features-h148
-rwxr-xr-xbuild/Makefile.win32.inform13
-rwxr-xr-xbuild/aclocal.cairo.m4216
-rwxr-xr-xbuild/aclocal.compare.m4162
-rwxr-xr-xbuild/aclocal.enable.m4409
-rwxr-xr-xbuild/aclocal.float.m464
-rwxr-xr-xbuild/aclocal.gtk-doc.m439
-rwxr-xr-xbuild/aclocal.makefile.m4234
-rwxr-xr-xbuild/aclocal.pkg.m4157
-rwxr-xr-xbuild/configure.ac.analysis106
-rwxr-xr-xbuild/configure.ac.features430
-rwxr-xr-xbuild/configure.ac.noversion23
-rwxr-xr-xbuild/configure.ac.openmp74
-rwxr-xr-xbuild/configure.ac.pthread253
-rwxr-xr-xbuild/configure.ac.system160
-rwxr-xr-xbuild/configure.ac.tls108
-rwxr-xr-xbuild/configure.ac.tools25
-rwxr-xr-xbuild/configure.ac.version42
-rwxr-xr-xbuild/configure.ac.warnings109
-rwxr-xr-xcairo-glesv3-uninstall.pc7
-rwxr-xr-xcairo-version.h8
-rwxr-xr-xconfigure.ac929
-rwxr-xr-xdoc/.gitignore3
-rwxr-xr-xdoc/Makefile.am7
-rwxr-xr-xdoc/cairo-evas-gl_doc.h60
-rwxr-xr-xdoc/public/.gitignore19
-rwxr-xr-xdoc/public/Makefile.am64
-rwxr-xr-xdoc/public/README37
-rwxr-xr-xdoc/public/cairo-docs.xml80
-rwxr-xr-xdoc/public/cairo-overrides.txt0
-rwxr-xr-xdoc/public/cairo-sections.txt696
-rwxr-xr-xdoc/public/cairo.types0
-rwxr-xr-xdoc/public/check-doc-coverage.sh54
-rwxr-xr-xdoc/public/check-doc-syntax.sh12
-rwxr-xr-xdoc/public/language-bindings.xml745
-rwxr-xr-xpackaging/cairo.manifest5
-rwxr-xr-xpackaging/cairo.spec101
-rwxr-xr-xsrc/.gitignore33
-rwxr-xr-xsrc/Makefile.am119
-rwxr-xr-xsrc/Makefile.am.analysis35
-rwxr-xr-xsrc/Makefile.sources521
-rwxr-xr-xsrc/Makefile.win3229
-rwxr-xr-xsrc/Makefile.win32.features736
-rwxr-xr-xsrc/README69
-rwxr-xr-xsrc/cairo-analysis-surface-private.h74
-rwxr-xr-xsrc/cairo-analysis-surface.c938
-rwxr-xr-xsrc/cairo-arc-private.h61
-rwxr-xr-xsrc/cairo-arc.c308
-rwxr-xr-xsrc/cairo-array-private.h90
-rwxr-xr-xsrc/cairo-array.c528
-rwxr-xr-xsrc/cairo-atomic-private.h272
-rwxr-xr-xsrc/cairo-atomic.c106
-rwxr-xr-xsrc/cairo-backend-private.h219
-rwxr-xr-xsrc/cairo-base64-stream.c144
-rwxr-xr-xsrc/cairo-base85-stream.c131
-rwxr-xr-xsrc/cairo-bentley-ottmann-rectangular.c884
-rwxr-xr-xsrc/cairo-bentley-ottmann-rectilinear.c600
-rwxr-xr-xsrc/cairo-bentley-ottmann.c2133
-rwxr-xr-xsrc/cairo-beos-surface.cpp984
-rwxr-xr-xsrc/cairo-beos.h60
-rwxr-xr-xsrc/cairo-botor-scan-converter.c2164
-rwxr-xr-xsrc/cairo-box-inline.h121
-rwxr-xr-xsrc/cairo-boxes-intersect.c690
-rwxr-xr-xsrc/cairo-boxes-private.h123
-rwxr-xr-xsrc/cairo-boxes.c460
-rwxr-xr-xsrc/cairo-cache-private.h145
-rwxr-xr-xsrc/cairo-cache.c338
-rwxr-xr-xsrc/cairo-cff-subset.c3482
-rwxr-xr-xsrc/cairo-clip-boxes.c597
-rwxr-xr-xsrc/cairo-clip-inline.h83
-rwxr-xr-xsrc/cairo-clip-polygon.c156
-rwxr-xr-xsrc/cairo-clip-private.h201
-rwxr-xr-xsrc/cairo-clip-region.c123
-rwxr-xr-xsrc/cairo-clip-surface.c247
-rwxr-xr-xsrc/cairo-clip-tor-scan-converter.c1845
-rwxr-xr-xsrc/cairo-clip.c846
-rwxr-xr-xsrc/cairo-cogl-context-private.h52
-rwxr-xr-xsrc/cairo-cogl-context.c822
-rwxr-xr-xsrc/cairo-cogl-gradient-private.h89
-rwxr-xr-xsrc/cairo-cogl-gradient.c642
-rwxr-xr-xsrc/cairo-cogl-private.h164
-rwxr-xr-xsrc/cairo-cogl-surface.c2805
-rwxr-xr-xsrc/cairo-cogl-utils-private.h54
-rwxr-xr-xsrc/cairo-cogl-utils.c126
-rwxr-xr-xsrc/cairo-cogl.h69
-rwxr-xr-xsrc/cairo-color.c198
-rwxr-xr-xsrc/cairo-combsort-inline.h94
-rwxr-xr-xsrc/cairo-compiler-private.h246
-rwxr-xr-xsrc/cairo-composite-rectangles-private.h203
-rwxr-xr-xsrc/cairo-composite-rectangles.c731
-rwxr-xr-xsrc/cairo-compositor-private.h378
-rwxr-xr-xsrc/cairo-compositor.c391
-rwxr-xr-xsrc/cairo-contour-inline.h80
-rwxr-xr-xsrc/cairo-contour-private.h124
-rwxr-xr-xsrc/cairo-contour.c454
-rwxr-xr-xsrc/cairo-damage-private.h85
-rwxr-xr-xsrc/cairo-damage.c241
-rwxr-xr-xsrc/cairo-debug.c304
-rwxr-xr-xsrc/cairo-default-context-private.h68
-rwxr-xr-xsrc/cairo-default-context.c1552
-rwxr-xr-xsrc/cairo-deflate-stream.c156
-rwxr-xr-xsrc/cairo-deprecated.h123
-rwxr-xr-xsrc/cairo-device-private.h89
-rwxr-xr-xsrc/cairo-device.c557
-rwxr-xr-xsrc/cairo-directfb-surface.c544
-rwxr-xr-xsrc/cairo-directfb.h67
-rwxr-xr-xsrc/cairo-drm.h120
-rwxr-xr-xsrc/cairo-egl-context.c421
-rwxr-xr-xsrc/cairo-error-inline.h52
-rwxr-xr-xsrc/cairo-error-private.h123
-rwxr-xr-xsrc/cairo-error.c73
-rwxr-xr-xsrc/cairo-evas-gl-context.c438
-rwxr-xr-xsrc/cairo-evas-gl.h253
-rwxr-xr-xsrc/cairo-fallback-compositor.c185
-rwxr-xr-xsrc/cairo-features-uninstalled.pc.in7
-rwxr-xr-xsrc/cairo-features.pc.in12
-rwxr-xr-xsrc/cairo-filters-private.h57
-rwxr-xr-xsrc/cairo-filters.c85
-rwxr-xr-xsrc/cairo-fixed-private.h359
-rwxr-xr-xsrc/cairo-fixed-type-private.h75
-rwxr-xr-xsrc/cairo-fixed.c39
-rwxr-xr-xsrc/cairo-font-face-twin-data.c1072
-rwxr-xr-xsrc/cairo-font-face-twin.c758
-rwxr-xr-xsrc/cairo-font-face.c318
-rwxr-xr-xsrc/cairo-font-options.c560
-rwxr-xr-xsrc/cairo-fontconfig-private.h78
-rwxr-xr-xsrc/cairo-freed-pool-private.h139
-rwxr-xr-xsrc/cairo-freed-pool.c93
-rwxr-xr-xsrc/cairo-freelist-private.h139
-rwxr-xr-xsrc/cairo-freelist-type-private.h54
-rwxr-xr-xsrc/cairo-freelist.c191
-rwxr-xr-xsrc/cairo-ft-font.c3558
-rwxr-xr-xsrc/cairo-ft-private.h61
-rwxr-xr-xsrc/cairo-ft.h118
-rwxr-xr-xsrc/cairo-gl-composite.c1605
-rwxr-xr-xsrc/cairo-gl-device.c1092
-rwxr-xr-xsrc/cairo-gl-dispatch-private.h192
-rwxr-xr-xsrc/cairo-gl-dispatch.c296
-rwxr-xr-xsrc/cairo-gl-ext-def-private.h143
-rwxr-xr-xsrc/cairo-gl-filters.c416
-rwxr-xr-xsrc/cairo-gl-glyphs.c628
-rwxr-xr-xsrc/cairo-gl-gradient-private.h102
-rwxr-xr-xsrc/cairo-gl-gradient.c340
-rwxr-xr-xsrc/cairo-gl-hairline-stroke.c412
-rwxr-xr-xsrc/cairo-gl-info.c98
-rwxr-xr-xsrc/cairo-gl-msaa-compositor.c1284
-rwxr-xr-xsrc/cairo-gl-operand.c1500
-rwxr-xr-xsrc/cairo-gl-private.h1237
-rwxr-xr-xsrc/cairo-gl-shaders.c1453
-rwxr-xr-xsrc/cairo-gl-source.c111
-rwxr-xr-xsrc/cairo-gl-spans-compositor.c553
-rwxr-xr-xsrc/cairo-gl-surface-legacy.c603
-rwxr-xr-xsrc/cairo-gl-surface.c2142
-rwxr-xr-xsrc/cairo-gl-traps-compositor.c664
-rwxr-xr-xsrc/cairo-gl.h158
-rwxr-xr-xsrc/cairo-glx-context.c372
-rwxr-xr-xsrc/cairo-gstate-private.h415
-rwxr-xr-xsrc/cairo-gstate.c2501
-rwxr-xr-xsrc/cairo-hash-private.h87
-rwxr-xr-xsrc/cairo-hash.c578
-rwxr-xr-xsrc/cairo-hull.c235
-rwxr-xr-xsrc/cairo-image-compositor.c3277
-rwxr-xr-xsrc/cairo-image-filters-private.h56
-rwxr-xr-xsrc/cairo-image-filters.c315
-rwxr-xr-xsrc/cairo-image-info-private.h63
-rwxr-xr-xsrc/cairo-image-info.c292
-rwxr-xr-xsrc/cairo-image-mask-compositor.c408
-rwxr-xr-xsrc/cairo-image-source.c1331
-rwxr-xr-xsrc/cairo-image-surface-inline.h96
-rwxr-xr-xsrc/cairo-image-surface-private.h238
-rwxr-xr-xsrc/cairo-image-surface.c1671
-rwxr-xr-xsrc/cairo-list-inline.h209
-rwxr-xr-xsrc/cairo-list-private.h48
-rwxr-xr-xsrc/cairo-lzw.c404
-rwxr-xr-xsrc/cairo-malloc-private.h149
-rwxr-xr-xsrc/cairo-mask-compositor.c1498
-rwxr-xr-xsrc/cairo-matrix.c1203
-rwxr-xr-xsrc/cairo-mempool-private.h85
-rwxr-xr-xsrc/cairo-mempool.c368
-rwxr-xr-xsrc/cairo-mesh-pattern-rasterizer.c944
-rwxr-xr-xsrc/cairo-misc.c935
-rwxr-xr-xsrc/cairo-mono-scan-converter.c612
-rwxr-xr-xsrc/cairo-mutex-impl-private.h278
-rwxr-xr-xsrc/cairo-mutex-list-private.h83
-rwxr-xr-xsrc/cairo-mutex-private.h69
-rwxr-xr-xsrc/cairo-mutex-type-private.h194
-rwxr-xr-xsrc/cairo-mutex.c89
-rwxr-xr-xsrc/cairo-no-compositor.c107
-rwxr-xr-xsrc/cairo-observer.c52
-rwxr-xr-xsrc/cairo-os2-private.h67
-rwxr-xr-xsrc/cairo-os2-surface.c1415
-rwxr-xr-xsrc/cairo-os2.h110
-rwxr-xr-xsrc/cairo-output-stream-private.h196
-rwxr-xr-xsrc/cairo-output-stream.c774
-rwxr-xr-xsrc/cairo-paginated-private.h168
-rwxr-xr-xsrc/cairo-paginated-surface-private.h62
-rwxr-xr-xsrc/cairo-paginated-surface.c719
-rwxr-xr-xsrc/cairo-path-bounds.c295
-rwxr-xr-xsrc/cairo-path-fill.c342
-rwxr-xr-xsrc/cairo-path-fixed-private.h206
-rwxr-xr-xsrc/cairo-path-fixed.c1588
-rwxr-xr-xsrc/cairo-path-in-fill.c290
-rwxr-xr-xsrc/cairo-path-private.h57
-rwxr-xr-xsrc/cairo-path-stroke-boxes.c711
-rwxr-xr-xsrc/cairo-path-stroke-polygon.c1377
-rwxr-xr-xsrc/cairo-path-stroke-traps.c1127
-rwxr-xr-xsrc/cairo-path-stroke-tristrip.c1091
-rwxr-xr-xsrc/cairo-path-stroke.c1517
-rwxr-xr-xsrc/cairo-path.c479
-rwxr-xr-xsrc/cairo-pattern-inline.h65
-rwxr-xr-xsrc/cairo-pattern-private.h397
-rwxr-xr-xsrc/cairo-pattern.c5076
-rwxr-xr-xsrc/cairo-pdf-operators-private.h173
-rwxr-xr-xsrc/cairo-pdf-operators.c1557
-rwxr-xr-xsrc/cairo-pdf-shading-private.h100
-rwxr-xr-xsrc/cairo-pdf-shading.c284
-rwxr-xr-xsrc/cairo-pdf-surface-private.h206
-rwxr-xr-xsrc/cairo-pdf-surface.c7367
-rwxr-xr-xsrc/cairo-pdf.h94
-rwxr-xr-xsrc/cairo-pen.c475
-rwxr-xr-xsrc/cairo-png.c819
-rwxr-xr-xsrc/cairo-polygon-intersect.c1532
-rwxr-xr-xsrc/cairo-polygon-reduce.c1438
-rwxr-xr-xsrc/cairo-polygon.c608
-rwxr-xr-xsrc/cairo-private.h64
-rwxr-xr-xsrc/cairo-ps-surface-private.h104
-rwxr-xr-xsrc/cairo-ps-surface.c4660
-rwxr-xr-xsrc/cairo-ps.h116
-rwxr-xr-xsrc/cairo-qt-surface.cpp1713
-rwxr-xr-xsrc/cairo-qt.h85
-rwxr-xr-xsrc/cairo-quartz-filters.c450
-rwxr-xr-xsrc/cairo-quartz-font.c860
-rwxr-xr-xsrc/cairo-quartz-image-surface.c385
-rwxr-xr-xsrc/cairo-quartz-image.h59
-rwxr-xr-xsrc/cairo-quartz-private.h111
-rwxr-xr-xsrc/cairo-quartz-surface.c2895
-rwxr-xr-xsrc/cairo-quartz.h82
-rwxr-xr-xsrc/cairo-raster-source-pattern.c432
-rwxr-xr-xsrc/cairo-recording-surface-inline.h68
-rwxr-xr-xsrc/cairo-recording-surface-private.h187
-rwxr-xr-xsrc/cairo-recording-surface.c2085
-rwxr-xr-xsrc/cairo-rectangle.c330
-rwxr-xr-xsrc/cairo-rectangular-scan-converter.c791
-rwxr-xr-xsrc/cairo-reference-count-private.h62
-rwxr-xr-xsrc/cairo-region-private.h77
-rwxr-xr-xsrc/cairo-region.c950
-rwxr-xr-xsrc/cairo-rtree-private.h142
-rwxr-xr-xsrc/cairo-rtree.c388
-rwxr-xr-xsrc/cairo-scaled-font-private.h183
-rwxr-xr-xsrc/cairo-scaled-font-subsets-private.h720
-rwxr-xr-xsrc/cairo-scaled-font-subsets.c1259
-rwxr-xr-xsrc/cairo-scaled-font.c3187
-rwxr-xr-xsrc/cairo-script-private.h59
-rwxr-xr-xsrc/cairo-script-surface.c4024
-rwxr-xr-xsrc/cairo-script.h98
-rwxr-xr-xsrc/cairo-shape-mask-compositor.c337
-rwxr-xr-xsrc/cairo-skia-surface.cpp1175
-rwxr-xr-xsrc/cairo-skia.h66
-rwxr-xr-xsrc/cairo-slope-private.h72
-rwxr-xr-xsrc/cairo-slope.c99
-rwxr-xr-xsrc/cairo-spans-compositor-private.h111
-rwxr-xr-xsrc/cairo-spans-compositor.c1187
-rwxr-xr-xsrc/cairo-spans-private.h206
-rwxr-xr-xsrc/cairo-spans.c248
-rwxr-xr-xsrc/cairo-spline.c430
-rwxr-xr-xsrc/cairo-stroke-dash-private.h70
-rwxr-xr-xsrc/cairo-stroke-dash.c96
-rwxr-xr-xsrc/cairo-stroke-style.c354
-rwxr-xr-xsrc/cairo-surface-backend-private.h262
-rwxr-xr-xsrc/cairo-surface-clipper-private.h71
-rwxr-xr-xsrc/cairo-surface-clipper.c196
-rwxr-xr-xsrc/cairo-surface-fallback-private.h95
-rwxr-xr-xsrc/cairo-surface-fallback.c115
-rwxr-xr-xsrc/cairo-surface-inline.h60
-rwxr-xr-xsrc/cairo-surface-observer-inline.h59
-rwxr-xr-xsrc/cairo-surface-observer-private.h208
-rwxr-xr-xsrc/cairo-surface-observer.c2104
-rwxr-xr-xsrc/cairo-surface-offset-private.h95
-rwxr-xr-xsrc/cairo-surface-offset.c308
-rwxr-xr-xsrc/cairo-surface-private.h121
-rwxr-xr-xsrc/cairo-surface-scale-translate-private.h163
-rwxr-xr-xsrc/cairo-surface-scale-translate.c689
-rwxr-xr-xsrc/cairo-surface-shadow-private.h98
-rwxr-xr-xsrc/cairo-surface-shadow.c2286
-rwxr-xr-xsrc/cairo-surface-snapshot-inline.h67
-rwxr-xr-xsrc/cairo-surface-snapshot-private.h51
-rwxr-xr-xsrc/cairo-surface-snapshot.c289
-rwxr-xr-xsrc/cairo-surface-subsurface-inline.h72
-rwxr-xr-xsrc/cairo-surface-subsurface-private.h55
-rwxr-xr-xsrc/cairo-surface-subsurface.c574
-rwxr-xr-xsrc/cairo-surface-wrapper-private.h193
-rwxr-xr-xsrc/cairo-surface-wrapper.c686
-rwxr-xr-xsrc/cairo-surface.c2644
-rwxr-xr-xsrc/cairo-svg-surface-private.h74
-rwxr-xr-xsrc/cairo-svg-surface.c2876
-rwxr-xr-xsrc/cairo-svg.h84
-rwxr-xr-xsrc/cairo-tee-surface-private.h47
-rwxr-xr-xsrc/cairo-tee-surface.c602
-rwxr-xr-xsrc/cairo-tee.h66
-rwxr-xr-xsrc/cairo-tg-allocator-private.h134
-rwxr-xr-xsrc/cairo-tg-composite-extents-private.h121
-rwxr-xr-xsrc/cairo-tg-journal-private.h229
-rwxr-xr-xsrc/cairo-tg-journal.c520
-rwxr-xr-xsrc/cairo-tg-private.h57
-rwxr-xr-xsrc/cairo-tg-surface.c1372
-rwxr-xr-xsrc/cairo-tg.h70
-rwxr-xr-xsrc/cairo-thread-local-private.h161
-rwxr-xr-xsrc/cairo-time-private.h94
-rwxr-xr-xsrc/cairo-time.c225
-rwxr-xr-xsrc/cairo-tor-scan-converter.c1854
-rwxr-xr-xsrc/cairo-tor22-scan-converter.c1709
-rwxr-xr-xsrc/cairo-toy-font-face.c523
-rwxr-xr-xsrc/cairo-traps-compositor.c2403
-rwxr-xr-xsrc/cairo-traps-private.h141
-rwxr-xr-xsrc/cairo-traps.c1067
-rwxr-xr-xsrc/cairo-tristrip-private.h94
-rwxr-xr-xsrc/cairo-tristrip.c185
-rwxr-xr-xsrc/cairo-truetype-subset-private.h212
-rwxr-xr-xsrc/cairo-truetype-subset.c1668
-rwxr-xr-xsrc/cairo-type1-fallback.c907
-rwxr-xr-xsrc/cairo-type1-glyph-names.c410
-rwxr-xr-xsrc/cairo-type1-private.h51
-rwxr-xr-xsrc/cairo-type1-subset.c1825
-rwxr-xr-xsrc/cairo-type3-glyph-surface-private.h87
-rwxr-xr-xsrc/cairo-type3-glyph-surface.c573
-rwxr-xr-xsrc/cairo-types-private.h453
-rwxr-xr-xsrc/cairo-unicode.c422
-rwxr-xr-xsrc/cairo-uninstalled.pc.in8
-rwxr-xr-xsrc/cairo-user-font-private.h46
-rwxr-xr-xsrc/cairo-user-font.c831
-rwxr-xr-xsrc/cairo-version.c260
-rwxr-xr-xsrc/cairo-version.h14
-rwxr-xr-xsrc/cairo-vg-surface.c1853
-rwxr-xr-xsrc/cairo-vg.h103
-rwxr-xr-xsrc/cairo-wgl-context.c268
-rwxr-xr-xsrc/cairo-wideint-private.h338
-rwxr-xr-xsrc/cairo-wideint-type-private.h158
-rwxr-xr-xsrc/cairo-wideint.c852
-rwxr-xr-xsrc/cairo-win32.h112
-rwxr-xr-xsrc/cairo-xcb-connection-core.c314
-rwxr-xr-xsrc/cairo-xcb-connection-render.c301
-rwxr-xr-xsrc/cairo-xcb-connection-shm.c117
-rwxr-xr-xsrc/cairo-xcb-connection.c985
-rwxr-xr-xsrc/cairo-xcb-private.h770
-rwxr-xr-xsrc/cairo-xcb-screen.c364
-rwxr-xr-xsrc/cairo-xcb-shm.c337
-rwxr-xr-xsrc/cairo-xcb-surface-core.c642
-rwxr-xr-xsrc/cairo-xcb-surface-render.c5253
-rwxr-xr-xsrc/cairo-xcb-surface.c1702
-rwxr-xr-xsrc/cairo-xcb.h116
-rwxr-xr-xsrc/cairo-xlib-core-compositor.c652
-rwxr-xr-xsrc/cairo-xlib-display.c663
-rwxr-xr-xsrc/cairo-xlib-fallback-compositor.c248
-rwxr-xr-xsrc/cairo-xlib-private.h468
-rwxr-xr-xsrc/cairo-xlib-render-compositor.c2019
-rwxr-xr-xsrc/cairo-xlib-screen.c472
-rwxr-xr-xsrc/cairo-xlib-source.c1157
-rwxr-xr-xsrc/cairo-xlib-surface-private.h44
-rwxr-xr-xsrc/cairo-xlib-surface-shm.c1459
-rwxr-xr-xsrc/cairo-xlib-surface.c2382
-rwxr-xr-xsrc/cairo-xlib-visual.c191
-rwxr-xr-xsrc/cairo-xlib-xcb-surface.c844
-rwxr-xr-xsrc/cairo-xlib-xrender-private.h1169
-rwxr-xr-xsrc/cairo-xlib-xrender.h66
-rwxr-xr-xsrc/cairo-xlib.h118
-rwxr-xr-xsrc/cairo-xml-surface.c1143
-rwxr-xr-xsrc/cairo-xml.h67
-rwxr-xr-xsrc/cairo.c4127
-rwxr-xr-xsrc/cairo.h3184
-rwxr-xr-xsrc/cairo.pc.in13
-rwxr-xr-xsrc/cairoint.h2105
-rwxr-xr-xsrc/check-def.sh48
-rwxr-xr-xsrc/check-doc-syntax.awk108
-rwxr-xr-xsrc/check-doc-syntax.sh82
-rwxr-xr-xsrc/check-has-hidden-symbols.c3
-rwxr-xr-xsrc/check-headers.sh27
-rwxr-xr-xsrc/check-link.c24
-rwxr-xr-xsrc/check-plt.sh28
-rwxr-xr-xsrc/check-preprocessor-syntax.sh59
-rwxr-xr-xsrc/drm/cairo-drm-bo.c130
-rwxr-xr-xsrc/drm/cairo-drm-gallium-surface.c826
-rwxr-xr-xsrc/drm/cairo-drm-i915-glyphs.c563
-rwxr-xr-xsrc/drm/cairo-drm-i915-private.h1270
-rwxr-xr-xsrc/drm/cairo-drm-i915-shader.c2893
-rwxr-xr-xsrc/drm/cairo-drm-i915-spans.c799
-rwxr-xr-xsrc/drm/cairo-drm-i915-surface.c2942
-rwxr-xr-xsrc/drm/cairo-drm-i965-glyphs.c504
-rwxr-xr-xsrc/drm/cairo-drm-i965-private.h737
-rwxr-xr-xsrc/drm/cairo-drm-i965-shader.c2825
-rwxr-xr-xsrc/drm/cairo-drm-i965-spans.c407
-rwxr-xr-xsrc/drm/cairo-drm-i965-surface.c1927
-rwxr-xr-xsrc/drm/cairo-drm-intel-brw-defines.h824
-rwxr-xr-xsrc/drm/cairo-drm-intel-brw-eu-emit.c1089
-rwxr-xr-xsrc/drm/cairo-drm-intel-brw-eu-util.c121
-rwxr-xr-xsrc/drm/cairo-drm-intel-brw-eu.c250
-rwxr-xr-xsrc/drm/cairo-drm-intel-brw-eu.h1043
-rwxr-xr-xsrc/drm/cairo-drm-intel-brw-structs.h1328
-rwxr-xr-xsrc/drm/cairo-drm-intel-command-private.h909
-rwxr-xr-xsrc/drm/cairo-drm-intel-debug.c1209
-rwxr-xr-xsrc/drm/cairo-drm-intel-ioctl-private.h442
-rwxr-xr-xsrc/drm/cairo-drm-intel-private.h519
-rwxr-xr-xsrc/drm/cairo-drm-intel-surface.c451
-rwxr-xr-xsrc/drm/cairo-drm-intel.c1389
-rwxr-xr-xsrc/drm/cairo-drm-ioctl-private.h12
-rwxr-xr-xsrc/drm/cairo-drm-private.h238
-rwxr-xr-xsrc/drm/cairo-drm-radeon-private.h107
-rwxr-xr-xsrc/drm/cairo-drm-radeon-surface.c448
-rwxr-xr-xsrc/drm/cairo-drm-radeon.c451
-rwxr-xr-xsrc/drm/cairo-drm-surface.c369
-rwxr-xr-xsrc/drm/cairo-drm.c387
-rwxr-xr-xsrc/skia/cairo-skia-context.cpp1750
-rwxr-xr-xsrc/skia/cairo-skia-private.h110
-rwxr-xr-xsrc/skia/cairo-skia-surface.cpp324
-rwxr-xr-xsrc/test-base-compositor-surface.c824
-rwxr-xr-xsrc/test-compositor-surface-private.h56
-rwxr-xr-xsrc/test-compositor-surface.c260
-rwxr-xr-xsrc/test-compositor-surface.h71
-rwxr-xr-xsrc/test-null-compositor-surface.c482
-rwxr-xr-xsrc/test-null-compositor-surface.h60
-rwxr-xr-xsrc/test-paginated-surface.c286
-rwxr-xr-xsrc/test-paginated-surface.h48
-rwxr-xr-xsrc/win32/cairo-win32-debug.c87
-rwxr-xr-xsrc/win32/cairo-win32-device.c189
-rwxr-xr-xsrc/win32/cairo-win32-display-surface.c1071
-rwxr-xr-xsrc/win32/cairo-win32-font.c2313
-rwxr-xr-xsrc/win32/cairo-win32-gdi-compositor.c649
-rwxr-xr-xsrc/win32/cairo-win32-printing-surface.c1917
-rwxr-xr-xsrc/win32/cairo-win32-private.h226
-rwxr-xr-xsrc/win32/cairo-win32-surface.c321
-rwxr-xr-xsrc/win32/cairo-win32-system.c89
-rwxr-xr-xutil/.gitignore24
-rwxr-xr-xutil/COPYING4
-rwxr-xr-xutil/Makefile.am99
-rwxr-xr-xutil/README67
-rwxr-xr-xutil/cairo-api-update72
-rwxr-xr-xutil/cairo-gobject/Makefile.am15
-rwxr-xr-xutil/cairo-gobject/cairo-gobject-enums.c511
-rwxr-xr-xutil/cairo-gobject/cairo-gobject-structs.c87
-rwxr-xr-xutil/cairo-gobject/cairo-gobject.h188
-rwxr-xr-xutil/cairo-missing/Makefile.am10
-rwxr-xr-xutil/cairo-missing/Makefile.sources8
-rwxr-xr-xutil/cairo-missing/Makefile.win3210
-rwxr-xr-xutil/cairo-missing/cairo-missing.h59
-rwxr-xr-xutil/cairo-missing/getline.c90
-rwxr-xr-xutil/cairo-missing/strndup.c57
-rwxr-xr-xutil/cairo-script/.gitignore3
-rwxr-xr-xutil/cairo-script/COPYING17
-rwxr-xr-xutil/cairo-script/Makefile.am34
-rwxr-xr-xutil/cairo-script/Makefile.sources13
-rwxr-xr-xutil/cairo-script/Makefile.win3210
-rwxr-xr-xutil/cairo-script/cairo-script-file.c1108
-rwxr-xr-xutil/cairo-script/cairo-script-hash.c496
-rwxr-xr-xutil/cairo-script/cairo-script-interpreter.c699
-rwxr-xr-xutil/cairo-script/cairo-script-interpreter.h124
-rwxr-xr-xutil/cairo-script/cairo-script-objects.c936
-rwxr-xr-xutil/cairo-script/cairo-script-operators.c6774
-rwxr-xr-xutil/cairo-script/cairo-script-private.h994
-rwxr-xr-xutil/cairo-script/cairo-script-scanner.c1918
-rwxr-xr-xutil/cairo-script/cairo-script-stack.c196
-rwxr-xr-xutil/cairo-script/csi-bind.c76
-rwxr-xr-xutil/cairo-script/csi-exec.c41
-rwxr-xr-xutil/cairo-script/csi-replay.c360
-rwxr-xr-xutil/cairo-script/csi-trace.c40
-rwxr-xr-xutil/cairo-script/examples/Makefile.am10
-rwxr-xr-xutil/cairo-script/examples/dragon.cs48
-rwxr-xr-xutil/cairo-script/examples/hilbert.cs51
-rwxr-xr-xutil/cairo-script/examples/infinichess.cs29
-rwxr-xr-xutil/cairo-script/examples/interference.cs46
-rwxr-xr-xutil/cairo-script/examples/pythagoras-tree.cs53
-rwxr-xr-xutil/cairo-script/examples/sierpinski.cs37
-rwxr-xr-xutil/cairo-script/examples/wedgeAnnulus_crop_ybRings.cs30
-rwxr-xr-xutil/cairo-script/examples/world-map.cs209
-rwxr-xr-xutil/cairo-script/examples/zrusin.cs1333
-rwxr-xr-xutil/cairo-view113
-rwxr-xr-xutil/cairo.modules20
-rwxr-xr-xutil/font-view.c184
-rwxr-xr-xutil/malloc-stats.c367
-rwxr-xr-xutil/show-contour.c667
-rwxr-xr-xutil/show-edges.c1221
-rwxr-xr-xutil/show-events.c845
-rwxr-xr-xutil/show-polygon.c646
-rwxr-xr-xutil/show-traps.c1311
-rwxr-xr-xutil/trace-to-xml.c78
-rwxr-xr-xutil/waterfall97
-rwxr-xr-xutil/xml-to-trace.c263
-rwxr-xr-xutil/xr2cairo49
552 files changed, 297713 insertions, 0 deletions
diff --git a/AUTHORS b/AUTHORS
new file mode 100755
index 000000000..a977e73c9
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1,111 @@
+Josh Aas <joshmoz@gmail.com> Memory leak fix for quartz backend
+Daniel Amelang <dan@amelang.net> Many (magic) floating-point optimizations
+Shawn T. Amundson <amundson@gtk.org> Build fix
+Olivier Andrieu <oliv__a@users.sourceforge.net> PNG backend
+Peter Dennis Bartok <peter@novonyx.com> Bug fix for clipping
+Dave Beckett <dajobe@debian.org> Build fixes, Debian packaging
+Kai-Uwe Behrmann <ku.b@gmx.de> SVG bug fixes
+Christian Biesinger <cbiesinger@web.de> BeOS backend
+Billy Biggs <vektor@dumbterm.net> Pixman code merge. Optimization. Fixes for subtle rendering bugs.
+Hans Breuer <hans@breuer.org> win32 bug fixes, build fixes, and improvements
+Brian Cameron <brian.cameron@sun.com> Flag bug in Sun's X server
+Carlos Garcia Campos <carlosgc@gnome.org> libspectre integration into the test-suite
+Andrea Canciani <ranma42@gmail.com> Bugs, quartz backend improvements and type 6/7 patterns.
+Damien Carbery <damien.carbery@sun.com> Build fixes
+Andrew Chant <andrew.chant@utoronto.ca> Adding const where needed
+Steve Chaplin <stevech1097@yahoo.com.au> Bug fixes for PNG reading
+Tomasz Cholewo <cholewo@ieee-cis.org> Bug fixes
+Manu Cornet <manu@manucornet.net> SVG build fix
+Frederic Crozat <fcrozat@mandriva.com> Fix test suite for OPD platforms (IA64 or PPC64)
+Julien Danjou <julien@danjou.info> XCB fixes
+Radek Doulík <rodo@novell.com> Bug report and test case
+John Ehresman <jpe@wingide.com> Build fixes for win32
+John Ellson <ellson@research.att.com> First font/glyph extents functions
+Michael Emmel <mike.emmel@gmail.com> DirectFB backend
+Miklós Erdélyi <erdelyim@gmail.com> Fix typo leading to a crash
+Behdad Esfahbod <behdad@behdad.org> Huge piles of bug fixes, improvements, and general maintenance
+Larry Ewing <lewing@novell.com> Test case for group-clip
+Brian Ewins <Brian.Ewins@gmail.com> ATSUI maintenance (first success at making it really work)
+Bertram Felgenhauer <int-e@gmx.de> Fixes for subtle arithmetic errors
+Damian Frank <damian.frank@gmail.com> Build system improvements for win32
+Bdale Garbee <bdale@gag.com> Provided essential support for cairo achitecture sessions
+Jens Granseuer <jensgr@gmx.net> Fixes to generate proper compiler flags
+Laxmi Harikumar <laxmi.harikumar@digital.com> Build fix
+J. Ali Harlow <ali@avrc.city.ac.uk> win32 backend updates
+Mathias Hasselmann <mathias.hasselmann@gmx.de> Significant reduction of calls to malloc
+Richard Henderson <rth@twiddle.net> "slim" macros for better shared libraries
+James Henstridge <james@daa.com.au> Build fixes related to freetype
+Graydon Hoare <graydon@redhat.com> Support for non-render X server, first real text support
+Thomas Hunger <info@teh-web.de> Initial version of cairo_in_stroke/fill
+Thomas Jaeger <ThJaeger@gmail.com> Extended repeat modes for X
+Björn Lindqvist <bjourne@gmail.com> Performance test cases
+Kristian Høgsberg <krh@redhat.com> PDF backend, PS backend with meta-surfaces
+Amaury Jacquot <sxpert@esitcom.org> Documentation review, appplication testing
+Adrian Johnson <ajohnson@redneon.com> PDF backend improvement
+Michael Johnson <ahze@ahze.net> Bug fix for pre-C99 compilers
+Jonathon Jongsma <jonathon.jongsma@gmail.com> Fix documentation typos
+Øyvind Kolås <pippin@freedesktop.org> OpenVG backend, Bug fixes. Better default values.
+Martin Kretzschmar <martink@gnome.org> Arithmetic fix for 64-bit architectures
+Mathieu Lacage <Mathieu.Lacage@sophia.inria.fr> several bug/typo fixes
+Dominic Lachowicz <domlachowicz@gmail.com> PDF conformance fix, fix image surface to zero out contents
+Alexander Larsson <alexl@redhat.com> Profiling and performance fixes.
+Tor Lillqvist <tml@novell.com> win32 build fixes, build scripts
+Jinghua Luo <sunmoon1997@gmail.com> Add bitmap glyph transformation, many freetype and glitz fixes
+Luke-Jr <luke-jr@utopios.org> Build fix for cross-compiling
+Kjartan Maraas <kmaraas@gnome.org> Several fixes for sparse, lots of debug help for multi-thread bugs
+Nis Martensen <nis.martensen@web.de> Bug fix for sub paths
+Jordi Mas <jordi@ximian.com> Bug fix for cairo_show_text
+Nicholas Miell <nmiell@gmail.com> Fixes for linking bugs on AMD64
+Eugeniy Meshcheryakov <eugen@debian.org> PS/PDF font subsetting improvements
+Zakharov Mikhail <zmey20000@yahoo.com> Build fix for HP-UX
+Christopher (Monty) Montgomery <xiphmont@gmail.com> Performnace fix (subimage_copy), multi-thread testing
+Tim Mooney <enchanter@users.sourceforge.net> Fix test suite to compile with Solaris compiler
+Jeff Muizelaar <jeff@infidigm.net> Patient, painful, pixman code merge. Many fixes for intricacies of dashing.
+Yevgen Muntyan <muntyan@tamu.edu> win32 build fix
+Declan Naughton <piratepenguin@gmail.com> Fix documentation typos
+Peter Nilsson <c99pnn@cs.umu.se> Glitz backend
+Henning Noren <henning.noren.402@student.lu.se> Fix memory leak
+Geoff Norton <gnorton@customerdna.com> Build fixes
+Robert O'Callahan <rocallahan@novell.com> Const-correctness fixes, several new API functions for completeness (and to help mozilla)
+Ian Osgood <iano@quirkster.com> XCB backend maintenance
+Benjamin Otte <otte@gnome.org> Refinements to cairo/perf timing, OpenGL backend fixups, random fixes
+Mike Owens <etc@filespanker.com> Bug fixes
+Emmanuel Pacaud <emmanuel.pacaud@lapp.in2p3.fr> SVG backend
+Keith Packard <keithp@keithp.com> Original concept, polygon tessellation, dashing, font metrics rewrite
+Stuart Parmenter <pavlov@pavlov.net> Original GDI+ backend, win32 fixes
+Alfred Peng <alfred.peng@sun.com> Fixes for Sun compilers and for a memory leak
+Christof Petig <christof@petig-baender.de> Build fixes related to freetype
+Joonas Pihlaja <jpihlaja@cc.helsinki.fi> Huge improvements to the tessellator performance
+Mart Raudsepp <leio@dustbite.net> Build fixes
+David Reveman <davidr@novell.com> New pattern API, glitz backend
+Calum Robinson <calumr@mac.com> Quartz backend
+Pavel Roskin <proski@gnu.org> Several cleanups to eliminate warnings
+Tim Rowley <tim.rowley@gmail.com> Quartz/ATSUI fixes, X server workarounds, win32 glyph path support, test case to expose gradient regression
+Soeren Sandmann <sandmann@daimi.au.dk> Lots of MMX love for pixman compositing
+Uli Schlachter <psychon@znc.in> Some more XCB fixes
+Torsten Schönfeld <kaffeetisch@gmx.de> Build fixes
+Jamey Sharp <jamey@minilop.net> Surface/font backend virtualization, XCB backend
+Jason Dorje Short <jdorje@users.sf.net> Build fixes and bug fixes
+Jeff Smith <whydoubt@yahoo.com> Fixes for intricacies of stroking code
+Travis Spencer <tspencer@cs.pdx.edu> XCB backend fix
+Bill Spitzak <spitzak@d2.com> Build fix to find Xrender.h without xrender.pc
+Zhe Su <james.su@gmail.com> Add support for fontconfig's embeddedbitmap option
+Owen Taylor <otaylor@redhat.com> Font rewrite, documentation, win32 backend
+Pierre Tardy <tardyp@gmail.com> EGL support and testing, OpenVG backend
+Karl Tomlinson <karlt+@karlt.net> Optimisation and obscure bug fixes (mozilla)
+Alp Toker <alp@atoker.com> Fix several code/comment typos
+Malcolm Tredinnick <malcolm@commsecure.com.au> Documentation fixes
+David Turner <david@freetype.org> Optimize gradient calculations
+Kalle Vahlman <kalle.vahlman@gmail.com> Allow perf reports to be compared across different platforms
+Sasha Vasko <sasha@aftercode.net> Build fix to compile without xlib backend
+Vladimir Vukicevic <vladimir@pobox.com> Quartz backend rewrite, win32/quartz maintenance
+Jonathan Watt <jwatt@jwatt.org> win32 fixes
+Peter Weilbacher <pmw@avila.aip.de> OS/2 backend
+Dan Williams <dcbw@redhat.com> Implemnt MMX function to help OLPC
+Chris Wilson <chris@chris-wilson.co.uk> Large-scale robustness improvements, (warn_unsed_result and malloc failure injection)
+Carl Worth <cworth@isi.edu> Original library, support for paths, images
+Richard D. Worth <richard@theworths.org> Build fixes for cygwin
+Kent Worsnop <kworsnop@accesswave.ca> Fix PDF dashing bug
+Dave Yeo <daveryeo@telus.net> Build fix for win32
+
+(please let us know if we have missed anyone)
diff --git a/BIBLIOGRAPHY b/BIBLIOGRAPHY
new file mode 100755
index 000000000..90a6cef20
--- /dev/null
+++ b/BIBLIOGRAPHY
@@ -0,0 +1,109 @@
+Here's an effort to document some of the academic work that was
+referenced during the implementation of cairo. It is presented in the
+context of operations as they would be performed by either
+cairo_stroke() or cairo_fill():
+
+Given a Bézier path, approximate it with line segments:
+
+ The deCasteljau algorithm
+ "Outillages methodes calcul", P de Casteljau, technical
+ report, - Andre Citroen Automobiles SA, Paris, 1959
+
+ That technical report might be "hard" to find, but fortunately
+ this algorithm will be described in any reasonable textbook on
+ computational geometry. Two that have been recommended by
+ cairo contributors are:
+
+ "Computational Geometry, Algorithms and Applications", M. de
+ Berg, M. van Kreveld, M. Overmars, M. Schwarzkopf;
+ Springer-Verlag, ISBN: 3-540-65620-0.
+
+ "Computational Geometry in C (Second Edition)", Joseph
+ O'Rourke, Cambridge University Press, ISBN 0521640105.
+
+Then, if stroking, construct a polygonal representation of the pen
+approximating a circle (if filling skip three steps):
+
+ "Good approximation of circles by curvature-continuous Bezier
+ curves", Tor Dokken and Morten Daehlen, Computer Aided
+ Geometric Design 8 (1990) 22-41.
+
+Add points to that pen based on the initial/final path faces and take
+the convex hull:
+
+ Convex hull algorithm
+
+ [Again, see your favorite computational geometry
+ textbook. Should cite the name of the algorithm cairo uses
+ here, if it has a name.]
+
+Now, "convolve" the "tracing" of the pen with the tracing of the path:
+
+ "A Kinetic Framework for Computational Geometry", Leonidas
+ J. Guibas, Lyle Ramshaw, and Jorge Stolfi, Proceedings of the
+ 24th IEEE Annual Symposium on Foundations of Computer Science
+ (FOCS), November 1983, 100-111.
+
+The result of the convolution is a polygon that must be filled. A fill
+operations begins here. We use a very conventional Bentley-Ottmann
+pass for computing the intersections, informed by some hints on robust
+implementation courtesy of John Hobby:
+
+ John D. Hobby, Practical Segment Intersection with Finite
+ Precision Output, Computation Geometry Theory and
+ Applications, 13(4), 1999.
+
+ http://cm.bell-labs.com/who/hobby/93_2-27.pdf
+
+Hobby's primary contribution in that paper is his "tolerance square"
+algorithm for robustness against edges being "bent" due to restricting
+intersection coordinates to the grid available by finite-precision
+arithmetic. This is one algorithm we have not implemented yet.
+
+We use a data-structure called Skiplists in the our implementation
+of Bentley-Ottmann:
+
+ W. Pugh, Skip Lists: a Probabilistic Alternative to Balanced Trees,
+ Communications of the ACM, vol. 33, no. 6, pp.668-676, 1990.
+
+ http://citeseer.ist.psu.edu/pugh90skip.html
+
+The random number generator used in our skip list implementation is a
+very small generator by Hars and Petruska. The generator is based on
+an invertable function on Z_{2^32} with full period and is described
+in
+
+ Hars L. and Petruska G.,
+ ``Pseudorandom Recursions: Small and Fast Pseurodandom
+ Number Generators for Embedded Applications'',
+ Hindawi Publishing Corporation
+ EURASIP Journal on Embedded Systems
+ Volume 2007, Article ID 98417, 13 pages
+ doi:10.1155/2007/98417
+
+ http://www.hindawi.com/getarticle.aspx?doi=10.1155/2007/98417&e=cta
+
+From the result of the intersection-finding pass, we are currently
+computing a tessellation of trapezoids, (the exact manner is
+undergoing some work right now with some important speedup), but we
+may want to rasterize directly from those edges at some point.
+
+Given the set of tessellated trapezoids, we currently execute a
+straightforward, (and slow), point-sampled rasterization, (and
+currently with a near-pessimal regular 15x17 grid).
+
+We've now computed a mask which gets fed along with the source and
+destination into cairo's fundamental rendering equation. The most
+basic form of this equation is:
+
+ destination = (source IN mask) OP destination
+
+with the restriction that no part of the destination outside the
+current clip region is affected. In this equation, IN refers to the
+Porter-Duff "in" operation, while OP refers to a any user-selected
+Porter-Duff operator:
+
+ T. Porter & T. Duff, Compositing Digital Images Computer
+ Graphics Volume 18, Number 3 July 1984 pp 253-259
+
+ http://keithp.com/~keithp/porterduff/p253-porter.pdf
diff --git a/BUGS b/BUGS
new file mode 100755
index 000000000..ef044046d
--- /dev/null
+++ b/BUGS
@@ -0,0 +1,85 @@
+If you find a bug in cairo we would love to hear about it. We're also
+trying to make cairo better, and learning about the bugs that users
+encounter is an essential part of that. So we really appreciate the
+extra effort users put in to providing high-quality bug reports.
+
+There are two acceptable ways to report cairo bugs, and you can choose
+which you prefer:
+
+1) Bugzilla bug tracking database:
+
+ You can use the following web interface to report new bugs, follow
+ up on previous bug reports, and search for existing, known
+ bugs. Just use the "cairo" product:
+
+ http://bugs.freedesktop.org
+
+ It is necessary to go through a quick account creation process,
+ (with email address verification), in order to be able to report
+ new bugs in bugzilla. We apologize for any inconvenience that might
+ cause, and hope it won't prevent you from reporting bugs.
+
+2) Cairo mailing list:
+
+ For people who cannot stand the bugzilla interface, you can just
+ send an email to cairo mailing list (cairo@cairographics.org). The
+ mailing list only allows posting from subscribers, so use the
+ following page for subscription instructions:
+
+ http://cairographics.org/lists
+
+ Again, we apologize for any inconvenience this subscription step
+ might cause, but we've found it necessary to require this in order
+ to enjoy spam-free discussions on the list.
+
+ If you don't actually _want_ to be a subscriber to the mailing
+ list, but just want to be able to send a message, the easiest thing
+ to do is to go through the subscription process, and then use the
+ preferences page to disable message delivery to your address.
+
+Which of the above you use to report bugs depends on your own
+preferences. Some people find just typing an email message much easier
+than using the web-based forms on bugzilla. Others greatly prefer the
+ability to check back on a specific bug entry in bugzilla without
+having to ask on the mailing list if an issue has been resolved.
+
+Regardless of which method you use, here are some general tips that
+will help you improve the quality of your bug report, (which will help
+in getting the bug fixed sooner):
+
+1) Check to see if the bug has been reported already. It's pretty easy
+ to run a search or two against the cairo product in the
+ http://bugs.freedesktop.org bugzilla database. Another place to
+ look for known bugs is the cairo ROADMAP:
+
+ http://cairographics.org/ROADMAP
+
+ which shows a planned schedule of releases and which bug fixes are
+ being planned for each release.
+
+2) Provide an accurate description of the bug with detailed steps for
+ how we can reproduce the problem.
+
+3) If possible provide a minimal test case demonstrating the bug. A
+ great test case would be a minimal self-contained function in C or
+ python or whatever language you are using for cairo. The function
+ might accept nothing more than a cairo context, (cairo_t* in C).
+
+4) If you feel like being particularly helpful, you could craft this
+ minimal test case in the form necessary for cairo's test
+ suite. This isn't much more work than writing a minimal
+ function. Just look at the cairo/test/README file and imitate the
+ style of existing test cases.
+
+ If you do submit a test case, be sure to include Copyright
+ information, (with the standard MIT licensing blurb if you want us
+ to include your test in the test case). Also, including a reference
+ image showing the expected result will be extremely useful.
+
+5) Finally, the best bug report also comes attached with a patch to
+ cairo to fix the bug. So send this too if you have it! Otherwise,
+ don't worry about it and we'll try to fix cairo when we can.
+
+Thanks, and have fun with cairo!
+
+-Carl
diff --git a/CODING_STYLE b/CODING_STYLE
new file mode 100755
index 000000000..95ceac04d
--- /dev/null
+++ b/CODING_STYLE
@@ -0,0 +1,291 @@
+Cairo coding style.
+
+This document is intended to be a short description of the preferred
+coding style for the cairo source code. Good style requires good
+taste, which means this can't all be reduced to automated rules, and
+there are exceptions.
+
+We want the code to be easy to understand and maintain, and consistent
+style plays an important part in that, even if some of the specific
+details seem trivial. If nothing else, this document gives a place to
+put consistent answers for issues that would otherwise be arbitrary.
+
+Most of the guidelines here are demonstrated by examples, (which means
+this document is quicker to read than it might appear given its
+length). Most of the examples are positive examples that you should
+imitate. The few negative examples are clearly marked with a comment
+of /* Yuck! */. Please don't submit code to cairo that looks like any
+of these.
+
+Indentation
+-----------
+Each new level is indented 4 more spaces than the previous level:
+
+ if (condition)
+ do_something ();
+
+This may be achieved with space characters or a combination of tab
+characters and space characters. It may not be achieved with tab
+characters exclusively (see below).
+
+Tab characters
+--------------
+The tab character must always be interpreted according to its
+traditional meaning:
+
+ Advance to the next column which is a multiple of 8.
+
+With this definition, even levels of indentation can be achieved with
+a sequence of tab characters, while odd levels of indentation may
+begin with a sequence of tab character but must end with 4 space
+characters.
+
+Some programmers have been misled by certain text editors into
+thinking that 4-space indentation can be achieved with tab characters
+exclusively by changing the meaning of tab character to be "advance to
+the next column which is a multiple of 4". Code formatted in this way,
+making an assumption of a fictitious 4-character-tab will not be
+accepted into cairo.
+
+The rationale here is that tabs are used in the code for lining things
+up other than indentation, (see the Whitespace section below), and
+changing the interpretation of tab from its traditional meaning will
+break this alignment.
+
+Braces
+------
+Most of the code in cairo uses bracing in the style of K&R:
+
+ if (condition) {
+ do_this ();
+ do_that ();
+ } else {
+ do_the_other ();
+ }
+
+but some of the code uses an alternate style:
+
+ if (condition)
+ {
+ do_this ();
+ do_that ();
+ }
+ else
+ {
+ do_the_other ();
+ }
+
+and that seems just fine. We won't lay down any strict rule on this
+point, (though there should be some local consistency). If you came
+here hoping to find some guidance, then use the first form above.
+
+If all of the substatements of an if statement are single statements,
+the optional braces should not usually appear:
+
+ if (condition)
+ do_this ();
+ else
+ do_that ();
+
+But the braces are mandatory when mixing single statement and compound
+statements in the various clauses. For example, do not do this:
+
+ if (condition) {
+ do_this ();
+ do_that ();
+ } else /* Yuck! */
+ do_the_other ();
+
+And of course, there are exceptions for when the code just looks
+better with the braces:
+
+ if (condition) {
+ /* Note that we have to be careful here. */
+ do_something_dangerous (with_care);
+ }
+
+ if (condition &&
+ other_condition &&
+ yet_another)
+ {
+ do_something ();
+ }
+
+And note that this last example also shows a situation in which the
+opening brace really needs to be on its own line. The following looks awful:
+
+ if (condition &&
+ other_condition &&
+ yet_another) { /* Yuck! */
+ do_something ();
+ }
+
+As we said above, legible code that is easy to understand and maintain
+is the goal, not adherence to strict rules.
+
+Whitespace
+----------
+Separate logically distinct chunks with a single newline. This
+obviously applies between functions, but also applies within a
+function or block and can even be used to good effect within a
+structure definition:
+
+ struct _cairo_gstate {
+ cairo_operator_t op;
+
+ double tolerance;
+
+ /* stroke style */
+ double line_width;
+ cairo_line_cap_t line_cap;
+ cairo_line_join_t line_join;
+ double miter_limit;
+
+ cairo_fill_rule_t fill_rule;
+
+ double *dash;
+ int num_dashes;
+ double dash_offset;
+
+ ...
+ }
+
+Use a single space before a left parenthesis, except where the
+standard will not allow it, (eg. when defining a parameterized macro).
+
+Don't eliminate newlines just because things would still fit on one
+line. This breaks the expected visual structure of the code making it
+much harder to read and understand:
+
+ if (condition) foo (); else bar (); /* Yuck! */
+
+Do eliminate trailing whitespace (space or tab characters) on any
+line. Also, avoid putting initial or final blank lines into any file,
+and never use multiple blank lines instead of a single blank line.
+
+Do enable the default git pre-commit hook that detect trailing
+whitespace for you and help you to avoid corrupting cairo's tree with
+it. Do that as follows:
+
+ chmod a+x .git/hooks/pre-commit
+
+You might also find the git-stripspace utility helpful which acts as a
+filter to remove trailing whitespace as well as initial, final, and
+duplicate blank lines.
+
+As a special case of the bracing and whitespace guidelines, function
+definitions should always take the following form:
+
+ void
+ my_function (argument)
+ {
+ do_my_things ();
+ }
+
+And function prototypes should similarly have the return type (and
+associated specifiers and qualifiers) on a line above the function, so
+that the function name is flush left.
+
+Break up long lines (> ~80 characters) and use whitespace to align
+things nicely. For example the arguments in a long list to a function
+call should all be aligned with each other:
+
+ align_function_arguments (argument_the_first,
+ argument_the_second,
+ argument_the_third);
+
+And as a special rule, in a function prototype, (as well as in the
+definition), whitespace should be inserted between the parameter types
+and names so that the names are aligned:
+
+ void
+ align_parameter_names_in_prototypes (const char *char_star_arg,
+ int int_arg,
+ double *double_star_arg,
+ double double_arg);
+
+Note that parameters with a * prefix are aligned one character to the
+left so that the actual names are aligned.
+
+Managing nested blocks
+----------------------
+Long blocks that are deeply nested make the code very hard to
+read. Fortunately such blocks often indicate logically distinct chunks
+of functionality that are begging to be split into their own
+functions. Please listen to the blocks when they beg.
+
+In other cases, gratuitous nesting comes about because the primary
+functionality gets buried in a nested block rather than living at the
+primary level where it belongs. Consider the following:
+
+ foo = malloc (sizeof (foo_t));
+ if (foo) { /* Yuck! */
+ ...
+ /* lots of code to initialize foo */
+ ...
+ return SUCCESS;
+ }
+ return FAILURE;
+
+This kind of gratuitous nesting can be avoided by following a pattern
+of handling exceptional cases early and returning:
+
+ foo = malloc (sizeof (foo_t));
+ if (foo == NULL)
+ return FAILURE;
+
+ ...
+ /* lots of code to initialize foo */
+ ...
+ return SUCCESS;
+
+The return statement is often the best thing to use in a pattern like
+this. If it's not available due to additional nesting above which
+require some cleanup after the current block, then consider splitting
+the current block into a new function before using goto.
+
+Memory allocation
+-----------------
+
+Because much of cairo's data consists of dynamically allocated arrays,
+it's very easy to introduce integer overflow issues whenever malloc()
+is called. Use the _cairo_malloc2(), _cairo_malloc3(), and
+_cairo_malloc2_add1 macros to avoid these cases; these macros check
+for overflow and will return NULL in that case.
+
+ malloc (n * size) => _cairo_malloc_ab (n, size)
+ e.g. malloc (num_elts * sizeof(some_type)) =>
+ _cairo_malloc2 (num_elts, sizeof(some_type))
+
+ malloc (a * b * size) => _cairo_malloc_abc (a, b, size)
+ e.g. malloc (width * height * 4) =>
+ _cairo_malloc3 (width, height, 4)
+
+ malloc (n * size + k) => _cairo_malloc_ab_plus_c (n, size, k)
+ e.g. malloc (num * sizeof(entry) + sizeof(header)) =>
+ _cairo_malloc2k (num, sizeof(entry), sizeof(header))
+
+In general, be wary of performing any arithmetic operations in an
+argument to malloc. You should explicitly check for integer overflow
+yourself in any more complex situations.
+
+Mode lines
+----------
+
+So given the rules above, what is the best way to simplify one's life as
+a code monkey? Get your editor to do most of the tedious work of
+beautifying your code!
+
+As a reward for reading this far, here are some mode lines for the more
+popular editors:
+/*
+ * vim:sw=4:sts=4:ts=8:tw=78:fo=tcroq:cindent:cino=\:0,(0
+ * vim:isk=a-z,A-Z,48-57,_,.,-,>
+ */
+
+
+TODO
+----
+
+Write rules for common editors to use this style. Also cleanup/unify
+the modelines in the source files.
diff --git a/COPYING b/COPYING
new file mode 100755
index 000000000..f54969f1c
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,33 @@
+Cairo is free software.
+
+Every source file in the implementation[*] of cairo is available to be
+redistributed and/or modified under the terms of either the GNU Lesser
+General Public License (LGPL) version 2.1 or the Mozilla Public
+License (MPL) version 1.1. Some files are available under more
+liberal terms, but we believe that in all cases, each file may be used
+under either the LGPL or the MPL.
+
+See the following files in this directory for the precise terms and
+conditions of either license:
+
+ COPYING-LGPL-2.1
+ COPYING-MPL-1.1
+
+Please see each file in the implementation for copyright and licensing
+information, (in the opening comment of each file).
+
+[*] The implementation of cairo is contained entirely within the "src"
+directory of the cairo source distribution. There are other components
+of the cairo source distribution (such as the "test", "util", and "perf")
+that are auxiliary to the library itself. None of the source code in these
+directories contributes to a build of the cairo library itself, (libcairo.so
+or cairo.dll or similar).
+
+These auxiliary components are also free software, but may be under
+different license terms than cairo itself. For example, most of the
+test cases in the perf and test directories are made available under
+an MIT license to simplify any use of this code for reference purposes
+in using cairo itself. Other files might be available under the GNU
+General Public License (GPL), for example. Again, please see the COPYING
+file under each directory and the opening comment of each file for copyright
+and licensing information.
diff --git a/COPYING-LGPL-2.1 b/COPYING-LGPL-2.1
new file mode 100755
index 000000000..f1ed6182c
--- /dev/null
+++ b/COPYING-LGPL-2.1
@@ -0,0 +1,510 @@
+
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL. It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+ This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it. You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations
+below.
+
+ When we speak of free software, we are referring to freedom of use,
+not price. Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+ To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights. These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+ For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you. You must make sure that they, too, receive or can get the source
+code. If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it. And you must show them these terms so they know their rights.
+
+ We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+ To protect each distributor, we want to make it very clear that
+there is no warranty for the free library. Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+ Finally, software patents pose a constant threat to the existence of
+any free program. We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder. Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+ Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License. This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License. We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+ When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library. The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom. The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+ We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License. It also provides other free software developers Less
+of an advantage over competing non-free programs. These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries. However, the Lesser license provides advantages in certain
+special circumstances.
+
+ For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it
+becomes a de-facto standard. To achieve this, non-free programs must
+be allowed to use the library. A more frequent case is that a free
+library does the same job as widely used non-free libraries. In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+ In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software. For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+ Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+ The precise terms and conditions for copying, distribution and
+modification follow. Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library". The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+ GNU LESSER GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+ A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+ The "Library", below, refers to any such software library or work
+which has been distributed under these terms. A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language. (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+ "Source code" for a work means the preferred form of the work for
+making modifications to it. For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control
+compilation and installation of the library.
+
+ Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it). Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+ 1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+ You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+ 2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses
+ the facility, other than as an argument passed when the facility
+ is invoked, then you must make a good faith effort to ensure that,
+ in the event an application does not supply such function or
+ table, the facility still operates, and performs whatever part of
+ its purpose remains meaningful.
+
+ (For example, a function in a library to compute square roots has
+ a purpose that is entirely well-defined independent of the
+ application. Therefore, Subsection 2d requires that any
+ application-supplied function or table used by this function must
+ be optional: if the application does not supply it, the square
+ root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License. (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.) Do not make any other change in
+these notices.
+
+ Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+ This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+ 4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+ If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library". Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+ However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library". The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+ When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library. The
+threshold for this to be true is not precisely defined by law.
+
+ If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work. (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+ Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+ 6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+ You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License. You must supply a copy of this License. If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License. Also, you must do one
+of these things:
+
+ a) Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever
+ changes were used in the work (which must be distributed under
+ Sections 1 and 2 above); and, if the work is an executable linked
+ with the Library, with the complete machine-readable "work that
+ uses the Library", as object code and/or source code, so that the
+ user can modify the Library and then relink to produce a modified
+ executable containing the modified Library. (It is understood
+ that the user who changes the contents of definitions files in the
+ Library will not necessarily be able to recompile the application
+ to use the modified definitions.)
+
+ b) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (1) uses at run time a
+ copy of the library already present on the user's computer system,
+ rather than copying library functions into the executable, and (2)
+ will operate properly with a modified version of the library, if
+ the user installs one, as long as the modified version is
+ interface-compatible with the version that the work was made with.
+
+ c) Accompany the work with a written offer, valid for at least
+ three years, to give the same user the materials specified in
+ Subsection 6a, above, for a charge no more than the cost of
+ performing this distribution.
+
+ d) If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.
+
+ e) Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+
+ For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it. However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+ It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system. Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+ 7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library
+ facilities. This must be distributed under the terms of the
+ Sections above.
+
+ b) Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining
+ where to find the accompanying uncombined form of the same work.
+
+ 8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License. Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License. However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+ 9. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Library or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+ 10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+ 11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all. For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply, and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License
+may add an explicit geographical distribution limitation excluding those
+countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation. If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+ 14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission. For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this. Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ NO WARRANTY
+
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Libraries
+
+ If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change. You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms
+of the ordinary General Public License).
+
+ To apply these terms, attach the following notices to the library.
+It is safest to attach them to the start of each source file to most
+effectively convey the exclusion of warranty; and each file should
+have at least the "copyright" line and a pointer to where the full
+notice is found.
+
+
+ <one line to give the library's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or
+your school, if any, to sign a "copyright disclaimer" for the library,
+if necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ library `Frob' (a library for tweaking knobs) written by James
+ Random Hacker.
+
+ <signature of Ty Coon>, 1 April 1990
+ Ty Coon, President of Vice
+
+That's all there is to it!
+
+
diff --git a/COPYING-MPL-1.1 b/COPYING-MPL-1.1
new file mode 100755
index 000000000..7714141d1
--- /dev/null
+++ b/COPYING-MPL-1.1
@@ -0,0 +1,470 @@
+ MOZILLA PUBLIC LICENSE
+ Version 1.1
+
+ ---------------
+
+1. Definitions.
+
+ 1.0.1. "Commercial Use" means distribution or otherwise making the
+ Covered Code available to a third party.
+
+ 1.1. "Contributor" means each entity that creates or contributes to
+ the creation of Modifications.
+
+ 1.2. "Contributor Version" means the combination of the Original
+ Code, prior Modifications used by a Contributor, and the Modifications
+ made by that particular Contributor.
+
+ 1.3. "Covered Code" means the Original Code or Modifications or the
+ combination of the Original Code and Modifications, in each case
+ including portions thereof.
+
+ 1.4. "Electronic Distribution Mechanism" means a mechanism generally
+ accepted in the software development community for the electronic
+ transfer of data.
+
+ 1.5. "Executable" means Covered Code in any form other than Source
+ Code.
+
+ 1.6. "Initial Developer" means the individual or entity identified
+ as the Initial Developer in the Source Code notice required by Exhibit
+ A.
+
+ 1.7. "Larger Work" means a work which combines Covered Code or
+ portions thereof with code not governed by the terms of this License.
+
+ 1.8. "License" means this document.
+
+ 1.8.1. "Licensable" means having the right to grant, to the maximum
+ extent possible, whether at the time of the initial grant or
+ subsequently acquired, any and all of the rights conveyed herein.
+
+ 1.9. "Modifications" means any addition to or deletion from the
+ substance or structure of either the Original Code or any previous
+ Modifications. When Covered Code is released as a series of files, a
+ Modification is:
+ A. Any addition to or deletion from the contents of a file
+ containing Original Code or previous Modifications.
+
+ B. Any new file that contains any part of the Original Code or
+ previous Modifications.
+
+ 1.10. "Original Code" means Source Code of computer software code
+ which is described in the Source Code notice required by Exhibit A as
+ Original Code, and which, at the time of its release under this
+ License is not already Covered Code governed by this License.
+
+ 1.10.1. "Patent Claims" means any patent claim(s), now owned or
+ hereafter acquired, including without limitation, method, process,
+ and apparatus claims, in any patent Licensable by grantor.
+
+ 1.11. "Source Code" means the preferred form of the Covered Code for
+ making modifications to it, including all modules it contains, plus
+ any associated interface definition files, scripts used to control
+ compilation and installation of an Executable, or source code
+ differential comparisons against either the Original Code or another
+ well known, available Covered Code of the Contributor's choice. The
+ Source Code can be in a compressed or archival form, provided the
+ appropriate decompression or de-archiving software is widely available
+ for no charge.
+
+ 1.12. "You" (or "Your") means an individual or a legal entity
+ exercising rights under, and complying with all of the terms of, this
+ License or a future version of this License issued under Section 6.1.
+ For legal entities, "You" includes any entity which controls, is
+ controlled by, or is under common control with You. For purposes of
+ this definition, "control" means (a) the power, direct or indirect,
+ to cause the direction or management of such entity, whether by
+ contract or otherwise, or (b) ownership of more than fifty percent
+ (50%) of the outstanding shares or beneficial ownership of such
+ entity.
+
+2. Source Code License.
+
+ 2.1. The Initial Developer Grant.
+ The Initial Developer hereby grants You a world-wide, royalty-free,
+ non-exclusive license, subject to third party intellectual property
+ claims:
+ (a) under intellectual property rights (other than patent or
+ trademark) Licensable by Initial Developer to use, reproduce,
+ modify, display, perform, sublicense and distribute the Original
+ Code (or portions thereof) with or without Modifications, and/or
+ as part of a Larger Work; and
+
+ (b) under Patents Claims infringed by the making, using or
+ selling of Original Code, to make, have made, use, practice,
+ sell, and offer for sale, and/or otherwise dispose of the
+ Original Code (or portions thereof).
+
+ (c) the licenses granted in this Section 2.1(a) and (b) are
+ effective on the date Initial Developer first distributes
+ Original Code under the terms of this License.
+
+ (d) Notwithstanding Section 2.1(b) above, no patent license is
+ granted: 1) for code that You delete from the Original Code; 2)
+ separate from the Original Code; or 3) for infringements caused
+ by: i) the modification of the Original Code or ii) the
+ combination of the Original Code with other software or devices.
+
+ 2.2. Contributor Grant.
+ Subject to third party intellectual property claims, each Contributor
+ hereby grants You a world-wide, royalty-free, non-exclusive license
+
+ (a) under intellectual property rights (other than patent or
+ trademark) Licensable by Contributor, to use, reproduce, modify,
+ display, perform, sublicense and distribute the Modifications
+ created by such Contributor (or portions thereof) either on an
+ unmodified basis, with other Modifications, as Covered Code
+ and/or as part of a Larger Work; and
+
+ (b) under Patent Claims infringed by the making, using, or
+ selling of Modifications made by that Contributor either alone
+ and/or in combination with its Contributor Version (or portions
+ of such combination), to make, use, sell, offer for sale, have
+ made, and/or otherwise dispose of: 1) Modifications made by that
+ Contributor (or portions thereof); and 2) the combination of
+ Modifications made by that Contributor with its Contributor
+ Version (or portions of such combination).
+
+ (c) the licenses granted in Sections 2.2(a) and 2.2(b) are
+ effective on the date Contributor first makes Commercial Use of
+ the Covered Code.
+
+ (d) Notwithstanding Section 2.2(b) above, no patent license is
+ granted: 1) for any code that Contributor has deleted from the
+ Contributor Version; 2) separate from the Contributor Version;
+ 3) for infringements caused by: i) third party modifications of
+ Contributor Version or ii) the combination of Modifications made
+ by that Contributor with other software (except as part of the
+ Contributor Version) or other devices; or 4) under Patent Claims
+ infringed by Covered Code in the absence of Modifications made by
+ that Contributor.
+
+3. Distribution Obligations.
+
+ 3.1. Application of License.
+ The Modifications which You create or to which You contribute are
+ governed by the terms of this License, including without limitation
+ Section 2.2. The Source Code version of Covered Code may be
+ distributed only under the terms of this License or a future version
+ of this License released under Section 6.1, and You must include a
+ copy of this License with every copy of the Source Code You
+ distribute. You may not offer or impose any terms on any Source Code
+ version that alters or restricts the applicable version of this
+ License or the recipients' rights hereunder. However, You may include
+ an additional document offering the additional rights described in
+ Section 3.5.
+
+ 3.2. Availability of Source Code.
+ Any Modification which You create or to which You contribute must be
+ made available in Source Code form under the terms of this License
+ either on the same media as an Executable version or via an accepted
+ Electronic Distribution Mechanism to anyone to whom you made an
+ Executable version available; and if made available via Electronic
+ Distribution Mechanism, must remain available for at least twelve (12)
+ months after the date it initially became available, or at least six
+ (6) months after a subsequent version of that particular Modification
+ has been made available to such recipients. You are responsible for
+ ensuring that the Source Code version remains available even if the
+ Electronic Distribution Mechanism is maintained by a third party.
+
+ 3.3. Description of Modifications.
+ You must cause all Covered Code to which You contribute to contain a
+ file documenting the changes You made to create that Covered Code and
+ the date of any change. You must include a prominent statement that
+ the Modification is derived, directly or indirectly, from Original
+ Code provided by the Initial Developer and including the name of the
+ Initial Developer in (a) the Source Code, and (b) in any notice in an
+ Executable version or related documentation in which You describe the
+ origin or ownership of the Covered Code.
+
+ 3.4. Intellectual Property Matters
+ (a) Third Party Claims.
+ If Contributor has knowledge that a license under a third party's
+ intellectual property rights is required to exercise the rights
+ granted by such Contributor under Sections 2.1 or 2.2,
+ Contributor must include a text file with the Source Code
+ distribution titled "LEGAL" which describes the claim and the
+ party making the claim in sufficient detail that a recipient will
+ know whom to contact. If Contributor obtains such knowledge after
+ the Modification is made available as described in Section 3.2,
+ Contributor shall promptly modify the LEGAL file in all copies
+ Contributor makes available thereafter and shall take other steps
+ (such as notifying appropriate mailing lists or newsgroups)
+ reasonably calculated to inform those who received the Covered
+ Code that new knowledge has been obtained.
+
+ (b) Contributor APIs.
+ If Contributor's Modifications include an application programming
+ interface and Contributor has knowledge of patent licenses which
+ are reasonably necessary to implement that API, Contributor must
+ also include this information in the LEGAL file.
+
+ (c) Representations.
+ Contributor represents that, except as disclosed pursuant to
+ Section 3.4(a) above, Contributor believes that Contributor's
+ Modifications are Contributor's original creation(s) and/or
+ Contributor has sufficient rights to grant the rights conveyed by
+ this License.
+
+ 3.5. Required Notices.
+ You must duplicate the notice in Exhibit A in each file of the Source
+ Code. If it is not possible to put such notice in a particular Source
+ Code file due to its structure, then You must include such notice in a
+ location (such as a relevant directory) where a user would be likely
+ to look for such a notice. If You created one or more Modification(s)
+ You may add your name as a Contributor to the notice described in
+ Exhibit A. You must also duplicate this License in any documentation
+ for the Source Code where You describe recipients' rights or ownership
+ rights relating to Covered Code. You may choose to offer, and to
+ charge a fee for, warranty, support, indemnity or liability
+ obligations to one or more recipients of Covered Code. However, You
+ may do so only on Your own behalf, and not on behalf of the Initial
+ Developer or any Contributor. You must make it absolutely clear than
+ any such warranty, support, indemnity or liability obligation is
+ offered by You alone, and You hereby agree to indemnify the Initial
+ Developer and every Contributor for any liability incurred by the
+ Initial Developer or such Contributor as a result of warranty,
+ support, indemnity or liability terms You offer.
+
+ 3.6. Distribution of Executable Versions.
+ You may distribute Covered Code in Executable form only if the
+ requirements of Section 3.1-3.5 have been met for that Covered Code,
+ and if You include a notice stating that the Source Code version of
+ the Covered Code is available under the terms of this License,
+ including a description of how and where You have fulfilled the
+ obligations of Section 3.2. The notice must be conspicuously included
+ in any notice in an Executable version, related documentation or
+ collateral in which You describe recipients' rights relating to the
+ Covered Code. You may distribute the Executable version of Covered
+ Code or ownership rights under a license of Your choice, which may
+ contain terms different from this License, provided that You are in
+ compliance with the terms of this License and that the license for the
+ Executable version does not attempt to limit or alter the recipient's
+ rights in the Source Code version from the rights set forth in this
+ License. If You distribute the Executable version under a different
+ license You must make it absolutely clear that any terms which differ
+ from this License are offered by You alone, not by the Initial
+ Developer or any Contributor. You hereby agree to indemnify the
+ Initial Developer and every Contributor for any liability incurred by
+ the Initial Developer or such Contributor as a result of any such
+ terms You offer.
+
+ 3.7. Larger Works.
+ You may create a Larger Work by combining Covered Code with other code
+ not governed by the terms of this License and distribute the Larger
+ Work as a single product. In such a case, You must make sure the
+ requirements of this License are fulfilled for the Covered Code.
+
+4. Inability to Comply Due to Statute or Regulation.
+
+ If it is impossible for You to comply with any of the terms of this
+ License with respect to some or all of the Covered Code due to
+ statute, judicial order, or regulation then You must: (a) comply with
+ the terms of this License to the maximum extent possible; and (b)
+ describe the limitations and the code they affect. Such description
+ must be included in the LEGAL file described in Section 3.4 and must
+ be included with all distributions of the Source Code. Except to the
+ extent prohibited by statute or regulation, such description must be
+ sufficiently detailed for a recipient of ordinary skill to be able to
+ understand it.
+
+5. Application of this License.
+
+ This License applies to code to which the Initial Developer has
+ attached the notice in Exhibit A and to related Covered Code.
+
+6. Versions of the License.
+
+ 6.1. New Versions.
+ Netscape Communications Corporation ("Netscape") may publish revised
+ and/or new versions of the License from time to time. Each version
+ will be given a distinguishing version number.
+
+ 6.2. Effect of New Versions.
+ Once Covered Code has been published under a particular version of the
+ License, You may always continue to use it under the terms of that
+ version. You may also choose to use such Covered Code under the terms
+ of any subsequent version of the License published by Netscape. No one
+ other than Netscape has the right to modify the terms applicable to
+ Covered Code created under this License.
+
+ 6.3. Derivative Works.
+ If You create or use a modified version of this License (which you may
+ only do in order to apply it to code which is not already Covered Code
+ governed by this License), You must (a) rename Your license so that
+ the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape",
+ "MPL", "NPL" or any confusingly similar phrase do not appear in your
+ license (except to note that your license differs from this License)
+ and (b) otherwise make it clear that Your version of the license
+ contains terms which differ from the Mozilla Public License and
+ Netscape Public License. (Filling in the name of the Initial
+ Developer, Original Code or Contributor in the notice described in
+ Exhibit A shall not of themselves be deemed to be modifications of
+ this License.)
+
+7. DISCLAIMER OF WARRANTY.
+
+ COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF
+ DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.
+ THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE
+ IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT,
+ YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE
+ COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
+ OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
+ ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+8. TERMINATION.
+
+ 8.1. This License and the rights granted hereunder will terminate
+ automatically if You fail to comply with terms herein and fail to cure
+ such breach within 30 days of becoming aware of the breach. All
+ sublicenses to the Covered Code which are properly granted shall
+ survive any termination of this License. Provisions which, by their
+ nature, must remain in effect beyond the termination of this License
+ shall survive.
+
+ 8.2. If You initiate litigation by asserting a patent infringement
+ claim (excluding declatory judgment actions) against Initial Developer
+ or a Contributor (the Initial Developer or Contributor against whom
+ You file such action is referred to as "Participant") alleging that:
+
+ (a) such Participant's Contributor Version directly or indirectly
+ infringes any patent, then any and all rights granted by such
+ Participant to You under Sections 2.1 and/or 2.2 of this License
+ shall, upon 60 days notice from Participant terminate prospectively,
+ unless if within 60 days after receipt of notice You either: (i)
+ agree in writing to pay Participant a mutually agreeable reasonable
+ royalty for Your past and future use of Modifications made by such
+ Participant, or (ii) withdraw Your litigation claim with respect to
+ the Contributor Version against such Participant. If within 60 days
+ of notice, a reasonable royalty and payment arrangement are not
+ mutually agreed upon in writing by the parties or the litigation claim
+ is not withdrawn, the rights granted by Participant to You under
+ Sections 2.1 and/or 2.2 automatically terminate at the expiration of
+ the 60 day notice period specified above.
+
+ (b) any software, hardware, or device, other than such Participant's
+ Contributor Version, directly or indirectly infringes any patent, then
+ any rights granted to You by such Participant under Sections 2.1(b)
+ and 2.2(b) are revoked effective as of the date You first made, used,
+ sold, distributed, or had made, Modifications made by that
+ Participant.
+
+ 8.3. If You assert a patent infringement claim against Participant
+ alleging that such Participant's Contributor Version directly or
+ indirectly infringes any patent where such claim is resolved (such as
+ by license or settlement) prior to the initiation of patent
+ infringement litigation, then the reasonable value of the licenses
+ granted by such Participant under Sections 2.1 or 2.2 shall be taken
+ into account in determining the amount or value of any payment or
+ license.
+
+ 8.4. In the event of termination under Sections 8.1 or 8.2 above,
+ all end user license agreements (excluding distributors and resellers)
+ which have been validly granted by You or any distributor hereunder
+ prior to termination shall survive termination.
+
+9. LIMITATION OF LIABILITY.
+
+ UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
+ (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
+ DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE,
+ OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR
+ ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY
+ CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL,
+ WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
+ COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
+ INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
+ LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
+ RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW
+ PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE
+ EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO
+ THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+10. U.S. GOVERNMENT END USERS.
+
+ The Covered Code is a "commercial item," as that term is defined in
+ 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer
+ software" and "commercial computer software documentation," as such
+ terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48
+ C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995),
+ all U.S. Government End Users acquire Covered Code with only those
+ rights set forth herein.
+
+11. MISCELLANEOUS.
+
+ This License represents the complete agreement concerning subject
+ matter hereof. If any provision of this License is held to be
+ unenforceable, such provision shall be reformed only to the extent
+ necessary to make it enforceable. This License shall be governed by
+ California law provisions (except to the extent applicable law, if
+ any, provides otherwise), excluding its conflict-of-law provisions.
+ With respect to disputes in which at least one party is a citizen of,
+ or an entity chartered or registered to do business in the United
+ States of America, any litigation relating to this License shall be
+ subject to the jurisdiction of the Federal Courts of the Northern
+ District of California, with venue lying in Santa Clara County,
+ California, with the losing party responsible for costs, including
+ without limitation, court costs and reasonable attorneys' fees and
+ expenses. The application of the United Nations Convention on
+ Contracts for the International Sale of Goods is expressly excluded.
+ Any law or regulation which provides that the language of a contract
+ shall be construed against the drafter shall not apply to this
+ License.
+
+12. RESPONSIBILITY FOR CLAIMS.
+
+ As between Initial Developer and the Contributors, each party is
+ responsible for claims and damages arising, directly or indirectly,
+ out of its utilization of rights under this License and You agree to
+ work with Initial Developer and Contributors to distribute such
+ responsibility on an equitable basis. Nothing herein is intended or
+ shall be deemed to constitute any admission of liability.
+
+13. MULTIPLE-LICENSED CODE.
+
+ Initial Developer may designate portions of the Covered Code as
+ "Multiple-Licensed". "Multiple-Licensed" means that the Initial
+ Developer permits you to utilize portions of the Covered Code under
+ Your choice of the NPL or the alternative licenses, if any, specified
+ by the Initial Developer in the file described in Exhibit A.
+
+EXHIBIT A -Mozilla Public License.
+
+ ``The contents of this file are subject to the Mozilla Public License
+ Version 1.1 (the "License"); you may not use this file except in
+ compliance with the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+
+ Software distributed under the License is distributed on an "AS IS"
+ basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+ License for the specific language governing rights and limitations
+ under the License.
+
+ The Original Code is ______________________________________.
+
+ The Initial Developer of the Original Code is ________________________.
+ Portions created by ______________________ are Copyright (C) ______
+ _______________________. All Rights Reserved.
+
+ Contributor(s): ______________________________________.
+
+ Alternatively, the contents of this file may be used under the terms
+ of the _____ license (the "[___] License"), in which case the
+ provisions of [______] License are applicable instead of those
+ above. If you wish to allow use of your version of this file only
+ under the terms of the [____] License and not to allow others to use
+ your version of this file under the MPL, indicate your decision by
+ deleting the provisions above and replace them with the notice and
+ other provisions required by the [___] License. If you do not delete
+ the provisions above, a recipient may use your version of this file
+ under either the MPL or the [___] License."
+
+ [NOTE: The text of this Exhibit A may differ slightly from the text of
+ the notices in the Source Code files of the Original Code. You should
+ use the text of this Exhibit A rather than the text found in the
+ Original Code Source Code for Your Modifications.]
+
diff --git a/HACKING b/HACKING
new file mode 100755
index 000000000..92aa6541d
--- /dev/null
+++ b/HACKING
@@ -0,0 +1,186 @@
+Hacking Cairo
+=============
+
+This is a high-level guide to how the cairo distribution is organized
+and how to get started hacking on it. Make sure you read through the
+file README before continuing.
+
+
+Coding Style
+------------
+
+The easiest way to write code in the cairo style is to follow code close
+to the place you are hacking, but if you want a written down set of
+rules, see file CODING_STYLE.
+
+Files for backends that depend on languages other than C (C++ or
+Objective C for example) may use features specific to those languages.
+For example, "//" comments are allowed, though discouraged, in those files.
+
+
+Contact
+-------
+
+Various ways to get in touch with other cairo developers and maintainers
+have been enumerated at:
+
+ http://cairographics.org/contact/
+
+Most of that information is also reflected in the following sections.
+
+
+Mailing Lists
+-------------
+
+There are various mailing lists that are useful when developing cairo
+code. A complete list is always available at:
+
+ http://cairographics.org/lists/
+
+It is recommended that cairo developers subscribe to all those lists.
+The cairo list by itself generates much more traffic than the others
+combined, so developers and contributors should not be intimidated by
+the -commit and -bugs lists.
+
+
+Bug Tracking System
+-------------------
+
+We use a standard bugzilla bug tracking system available at:
+
+ http://bugs.freedesktop.org/
+
+See file named BUGS for detailed information on reporting bugs. In short,
+for straight bug reports, it's best to report them there such that they
+are not lost or forgotten. For discussion of new features or
+complicated issues, use the mailing list.
+
+
+IRC
+---
+
+It's a great idea to hang around the cairo IRC channel if you have any
+interest in cairo. We use the #cairo channel on irc.freenode.net.
+
+Make sure you introduce yourself if your nick is not easy to match to
+the name you use on the mailing list.
+
+
+Version Control System
+----------------------
+
+We use /git/ for version control. See:
+
+ http://cairographics.org/download/
+
+TODO:
+Add links to some git tutorials or better, write a few paragraphs
+about how to use git to efficiently hack on cairo.
+
+
+Build System
+------------
+
+We use the autotools build system with cairo, but with various
+customizations and advanced features. Reading configure.in is your
+best bet to understanding it, or just ask on IRC.
+
+To bootstrap the build system run ./autogen.sh. After that the
+regular "./configure; make; make install" sequence can be used.
+See file named INSTALL for more details.
+
+There is limited support for a win32 build system.
+See README.win32 and Makefile.win32 files in various directories.
+
+
+ChangeLog
+---------
+
+We generate ChangeLog files automatically from the git commit log.
+No manual ChangeLog writing is necessary.
+
+
+Copyrights and Licensing
+------------------------
+
+The cairo library is dual-licensed under LGPL and MPL. See file named
+COPYING for details. The test suites are more liberal. For example,
+GPL code is allowed in the test suites, though it's always better to
+keep things simple.
+
+When writing new code, update the file headers to add your (or your
+employers) copyright line and contributor line. If adding new files
+or splitting a file, copy the file header from other files.
+
+
+Source Code
+-----------
+
+The library source code and headers live in the src/ directory.
+See src/README for more information.
+
+
+Regression Test Suite
+---------------------
+
+Cairo has a fairly extensive regression-testing suite. Indeed, without
+these tests it would be impossible to make a cairo release without
+introducing tens of regressions. We still manage to introduce
+regressions with each release even with the hundreds of tests we already
+have.
+
+The regression test suite is located under the test/ directory.
+See test/README for more information.
+
+
+Performance Test Suite
+----------------------
+
+There is a small performance-testing suite for cairo.
+
+The performance test suite is located under the perf/ directory.
+See perf/README for more information.
+
+
+Boilerplate
+-----------
+
+The cairo-boilerplate is a small private library used by the regression
+and performance test suites. It includes the boilerplace code needed
+to initialize various backends for the test suites, as well as allow
+tweaking some of the internal workings of the backends for more testing.
+
+The boilerplate code is localted under the boilerplate/ directory.
+See boilerplate/README for more information.
+
+
+Documentation
+-------------
+
+Cairo uses the gtk-doc system for reference API documentation.
+
+The reference documentation is located under doc/public.
+See doc/public/README for more information.
+
+For more documentation including frequently asked questions, tutorials,
+samples, roadmap, todo list, etc visit:
+
+ http://cairographics.org/documentation/
+
+Some of those should gradually be moved to doc/.
+
+
+Utilities
+---------
+
+There are a few useful utilities we have developed that are either
+useful when writing code using cairo, or writing cairo, or useful in
+general. These tools can be found under the util/ directory.
+See util/README for more information.
+
+
+Releasing
+---------
+
+Now you are a cairo maintainer, so what? See file named RELEASING.
+
diff --git a/INSTALL b/INSTALL
new file mode 100755
index 000000000..9db68dee2
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,184 @@
+Quick-start build instructions
+------------------------------
+1) Configure the package:
+
+ ./configure
+
+2) Compile it:
+
+ make
+
+3) Install it:
+
+ make install
+
+This final step may require temporary root access (eg. with sudo) if
+you don't have write permission to the directory in which cairo will
+be installed.
+
+NOTE: If you are working with source from git/cvs rather than from a tar
+file, then you should use ./autogen.sh in place of ./configure
+anywhere it is mentioned in these instructions.
+
+More detailed build instructions
+--------------------------------
+1) Configure the package
+
+ The first step in building cairo is to configure the package by
+ running the configure script. [Note: if you don't have a configure
+ script, skip down below to the Extremely detailed build
+ instructions.]
+
+ The configure script attempts to automatically detect as much as
+ possible about your system. So, you should primarily just accept
+ its defaults by running:
+
+ ./configure
+
+ The configure script does accept a large number of options for
+ fine-tuning its behavior. See "./configure --help" for a complete
+ list. The most commonly used options are discussed here.
+
+ --prefix=PREFIX
+
+ This option specifies the directory under which the software
+ should be installed. By default configure will choose a
+ directory such as /usr/local. If you would like to install
+ cairo to some other location, pass the director to configure
+ with the --prefix option. For example:
+
+ ./configure --prefix=/opt/cairo
+
+ would install cairo into the /opt/cairo directory. You could
+ also choose a prefix directory within your home directory if
+ you don't have write access to any system-wide directory.
+
+ After installing into a custom prefix, you will need to set
+ some environment variables to allow the software to be
+ found. Assuming the /opt/cairo prefix and assuming you are
+ using the bash shell, the following environment variables
+ should be set:
+
+ PKG_CONFIG_PATH=/opt/cairo/lib/pkgconfig
+ LD_LIBRARY_PATH=/opt/cairo/lib
+ export PKG_CONFIG_PATH LD_LIBRARY_PATH
+
+ (NOTE: On Mac OS X, at least, use DYLD_LIBRARY_PATH in place
+ of LD_LIBRARY_PATH above.)
+
+ --enable-XYZ
+ --enable-XYZ=yes
+ --enable-XYZ=auto
+ --enable-XYZ=no
+ --disable-XYZ
+
+ Cairo's various font and surface backends and other features can be
+ enabled or disabled at configure time. Features can be divided into
+ three categories based on their default state:
+
+ * default=yes: These are the recommended features like PNG functions
+ and PS/PDF/SVG backends. It is highly recommended to not disable
+ these features but if that's really what one wants, they can be
+ disabled using --disable-XYZ.
+
+ * default=auto: These are the "native" features, that is, they are
+ platform specific, like the Xlib surface backend. You probably
+ want one or two of these. They will be automatically enabled if
+ all their required facilities are available. Or you can use
+ --enable-XYZ or --disable-XYZ to make your desire clear, and then
+ cairo errs during configure if your intention cannot be followed.
+
+ * default=no: These are the "experimental" features, and hence by
+ default off. Use --enabled-XYZ to enable them.
+
+ The list of all features and their default state can be seen in the
+ output of ./configure --help.
+
+2) Compile the package:
+
+ This step is very simple. Just:
+
+ make
+
+ The Makefiles included with cairo are designed to work on as many
+ different systems as possible.
+
+ When cairo is compiled, you can also run some automated tests of
+ cairo with:
+
+ make check
+
+ NOTE: Some versions of X servers will cause the -xlib tests to
+ report failures in make check even when cairo is working just
+ fine. If you see failures in nothing but -xlib tests, please
+ examine the corresponding -xlib-out.png images and compare them to
+ the -ref.png reference images (the -xlib-diff.png images might also
+ be useful). If the results seem "close enough" please do not report
+ a bug against cairo as the "failures" you are seeing are just due
+ to subtle variations in X server implementations.
+
+3) Install the package:
+
+ The final step is to install the package with:
+
+ make install
+
+ If you are installing to a system-wide location you may need to
+ temporarily acquire root access in order to perform this
+ operation. A good way to do this is to use the sudo program:
+
+ sudo make install
+
+Extremely detailed build instructions
+-------------------------------------
+So you want to build cairo but it didn't come with a configure
+script. This is probably because you have checked out the latest
+in-development code via git. If you need to be on the bleeding edge,
+(for example, because you're wanting to develop some aspect of cairo
+itself), then you're in the right place and should read on.
+
+However, if you don't need such a bleeding-edge version of cairo, then
+you might prefer to start by building the latest stable cairo release:
+
+ http://cairographics.org/releases
+
+or perhaps the latest (unstable) development snapshot:
+
+ http://cairographics.org/snapshots
+
+There you'll find nicely packaged tar files that include a configure
+script so you can go back the the simpler instructions above.
+
+But you're still reading, so you're someone that loves to
+learn. Excellent! We hope you'll learn enough to make some excellent
+contributions to cairo. Since you're not using a packaged tar file,
+you're going to need some additional tools beyond just a C compiler in
+order to compile cairo. Specifically, you need the following utilities:
+
+ automake
+ autoconf
+ autoheader
+ aclocal
+ libtoolize
+ pkg-config [at least version 0.16]
+ gtk-doc (recommended)
+
+Hopefully your platform of choice has packages readily available so
+that you can easily install things with your system's package
+management tool, (such as "apt-get install automake" on Debian or "yum
+install automake" on Fedora, etc.). Note that Mac OS X ships with
+glibtoolize instead of libtoolize.
+
+Once you have all of those packages installed, the next step is to run
+the autogen.sh script. That can be as simple as:
+
+ ./autogen.sh
+
+But before you run that command, note that the autogen.sh script
+accepts all the same arguments as the configure script, (and in fact,
+will generate the configure script and run it with the arguments you
+provide). So go back up to step (1) above and see what additional
+arguments you might want to pass, (such as prefix). Then continue with
+the instructions, simply using ./autogen.sh in place of ./configure.
+
+Happy hacking!
diff --git a/KNOWN_ISSUES b/KNOWN_ISSUES
new file mode 100755
index 000000000..5fda68389
--- /dev/null
+++ b/KNOWN_ISSUES
@@ -0,0 +1,10 @@
+There are a few known bugs in 1.10 that have been fixed in master, but
+appear to be non-trivial to backport without fear of causing other
+regressions. The impact of these bugs is considered to be less than of a
+risk than rewriting the code.
+
+Zero Path Extents
+-----------------
+A closed degenerate path is reported as having extents (0, 0) x (0, 0),
+whereas the expected value is (x, y) x (0, 0). This regression has existed
+since at least 1.2.
diff --git a/Makefile.am b/Makefile.am
new file mode 100755
index 000000000..0fa9c74f4
--- /dev/null
+++ b/Makefile.am
@@ -0,0 +1,86 @@
+include $(top_srcdir)/build/Makefile.am.common
+
+EXTRA_DIST += \
+ KNOWN_ISSUES \
+ README.win32 \
+ Makefile.win32 \
+ build/Makefile.win32.common \
+ build/Makefile.win32.inform \
+ build/Makefile.win32.features \
+ build/Makefile.win32.features-h \
+ $(NULL)
+#MAINTAINERCLEANFILES += \
+# $(srcdir)/build/Makefile.win32.features \
+# $(srcdir)/build/Makefile.win32.features-h \
+# $(NULL)
+
+ACLOCAL_AMFLAGS = -I build ${ACLOCAL_FLAGS}
+
+#DIST_SUBDIRS = src doc util boilerplate test
+#SUBDIRS = src doc util
+DIST_SUBDIRS = src util boilerplate
+SUBDIRS = src util
+# libpng is required for our test programs
+if CAIRO_HAS_PNG_FUNCTIONS
+#SUBDIRS += boilerplate test
+SUBDIRS += boilerplate
+endif
+
+configure: cairo-version.h
+
+#doc:
+# cd doc && $(MAKE) $(AM_MAKEFLAGS) $@
+#test retest recheck: all
+# cd test && $(MAKE) $(AM_MAKEFLAGS) $@
+#perf: all
+# cd perf && $(MAKE) $(AM_MAKEFLAGS) $@
+#check-valgrind: all
+# cd test && $(MAKE) $(AM_MAKEFLAGS) check-valgrind
+# cd perf && $(MAKE) $(AM_MAKEFLAGS) check-valgrind
+#.PHONY: doc test retest recheck perf check-valgrind
+
+
+EXTRA_DIST += \
+ AUTHORS \
+ BIBLIOGRAPHY \
+ BUGS \
+ CODING_STYLE \
+ COPYING \
+ COPYING-LGPL-2.1 \
+ COPYING-MPL-1.1 \
+ HACKING \
+ INSTALL \
+ NEWS \
+ PORTING_GUIDE \
+ README \
+ RELEASING \
+ autogen.sh \
+ cairo-version.h \
+ $(NULL)
+
+DISTCLEANFILES += config.cache
+
+MAINTAINERCLEANFILES += \
+ $(srcdir)/aclocal.m4 \
+ $(srcdir)/autoscan.log \
+ $(srcdir)/build/compile \
+ $(srcdir)/build/config.guess \
+ $(srcdir)/build/config.sub \
+ $(srcdir)/build/depcomp \
+ $(srcdir)/build/install-sh \
+ $(srcdir)/build/ltmain.sh \
+ $(srcdir)/build/missing \
+ $(srcdir)/build/mkinstalldirs \
+ $(srcdir)/config.h.in \
+ $(srcdir)/configure.scan \
+ $(NULL)
+
+DISTCHECK_CONFIGURE_FLAGS = \
+ --enable-gtk-doc \
+ --enable-test-surfaces \
+ --enable-full-testing \
+ $(NULL)
+
+include $(srcdir)/build/Makefile.am.changelog
+include $(srcdir)/build/Makefile.am.releasing
+include $(srcdir)/build/Makefile.am.analysis
diff --git a/Makefile.win32 b/Makefile.win32
new file mode 100755
index 000000000..fbad7f3e4
--- /dev/null
+++ b/Makefile.win32
@@ -0,0 +1,24 @@
+default: all
+
+# Do not edit this file.
+# Edit build/Makefile.win32.common for customization
+
+top_srcdir = .
+include $(top_srcdir)/build/Makefile.win32.inform
+
+all: cairo
+
+cairo: inform
+ @$(MAKE) -C src -f Makefile.win32
+
+perf: inform
+ @$(MAKE) -C perf -f Makefile.win32 perf
+
+test: inform
+ @$(MAKE) -C test -f Makefile.win32 test
+
+clean:
+ @$(MAKE) -C boilerplate -f Makefile.win32 clean
+ @$(MAKE) -C perf -f Makefile.win32 clean
+ @$(MAKE) -C src -f Makefile.win32 clean
+ @$(MAKE) -C test -f Makefile.win32 clean
diff --git a/NEWS b/NEWS
new file mode 100755
index 000000000..368d293c2
--- /dev/null
+++ b/NEWS
@@ -0,0 +1,7030 @@
+Release 1.12.14 (2013-02-10 Chris Wilson <chris@chris-wilson.co.uk>)
+===================================================================
+In the last week we had a few more bugs reported and promptly resolved.
+As these are a combination of regressions and stability issues, it is
+time for a prompt update and release. Many thanks to everyone for
+testing and reporting issues, and helping to make Cairo better.
+
+Bug fixes
+---------
+
+ Prevent user callbacks accessing user-data during destroy to prevent
+ use-after-free bugs.
+ https://bugzilla.mozilla.org/show_bug.cgi?id=722975
+
+ Use standard names for glyphs in subset fonts (PDF).
+ https://bugs.freedesktop.org/show_bug.cgi?id=60248
+
+ Fix detection of Win98. The logic for detecting Win98 (and its broken
+ AlphaBlend()) was inverted, disabling AlphaBlend() for everyone.
+
+ Prevent numeric overflow from extrapolating polygon edges to the clip
+ boundary and causing severe render artifacts.
+ https://bugs.freedesktop.org/show_bug.cgi?id=60489
+
+ Fix computation of glyph string coordinates when breaking up runs
+ for xlib.
+
+ Fix an assertion in the win32 backend for failing to clear its
+ similar-images.
+ https://bugs.freedesktop.org/show_bug.cgi?id=60519
+
+
+Release 1.12.12 (2013-01-31 Chris Wilson <chris@chris-wilson.co.uk>)
+===================================================================
+The goal of this release is to fix the synchronisation problems that
+were exhibited in the SHM transport for cairo-xlib. This cropped up
+any place that tried to rapidly push fresh pixel data to the X server
+through an ordinary image surface, such as gimp-2.9 and evince.
+
+Bug fixes
+---------
+
+ Avoid replacing the entire image when uploading subimages
+ https://bugs.freedesktop.org/show_bug.cgi?id=59635
+
+ Force synchronisation for scratch SHM image buffers, so that we do
+ not overwrite data as it is being read by X.
+ https://bugs.freedesktop.org/show_bug.cgi?id=59635 (also)
+
+ Fix typos in detecting multisampling for the GL (MSAA) backend.
+
+ Fix a memory leak in the GL (MSAA) backend.
+
+ Fix a reference counting bug when mapping a GL surface to an image.
+
+
+Release 1.12.10 (2013-01-16 Chris Wilson <chris@chris-wilson.co.uk>)
+===================================================================
+A heap of bug fixes everywhere, and the gradual completion of the MSAA
+backend for cairo-gl. Perhaps the most noteworthy set of the bugfixes
+was the crusage lead by Behdad Eshfabod to make font handling by
+pango/cairo/fontconfig fully threadsafe. This testing revealed a couple
+of races that needed fixing in Cairo's scaled-font and glyph cache.
+
+Bug fixes
+---------
+
+ Append coincident elements to the recording's surface bbtree so that
+ the list is not corrupted and the overlapping elements lost.
+
+ Fix cairo-trace to correctly record map-to-image/unmap-image and then
+ replay them.
+
+ Ignore MappingNotifies when running the XCB testsuite as they are sent
+ to all clients when the keyboard changes. The testsuite would detect
+ the unexpected event and complain.
+
+ Handle very large images in the XCB backend.
+
+ Fix a memory leak in the xlib/shm layer, and prevent use of the SHM
+ surfaces after the display is closed.
+ https://bugs.freedesktop.org/show_bug.cgi?id=58253
+
+ Handle resizing of bitmap fonts, in preparation for a fix to
+ fontconfig to correctly pass on the user request for scaling.
+
+ Always include subroutine 4 (hint replacement idion) when subsetting
+ type 1 fonts in order to prevent a crash in cgpdftops on Mac OS/X
+
+ Fix a couple of typos in the cairo-gobject.h header files for
+ introspection.
+
+ Prevent a mutex deadlock when freeing a scaled-glyph containing a
+ recording-surface that itself references another scaled-glyph.
+ https://bugs.freedesktop.org/show_bug.cgi?id=54950
+
+ Make scaled-font cache actually thread-safe and prevent
+ use-after-frees.
+
+ Restore support for older versions of XRender. A couple of typos and a
+ few forgotten chunks prevented the xlib compositor from running
+ correctly with XRender < 0.10. Note that there are still a few
+ regressions remaining.
+
+
+Release 1.12.8 (2012-11-24 Chris Wilson <chris@chris-wilson.co.uk>)
+===================================================================
+Another couple of weeks and a few more bugs have been found and fixed,
+it is time to push the next point release. Many thanks to everyone who
+reported their issues and helped us track down the bugs and helped
+testing the fixes.
+
+Bug fixes
+---------
+
+ Expand the sanity checking for broken combinations of XSendEvent and
+ ShmCompletionEvent.
+
+ Notice that "The X.Org Foundation" sometimes also identifies itself
+ as "The Xorg Foundation".
+
+ Handle various ages of libXext and its Shm headers.
+
+ Fix the invalid clipping of the source drawable when using SHM
+ transport to upload images.
+ https://bugs.freedesktop.org/show_bug.cgi?id=56547
+
+ Handle all Type1 postscript operators for better font compatibility.
+ https://bugs.freedesktop.org/show_bug.cgi?id=56265
+
+ Fix a couple of memory leaks in Type1 font subsetting
+ https://bugs.freedesktop.org/show_bug.cgi?id=56566
+
+ Tighten the evaluation of the start/stop pen vertices, and catch a few
+ instances where we would use a fan instead of a bevel.
+ https://bugs.freedesktop.org/show_bug.cgi?id=56432
+
+ Fix assumption that geometric clipping always succeeds with the
+ span-compositor.
+ https://bugs.freedesktop.org/show_bug.cgi?id=56574
+
+ Fix call to spline intersection when evaluating whether a stoke is
+ visible.
+
+ Remember to copy inferior sources when using SHM to readback the
+ surface for use as a source.
+
+Release 1.12.6 (2012-10-22 Chris Wilson <chris@chris-wilson.co.uk>)
+===================================================================
+Thanks to everyone who download cairo-1.12.4 and gave us their feedback.
+It truly was invaluable and has helped us to fix many portability issues
+that crept in with some of the new features. This release aims to fix
+those stability issues and run on a wider range of systems.
+
+Bug fixes
+---------
+
+ Fix the recording surface to actually snapshot the source and so fix
+ PDF drawing.
+
+ Calling XSendEvent with an XShmCompletionEvent is incompatabile with
+ older Xorg servers.
+
+ Reorder CloseDisplay chain so that XShm is not reinstantiated after
+ shutdown, causing a potential crash if the Display was immediately
+ recreated using the same memory address.
+
+ Make sure that the Xserver has attached to the SHM segment before
+ deleting it from the global namespace on systems that do not support
+ deferred deletion.
+
+ Type1 subsetting support for PDF (and PS) was once again improved to
+ work with a larger number of PDF readers.
+
+ GLESv2 build fixes and improved support for embedded GPUs.
+
+ Tweak the invisible pen detection for applications that are currently
+ using too large values for geometric tolerance.
+
+ A build fix for older freetype libraries.
+
+
+Release 1.12.4 (2012-10-05 Chris Wilson <chris@chris-wilson.co.uk>)
+===================================================================
+More bugs, and more importantly, more fixes. On the cairo-gl side, we
+have refinements to the MSAA compositor which enables hardware
+acceleration of comparitively low-quality antialiasing - which is useful
+in animations and on very high density screens. For cairo-xlib, we have
+finally enabled SHM transport for image transfers to and from the X
+server. A long standing required feature, SHM transport offers a notable
+reduction in rendering latency by reducing the number of copies
+required to upload image data - given hardware and driver support,
+cairo-xlib can now perform zero copy uploads onto the GPU. And as usual
+Adrian Johnson has been very busy fixing many different corner cases in
+cairo-pdf, impoving opacity groups and font subsetting. Last, but not
+least, for cairo-image Søren Sandmann Pedersen added support for
+rendering glyphs to pixman and using that from within cairo. The new
+glyph rendering facility reduces the overhead for setting up the
+compositing operation, improving glyph thoughput for the image backend
+by a factor of about 4. And before he did so, he also fixed up a few
+bugs in the existing glyph rendering code. So many thanks to Andrea
+Canciani, Adrian Johnson, Chuanbo Weng, Dongyeon Kim, Henry Song, Martin
+Robinson, Søren Sandmann Pedersen and Uli Schlachter for their
+contributions, finding and fixing bugs.
+
+Bug fixes
+---------
+
+ Interior boxes were being dropped when amalgamating regions during
+ tesselation.
+ https://bugs.freedesktop.org/show_bug.cgi?id=49446
+
+ Allow building without gtk-doc installed
+
+ Invalid edge generation whilst reducing complex polygons.
+ https://bugs.freedesktop.org/show_bug.cgi?id=50852
+
+ Stroking around tight cusps
+
+ Use locale correct formats for reading font subsetting and valid
+ buffers.
+ https://bugs.freedesktop.org/show_bug.cgi?id=51443
+
+ Ensure that the type1 subset includes all the glyph encodings
+ https://bugs.freedesktop.org/show_bug.cgi?id=53040
+
+ Upload the whole source for a repeating pattern.
+ https://bugs.freedesktop.org/show_bug.cgi?id=51910
+
+ Fix damage tracking to handle continuation chunks corectly and so
+ prevent crashes on win32.
+ https://bugs.freedesktop.org/show_bug.cgi?id=53384
+
+ Avoid emitting miter joins for degenerate line segments
+ https://bugzilla.mozilla.org/show_bug.cgi?id=407107
+
+ Convert the relative path semgents into the backend coordinates
+ and then back again to user coordinates (cairo_copy_path,
+ cairo_append_path)
+ https://bugs.freedesktop.org/show_bug.cgi?id=54732
+
+ Fix extents computations for a degenerate path consisting only of a
+ move-to
+ https://bugs.freedesktop.org/show_bug.cgi?id=54549
+
+ Prevent crashing on a degenerate project edge after polygon
+ intersection
+ https://bugs.freedesktop.org/show_bug.cgi?id=54822
+
+
+
+Release 1.12.2 (2012-04-29 Chris Wilson <chris@chris-wilson.co.uk>)
+===================================================================
+After such a long gestation period for the release of Cairo 1.12, we
+inevitably accumulated a few bugs that were flushed out by broadening the
+test base. Thanks to everybody who tried the release, apologies to any one
+unfortunate enough to encounter a bug and many thanks for reporting it. As
+a result Adrian Johnson, Alexandros Frantzis, Andrea Canciani, Kalev
+Lember, Maarten Bosman, Marcus Meissner, Nis Martensen and Uli Schlachter
+have squashed many more bugs and improved the documentation. I would
+strongly recommend everyone to upgrade to cairo-1.12.2.
+-Chris
+
+Bug fixes
+---------
+
+ Allow applications to create 0x0 xlib surfaces, such as used by LibreOffice.
+ https://bugs.freedesktop.org/show_bug.cgi?id=49118
+
+ Trim composite extents for SOURCE/CLEAR operators to the mask.
+
+ Use fallback fonts in PDF for unhandled computed glyph widths
+ https://bugs.freedesktop.org/show_bug.cgi?id=48349
+
+ Handle snapshots of recording surfaces for analysing pattern extents.
+ Fixes a regression of reporting the PDF bounding box as being the page size.
+
+ Fix allocation size for PDF pattern ids.
+ Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=49089
+
+ Fix emission of rectilinear dashed segments, with and without scaling, and
+ application of degenerate line joins.
+
+ Clamp unbounded fixup polygons to the clip extents.
+
+ Prevent infinite loop due to rounding errors whilst incrementing along dashes.
+
+ Prevent overflow for inline a8 span filling.
+
+ Miscellaneous build fixes for Cygwin on Windows and Solaris.
+
+Release 1.12.0 (2012-03-23 Chris Wilson <chris@chris-wilson.co.uk>)
+===================================================================
+It's taken over 18 months, but the wait is finally over. A new cairo release!
+We are pleased to annouce a new stable release of Cairo that brings many
+new features and performance improvements, all whilst maintaining
+compatibility with cairo-1.0 and all releases since. We recommend anyone
+using a previous release of Cairo to upgrade to 1.12.0.
+
+The major feature of this release is the introduction of a new procedural
+pattern; the mesh gradient. This, albeit complex, gradient is constructed
+from a set of cubic Bezier patches and is a superset of all other gradient
+surfaces which allows for the construction of incredibily detailed patterns.
+In PDF parlance, the mesh gradient corresponds with type 7 patterns. Many
+thanks to Andrea Canciani for bringing this to Cairo, and for his work on
+making gradient handling robust.
+
+Not content with just adding another procedural pattern, Cairo 1.12 also
+adds new API to create a callback pattern,
+cairo_pattern_create_raster_source, that allows the application to
+provide the pixel data for the region of interest at the time of
+rendering. This can be used for instance, by an application to decode
+compressed images on demand and to keep a cache of those decompressed
+images, independently of Cairo. When combined with the recording
+surface, it should form a useful basis for a deferred renderer.
+
+With the release of cairo-1.12, we also introduce a new supported
+backend for interoperating with X using XCB. Uli Schlachter, also
+maintainer of awesome and contributor to libxcb, has volunteered to
+maintain cairo-xcb for us. Thanks Uli!
+
+For cairo-1.12, we have also added some common API to address any
+surface as an image and so allow direct modification of the raster data.
+Previously, only the Quartz and Win32 backends supported a very narrow
+interface to allow for efficient pixel upload. Now with
+cairo_surface_create_similar_image, cairo_surface_map_to_image, and
+cairo_surface_unmap_image, Cairo exports a consistent method for
+treating those surfaces as an image and so allow modification inplace.
+These are the same routines used internally, and should support
+efficient transfer or direct mapping of the target surfaces as
+applicable.
+
+Another focus over the past year has been to address many performance
+issues, without sacrificing the composition model. To accomplish the
+goal, once again the rasterisation pipeline was overhauled and made
+explicit, giving the backends the freedom to implement their own
+specific pipeline whilst also providing a library of common routines
+from which to build the pipeline. For instance, this allows the image
+backend and the gl backend to composite scan line primitives inplace,
+and to then implement custom fallbacks to catch the corner cases that do
+not map onto their fastest paths. Similarly, this allows for the Xlib
+backend to implement trapezoidation without compromising the other
+backends, yet still allow for the pipeline to be used elsewhere for
+testing and fallbacks. Clipping was once again overhauled, so that the
+common cases for the raster pipelines could be captured and processed
+with fast paths with the emphasis on performing geometric clipping to
+reduce the frequency of using multi-pass clipmasks. Stroking was made
+faster, both by providing specialised fast-paths for simple, yet frequent,
+cases (such as stroking around a rectangle) and by reducing the number
+of edges generated by the general stroker.
+
+As part of the focus on performance, Cairo 1.12 introduces some
+antialias hints (NONE,FAST, GOOD, BEST) that are interpolated by the
+raserisers to fine tune their performance versus quality. Cairo 1.12
+also introduces a new observation architecture,
+cairo_surface_observer_t, which can be used to analyse the amount of
+time consumed by drawing commands and help identify inefficiencies in
+both Cairo and the application.
+
+Last, but by no means least, the OpenGL backend has seen significant
+work including the port to GLESv2 and the exploitation of advanced
+hardware features. Interesting times.
+
+As always, I would like to thank everyone who contributed to Cairo,
+not only through writing code, but also submitting documentation, bug
+reports, suggestions and generally having fun with Cairo! In particular
+though this release could not have happened without the efforts of
+Adrian Johnson, Alexandros Frantiz, Andrea Canicani, Martin Robinson,
+Nis Martensen, and Uli Schlachter. Thanks.
+-Chris
+
+Snapshot 1.11.4 (2012-13-12)
+============================
+The cairo community is pleased to finally announce the long aniticpated
+release candidate for 1.12, 1.11.4, of the cairo graphics library. This
+is the first major update to cairo in over a year and brings a large
+number of new features; undoubtably a few bugs as well.
+
+While many people have contributed and have helped to test the release,
+providing feedback on 1.10 and suggesting improvements, this release
+is the result of a few persevering souls who deserve recognition for their
+outstanding contributions: Andrea Canciani (all round bug fixing,
+performance tuning and master of the gradients), Adrian Johnson (PDF
+supremo) and Uli Schlachter (who stepped forward as maintainer for the
+XCB backend).
+
+Major additions since 1.11.2:
+
+ * cairo_surface_map_to_image API for pixel level access to any surface
+
+ * New antialias hints to control the trade-off between speed and quality
+
+ * A callback pattern, cairo_pattern_create_raster_source, for lazy
+ decoding of image data.
+
+ * cairo_surface_observer_t, a new type of surface to gather performance
+ statistics
+
+ * XCB as a supported backend
+
+ * A rewritten compositor pipeline for performance improvements for, but not
+ limited to, the xlib and image backends.
+ From ION and PineView through to SandyBridge, every machine I have shows
+ across the board performance improvement on the cairo-traces:
+
+ i5-2520m gnome-system-monitor: 5.97x speedup
+ pnv gnome-system-monitor: 4.86x speedup
+ i5-2520m firefox-asteroids: 4.66x speedup
+ pnv firefox-asteroids: 4.43x speedup
+ image firefox-canvas: 3.82x speedup
+ i5-2520m firefox-canvas-alpha: 3.49x speedup
+ image firefox-asteroids: 2.87x speedup
+ pnv firefox-talos-svg: 2.83x speedup
+ ion grads-heat-map: 2.75x speedup
+ pnv firefox-canvas-alpha: 2.66x speedup
+ image gnome-system-monitor: 2.66x speedup
+ image swfdec-giant-steps: 2.46x speedup
+ image firefox-canvas-alpha: 2.14x speedup
+ i5-2520m firefox-talos-svg: 2.03x speedup
+ image grads-heat-map: 2.02x speedup
+ ion gnome-system-monitor: 2.00x speedup
+ pnv firefox-particles: 1.99x speedup
+ i5-2520m grads-heat-map: 1.96x speedup
+ pnv firefox-canvas: 1.92x speedup
+ ion firefox-particles: 1.80x speedup
+ image poppler-reseau: 1.77x speedup
+ pnv xfce4-terminal-a1: 1.72x speedup
+ image firefox-talos-svg: 1.65x speedup
+ pnv grads-heat-map: 1.63x speedup
+ i5-2520m firefox-canvas: 1.63x speedup
+ pnv swfdec-youtube: 1.62x speedup
+ image ocitysmap: 1.59x speedup
+ i5-2520m firefox-fishbowl: 1.56x speedup
+ i5-2520m poppler-reseau: 1.50x speedup
+ i5-2520m evolution: 1.50x speedup
+ i5-2520m midori-zoomed: 1.43x speedup
+ pnv firefox-planet-gnome: 1.42x speedup
+ i5-2520m firefox-talos-gfx: 1.41x speedup
+ i5-2520m gvim: 1.41x speedup
+ pnv ocitysmap: 1.37x speedup
+ image poppler: 1.31x speedup
+ ion firefox-canvas-alpha: 1.35x speedup
+ ion firefox-talos-svg: 1.34x speedup
+ i5-2520m ocitysmap: 1.32x speedup
+ pnv poppler-reseau: 1.31x speedup
+ i5-2520m firefox-planet-gnome: 1.31x speedup
+ pnv firefox-fishbowl: 1.30x speedup
+ pnv evolution: 1.28x speedup
+ image gvim: 1.27x speedup
+ i5-2520m swfdec-youtube: 1.25x speedup
+ pnv gnome-terminal-vim: 1.27x speedup
+ pnv gvim: 1.25x speedup
+ image firefox-planet-gnome: 1.25x speedup
+ image swfdec-youtube: 1.25x speedup
+ ...
+
+And a plethora of minor improvements everywhere!
+-Chris
+
+Snapshot 1.11.2 (2011-01-23)
+===========================
+
+In this first snapshot along the way to cairo-1.12.0, we are very excited
+to announce the introduction of Bezier surface gradients, known as type
+6/7 gradients in PS/PDF parlance. This is the culmination of much work by
+the dynamic duo: Adrian Johnson and Andrea Canciani. Thanks guys!
+
+Also, I want to warmly welcome Uli Schlachter who recently joined the
+Cairo community on a mission. That mission is to make cairo-xcb a
+supported backend for 1.12. And for this snapshot he has made great
+strides in fixing all the bugs I had left behind. Thanks Uli!
+
+And we have also seen a new contributor, Alexandros Frantzis, who has
+begun bringing up cairo-gl for GLESv2 devices. Thanks Alex!
+
+And lastly, I must also thank Adrian and Andrea for the vast numbers of
+bugs that they have tackled between them, fixing all those little corner
+cases that lie hidden until too late.
+
+API additions:
+
+The ability to construct piece-wise Bezier surface gradients:
+
+ cairo_pattern_create_mesh
+
+ constructs a pattern of type CAIRO_PATTERN_TYPE_MESH using
+
+ cairo_pattern_mesh_begin_patch
+ cairo_pattern_mesh_end_patch
+ cairo_pattern_mesh_curve_to
+ cairo_pattern_mesh_line_to
+ cairo_pattern_mesh_move_to
+ cairo_pattern_mesh_set_control_point
+ cairo_pattern_mesh_set_corner_color_rgb
+ cairo_pattern_mesh_set_corner_color_rgba
+ cairo_pattern_mesh_get_patch_count
+ cairo_pattern_mesh_get_path
+ cairo_pattern_mesh_get_corner_color_rgba
+ cairo_pattern_mesh_get_control_point
+
+The introduction of a unique ID accessible via the mime data type:
+ CAIRO_MIME_TYPE_UNIQUE_ID
+
+
+
+
+
+Release 1.10.2 (2010-12-25 Chris Wilson <chris@chris-wilson.co.uk>)
+===================================================================
+The cairo community is pleased to announce the 1.10.2 release of the
+cairo graphics library. This is the first update to cairo's stable 1.10
+series and contains a large number of bug fixes.
+
+While many people have contributed and have help to test the release,
+2 people deserve special recognition for their efforts in tracking down
+and fixing bugs, Andrea Canciani and Adrian Johnson. Thanks to their
+tremendous efforts, and of all cairo contributors, it is much
+appreciated.
+
+We recommend everyone upgrade to cairo 1.10.2 and hope that everyone
+will continue to have lots of fun with cairo!
+
+-Chris
+
+Bug fixes
+---------
+
+ Fix embedding of grayscale jpegs in PS.
+ https://bugs.freedesktop.org/show_bug.cgi?id=31632
+
+ Fix the reported path of extents containing a curve.
+
+ Fix the compositing of unaligned boxes.
+
+ Reset the clipper in PDF upon finish.
+
+ Fix degenerates arcs to become a degenerate line.
+
+ Build support for autoconf 2.67
+
+ Fix painting of transformed patterns in PS
+
+ Fix the EPS bounding box for PS
+ https://bugs.freedesktop.org/show_bug.cgi?id=24688
+
+ Fix the missing content for EPS
+ https://bugs.freedesktop.org/show_bug.cgi?id=24688
+
+ Fix regression upon changing page size in PS/PDF
+ https://bugs.freedesktop.org/show_bug.cgi?id=24691
+
+ Only use ActualText with PDF-1.5 documents
+
+ Fix the bbox for type1 fallbacks.
+
+ Reset the color after ending the context in PDF
+ https://bugs.freedesktop.org/show_bug.cgi?id=31140
+
+ Fix the advance of subsetted type1 fonts
+ https://bugs.freedesktop.org/show_bug.cgi?id=31062
+
+ Fix handling of EXTEND_NONE gradients for PDF
+
+ Restrict in-place optimisation for a8 image masks with SOURCE
+
+
+Release 1.10.0 (2010-09-06 Chris Wilson <chris@chris-wilson.co.uk>)
+===================================================================
+The cairo community is astounded (and flabbergast) to finally announce
+the 1.10.0 release of the cairo graphics library. This is a major update
+to cairo, with new features and enhanced functionality which maintains
+compatibility for applications written using any previous major cairo
+release, (1.8, 1.6, 1.4, 1.2, or 1.0). We recommend that anybody using
+a previous version of cairo upgrade to cairo 1.10.0.
+
+One of the more interesting departures for cairo for this release is the
+inclusion of a tracing utility, cairo-trace. cairo-trace generates a
+human-readable, replayable, compact representation of the sequences of
+drawing commands made by an application. This can be used to inspecting
+applications to understand issues and as a means for profiling
+real-world usage of cairo.
+
+The traces generated by cairo-trace have been collected in
+
+ git://git.cairographics.org/git/cairo-traces
+
+and have driven the performance tuning of cairo over the last couple of
+years. In particular, the image backend is much faster with a new
+polygon rasterisation and a complete overhaul of the tessellator. Not
+only is this faster, but also eliminates visual artifacts from
+self-intersecting strokes. Not only has cairo-trace been driving
+performance improvements within cairo, but as a repeatable means of
+driving complex graphics it has been used to tune OpenGL, DDX, and
+pixman.
+
+Cairo's API has been extended to better support printing, notably
+through the ability to include a single compressed representation of an
+image for patterns used throughout a document, leading to dramatic file
+size reductions. Also the meta-surface used to record the vector
+commands compromising a drawing sequence is now exposed as a
+CAIRO_SURFACE_TYPE_RECORDING, along with a new surface that is a child of a
+larger surface, CAIRO_SURFACE_TYPE_SUBSURFACE. One typical usage of a
+subsurface would be as a source glyph in a texture atlas, or as a
+restricted subwindow within a canvas.
+
+Cairo's API has also resurrected the RGB16 format from the past as
+the prevalence of 16-bit framebuffers has not diminished and is a
+fore-taste of the extended format support we anticipate in the future.
+Increasing cairo's utility, we introduce the cairo_region_t for handling
+sets of pixel aligned rectangles commonly used in graphics applications.
+This is a merger of the GdkRegion and the pixman_region_t, hopefully
+providing the utility of the former with the speed of the latter.
+
+Furthermore cairo has been reworked to interoperate more closely with
+various acceleration architectures, gaining the ability to share
+those hardware resources through the new cairo_device_t. For instance,
+with the new OpenGL backend that supersedes the Glitz backend, hardware
+and rendering operations can be shared between a classic OpenGL
+application mixing libVA for the hardware assisted video decode with
+cairo for high quality overlays all within the same OpenGL canvas.
+
+Many thanks for the hard work of Adrian Johnson, Andrea Canciani, Behdad
+Esfahbod, Benjamin Otte, Carl Worth, Carlos Garcia Campos, Chris Wilson,
+Eric Anholt, Jeff Muizelaar, Karl Tomlinson, M Joonas Pihlaja, Søren
+Sandmann Pedersen and many others that have contributed over the last
+couple of years to cairo. Thank you all!
+
+Snapshot 1.9.14 (2010-07-26)
+============================
+
+ A quiet couple of weeks, hopefully Cairo is seeing widescale deployment and
+ we are being to see the results of the stabilisation effort. Clipping bugs
+ seems to have been the order of the last couple of weeks, with a couple
+ reported and duly fixed. Thank you Igor Nikitin and Karl Tomlinsion for
+ finding those regressions. At this point all that seems to remain to do is
+ to fix the outstanding regressions in the PDF backend...
+
+Bugs fixes
+----------
+
+ Clip doesn't work for text on the image backend
+ https://bugs.freedesktop.org/show_bug.cgi?id=29008
+
+ Add explicit dependency for cxx
+ https://bugs.freedesktop.org/show_bug.cgi?id=29114
+
+ Fix regressions in reporting clip extents
+ https://bugs.freedesktop.org/show_bug.cgi?id=29120
+ https://bugs.freedesktop.org/show_bug.cgi?id=29121
+ https://bugs.freedesktop.org/show_bug.cgi?id=29122
+ https://bugs.freedesktop.org/show_bug.cgi?id=29124
+ https://bugs.freedesktop.org/show_bug.cgi?id=29125
+
+
+Snapshot 1.9.12 (2010-07-12)
+============================
+
+ A couple of weeks spent fixing those annoying bugs and cleaning up the build
+ system; the list of outstanding tasks to complete for the stable release is
+ finally shrinking. The chief bug fixer has been Benjamin Otte who not only
+ made sure that the public API is consistent and being tested for its
+ consistency, but also ensured that the documentation was up-to-date and
+ spent time clarifying cases where even the Cairo developers have come
+ unstuck in the past. Many thanks, Benjamin. However, he was not alone,
+ as Andrea Canciani continued his fine work in isolating broken corner cases
+ and proceeding to fix them, and tidying up the quartz backend. And last, but
+ definitely not least, M Joonas Pihlaja tried building Cairo across a
+ perverse range of systems and fixed up all the loose bits of code that came
+ unravelled. Thanks everybody!
+
+API Changes
+-----------
+
+ cairo_surface_set_mime_data, cairo_surface_get_mime_data:
+
+ The length parameter is now an unsigned long (as opposed to an unsigned
+ int). The parameter is intended to be an equivalent to a size_t without
+ requiring POSIX types and be large enough to store the size of the
+ largest possible allocation.
+
+ cairo_gl_surface_create_for_texture:
+
+ This a new surface constructor for cairo-gl that explicitly enables
+ render-to-texture for foreign, i.e. application, textures.
+
+ cairo_region_xor, cairo_region_xor_rectangle
+
+ A couple of utility routines add to the region handling interface for
+ the purpose of replacing existing GdkRegion functionality.
+
+Bugs fixes
+----------
+
+ https://bugs.launchpad.net/ubuntu/+source/cairo/+bug/600622
+
+ Inkscape was caught in the act of attempting to modify a finished surface.
+ Unfortunately, we had the ordering of our guards and assertions wrong and
+ so an ordinary application error was triggering an assert in Cairo. This
+ lead Benjamin to add a test case to ensure that the entire public API
+ could handle erroneous input and then proceeded to fix a whole slew of
+ uncovered bugs.
+
+
+ https://bugs.freedesktop.org/show_bug.cgi?id=28888
+
+ A regression introduced by the special casing of uploading images to an
+ xlib surface in-place which was ignoring the translation applied to the
+ image.
+
+
+Snapshot 1.9.10 (2010-06-26)
+============================
+
+ The first "quick" snapshot in the run up to the stable release. The
+ last snapshot was picked up by the bleeding edge distributions and so the
+ bug reports have to started to roll in. The most frequent of these are the
+ introduction of rendering errors by applications that modify a surface
+ without subsequently calling cairo_surface_mark_dirty(). Make sure the
+ application developers are aware of increased reliance on strict use of the
+ Cairo API before 1.10 is released!
+
+ The usual slew of bugs reported and we would like to thank Zoxc for
+ contributing the WGL interface for cairo-gl, and finding more build
+ failures on win32. And it just wouldn't be a 1.9 snapshot unless
+ Benjamin Otte improved the error handling within cairo-gl, as well as
+ isolating and fixing some more errors in the test suite. The biggest bug of
+ the snapshot turned out to be a major sign extension issue that had lain
+ hidden for many years and was suddenly exposed by incorrectly rounding
+ rectangles when performing non-antialiased rendering. Also to the relief
+ of many we have included the downstream patch to honour the user's LCD
+ filtering preferences for subpixel rendering of fonts. The interface
+ remains private for the time being, whilst the proposed public API is
+ finalized.
+
+API changes
+-----------
+ None.
+
+Snapshot 1.9.8 (2010-06-12)
+===========================
+
+ One major API changes since the last snapshot, and a whole slew of bugs
+ fixed and inconsistencies eliminated. Far too many bugs fixed to
+ individually identify. We need to thank Benjamin Otte for his fantastic
+ work on the cairo-gl backend making it faster and more robust, Andrea
+ Canciani for finding so many bugs and developing test cases for them, as
+ well fixing them. And last but not least we must all thank Adrian Johnson for
+ continuing to eliminate bugs and improving the PostScript and PDF backends.
+
+ This snapshot represents almost 4 months of bug fixing, bringing Cairo to
+ a point where we consider it almost ready to be a candidate for release.
+ There are a few known bugs left to be fixed, being tracked in
+ https://bugs.freedesktop.org/show_bug.cgi?id=24384, so please give Cairo a
+ whirl and report any regressions. The plan is to release a new snapshot
+ every other week leading to a 1.10 release with a target date of
+ 2010-08-16.
+
+API additions
+-------------
+ CAIRO_FORMAT_RGB16_565
+
+ 16 bit devices still remain popular, and so with great demand,
+ CAIRO_FORMAT_RGB16_565 has been restored enabling applications to create
+ and use 16 bit images as sources and render targets.
+
+ cairo_surface_create_for_rectangle()
+
+ It is common practice to cut an image up into many smaller pieces and use
+ each of those as a source - a technique called texture atlasing.
+ cairo_surface_create_for_rectangle() extends Cairo to directly support use
+ of these subregions of another cairo_surface_t both as a source and as a
+ render target.
+
+ cairo_region_create()
+ cairo_region_create_rectangle()
+ cairo_region_create_rectangles()
+ cairo_region_copy()
+ cairo_region_reference()
+ cairo_region_destroy()
+ cairo_region_equal()
+ cairo_region_status()
+ cairo_region_get_extents()
+ cairo_region_num_rectangles()
+ cairo_region_get_rectangle()
+ cairo_region_is_empty()
+ cairo_region_contains_rectangle()
+ cairo_region_contains_point()
+ cairo_region_translate()
+ cairo_region_subtract()
+ cairo_region_subtract_rectangle()
+ cairo_region_intersect()
+ cairo_region_intersect_rectangle()
+ cairo_region_union()
+ cairo_region_union_rectangle()
+
+ The Cairo region API was actually added a couple of snapshots ago, but we
+ forgot to mention it at the time. A simple API for the handling of
+ rectangular pixel-aligned regions by Soeren Sandmann.
+
+
+Backend-specific improvements
+-----------------------------
+cairo-gl
+
+ Benjamin Otte made more than 200 commits in which he refactored the cairo-gl
+ backend, reducing a lot of code duplication and enabled him to begin working
+ on improving performance by reducing state changes and associated overhead.
+
+cairo-xlib
+
+ Access to the underlying connection to the Display is now thread-safe
+ enabling cairo-xlib to be used in a multi-threaded application without fear
+ of random corruption. Thanks Benjamin Otte!
+
+ cairo-xlib will now attempt to use PolyModeImprecise when compositing
+ trapezoids (i.e. a fill or a stroke operation with a non-trivial path) which
+ should allow hardware drivers more scope for accelerating the operation at
+ the cost of potentially incurring minute rendering errors. The mode can be
+ forced back to PolyModePrecise by setting the antialias parameter to
+ CAIRO_ANTIALIAS_SUBPIXEL.
+
+cairo-svg
+
+ A notable improvement was contributed by Alexander Shulgin to enable SVG to
+ reference external image through the use an extended MIME data type.
+
+Snapshot 1.9.6 (2010-02-19)
+===========================
+API additions
+-------------
+ Add cairo_device_t
+
+ The device is a generic method for accessing the underlying interface
+ with the native graphics subsystem, typically the X connection or
+ perhaps the GL context. By exposing a cairo_device_t on a surface and
+ its various methods we enable finer control over interoperability with
+ external interactions of the device by applications. The use case in
+ mind is, for example, a multi-threaded gstreamer which needs to serialise
+ its own direct access to the device along with Cairo's across many
+ threads.
+
+ Secondly, the cairo_device_t is a unifying API for the mismash of
+ backend specific methods for controlling creation of surfaces with
+ explicit devices and a convenient hook for debugging and introspection.
+
+ The principal components of the API are the memory management of:
+
+ cairo_device_reference(),
+ cairo_device_finish() and
+ cairo_device_destroy();
+
+ along with a pair of routines for serialising interaction:
+
+ cairo_device_acquire() and
+ cairo_device_release()
+
+ and a method to flush any outstanding accesses:
+
+ cairo_device_flush().
+
+ The device for a particular surface may be retrieved using:
+
+ cairo_surface_get_device().
+
+ The device returned is owned by the surface.
+
+API changes (to API new in the cairo 1.9.x series)
+--------------------------------------------------
+ cairo_recording_surface_create()
+ cairo_recording_surface_ink_extents()
+
+ These are the replacement names for the functions previously named
+ cairo_meta_surface_create and cairo_meta_surface_ink_extents.
+
+ cairo_surface_set_mime_data
+
+ This interface is now changed such that the MIME data will be
+ detached if the surface is modified at all. This guarantees that
+ the MIME data will not become out of synch due to surface
+ modifications, and also means that for the MIME data to be useful,
+ it must be set after all modifications to the surface are
+ complete.
+
+API removal (of experiment API)
+-------------------------------
+ The cairo-glitz backend is removed entirely, (in favor of the new
+ cairo-gl backend). See below for more on cairo-gl.
+
+Generic fixes
+-------------
+
+ Many improvements for drawing of dashed strokes
+
+ Fix incorrect handling of negative offset
+ Faster computation of first dash (avoids near-infinite looping)
+ Approximate extremely fine dash patterns with appropriate alpha value
+
+ Optimize spans-based renderers for repeated rows, (such as in a rounded rectangle)
+
+Backend-specific improvements
+-----------------------------
+cairo-drm
+
+ This is a new, direct-rendering backend that supports Intel graphics
+ chipsets in the i915 and i965 families. It's still experimental and
+ will likely remain that way for a while. It's already got extremely
+ good performance on the hardware it supports, so if nothing else
+ provides a working proof and performance target for the cairo-gl
+ work for Intel graphics.
+
+cairo-gl
+
+ Start using GLSL to accelerate many operations. Many thanks to Eric
+ Anholt and T. Zachary Laine for this work. For the first time, we
+ have what looks like what will be a very compelling OpenGL-based
+ backend for cairo (in terms of both quality and performance).
+
+ See this writeup from Eric for more details on recent progress of
+ cairo-gl (which he presented at FOSDEM 2010):
+
+ http://anholt.livejournal.com/42146.html
+
+cairo-image
+
+ The image backend is made dramatically faster (3-5 times faster for
+ benchmarks consisting primarily of glyph rendering).
+
+cairo-quartz fixes:
+
+ Many fixes from Robert O'Callahan and Andrea Canciani including:
+
+ Fixed gradient pattern painting
+ Improved A8 image handling
+ Fixes for "unbounded" and other compositing operators
+
+cairo-pdf fixes:
+
+ Improvements to embedding of JPEG and JPEG2000 data.
+
+cairo-ps fixes:
+
+ Fix printing of rotated user fonts.
+
+Snapshot 1.9.4 (2009-10-15)
+===========================
+API additions:
+
+ cairo_meta_surface_create()
+ cairo_meta_surface_ink_extents()
+
+ Finally exporting the internal meta-surface so that applications
+ have a method to record and replay a sequence of drawing commands.
+
+ cairo_in_clip()
+
+ Determines whether a given point is inside the current clip.
+ ??? Should this be called cairo_in_paint() instead? in-clip is the test
+ that is performed, but in-paint would be similar to in-fill and in-stroke.
+
+New utilities:
+
+ cairo-test-trace
+
+ A companion to cairo-perf-trace, this utility replays a trace against
+ multiple targets in parallel and looks for differences in the output,
+ and then records any drawing commands that cause a failure.
+ Future plans:
+ Further minimisation of the fail trace using "delta debugging".
+ More control over test/reference targets.
+
+Backend improvements:
+
+ xlib
+
+ Server-side gradients. The theory is that we can offload computation
+ of gradients to the GPU and avoid pushing large images over the
+ connection. Even if the driver has to fallback and use pixman to render
+ a temporary source, it should be able to do so in a more efficient manner
+ than Cairo itself. However, cairo-perf suggests otherwise:
+
+ On tiny, Celeron/i915:
+
+ before: firefox-20090601 211.585
+ after: firefox-20090601 270.939
+
+ and on tiger, CoreDuo/nvidia:
+
+ before: firefox-20090601 70.143
+ after: firefox-20090601 87.326
+
+ In particular, looking at tiny:
+
+ xlib-rgba paint-with-alpha_linear-rgba_over-512 47.11 (47.16 0.05%) -> 123.42 (123.72 0.13%): 2.62x slowdown
+ █▋
+ xlib-rgba paint-with-alpha_linear3-rgba_over-512 47.27 (47.32 0.04%) -> 123.78 (124.04 0.13%): 2.62x slowdown
+ █▋
+
+
+New experimental backends:
+
+ QT
+
+ OpenVG - The initial work was done by Øyvind Kolås, and made ready for
+ inclusion by Pierre Tardy.
+
+ OpenGL - An advanced OpenGL compositor. The aim is to write a integrate
+ directed rendering using OpenGL at a high-level into Cairo. In
+ contrast to the previous attempt using Glitz which tried to
+ implement the RENDER protocol on top of OpenGL, using the
+ high-level interface should permit greater flexibility and
+ more offloading onto the GPU.
+ The initial work on the backend was performed by Eric Anholt.
+
+Long standing bugs fixed:
+
+ Self-intersecting strokes.
+
+ A long standing bug where the coverage from overlapping semi-opaque
+ strokes (including neighbouring edges) was simply summed in lieu of
+ a costly global calculation has been fixed (by performing the costly
+ global calculation!) In order to mitigate the extra cost, the
+ tessellator has been overhauled and tune, which handles the fallback
+ for when we are unable to use the new span rasteriser on the stroke
+ (e.g. when using the current RENDER protocol). The large number of
+ pixel artefacts that implementing self-intersection elimination
+ removes is ample justification for the potential performance
+ regression. If you unfortunately do suffer a substantial performance
+ regression in your application, please consider obtaining a
+ cairo-trace and submitting it to us for analysis and inclusion into
+ our performance suite.
+
+Special thanks:
+
+ To the AuroraUX team for providing access to one of their OpenSolaris
+ machines for cairo and pixman development. http://www.auroraux.org/
+
+Snapshot 1.9.2 (2009-06-12)
+===========================
+API additions:
+
+ cairo_surface_set_mime_data()
+ cairo_surface_get_mime_data()
+
+ Should this take unsigned int, unsigned long or size_t for the length
+ parameter? (Some datasets may be >4GiB in size.)
+
+ Associate an alternate, compressed, representation for a surface.
+ Currently:
+ "image/jp2" (JPEG2000) is understood by PDF >= 1.5
+ "image/jpeg" is understood by PDF,PS,SVG,win32-printing.
+ "image/png" is understood by SVG.
+
+ cairo_pdf_version_t
+ cairo_pdf_surface_restrict_to_version()
+ cairo_pdf_get_versions()
+ cairo_pdf_version_to_string()
+
+ Similar to restrict to version and level found in SVG and PS,
+ these limit the features used in the output to comply with the PDF
+ specification for that version.
+
+ CAIRO_STATUS_INVALID_SIZE
+ Indicates that the request surface size is not supported by the
+ backend. This generally indicates that the request is too large.
+
+ CAIRO_STATUS_USER_FONT_NOT_IMPLEMENTED
+ Indicates that a required callback for a user-font was not implemented.
+
+ CAIRO_STATUS_LAST_STATUS
+ This is a special value to indicate the number of status values enumerated
+ at compile time. (This may differ to the number known at run-time.)
+
+ The built-in twin font is now called "@cairo:" and supports a limited set
+ of options like "@cairo:mono". Where are these specified?
+
+ cairo_in_fill() now uses HTML Canvas semantics, all edges are inside.
+
+New experimental backends:
+
+ CairoScript
+
+New utility:
+
+ cairo-trace and cairo-perf-trace
+
+ cairo-trace generates a human-readable, replayable, compact(-ish!)
+ representation of the sequences of drawing commands made by an
+ application.
+
+ Under the util/cairo-script directory is a library to replay traces.
+
+ perf/cairo-perf-trace replays traces against multiple backends
+ and makes useful benchmark reports. This is integrated with
+ 'make perf'. You may collect your own traces or take advantage
+ of traces collected by the community:
+
+ git://git.cairographics.org/git/cairo-traces
+
+ (Put this into perf/cairo-traces to run these as part of "make perf".)
+
+ There is additional WIP in building a debugging tool for cairo applications
+ based on CairoScript (currently very preliminary, mostly serves to show
+ that GtkSourceView is too slow) :
+
+ people.freedesktop.org:~ickle/sphinx
+
+Test suite overhaul:
+
+ The test suite is undergoing an overhaul, primarily to improve its speed
+ and utility. (Expect more changes in the near future to improve XFAIL
+ handling.)
+
+Optimisations:
+ polygon rasterisation! Joonas implemented the Tor polygon scan converter,
+ on typical geometry is about 30% faster for the image backend.
+
+ Bovine Polaroids! For those not in on the joke, this is the long
+ awaited "copy-on-write snapshot" or "COW snapshot" support. The
+ user-visible feature is that including the same image multiple times
+ into a PDF file should result in only a single instance of that
+ image in the final output. This is unlike previous versions of cairo
+ which would generate very large PDF files with multiple copies of
+ the same image. Adrian says that the PDF is not quite working as
+ well as it should yet, so we hope for futher improvements before
+ cairo 1.10.
+
+Bug fixes:
+
+ EXTEND_PAD.
+
+ Better handling of large scale-factors on image patterns.
+
+ Emit /Interpolate for PS,PDF images.
+
+ Global glyph cache - cap on the total number of inactive glyphs,
+ should prove fairer for fonts with larger glyph sets.
+
+ Compilation without fontconfig
+
+ Improved handling of low-bitdepth sources (e.g. copying the contents
+ of 16-bit xserver windows)
+
+Regressions:
+
+ cairo_traps_extract_region >10x slower. Fix pending.
+
+Still to come:
+
+ Region tracking API (ssp) for damage tracking, hit testing etc
+ mime-surface
+
+ An expiremental OpenGL backend?
+
+ Tweaks to tessellator, allocations of patterns, delayed
+ initialisation of the xlib backend (reduce the cairo overhead of
+ render_bench by ~80%).
+
+
+Release 1.8.8 (2009-06-16 Chris Wilson <chris@chris-wilson.co.uk>)
+==================================================================
+The cairo community is pleased to announce the 1.8.8 release of the
+cairo graphics library. This is the fourth update to cairo's stable
+1.8 series and contains a small number of bug fixes (in particular a
+few corrections to the documentation and a few fixes in the FreeType font
+backend). This is being released just over six months after cairo 1.8.6.
+
+We recommend that everyone using cairo upgrade to 1.8.8.
+
+-Chris
+
+Build fixes
+-----------
+There were reports of incompatibilities with the autotools bundled in with
+the 1.8.6 tarball. This release has been built with automake-1.10.2 and
+autoconf-2.63.
+
+The configure check for FreeType has been improved:
+
+ typo in check for version of freetype in configure script
+ https://bugs.freedesktop.org/show_bug.cgi?id=19283
+
+Compilation on 64-bit MacOS/X fixes:
+
+ Cannot build cairo_quartz_font_face_create_for_atsu_font_id on 64-bit Mac OS X
+ https://bugs.freedesktop.org/show_bug.cgi?id=15702
+
+Bug fixes
+---------
+Uninitialised status return within _cairo_clip_intersect_mask(). This caused
+random crashes and general mayhem as an error could be generated causing all
+rendering to the context to stop.
+
+Avoid transforming nearly-degenerate matrices into degenerate matrices:
+
+ Painting stops in this case, using -moz-transform: scale, rotate and video
+ https://bugzilla.mozilla.org/show_bug.cgi?id=467423
+
+A few FreeType font handling bugs were fixed:
+
+ Rendering with PANGO_GRAVITY_EAST leads to different results with image and pdf
+ https://bugs.freedesktop.org/show_bug.cgi?id=21985
+
+ Don't call FT_Done_Face() on faces we did not create
+
+ zombie ft_font_face / ft_unscaled_font mutual referencing problems
+ http://bugs.freedesktop.org/show_bug.cgi?id=21706
+
+Ensure win32 font backend sets the return value to -1 (indicating the absent
+glyph) if the font index lookup for the unicode character fails. And
+similarly fix a bug where a fatal error was raised for an invalid glyph.
+
+ cairo_scaled_font_glyph_extents breaks with invalid glyph id
+ http://bugs.freedesktop.org/show_bug.cgi?id=20255
+
+Various improvements to the documentation, reported by Truc Troung:
+
+ https://bugs.freedesktop.org/show_bug.cgi?id=20095
+ https://bugs.freedesktop.org/show_bug.cgi?id=20154
+ https://bugs.freedesktop.org/show_bug.cgi?id=20180
+ https://bugs.freedesktop.org/show_bug.cgi?id=20183
+ https://bugs.freedesktop.org/show_bug.cgi?id=20182
+ https://bugs.freedesktop.org/show_bug.cgi?id=20441
+
+
+Release 1.8.6 (2008-12-13 Chris Wilson <chris@chris-wilson.co.uk>)
+==================================================================
+The cairo community is pleased to announce the 1.8.6 release of the
+cairo graphics library. This is the third update to cairo's stable
+1.8 series and contains a small number of bug fixes (in particular a
+few fixes for failures of cairo 1.8.4 on Quartz and PDF, and build fixes for
+a couple of backends). This is being released just under a month after
+cairo 1.8.4.
+
+We recommend that everyone using cairo upgrade to 1.8.6.
+
+-Chris
+
+Build fixes
+-----------
+Fix build of DirectFB backend with debugging enabled:
+
+ Bug in _cairo_directfb_surface_release_source_image function
+ http://bugs.freedesktop.org/show_bug.cgi?id=18322
+
+Fix build on OS/2.
+
+Bug fixes
+---------
+Workaround a mis-compilation of cairo_matrix_invert() that generated invalid
+matrices and triggered assertion failures later. The issue was reported by
+Peter Hercek.
+
+Invalid computation of the modulus:
+
+ https://bugzilla.mozilla.org/show_bug.cgi?id=466258
+
+Invalid referencing of patterns in the Quartz backend:
+
+ Failed assertion `CAIRO_REFERENCE_COUNT_HAS_REFERENCE
+ (&pattern->ref_count)' when using cairo quartz backend
+ http://bugs.freedesktop.org/show_bug.cgi?id=18632
+
+Invalid references to glyphs after early culling, causing segmentation faults
+in the PDF backend:
+
+ http://lists.cairographics.org/archives/cairo/2008-December/015976.html
+
+Check for XRender in the XCB backend, or else we may attempt an invalid memory
+access:
+
+ XCB backend fails with missing render.
+ https://bugs.freedesktop.org/show_bug.cgi?id=18588
+
+Release 1.8.4 (2008-11-14 Carl Worth <cworth@cworth.org>)
+=========================================================
+The cairo community is pleased to announce the 1.8.4 release of the
+cairo graphics library. This is the second update to cairo's stable
+1.8 series and contains a small number of bug fixes, (in particular a
+few fixes for build failures of cairo 1.8.2 on various systems). This
+is being released just over two weeks after cairo 1.8.2.
+
+We recommend that everyone using cairo upgrade to 1.8.4.
+
+-Carl
+
+Build fixes
+-----------
+Fix build with older XRender that doesn't define RepeatNone:
+
+ Build of xlib backend fails against old XRender (RepeatNone undeclared)
+ https://bugs.freedesktop.org/show_bug.cgi?id=18385
+
+Fix build with bash version <= 3.0:
+
+ doltlibtool broken on linux with bash 3.00.0
+ https://bugs.freedesktop.org/show_bug.cgi?id=18363
+
+Bug fixes
+---------
+Avoid triggering a bug in X.org server 6.9 resulting in a hung machine
+requiring a reboot:
+
+ https://bugs.freedesktop.org/show_bug.cgi?id=15628#c2
+
+Fix display of user fonts as exercised by proposed support for type3
+fonts in poppler (unsigned promotion fixes):
+
+ Use cairo user-font for Type 3 fonts
+ http://lists.freedesktop.org/archives/poppler/2008-October/004181.html
+
+Avoid miscomputing size of fallback images required when rendering
+with CLEAR, IN, or SOURCE operator to vector surfaces, (PS, PDF, SVG,
+etc.).
+
+Be more tolerant of broken fonts when subsetting type1 fonts:
+
+ Error handling in cairo_type1_font_subset_get_glyph_names_and_widths
+ http://lists.cairographics.org/archives/cairo/2008-October/015569.html
+
+Fix cairo_fill_extents, cairo_stroke_extents, cairo_path_extents, to
+correctly allow NULL parameters as documented.
+
+Fix potential crash on emitting a type3 glyph after having drawn text
+paths from the same font, (for example with cairo_text_path).
+
+Release 1.8.2 (2008-10-29 Carl Worth <cworth@cworth.org>)
+=========================================================
+The cairo community is pleased to announce the 1.8.2 release of the
+cairo graphics library. This is the first update to cairo's stable 1.8
+series and contains a large number of bug fixes. It is being released
+just over one month since cairo 1.8.0.
+
+This release consists primarily of bug fixes, but there is one notable
+new feature, (the ability to build cairo without an external font
+backend), and there are a few optimizations as well. See below for
+details on these changes and the most important bug fixes.
+
+While many people have contributed to this release, Chris Wilson
+deserves particular mention. He has contributed well over twice as
+many changes to cairo since 1.8.0 than everyone else combined. We
+greatly appreciate the tremendous efforts of Chris and all cairo
+contributors.
+
+We recommend everyone upgrade to cairo 1.8.2 and hope that everyone
+will have lots of fun with cairo!
+
+-Carl
+
+New feature
+-----------
+It is now possible to build cairo without any font backend, (such as
+freetype, win32 or quartz). This is most useful when the application
+provides custom font rendering through the user-font API. But in the
+case where no external font backend is available, and no user-font is
+provided, cairo will render with a failsafe font, (a stroked font
+covering visible ASCII character). (Behdad Esfahbod)
+
+Optimizations
+-------------
+Dramatically speed up compilation with dolt (removes much of the
+libtool overhead) (Behdad Esfahbod with thanks to Josh Triplett).
+
+Several minor optimizations to tessellator (special-cased comparisons,
+faster insert for skiplist, etc.) (Chris Wilson).
+
+Optimize away fractional translation component when doing
+EXTEND_NEAREST filtering, (for better performance).
+
+General bug fixes
+-----------------
+Allow cloning sub-regions of similar surfaces to fix this bug
+(Chris Wilson):
+
+ Crafted gif file will crash firefox
+ [XError: 'BadAlloc (insufficient resources for operation)']
+ https://bugzilla.mozilla.org/show_bug.cgi?id=424333
+
+Fix some matrix confusion to fix this regression (Chris Wilson):
+
+ Translucent star exports in a wrong way to PDF
+ https://bugs.launchpad.net/inkscape/+bug/234546
+
+Fix some long-standing bugs with respect to properly computing the
+extents of transformed, filtered surfaces (Owen Taylor, Carl Worth,
+and Chris Wilson):
+
+ Bad clipping with EXTEND_NONE
+ http://bugs.freedesktop.org/show_bug.cgi?id=15349
+
+ Improve filtering handling in cairo-pattern.c
+ http://bugs.freedesktop.org/show_bug.cgi?id=15367
+
+ Many thanks to Chris Wilson for digging out and cleaning up
+ these fixes.
+
+Fix compilation on Solaris 10 (Chris Wilson):
+
+ Cairo requires -DREENTRANT (along with -D_POSIX_THREAD_SEMANTICS)
+ to compile on Solaris 10 with pthreads
+ https://bugs.freedesktop.org/show_bug.cgi?id=18010
+
+Fix very old bug causing dashes to be rendered at the wrong length in
+fallback images (Adrian Johnson)
+
+ Dashed strokes too long in fallback images
+ https://bugs.freedesktop.org/show_bug.cgi?id=9189
+
+Fix broken dashing when a dashed path starts outside the clip region
+(Chris Wilson).
+
+Avoid range overflow when computing large patterns (Benjamin Otte and
+Chris Wilson).
+
+Avoid crashing due to an invalid font with an incorrect entry in its
+CMAP table (Adrian Johnson).
+
+Fix bugs in computing maximum size of text requests that can be sent
+with the Render extension, (avoiding potential crashes when rendering
+large amounts of text) (Behdad Esfahbod and Chris Wilson).
+
+Fix rendering of operators unbounded by the mask (Chris Wilson).
+
+Fix compilation on systems without compiler support for a native
+64-bit type (Chris Wilson).
+
+Fix several cases of missing error-status propagation. (Chris Wilson,
+doing the work he seems to never tire of).
+
+Fix several locking issues found with the lockdep valgrind skin (Chris
+Wilson).
+
+Backend-specific bug fixes
+--------------------------
+xlib: Avoid crash due to attempting XRender calls on pixmaps with
+formats not supported by the Render extension (Chris Wilson):
+
+ XRender crashes due to NULL pointer from Cairo on SGI O2
+ https://bugs.freedesktop.org/show_bug.cgi?id=11734
+
+xlib: Add support for XImages with depth of 4, 20, 24, or 28 bits
+(Chris Wilson):
+
+ cairo doesn't support 24 bits per pixel mode on X11
+ https://bugs.freedesktop.org/show_bug.cgi?id=9102
+
+xlib: Avoid mistakenly considering two surfaces as similar just
+because their depths match (while their Render formats do not) (Karl
+Tomlinson).
+
+ps: Fix slight mis-scaling of bitmapped fonts (Adrian Johnson)
+
+svg: Correctly emit comp-op for paint, mask, and show_glyphs
+operations (Emmanuel Pacaud).
+
+svg: Use finer-grained fallbacks for SVG 1.2 (as PS and PDF backends
+have been doing since 1.6.0) (Chris Wilson).
+
+win32: Fallback to DIB if DDB create fails for
+cairo_surface_create_similar (Vladimir Vukicevic).
+
+win32: Fix compatibility with Windows Mobile (Vladimir Vukicevic).
+
+win32: Fix static builds to not do __declspec(dllimport) on public
+functions. This requires the user to set a CAIRO_WIN32_STATIC_BUILD
+environment variable when compiling (Behdad Esfahbod).
+
+Release 1.8.0 (2008-09-25 Carl Worth <cworth@cworth.org>)
+=========================================================
+The cairo community is happy (and relieved) to announce the 1.8.0
+release of the cairo graphics library. This is a major update to
+cairo, with new features and enhanced functionality which maintains
+compatibility for applications written using any previous major cairo
+release, (1.6, 1.4, 1.2, or 1.0). We recommend that anybody using a
+previous version of cairo upgrade to cairo 1.8.0.
+
+The dominant theme of this release is improvements to cairo's ability
+to handle text. The highlights include a new "user fonts" feature as
+well as a new cairo_show_text_glyphs API which allows glyphs to be
+embedded in PDF output along with their original text, (for searching,
+selection, and copy-and-paste). Another major feature is a revamp of
+cairo's build system making it much easier to build cairo on various
+platforms.
+
+See below for more details.
+
+User fonts
+----------
+This new API allows the user of cairo API to provide drawings for
+glyphs in a font. A common use for this is implementing fonts in
+non-standard formats, like SVG fonts and Flash fonts. This API can
+also be used by applications to provide custom glyph shapes for fonts
+while still getting access to cairo's glyph caches. See
+test/user-font.c and test/user-font-proxy.c for usage examples. This
+is based on early work by Kristian Høgsberg. Thanks Kristian!
+
+This new API consists of the following functions (and corresponding
+_get functions):
+
+ cairo_user_font_face_create
+
+ cairo_user_font_face_set_init_func
+ cairo_user_font_face_set_render_glyph_func
+ cairo_user_font_face_set_text_to_glyphs_func
+ cairo_user_font_face_set_unicode_to_glyph_func
+
+An additional, new API is
+
+ cairo_scaled_font_text_to_glyphs
+
+We were previously reluctant to provide this function as
+text-to-glyphs support in cairo was limited to "toy" font
+functionality, not really interesting for real-world text
+processing. However, with user fonts landing, this API is needed to
+expose full access to how user fonts convert text to glyphs. This is
+expected to be used by text toolkits like Pango, as well as "proxy"
+user-font implementations.
+
+cairo_show_text_glyphs
+----------------------
+This new API allows the caller of cairo to provide text data
+corresponding to glyphs being drawn. The PDF backend implements this
+new API so that complex text can be copied out of cairo's PDF output
+correctly and reliably, (assuming the user of cairo calls
+cairo_show_text_glyphs). The cairo_show_text_glyphs API is definitely
+the most daunting API to debut in cairo. It is anticipated that pango
+(and similar high-level text libraries) will be the primary users of
+this API. In fact, pango 1.22 already uses cairo_show_text_glyphs.
+Behdad was the architect and implementor of this effort. Thanks,
+Behdad!
+
+The cairo_show_text_glyphs API includes the following new functions:
+
+ cairo_show_text_glyphs
+
+ cairo_glyph_allocate
+ cairo_glyph_free
+
+ cairo_text_cluster_allocate
+ cairo_text_cluster_free
+
+ cairo_surface_has_show_text_glyphs
+
+Build system revamp
+-------------------
+The primary goal of the revamp is to make the build system less
+fragile, (particularly for non-Linux platforms). For example, now
+people building on win32 will no longer need to maintain a
+platform-specific list of files to be built. See the new README.win32
+for details. Also, the .so file will now be installed with a different
+naming scheme, (for example, 1.7.6 will install with a .10800
+suffix). Many thanks to Behdad and his small army of helpers!
+
+Assorted API additions
+----------------------
+For API completeness, several missing "getter" functions were added:
+
+ cairo_scaled_font_get_scale_matrix
+
+ cairo_surface_get_fallback_resolution
+
+ cairo_toy_font_face_create
+ cairo_toy_font_face_get_family
+ cairo_toy_font_face_get_slant
+ cairo_toy_font_face_get_weight
+
+The new cairo_toy_font_face functions provide access to functionality
+and settings provided by cairo_select_font_face(). Thanks Behdad!
+
+cairo-ps/cairo-pdf: More efficient output
+-----------------------------------------
+Adrian Johnson has been busy fixing all kinds of bugs in PS and PDF
+backends, as well making them generate much more compact output by
+avoiding things like re-emitting the color or linestyle on every
+drawing operation. Thanks Adrian!
+
+cairo-xlib: dithering
+---------------------
+Dithering: Cairo now does simple dithering when rendering to legacy X
+servers. This is most visible with 8-bit visuals. Thanks Behdad!
+
+cairo-xlib: Avoid rendering glyphs out of surface bounds
+--------------------------------------------------------
+This seemingly harmless optimization exposed a bug in OpenOffice.org 3
+versions where OO.o was passing bogus surface extents to cairo,
+resulting in no text rendered in OO.o. Please contact your
+distribution's OO.o maintainers if you see this bug and point them to
+the following URL:
+
+ https://bugs.freedesktop.org/show_bug.cgi?id=16209
+
+cairo-xlib: Improved performance with X server without Render
+-------------------------------------------------------------
+Cairo now performs better on remote X servers that lack the Render
+extension by being smarter about using X core protocol facilities
+instead of falling back to doing all rendering on the client side.
+
+cairo-ft: respecting FC_FT_FACE
+-------------------------------
+Previously it was impossible to instruct cairo to do emboldening on a
+font face object created from an FT_Face. Cairo now respects and uses
+the FC_FT_FACE fontconfig pattern element, so emboldening can be
+achieved by using cairo_ft_font_face_create_for_pattern() and a
+carefully crafted pattern using FC_FT_FACE and FC_EMBOLDEN. Thanks
+Behdad!
+
+cairo-directfb: backend improvements
+------------------------------------
+The directfb backend, though still unsupported, has seen a good deal
+of improvements. Thanks Vlad!
+
+Bug fixing and optimizations
+----------------------------
+xlib: Faster bookkeeping (Karl Tomlinson)
+ https://bugzilla.mozilla.org/show_bug.cgi?id=453199#c5
+
+PS: Fix gradients with non-constant alpha (Chris Wilson)
+
+Fix deadlock in user-font code (Richard Hughes and Behdad Esfahbod)
+ http://bugs.freedesktop.org/show_bug.cgi?id=16819
+
+Countless other bugs have been fixed and optimizations made, many of
+them thanks to Chris Wilson. Thanks Chris and others!
+
+Note also that the code that had been in cairo 1.7.x calling into
+freetype's optional lcd_filter function was removed from cairo before
+the 1.8.0 release. We do expect this code to come back in some form in
+the future.
+
+Snapshot 1.7.6 (2008-09-17 Carl Worth <cworth@cworth.org>)
+==========================================================
+The cairo community is happy to announce the 1.7.6 snapshot of the
+cairo graphics library. This is a "release candidate" for the upcoming
+1.8.0 release, so we will greatly appreciate any reports of problems
+in this release, and no major changes are currently planned before
+1.8.
+
+Notable changes in 1.7.6
+------------------------
+The largest number of changes since 1.7.4 did not change the
+implementation of cairo itself, but instead revamped cairo's build
+system. The primary goal of the revamp is to make the build system
+less fragile, (particularly for non-Linux platforms). For example, now
+people building on win32 will no longer need to maintain a
+platform-specific list of files to be built. Also, the .so file will
+now be installed with a different naming scheme, (for example, 1.7.6
+will install with a .10706 suffix). Much thanks, Behdad!
+
+And, as usual, Chris Wilson has made another large round of robustness
+improvements, (eliminating dead code, fixing propagation of error
+status values, test suite improvements, etc. etc.). Thanks as always,
+Chris!
+
+API changes since 1.7.4
+-----------------------
+There have been a few changes of API that was new during the 1.7
+series:
+
+* Remove cairo_font_options_set_lcd_filter
+ and cairo_font_options_get_lcd_filter
+
+ Motivation: At the Cairo Summit, this API was determined to be too
+ specific to the freetype font backend to be in the general
+ API. A similar API with a cairo_ft prefix might be introduced
+ in the future. Note that cairo will still respect the
+ corresponding fontconfig settings for these options.
+
+* Replace cairo_has_show_glyphs
+ with cairo_surface_has_show_glyphs
+
+ Motivation: This really is a surface-specific interface, and the
+ convenience function on the cairo_t is not obviously
+ necessary. An application can easily call:
+
+ cairo_surface_has_show_glyphs (cairo_get_target (cr));
+
+ as needed.
+
+* Add cairo_text_cluster_flags_t
+ to cairo_show_text_glyphs
+ cairo_scaled_font_text_to_glyphs
+ cairo_user_scaled_font_text_to_glyphs_func_t
+
+ Motivation: This flag, (and specifically the
+ CAIRO_TEXT_CLUSTER_FLAG_BACKWARD value), replaces the
+ cairo_bool_t backward argument in each of the above
+ interfaces. This leads to more readable user code, and also
+ allows future extensibility.
+
+As always, there are no changes to any API from any major cairo
+release, (1.0.x, 1.2.x, 1.4.x, 1.6.x). Cairo maintains the same
+compatibility promise it always has.
+
+Bug fixes since 1.7.4
+---------------------
+xlib: Faster bookkeeping (Karl Tomlinson)
+ https://bugzilla.mozilla.org/show_bug.cgi?id=453199#c5
+
+PS: Fix gradients with non-constant alpha (Chris Wilson)
+
+Fix deadlock in user-font code (Richard Hughes and Behdad Esfahbod)
+ http://bugs.freedesktop.org/show_bug.cgi?id=16819
+
+Several other minor fixes.
+
+Snapshot 1.7.4 (2008-08-11 Behdad Esfahbod <behdad@behdad.org>)
+===============================================================
+The cairo community is embarrassed to announce availability of the 1.7.4
+snapshot of the cairo graphics library. This is a followup release to the
+1.7.2 snapshot to ship a tarball that can actually be built. The only
+change since 1.7.4 is including the missing header file
+cairo-user-font-private.h in the distribution.
+
+Snapshot 1.7.2 (2008-08-11 Behdad Esfahbod <behdad@behdad.org>)
+===============================================================
+The cairo community is finally ready to announce availability of the 1.7.2
+snapshot of the cairo graphics library. This is embarrassingly the first
+snapshot in the 1.7 unstable series of cairo, leading to the eventual release
+of cairo 1.8, currently planned for late September.
+
+This snapshot comes four months after the 1.6.4 release. We have done a
+really bad job on getting development snapshots out this cycle, but
+hopefully all the API changes for 1.8 are now finished and the remaining
+weeks will be spent on bug-fixing. There is more than 400 commits worth
+of changes in this snapshot, and those can use some testing. Read on!
+
+Text, text, and more text!
+--------------------------
+The dominant theme of this release, and 1.8 in general, is improvements
+around cairo text API. Here is a high-level list of changes with text
+handling:
+
+User fonts
+----------
+This is new API allowing the user of cairo API to provide drawings for glyphs
+in a font. This is most useful in implementing fonts in non-standard formats,
+like SVG fonts and Flash fonts, but can also be used by games and other
+applications to draw "funky" fonts. See test/user-font.c and
+test/user-font-proxy.c for usage examples. This is based on early work by
+Kristian Høgsberg. Thanks Kristian!
+
+show_text_glyphs
+----------------
+This new API allows the caller of cairo to mark text glyphs with their
+original text. The PDF backend implements this new API and latest Pango
+master uses it. The result is (when bugs are fixed) that complex text can be
+copied out of pangocairo's PDF output correctly and reliably. There are bugs
+to fix though. A few poppler bugs, and some more in cairo and pango.
+
+To test show_text_glyph, just grab pango master and this cairo snapshot and
+print text in gedit. Open in acroread or evince, select all, copy, paste
+in gedit and compare. The Arabic text with diacritic marks is particularly
+showing bad. Try with pango/pango-view/HELLO.txt if you are brave
+enough. The Indic text is showing improvements, but is still coming out
+buggy.
+
+LCD subpixel filtering using FreeType
+-------------------------------------
+FreeType 2.3.5 added support for various LCD subpixel filtering, and
+fontconfig 2.6.0 added support for configuring LCD filter on a font by font
+basis. Cairo now relies on FreeType and fontconfig for subpixel filtering.
+This work is based on David Turner's original patch to cairo, maintained
+and tested by Sylvain Pasche and others. Thanks all!
+
+Toy font face constructor and getter
+------------------------------------
+Mostly for API completion, but also useful for higher level (like Pango) to
+hook into what the user has set using cairo_select_font_face(), making that
+toy API a bit more useful.
+
+FreeType: respecting FC_FT_FACE
+-------------------------------
+Previously it was impossible to instruct cairo to do emboldening on a font
+face object created from an FT_Face. Cairo now respects and uses the
+FC_FT_FACE fontconfig pattern element, so emboldening can be achieved by
+using cairo_ft_font_face_create_for_pattern() and a carefully crafted pattern
+using FC_FT_FACE and FC_EMBOLDEN.
+
+
+PS/PDF: More efficient output
+-----------------------------
+Adrian Johnson has been busy fixing all kinds of bugs in PS and PDF
+backends, as well making them generate much more compact output by avoiding
+things like re-emitting the color or linestyle on every drawing operation.
+Thanks Adrian!
+
+
+Xlib: Dithering
+---------------
+Cairo now does simple dithering when rendering to legacy X servers. This is
+mostly visible with 8-bit visuals.
+
+Xlib: Avoid rendering glyphs out of surface bounds
+--------------------------------------------------
+This seemingly harmless change manifested a bug with OpenOffice.org 3 versions
+where OO.o was passing bogus surface extents to cairo, resulting in no text
+rendered in OO.o. Please contact your distro's OO.o maintainers if you see
+this bug and point them to the following URL:
+
+ https://bugs.freedesktop.org/show_bug.cgi?id=16209
+
+Xlib: Improved performance with Xrender-less X servers
+------------------------------------------------------
+Cairo now performs better on remote, Xrender-less X servers by being smarter
+about using X core protocol facilities instead of falling back to doing all
+rendering on the client side.
+
+
+Directfb: backend improvements
+------------------------------
+The directfb backend, though still unsupported, has seen a good deal of
+improvements. Thanks Vlad!
+
+
+Bug fixing and optimizations
+----------------------------
+Countless bugs have been fixed and optimizations made, many of them thanks to
+Chris Wilson. Thanks Chris!
+
+
+API additions
+-------------
+
+cairo_show_text_glyphs
+
+ This is a new text rendering API. Being a more advanced version of
+ cairo_show_glyphs(), it is aimed for use by higher-level text toolkits like
+ Pango, and enables better text extraction from output generated by backends
+ like PDF and SVG. The PDF backend already implements it, and the upcoming
+ Pango release will use it.
+
+ To make that API work, a bunch of other additions were made:
+
+cairo_glyph_allocate
+cairo_glyph_free
+cairo_text_cluster_t
+cairo_text_cluster_allocate
+cairo_text_cluster_free
+cairo_surface_has_show_text_glyphs
+
+
+cairo_user_font_face_create
+
+ This is the "user" font face constructor, accompanied by a variety of method
+ signatures, getters, and setters for a callback-based font backend:
+
+CAIRO_FONT_TYPE_USER
+cairo_user_scaled_font_init_func_t
+cairo_user_scaled_font_render_glyph_func_t
+cairo_user_scaled_font_text_to_glyphs_func_t
+cairo_user_scaled_font_unicode_to_glyph_func_t
+cairo_user_font_face_set_init_func
+cairo_user_font_face_set_render_glyph_func
+cairo_user_font_face_set_text_to_glyphs_func
+cairo_user_font_face_set_unicode_to_glyph_func
+cairo_user_font_face_get_init_func
+cairo_user_font_face_get_render_glyph_func
+cairo_user_font_face_get_text_to_glyphs_func
+cairo_user_font_face_get_unicode_to_glyph_func
+
+
+cairo_scaled_font_text_to_glyphs
+
+ We were previously reluctant to provide this function as text-to-glyphs
+ support in cairo was limited to "toy" font functionality, not really
+ interesting for real-world text processing. However, with user-fonts
+ landing, this API is needed to expose full access to how user-fonts
+ convert text to glyphs. This is expected to be used by text toolkits like
+ Pango, as well as "proxy" user-font implementations.
+
+
+cairo_lcd_filter_t
+cairo_font_options_set_lcd_filter
+cairo_font_options_get_lcd_filter
+
+ These add the possibility to choose between various available LCD subpixel
+ filters. The available filter values are modeled after what FreeType
+ provides.
+
+
+cairo_toy_font_face_create
+cairo_toy_font_face_get_family
+cairo_toy_font_face_get_slant
+cairo_toy_font_face_get_weight
+
+ These provide access to functionality and settings provided by
+ cairo_select_font_face().
+
+
+cairo_scaled_font_get_scale_matrix
+cairo_surface_get_fallback_resolution
+
+ For API completeness.
+
+
+Various new values for cairo_status_t enum
+
+
+Known issues:
+
+- Type3 fonts generated by cairo's PDF backend may show up in poppler/Evince
+ in a different color than expected. This is fixed in poppler master branch.
+ This mostly affects cairo user fonts. The test case test/user-font.c
+ demonstrates this.
+
+- User fonts using other fonts in their rendering are currently embedded in
+ PDF as fallback bitmap glyphs. This will be (hopefully) fixed before 1.8.
+ The test case test/user-font-proxy.c demonstrates this.
+
+
+Release 1.6.4 (2008-04-11 Carl Worth <cworth@cworth.org>)
+=========================================================
+The cairo community is wildly embarrassed to announce the 1.6.4
+release of the cairo graphics library. This release reverts the xlib
+locking change introduced in 1.6.4, (and the application crashes that
+it caused). The community would be glad to sack its current release
+manager and is accepting applications for someone who could do the job
+with more discipline.
+
+Revert 'add missing locking in cairo-xlib'
+------------------------------------------
+This change was introduced in cairo 1.6.2, but also introduced a bug
+which causes many cairo-xlib applications to crash, (with a
+segmentation fault inside of XSetClipMask). Instead of attempting
+another fix for the broken fix, the change in 1.6.2 has been
+reverted. The original bug which the change was addressing has been
+present since at least cairo 1.4, so it is not expected that leaving
+this bug unfixed will cause any new problems for applications moving
+from cairo 1.4 to cairo 1.6.
+
+At this point, the code of cairo 1.6.4 differs from cairo 1.6.0 only
+in the fix for the PostScript-printer crashes.
+
+Tweak build to avoid linking with g++
+-------------------------------------
+Cairo 1.6.4 avoids a quirk in automake that was causing the cairo
+library to be linked with g++ and linked against libstdc++ even when
+only C source files were compiled for the library.
+
+Release 1.6.2 (2008-04-11 Carl Worth <cworth@cworth.org>)
+=========================================================
+The cairo community is pleased (but somewhat sheepish) to announce the
+1.6.2 release of the cairo graphics library. This is an update to
+yesterday's 1.6.0 release with an important fix to prevent cairo's
+PostScript output from crashing some printers. This release also
+includes a locking fix for cairo's xlib backend to improve thread
+safety. There are no changes beyond these two fixes.
+
+Fix for PostScript printer crash
+--------------------------------
+Adrian Johnson discovered that cairo 1.6.0 was being a bit hard on
+PostScript printers, by changing the font matrix very frequently. This
+causes some PostScript interpreters to allocate new font objects every
+few glyphs, eventually exhausting available resources. The fix
+involves leaving translational components of the font matrix as zero,
+so that the PostScript interpreter sees an identical font matrix
+repeatedly, and can more easily share internal font object resources.
+
+This fix has been tested to resolve the bugs posted here, (for both
+Xerox and Dell printers):
+
+ Printing some PDFs from evince is crashing our Xerox printer
+ http://bugs.freedesktop.org/show_bug.cgi?id=15348
+
+ Cairo-generated postscript blocks Dell 5100cn
+ http://bugs.freedesktop.org/show_bug.cgi?id=15445
+
+Add missing locking in cairo-xlib
+---------------------------------
+Chris Wilson noticed that cairo 1.6.0 was manipulating an internal
+cache of GC object within cairo's Xlib backend without proper
+locking. The missing locking could cause failures for multi-threaded
+applications. He fixed this in 1.6.2 by adding the missing locks.
+
+Release 1.6.0 (2008-04-10 Carl Worth <cworth@cworth.org>)
+=========================================================
+The cairo community is quite pleased to announce the 1.6.0 release of
+the cairo graphics library. This is a major update to cairo, with new
+features and enhanced functionality which maintains compatibility for
+applications written using cairo 1.4, 1.2, or 1.0. We recommend that
+anybody using a previous version of cairo upgrade to cairo 1.6.0.
+
+The most significant new features in this release are dramatically
+improved PDF and PostScript[*] output, support for arbitrary X server
+visuals (including PseudoColor), a new Quartz backend, and and a new
+"win32 printing" backend. See below for more details on these and
+other new features.
+
+New dependency on external pixman library (Thanks, Søren!)
+----------------------------------------------------------
+As of cairo 1.6, cairo now depends on the pixman library, for which
+the latest release can be obtained alongside cairo:
+
+ http://cairographics.org/releases/pixman-0.10.0.tar.gz
+
+This library provides all software rendering for cairo, (the
+implementation of the image backend as well as any image fallbacks
+required for other backends). This is the same code that was
+previously included as part of cairo itself, but is now an external
+library so that it can be shared by both cairo and by the X server,
+(which is where the code originated).
+
+Improved PDF, PostScript, and SVG output (Thanks, Adrian!)
+----------------------------------------------------------
+Users of the cairo-pdf, cairo-ps, and cairo-svg should see a dramatic
+improvement from cairo 1.2/1.4 to 1.6. With this release there are now
+almost no operations that will result in unnecessary rasterization in
+the PDF and PostScript. Rasterized "image fallbacks" are restricted
+only to minimal portions of the document where something is being
+drawn with cairo that is beyond the native capabilities of the
+document, (this is rare for PDF or SVG, but occurs when blending
+translucent objects for PostScript).
+
+This means that the final output will be of higher quality, and will
+also be much smaller, and therefore will print more quickly. The
+machinery for doing analysis and minimal fallbacks also benefits the
+win32-printing surface described below.
+
+In addition to doing less rasterization, the PostScript and PDF output
+also has several other improvements to make the output more efficient
+and more compatible with specifications.
+
+[*] Note: Just before this release, a bug has been reported that the
+PostScript output from cairo can crash some printers, (so far the
+following models have been reported as problematic Xerox Workcentre
+7228 or 7328 and Dell 5100cn). We will implement a workaround as soon
+as we can learn exactly what in cairo's output these printers object
+to, (and we could use help from users that have access to misbehaving
+printers). This bug is being tracked here:
+
+ Printing some PDFs from evince is crashing our Xerox printer
+ http://bugs.freedesktop.org/show_bug.cgi?id=15348
+
+New support for arbitrary X server visuals (Thanks, Keith and Behdad!)
+----------------------------------------------------------------------
+As of cairo 1.6, cairo should now work with an arbitrary TrueColor or
+8-bit PseudoColor X server visual. Previous versions of cairo did not
+support these X servers and refused to draw anything. We're pleased to
+announce that this limitation has been lifted and people stuck with
+ancient display systems need no longer be stuck with ancient software
+just because of cairo.
+
+New, supported Quartz backend for Mac OS X (Thanks, Brian and Vladimir!)
+------------------------------------------------------------------------
+As of cairo 1.6, the cairo-quartz backend is now marked as "supported"
+rather than "experimental" as in previous cairo releases. Its API now
+has guarantees of API stability into future cairo releases, and its
+output quality is comparable to other backends. There have been
+significant improvements to cairo-quartz since 1.4. It now uses many
+fewer image fallbacks, (meaning better performance), and has greatly
+improved text rendering.
+
+New, "win32 printing" backend (Thanks, Adrian and Vladimir!)
+------------------------------------------------------------
+A new win32-printing surface has been added with an interface very
+similar to the original win32 surface, (both accept an HDC
+parameter). But this new surface should only be called with a printing
+DC, and will result in all drawing commands being stored into a
+meta-surface and emitted after each page is complete. This allows
+cairo to analyze the contents, (as it does with PDF, PostScript, and
+SVG backends), and to do minimal image-based fallbacks as
+necessary. The analysis keeps things as efficient as possible, while
+the presence of fallbacks, (when necessary), ensure the consistent,
+high-quality output expected from cairo.
+
+Robustness fixes (Thanks, Chris!)
+---------------------------------
+There has been a tremendous number of improvements to cairo's
+robustness. Areas that have been improved include:
+
+ * Proper reporting of errors
+
+ * Responding correctly to invalid input
+
+ * Avoiding integer overflows
+
+ * Avoiding memory leaks on error-recovery paths
+
+ * Making reference counting thread safe
+
+ * Exhaustive testing of memory allocation points
+
+Other fixes (Thanks, everybody!)
+--------------------------------
+Cairo's internal fixed-point representation has been changed from
+16.16 to 24.8. This has a direct impact on applications as it allows
+much larger objects to be drawn before internal limits in cairo make
+the drawing not work.
+
+The CAIRO_EXTEND_PAD mode is now fully supported by surface
+patterns. This mode allows applications to use cairo_rectangle and
+cairo_fill to draw scaled images with high-quality bilinear filtering
+for the internal of the image, but without any objectionably blurry
+edges, (as would happen with the default EXTEND_NONE and cairo_paint).
+
+Rendering with CAIRO_ANTIALIAS_NONE has been fixed to be more
+predictable, (previously image rendering and geometry rendering would
+be slightly misaligned with respect to each other).
+
+The reference manual at http://cairographics.org/manual now documents
+100% of the functions and types in cairo's public API.
+
+API additions
+-------------
+Several small features have been added to cairo with new API functions:
+
+cairo_format_stride_for_width
+
+ Must be called to compute a properly aligned stride value before
+ calling cairo_image_surface_create_for_data.
+
+cairo_has_current_point
+
+ Allows querying if there is a current point defined for the
+ current path.
+
+cairo_path_extents
+
+ Allows querying for path extents, (independent of any fill or
+ stroke parameters).
+
+cairo_surface_copy_page
+cairo_surface_show_page
+
+ Allow beginning a new document page without requiring a cairo_t
+ object.
+
+cairo_ps_surface_restrict_to_level
+cairo_ps_get_levels
+cairo_ps_level_to_string
+cairo_ps_surface_set_eps
+
+ Allow controlling the Post PostScript level, (2 or 3), to
+ target, as well as to generate Encapsulated PostScript (EPS).
+
+cairo_quartz_font_face_create_for_cgfont
+
+ Create a quartz-specific cairo_font_face_t from a CGFontRef.
+
+cairo_win32_font_face_create_for_logfontw_hfont
+
+ Create a win32-specific cairo_font_face from a LOGFONTW and an
+ HFONT together.
+
+Thanks, Everyone!
+-----------------
+I've accounted for 32 distinct people with attributed code added to
+cairo between 1.4.14 and 1.6.0, (their names are below). That's an
+impressive number, but there are certainly dozens more that
+contributed with testing, suggestions, clarifying questions, and
+encouragement. I'm grateful for the friendships that have developed as
+we have worked on cairo together. Thanks to everyone for making this
+all so much fun!
+
+Adrian Johnson, Alp Toker, Antoine Azar, Behdad Esfahbod,
+Benjamin Otte, Bernardo Innocenti, Bertram Felgenhauer,
+Boying Lu, Brian Ewins, Carl Worth, Chris Heath, Chris Wilson,
+Claudio Ciccani, Emmanuel Pacaud, Jeff Muizelaar, Jeremy Huddleston,
+Jim Meyering, Jinghua Luo, Jody Goldberg, Jonathan Gramain,
+Keith Packard, Ken Herron, Kouhei Sutou, Kristian Høgsberg,
+Larry Ewing, Martin Ejdestig, Nis Martensen, Peter Weilbacher,
+Richard Hult, Shailendra Jain, Søren Sandmann Pedersen,
+Vladimir Vukicevic
+
+Snapshot 1.5.20 (2008-04-04 Carl Worth <cworth@cworth.org>)
+===========================================================
+This is the tenth snapshot in cairo's unstable 1.5 series. It comes
+just two days (and only one working day) after the 1.5.18
+snapshot. The quick snapshot is due to two embarrassing bugs (both
+affecting cairo-xlib) that had been introduced in the 1.5.18
+snapshot. The fixes for these are described below along with a few
+other fixes, (which hopefully aren't introducing new bugs this time).
+
+cairo-xlib
+----------
+Revert fix from 1.5.18 to allow pattern expansion based on the filter
+mode. This fix seemed so boring, (the use case it addresses is almost
+never used in practice), that it didn't even get mentioned in the
+1.5.18 release notes. However, the "fix" happened to break rendering
+that is always used resulting in corrupt image rendering in mozilla,
+evolution, and probably everything else that uses cairo.
+
+Fix to avoid BadMatch errors in cairo_surface_create_similar. These
+were introduced, (inadvertently, of course), as part of the fix in
+1.5.18 for creating similar surfaces without the Render
+extension. Again, thanks to mozilla, (and Vladimir Vukicevic in
+particular), for noticing our mistake.
+
+general
+-------
+Correctly handle an in-error surface in
+cairo_surface_write_to_png. Previously this function would cause an
+assertion failure if you gave it a finished surface. Now it cleanly
+returns a CAIRO_STATUS_SURFACE_FINISHED result instead.
+
+Avoid potentially infinite wandering through memory inside
+_cairo_hull_prev_valid. Thanks to Jonathan Watt for noticing this
+problem:
+
+ https://bugzilla.mozilla.org/show_bug.cgi?id=306649#c21
+
+cairo-pdf
+---------
+Fix generation of "soft" masks made by drawing to a similar surface
+and then calling cairo_mask_surface() with it.
+
+cairo-svg
+---------
+Fix for code that uses cairo_mask() on an intermediate surface which
+is later passed to cairo_mask_surface().
+
+Snapshot 1.5.18 (2008-04-05 Carl Worth <cworth@cworth.org>)
+===========================================================
+This is the ninth snapshot in cairo's unstable 1.5 series. It comes
+just 4 days after the 1.5.16 snapshot. We had hoped to not need
+another snapshot before the final 1.6.0 release, but several critical
+bugs were found and fixed in the last few days, so we thought it
+important to let people test the fixes with this snapshot. See below
+for details.
+
+documentation
+-------------
+The README now lists necessary dependencies.
+
+Various graphics state defaults are now documented, (source pattern is
+opaque black, line width is 2.0, line join is miter, line cap is butt,
+miter limit is 10.0, etc.).
+
+general
+-------
+Several cleanups have been made along many error-path returns,
+(carefully propagating up the original error status values, cleaning
+up memory leaks during error recovery, etc.). This is yet another in
+Chris "ickle" Wilson's long series of error-handling cleanups during
+the 1.5 series.
+
+Avoid undesired clipping when drawing scaled surface patterns with
+bilinear filtering.
+
+cairo-pdf
+---------
+Fix emission of 1-bit alpha masks in PDF output.
+
+Fix a bug that would cause glyphs to be misplaced along the Y axis:
+
+ http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=%23474136
+
+ Originally, an issue about a crash, but later leading to the
+ misplaced glyphs issue being discovered.
+
+cairo-ps
+--------
+Fix misplaced glyphs in cairo's PostScript output.
+
+ This issue occurs when consecutive glyphs are placed far
+ apart. This case is exercised by the new ft-show-glyphs-table test
+ case, which was originally inspired by the Debian bug #23474136
+ mentioned above.
+
+Fix more misplaced glyphs in cairo's PostScript output:
+
+ The issue here showed up under very particular circumstance, (when
+ converting a PDF file with a CFF font with CID Identity-H encoding
+ and using glyph 0, (defined by the CFF specification as .notdef)
+ as a space instead). More concretely, this problem appeared when
+ converting the UbuntuDesktop.pdf file mentioned in this bug
+ report:
+
+ https://bugs.freedesktop.org/show_bug.cgi?id=15348#c3
+
+ As usual with arcane font-encoding-specific bugs like this, many
+ thanks to Adrian Johnson for his magical ability to dive into
+ specifications and emerge almost instantaneously with fixes. And
+ thanks to Sebastien Bacher for bringing the bug to our attention.
+
+cairo-xlib
+----------
+Fix serious failure on X servers without the Render extension.
+
+ Since the 1.5.14 snapshot (with support for PseudoColor visuals),
+ any application attempting to create a "similar" xlib surface would
+ fail on an X server without the Render extension. Thanks to
+ Frederic Crozat for pointing out that cairo's test suite was
+ entirely failing when run against Xvfb.
+
+Avoid crashing cairo-xlib applications for too-large glyphs
+
+ Naively sending glyphs of any size to the X server will eventually
+ violate the X limit on maximum request sizes. We now properly
+ detect when a glyph would be too large and use existing fallbacks
+ to render the glyph rather than trying to send it to the X server.
+
+Enable the buggy_repeat workaround for Xorg servers < 1.4
+
+ We have determined that Xorg 1.3.0 (as packaged in Fedora 8 at
+ least) has a bug that can result in an X server crash when cairo
+ uses certain X Render repeat operations, (as exercised by cairo's
+ extend-reflect test). We avoid this crash by using fallbacks
+ whenever a repeating surface is needed for any Xorg server with a
+ version less than 1.4. This is slower, but should prevent the
+ crash.
+
+ (Meanwhile, there appears to be a separate bug where some X
+ servers or specific X-server drivers will use random pixmap data
+ when asked to draw a repeating surface. The buggy_repeat
+ workaround would also avoid those problems, but we have not yet
+ characterized whether the new "version < 1.4" is a good
+ characterization of those problems or not.)
+
+cairo-quartz-font
+-----------------
+Implement cairo_font_extents for this backend.
+
+The cairo-quartz-font implementation added in the 1.5.14 snapshot was
+entirely missing support for the cairo_font_extents function. Thanks to
+Richard Hult for pointing out this obvious shortcoming, (and obvious
+lack of coverage in our test suite):
+
+ CGFont backend returns 0 font extents
+ https://bugs.freedesktop.org/show_bug.cgi?id=15319
+
+Snapshot 1.5.16 (2008-04-01 Carl Worth <cworth@cworth.org>)
+===========================================================
+This is the eighth snapshot in cairo's unstable 1.5 series. It comes
+less than two weeks after the 1.5.14 snapshot and it really is a
+legitimate snapshot, (in spite of sharing this date with that of many
+bogus announcements). The major change in this snapshot is that the
+cairo-quartz backend is now officially "supported", including new API
+to construct a font face from a CGFontRef . Also several bug fixes
+have been fixed in many backends. See below for details.
+
+general
+-------
+Cairo now depends on pixman 0.10.0 which was recently released. The
+latest pixman release can always be found alongside cairo releases at:
+
+ http://cairographics.org/releases
+
+Increase the precision of color stops for gradients. This fixes a
+regression in gradient rendering that had been present since the
+1.5.12 snapshot.
+
+paginated (all of ps, pdf, svg, and win32-printing)
+---------------------------------------------------
+Fix assertion failure when some drawing elements are outside the page
+boundaries, (this bug was noticed when using Inkscape to print a
+drawing with landscape orientation to a portrait-oriented piece of
+paper).
+
+cairo-ps
+--------
+Fix of bug causing incorrect glyph positioning.
+
+Fix handling of CAIRO_OPERATOR_SOURCE.
+
+cairo-pdf
+---------
+More reduction of unnecessary digits of precision in PDF output.
+
+Fix handling of CAIRO_OPERATOR_SOURCE.
+
+cairo-svg
+---------
+Fix bug in usage of libpng that was preventing cairo_mask from working
+with the svg backend.
+
+Fix transformation of source pattern for cairo_stroke().
+
+cairo-win32-printing
+--------------------
+Fix fallback resolution, (thanks again to inkscape users/developers
+for helping us find this one).
+
+cairo-quartz
+------------
+Mark the cairo-quartz backend as "supported" rather than
+"experimental". This means the following:
+
+ * The backend will now be built by default (if possible).
+
+ * We are committing that the backend-specific API (as published in
+ cairo-quartz.h) are stable and will be supported in all future
+ cairo 1.x releases.
+
+ * We are committing that the output quality of this backend
+ compares favorably with other cairo backends, (and that quality
+ is ensured by good results from the cairo test suite).
+
+ * We recommend that distributions build and distribute this
+ backend when possible.
+
+Note that the cairo_quartz_image API (in cairo-quartz-image.h) is
+still experimental, will not build by default, (pass
+--enable-quartz-image to configure to build it), and may see API
+changes before it is marked as "supported" in a future release.
+
+Put the CAIRO_FONT_TYPE_ATSUI name back into
+cairo-deprecated.h. Without this, the cairo 1.5.14 snapshot broke all
+builds for applications using the C++ cairomm bindings (and perhaps
+others) which have the CAIRO_FONT_TYPE_ATSUI name in their header
+files. This breakage happened even for applications not using
+cairo-quartz at all.
+
+ Note: Even though the CAIRO_FONT_TYPE_ATSUI name is provided to
+ avoid this build breakage, we still recommend that bindings and
+ applications move to the new, and more accurate,
+ CAIRO_FONT_TYPE_QUARTZ name.
+
+Replace the implementation of cairo-quartz-font to use CFFont instead
+of ATSUI. The CGFont API is a better fit than ATSUI, and this new
+implementation is also more correct than the old one as well.
+
+This also adds the following new API call:
+
+ cairo_public cairo_font_face_t *
+ cairo_quartz_font_face_create_for_cgfont (CGFontRef font);
+
+The previous cairo_quartz_font_face_create_for_atsu_font_id function
+continues to exist and is part of the supported API going
+forward. (However, the old name of that same function, which was
+cairo_atsui_font_face_create_for_atsu_font_id is officially
+deprecated. Any source code using the old name should be updated to
+use the new name.)
+
+Fix transformation of source pattern for cairo_stroke().
+
+cairo-win32
+-----------
+Avoid crash in create_similar is cairo_win32_surface_create fails.
+
+Snapshot 1.5.14 (2008-03-20 Carl Worth <cworth@cworth.org>)
+===========================================================
+This is the seventh snapshot in cairo's unstable 1.5 series. It comes
+3 weeks after the 1.5.12 snapshot. This snapshot includes support for
+arbitrary X server visuals, (including PseudoColor), which was the
+final remaining cairo-specific item on the cairo 1.6 roadmap. It also
+includes a huge number of improvements to the cairo-quartz backend. So
+this is effectively a cairo 1.6 release candidate. We expect very few
+changes from now until 1.6 and only for specific bug fixes.
+
+API Change
+----------
+Rename ATSUI font backend to Quartz font backend. This affects the
+following usage:
+
+ --enable-atsui -> --enable-quartz-font
+ CAIRO_HAS_ATSUI_FONT -> CAIRO_HAS_QUARTZ_FONT
+ CAIRO_FONT_TYPE_ATSUI -> CAIRO_FONT_TYPE_QUARTZ
+
+ cairo_atsui_font_face_create_for_atsu_font_id ->
+ cairo_quartz_font_font_create_for_atsu_font_id
+
+This API change is justified by the cairo-quartz backend still be
+marked as "experimental" rather than "supported", (though this is one
+step toward making the change to "supported" before 1.6). Cairo will
+still provide ABI compatibility with the old symbol name, however.
+
+paginated (all of ps, pdf, svg, and win32-printing)
+---------------------------------------------------
+Optimize by not analyzing an image surface for transparency more than
+once, (previously all images were analyzed twice).
+
+cairo-ps and cairo-pdf
+----------------------
+Avoiding emitting a matrix into the stroke output when unnecessary,
+(making output size more efficient).
+
+Reduce rounding error of path shapes by factoring large scale factors
+out of the path matrix, (ensuring that a fixed-number of printed
+digits for path coordinates contains as much information as possible).
+
+Reduce excess digits for text position coordinates. This makes the
+output file size much smaller without making the result any less
+correct.
+
+cairo-ps
+--------
+Eliminate bug causing extraneous text repetition on Linux PostScript
+output in some cases.
+
+ See: Mozilla Bug 419917 – Printed page contents are reflected
+ inside bordered tables (Linux-only)
+
+ https://bugzilla.mozilla.org/show_bug.cgi?id=419917
+
+Optimize output when EXTEND_PAD is used.
+
+cairo-pdf
+---------
+Fix to not use fill-stroke operator with transparent fill, (else PDF
+output doesn't match the cairo-defined correct result). See:
+
+ https://bugs.launchpad.net/inkscape/+bug/202096
+
+cairo-svg
+---------
+Fix stroke of path with a non-solid-color source pattern:
+
+ http://bugs.freedesktop.org/show_bug.cgi?id=14556
+
+cairo-quartz
+------------
+Fix text rendering with gradient or image source pattern.
+
+Handling antialiasing correctly for cairo_stroke(), cairo_clip(), and
+cairo_show_text()/cairo_show_glyphs().
+
+Correctly handle gradients with non-identity transformations:
+
+ Fixes http://bugs.freedesktop.org/show_bug.cgi?id=14248
+
+Add native implementation of REPEAT and REFLECT extend modes for
+gradients.
+
+Fix implementation for the "unbounded" operators, (CAIRO_OPERATOR_OUT,
+_IN, _DEST_IN, and _DEST_ATOP).
+
+Correctly handle endiannees in multi-architecture compiles on Mac OS
+X.
+
+Avoid behavior which would cause Core Graphics to print warnings to
+the console in some cases.
+
+cairo-win32
+-----------
+Fix handling of miter limit.
+
+cairo-win32-printing
+--------------------
+Fix to not use a 1bpp temporary surface in some cases while printing,
+(so grayscale data is preserved rather than just becoming black and
+white).
+
+cairo-xlib
+----------
+Add support for rendering to arbitrary TrueColor X server
+visuals. This fixes at least the following bugs:
+
+ cairo doesn't support 8-bit truecolor visuals
+ https://bugs.freedesktop.org/show_bug.cgi?id=7735
+
+ cairo doesn't support 655 xlib format
+ https://bugs.freedesktop.org/show_bug.cgi?id=9719
+
+Add support for rendering to 8-bit PseudoColor X server visuals. This
+fixes the following bug:
+
+ Cairo doesn't support 8-bit pseudocolor visuals
+ https://bugs.freedesktop.org/show_bug.cgi?id=4945
+
+Snapshot 1.5.12 (2008-02-28 Carl Worth <cworth@cworth.org>)
+===========================================================
+This is the sixth snapshot in cairo's unstable 1.5 series. It comes 1
+week after the 1.5.10 snapshot. This snapshot includes the
+long-awaited change from 16.16 to 24.8 fixed-point values, (see below
+for why you should care). It also includes several backend-specific
+bug fixes.
+
+24.8 fixed-point format
+-----------------------
+Cairo has always converted path coordinates to a fixed-point
+representation very early in its processing. Historically, this has
+been a 32-bit representation with 16 bits of integer for the
+device-pixel grid and 16 bits of sub-pixel positioning. The choice of
+16 bits for the integer coordinate space was based on the 16-bit limit
+for X Window drawables.
+
+This 16-bit limit has proven problematic for many applications. It's
+an especially vexing problem when targeting non-X backends that don't
+have any 16-bit restriction. But even when targeting cairo-xlib, it's
+often desirable to draw a large shape, (say a background rectangle),
+that extends beyond the surface bounds and expect it to fill the
+surface completely, (rather than overflowing and triggering random
+behavior).
+
+Meanwhile, nobody has ever really needed 16 bits of sub-pixel
+precision.
+
+With this snapshot, the fixed-point system is still in place and is
+still using a 32-bit representation, (future versions of cairo might
+move entirely to floating-point when targeting PDF output for
+example). But the representation now provides 24 bits of pixel
+addressing and only 8 bits of sub-pixel positioning. This should give
+a much less stifling space to many applications.
+
+However, the underlying pixman library still has 16-bit limitations in
+many places, (it has its roots in the X server as well). Until those
+are also fixed, applications targeting cairo image surfaces, or
+hitting software fallbacks when targeting other surfaces will still
+encounter problems with device-space values needing more than 16
+integer bits.
+
+generic fixes
+-------------
+Add a few tests to the test suite to increase coverage.
+
+Cleanup a few error-handling paths, (propagate error correctly).
+
+cairo-ft
+--------
+Fix handling of font sizes smaller than 1 device pixel.
+
+cairo-pdf
+---------
+Fix to properly save/restore clip when analyzing meta-surface
+patterns, (fixing a couple of test-suite failures).
+
+Implement native support for CAIRO_OPERATOR_SOURCE when the source
+pattern is opaque.
+
+Emit rectangles as PDF rectangles ("re" operator) rather than as
+general paths.
+
+cairo-ps
+--------
+Fix to work properly with the 16.16->24.8 change.
+
+cairo-svg
+---------
+Fix CAIRO_EXTEND_REFLECT by using an image fallback, (there's no
+direct SVG support for reflected patterns).
+
+Fix the use of alpha-only masks, (such as CAIRO_FORMAT_A8).
+
+cairo-quartz
+------------
+Add new API for efficiently using image data as a source:
+
+ cairo_surface_t *
+ cairo_quartz_image_surface_create (cairo_surface_t *image_surface);
+
+ cairo_surface_t *
+ cairo_quartz_image_surface_get_image (cairo_surface_t *surface);
+
+For full documentation, see:
+
+ http://cairographics.org/manual/cairo-Quartz-Surfaces.html#cairo-quartz-image-surface-create
+
+Several fixes for cairo_mask().
+
+cairo-atsui
+-----------
+Change default from from Monaco to Helvetica to be more consistent
+with other font backends.
+
+Snapshot 1.5.10 (2008-02-20 Carl Worth <cworth@cworth.org>)
+===========================================================
+This is the fifth snapshot in cairo's unstable 1.5 series. It comes 3
+weeks after the 1.5.8 snapshot. This snapshot adds one new API
+function, (cairo_has_current_point), and the usual mix of
+improvements, (more efficient PostScript/PDF output, optimized
+stroking), and fixes (more robust error-handling, etc.). See below for
+details.
+
+New API
+-------
+Add a new function to query if there is a current point:
+
+ cairo_bool_t
+ cairo_has_current_point (cairo_t *cr);
+
+There is no current point immediately after cairo_create(), nor after
+cairo_new_path() or cairo_new_sub_path(). There is a current point
+after any of the path-creation functions, (cairo_move_to,
+cairo_line_to, cairo_curve_to, etc.).
+
+With this new function, we also revert the change of the return type
+of cairo_get_current_point from cairo 1.5.8, (it's now a void function
+again).
+
+Optimizations
+-------------
+Optimize stroking code to avoid repeated calculation of redundant
+values, (particularly significant for very large, offscreen paths).
+
+General fixes
+-------------
+Patch a few more potential buffer overruns, (due to integer
+overflow).
+
+Many fixes and improvements to cairo's error-handling, (ensure that
+correct error values are returned, clean up memory leaks on
+error-handling paths, etc.).
+
+Fix a potential infinite loop when stroking a spline with a pen that
+has been transformed to a line segment.
+
+Remove treating NULL as a synonym for a valid cairo_font_options_t*
+with default values, (a change that had been introduced as of cairo
+1.5.8).
+
+Remove the altered handling of tolerance and fallback-resolution that
+had been introduced as of cairo 1.5.4.
+
+cairo-xlib
+----------
+Pass the original Drawable, (as opposed to the root window), to
+XCreatePixmap when creating a similar surface. This gives the X server
+more information so that it can be clever and efficient.
+
+cairo-pdf
+---------
+Fix the rendering of repeating and reflecting patterns.
+
+Ensure miter limit is always >= 1, (smaller limits are not meaningful,
+but they can cause some PDF viewers to fail to display pages).
+
+Generate more efficient output when the same path is used for both
+fill and stroke.
+
+cairo-ps
+--------
+Start sharing much of the cairo-pdf code rather than implementing very
+similar code in cairo-ps.
+
+Implement native support for repeating and reflecting linear
+gradients.
+
+Implement reflected surface patterns.
+
+Ensure miter limit is always >= 1, (smaller limits are not meaningful,
+but they can cause some PostScript viewers to crash).
+
+Generate PostScript that will perform more efficiently and use less
+memory on printers, (use currentfile instead of a giant string array
+for image data, and avoid using PostScript patterns for paint() and
+fill() when possible).
+
+cairo-svg
+---------
+Avoid unnecessary rasterization when copying a "similar" surface to
+another svg surface, (allow the SOURCE operator to be implemented with
+all-vector operations if there are no underlying objects).
+
+cairo-atsui
+-----------
+Eliminate infinite loop when attempting to render an empty string.
+
+Snapshot 1.5.8 (2008-01-30 Carl Worth <cworth@cworth.org>)
+==========================================================
+This is the fourth snapshot in cairo's unstable 1.5 series. It comes 2
+weeks after the 1.5.6 snapshot. It adds a few new API functions. Most
+notably all callers of cairo_image_surface_create_for_data should now
+be calling cairo_format_stride_for_width to compute a legal stride
+value. See below for more details.
+
+New API in cairo 1.5.8
+----------------------
+We've added a new function that should be called to compute a legal
+stride value before allocating data to be used with
+cairo_image_surface_create_for_data:
+
+ int
+ cairo_format_stride_for_width (cairo_format_t format,
+ int width);
+
+We've also added a new cairo_path_extents function that can be used to
+compute a bounding box for geometry such as a single line segment,
+(contrast with cairo_path_extents and cairo_stroke_extents):
+
+ void
+ cairo_path_extents (cairo_t *cr,
+ double *x1, double *y1,
+ double *x2, double *y2);
+
+And finally, we've added a function to allow for querying the
+XRenderPictFormat of a cairo-xlib surface:
+
+ XRenderPictFormat *
+ cairo_xlib_surface_get_xrender_format (cairo_surface_t *surface);
+
+API changes
+-----------
+Fix return types of cairo_surface_show_page and
+cairo_surface_copy_page. This is an API change to functions that are
+new in the 1.5 series, so not an API break compared to any stable
+cairo release, (1.0.x, 1.2.x, 1.4.x).
+
+Change the return type of cairo_get_current_point() from void to
+cairo_status_t. This allows the caller to receive a
+CAIRO_STATUS_NO_CURRENT_POINT value to distinguish the a current point
+at the origin from no current point existing.
+
+Performance improvement
+-----------------------
+Improve performance of clipping by using an optimized code path
+internally, (with the ADD operator instead of IN).
+
+General bug fixes
+-----------------
+Fix various cairo_*_extents functions to initialize the return-value
+variables even in the case of a cairo_t in error.
+
+Treat NULL as a legitimate value for cairo_font_options_t*. [NOTE:
+On discussion afterwards, we decided against this change so it has
+been removed as of cairo 1.5.10.]
+
+Fix rendering with CAIRO_ANTIALIAS_NONE to be more predictable, (that
+is, to avoid seams appearing when geometry and imagery share an
+identical edge). Portions of this fix are in the pixman library and
+will appear in a future release of that library.
+
+Avoid triggering an error for a font size of 0.
+
+Miscellaneous changes
+---------------------
+Require pixman >= 0.9.6.
+
+There has been a tremendous amount improvement to cairo's
+documentation. We're delighted that 100% of the public API has at
+least some documentation in the API reference manual. Many thanks to
+Behdad Esfahbod and Nis Martensen for leading this effort.
+
+cairo-pdf and cairo-ps
+----------------------
+Eliminate failure when a Type 1 font is embedded with an explicit
+glyph 0.
+
+cairo-pdf
+---------
+Implement a more correct and more efficient approach for patterns with
+an extend mode of CAIRO_EXTEND_REFLECT.
+
+cairo-ps
+--------
+Fix image masks to properly pack and pad mask bits.
+
+cairo-quartz
+------------
+Take care to only use DrawTiledImage for integer-aligned images, (and
+use slower paths to get the correct result in other cases).
+
+cairo-win32
+-----------
+Fix for older versions of mingw.
+
+Improve the handling of the clipping with the win32 and win32-printing
+surfaces.
+
+Fix rendering of non black/white text.
+
+Snapshot 1.5.6 (2008-01-15 Carl Worth <cworth@cworth.org>)
+==========================================================
+This is the third snapshot in cairo's unstable 1.5 series. It comes
+about 6 weeks after the 1.5.4 snapshot. The only API addition compared
+to 1.5.4 is very minor, (a new value CAIRO_STATUS_TEMP_FILE_ERROR).
+The remainder of the changes are the usual accumulation of bug fixes
+and improvements. See below for details.
+
+General bug fixes
+-----------------
+Fix handling of fonts that contain a mixture of outline and bitmapped
+glyphs. There was a change in this handling in 1.5.4 that improved
+some cases and also regressed other cases. Now, all cases should be
+handled quite well.
+
+Fix alignment issues that were causing SIGBUS failures on SPARC.
+
+Fix a regression (which first appeared in 1.5.2) where stroking under
+a large scale would sometimes incorrectly replace a miter join with a
+bevel join. (Thanks to Keith Packard.)
+
+Fix reporting of zero-sized extents to be {0,0} rather than
+{INT_MAX,INT_MIN}. This avoids several integer overflow and
+allocations of massive regions in some cases.
+
+Fix failures of gradients with no stops, (quartz, ps, and pdf).
+
+Fix handling of Type 1 fonts on Windows platforms.
+
+Fix handling of Type 1 fonts with no specific family name in the font
+itself, (generate a CairoFont-x-y name).
+
+Handle NULL string values in cairo_show_text, cairo_show_glyphs, and
+friends.
+
+Many robustness improvements along error-handling paths, (thanks as
+always, to Chris "ickle" Wilson).
+
+Various other minor fixes.
+
+Paginated backends (PDF/PostScript/win32-printing)
+--------------------------------------------------
+Avoid unnecessary rasterization when using a paginated surface as a
+source, (such as drawing from one pdf surface to another).
+
+Fix replaying of paginated surface with more than one level of push/pop
+group.
+
+cairo-xlib
+----------
+Fix xlib backend to not consider recent X server release as having a
+buggy repeat implementation in the Render extension.
+
+cairo-pdf
+---------
+Fix PDF output to avoid triggering very slow rendering in PDF viewers,
+(avoid starting and stopping the content stream for each pattern
+emission).
+
+Support CAIRO_OPERATOR_SOURCE in cases where there is nothing below
+the object being drawn.
+
+Fix to avoid seams appearing between multiple fallback regions.
+
+cairo-ps (PostScript)
+---------------------
+Use correct bounding box in Type 3 fonts.
+
+Fix several bugs in cairo's PostScript output. These include making
+the PostScript output more compatible with recent versions of
+ghostscript that are more strict about Type 3 fonts, for
+example.
+
+Fix for win32 to not attempt to create temporary files in the root
+directory, (where the user may not have write permission).
+
+Avoid generating Level 3 PostScript if Level 2 is sufficient. Also,
+add code in output documents to alert the user if Level 3 PostScript
+is handed to a device that cannot handle PostScript beyond Level
+2.
+
+cairo-directfb
+--------------
+Various performance optimizations.
+
+Fixed support for small surfaces (less than 8x8).
+
+Provide support for environment variables CAIRO_DIRECTFB_NO_ACCEL to
+disable acceleration and CAIRO_DIRECTFB_ARGB_FONT to enable ARGB fonts
+instead of A8.
+
+cairo-os2
+---------
+Allow OS/2 APIs instead of C library allocation functions.
+
+Snapshot 1.5.4 (2007-12-05 Carl Worth <cworth@cworth.org>)
+==========================================================
+This is the second snapshot in cairo's unstable 1.5 series. It comes
+just over 1 month after the 1.5.2 snapshot. There are no API changes
+or additions in 1.5.4 compared to 1.5.2, but there are several bug
+fixes, and some optimizations. Most of these apply to particular
+backends. See below for details.
+
+General improvements
+--------------------
+Use less memory for spline approximation calculations.
+
+Change how the tolerance value is interpreted with regard to
+fallback-resolution. [Note: On further discussion, we decided against
+this change for now. It is removed as of cairo 1.5.10.]
+
+Fix precision of floating-point values in vector-output backends to
+avoid rounding errors with very small numbers.
+
+Xlib improvements
+-----------------
+Fix bug in glyph rendering with xlib, (due to everything being clipped
+out). This was a regression in the 1.5.2 snapshot that was visible in
+the GIMP, for example. See:
+
+ cairo 1.5.2 causes font problems in GIMP 2.4 status bar and evolution 2.12.1
+ https://bugs.freedesktop.org/show_bug.cgi?id=13084
+
+PostScript improvements
+-----------------------
+Fix bug leading to invalid PostScript files when rendering
+text, (need "0 0 xyshow" instead of "0 xyshow").
+
+Fix many issues with Type 3 fonts, including making the resulting text
+extractable.
+
+Quartz improvements
+-------------------
+Fix font metrics height value for ATSUI, (helps webkit on GTK+ OS X
+layout nicely).
+
+Fix gradients.
+
+Fix EXTEND_NONE mode for patterns.
+
+Fix cairo_quartz_surface_create to properly clear the new surface
+in cairo_quartz_surface_create.
+
+Fix to correctly handle 0x0 sized surfaces.
+
+Optimize drawing of EXTEND_REPEAT patterns for OS X 10.5.
+
+Snapshot 1.5.2 (2007-10-30 Carl Worth <cworth@cworth.org>)
+==========================================================
+This is the first snapshot in cairo's unstable 1.5 series. It comes 4
+months after the 1.4.10 release. This snapshot includes significant
+improvements to PDF and PostScript output, which is one of the things
+in which we're most interested in getting feedback. There are a couple
+of minor API additions, and several optimizations, (primarily in the
+"print/vector" backends). And there are dozens of bug fixes and
+robustness improvements.
+
+New dependency on external pixman library
+-----------------------------------------
+A significant change in this snapshot compared to all previous cairo
+releases is that cairo now depends on an external "pixman" library for
+its software rendering. Previously this same code was compiled
+internally as part of cairo, but now the code is separate so that both
+cairo and the X server can now share common code, (thanks very much to
+Søren Sandmann for his work on separating pixman and maintaining it).
+
+So users will need to acquire and build pixman before being able to
+build cairo. The current release is 0.9.6 and can be obtained from
+here:
+
+ http://cairographics.org/releases/pixman-0.9.6.tar.gz
+
+ which can be verified with:
+
+ http://cairographics.org/releases/pixman-0.9.6.tar.gz.sha1
+ 66f01a682c64403a3d7a855ba5aa609ed93bcb9e pixman-0.9.6.tar.gz
+
+ http://cairographics.org/releases/pixman-0.9.6.tar.gz.sha1.asc
+ (signed by Carl Worth)
+
+Major PDF/PostScript improvements
+---------------------------------
+Adrian Johnson has done some long-awaited work to make cairo's PDF and
+PostScript output more interesting than ever before. First, many
+operations that previously triggered image fallbacks will now be
+rendered as native vectors. These operations include:
+
+ PDF: cairo_push_group, cairo_surface_create_similar,
+ cairo_mask, A8/A1 surface sources, repeating/reflecting linear
+ gradients.
+
+ PostScript: cairo_push_group, cairo_surface_create_similar,
+ gradients, bilevel alpha masks, (for example, all values either 0 or
+ 255 for an A8 mask).
+
+Not only that, but when an image fallback is required, it will now be
+limited to only the necessary region. For example, a tiny translucent
+image overlaying a small portion of text would previously caused an
+entire PostScript page to be rendered as a giant image. Now, the
+majority of that page will be nice text, and there will only be a tiny
+image in the output.
+
+Additionally, the PostScript output now carefully encodes text so that
+if it is subsequently converted to PDF, the text will be
+selectable.
+
+This is very exciting progress, and we're hoping to hear from users
+during the 1.5 series about how things have improved, (for example,
+inkscape users doing cairo-based PDF export: please let us know how
+things look). And feel free to pass your thanks along to Adrian for his excellent work.
+
+NOTE: This much improved PDF output makes more sophisticated use of
+functionality in the PDF specification. This means that cairo's output
+will sometimes expose bugs in some free software PDF viewers, (evince,
+poppler, and xpdf, for example), that are not yet ready for such PDF
+files. We're working with the poppler maintainers to get these bugs
+fixed as quickly as possible. In the meantime, please double-check
+with other PDF viewers if cairo-generated PDF files are not being
+rendered correctly. It may be due to a bug in the viewer rather than
+in the PDF file that cairo has created.
+
+Robustness improvements
+-----------------------
+Chris Wilson has made the largest contribution by far to cairo 1.5.2,
+(in number of commits). His more than 150 commits include a huge
+number of fixes to increase cairo's robustness. These fixes make cairo
+more robust against invalid and degenerate input, (NaN, empty path,
+etc.), against size-0 malloc calls, against memory leaks on
+error-recovery paths, and against other failures during error
+handling. He also implemented atomic operations to cairo, and used
+them to fix cairo's previously non-thread-safe reference counting,
+again improving robustness.
+
+Chris has put a tremendous amount of time and effort into writing
+analysis tools for this work, and in running those tools and fixing
+the problems they report. We're very grateful for this work, and hope
+that all cairo users appreciate the more robust implementation that
+results from it.
+
+This work is largely thankless, so it might make sense to notice
+sometime that cairo has been running quite smoothly for you, and when
+you do, send a quick "thank you" off to Chris Wilson, since it
+is all definitely running smoother thanks to his work.
+
+New API
+-------
+There are no major additions to cairo's core API. The only new,
+generic functions are:
+
+ void
+ cairo_surface_copy_page (cairo_surface_t *surface);
+
+ void
+ cairo_surface_show_page (cairo_surface_t *surface);
+
+which can now be used much more conveniently than the existing
+cairo_copy_page and cairo_show_page functions in some
+situations. These functions act identically, but require only a
+cairo_surface_t* and not a cairo_t*.
+
+All other API additions are specific to particular backends.
+
+New cairo-win32 API (new font face function and "win32 printing" surface)
+-------------------------------------------------------------------------
+There is a new function for creating a win32 font face for both a
+logfontw and an hfont together. This complements the existing
+functions for creating a font face from one or the other:
+
+ cairo_font_face_t *
+ cairo_win32_font_face_create_for_logfontw_hfont (LOGFONTW *logfont,
+ HFONT font);
+
+There is also a new "win32 printing" surface:
+
+ cairo_surface_t *
+ cairo_win32_printing_surface_create (HDC hdc);
+
+This interface looks identical to the original
+cairo_win32_surface_create, (both accept and HDC), but the behavior of
+this new surface is very different. It should only be called with a
+printing DC, and will result in all drawing commands being stored into
+a meta-surface and emitted after each page is complete, with analysis
+to do as minimal image-based fallbacks as necessary. The behavior and
+implementation shares much with the PDF and PostScript backends.
+
+New cairo-ps API (EPS and PostScript level control)
+---------------------------------------------------
+An often requested feature has been the ability to generate
+Encapsulated PostScript (EPS) with cairo. We have that now with the
+following very simple API. Just do cairo_ps_surface_create as usual
+then call this function with a true value:
+
+ void
+ cairo_ps_surface_set_eps (cairo_surface_t *surface,
+ cairo_bool_t eps);
+
+[NOTE: As always with snapshots, it's possible---though not very
+likely---that the API could still be modified before a final
+release. For example, this is the first public cairo function that
+accepts a Boolean parameter. I'm generally opposed to Boolean
+parameters, but this is probably the one case where I'm willing to
+accept one, (namely a "set" function that accepts a single Boolean).]
+
+Also, it is now possible to control what PostScript level to target,
+(either level 2 or level 3), with the following new API:
+
+ typedef enum _cairo_ps_level {
+ CAIRO_PS_LEVEL_2,
+ CAIRO_PS_LEVEL_3
+ } cairo_ps_level_t;
+
+ void
+ cairo_ps_surface_restrict_to_level (cairo_surface_t *surface,
+ cairo_ps_level_t level);
+
+ void
+ cairo_ps_get_levels (cairo_ps_level_t const **levels,
+ int *num_levels);
+
+ const char *
+ cairo_ps_level_to_string (cairo_ps_level_t level);
+
+Improvement for cairo-quartz
+----------------------------
+Brian Ewins had contributed several improvements to cairo-quartz. These
+include an implementation of EXTEND_NONE for linear and radial
+gradients, (so this extend mode will no longer trigger image fallbacks
+for these gradients), as well as native surface-mask clipping, (only
+on OS X 10.4+ where the CGContextClipToMask function is available).
+
+He also fixed a semantic mismatch between cairo and quartz for dashing
+with an odd number of entries in the dash array.
+
+We're grateful for Brian since not many quartz-specific improvements
+to cairo would be happening without him.
+
+Optimizations
+-------------
+Optimize SVG output for when the same path is both filled and stroked,
+and avoid unnecessary identity matrix in SVG output. (Emmanuel Pacaud).
+
+Optimize PS output to take less space (Ken Herron).
+
+Make PS output more compliant with DSC recommendations (avoid initclip
+and copy_page) (Adrian Johnson).
+
+Make PDF output more compact (Adrian Johnson).
+
+Release glyph surfaces after uploading them to the X server, (should
+save some memory for many xlib-using cairo application). (Behdad
+Esfahbod).
+
+Optimize cairo-win32 to use fewer GDI objects (Vladimir Vukicevic).
+
+win32-printing: Avoid falling back to images when alpha == 255
+everywhere. (Adrian Johnson).
+
+win32-printing: Avoid falling back for cairo_push_group and
+cairo_surface_create_similar. (Adrian Johnson)
+
+Bug fixes
+---------
+Avoid potential integer overflows when allocating large buffers
+(Vladimir Vukicevic).
+
+Preparations to allow the 16.16 fixed-point format to change to
+24.8 (Vladimir Vukicevic).
+
+Fix bugs for unsupported X server visuals (rgb565, rgb555, bgr888, and
+abgr8888). (Carl Worth and Vladimir Vukicevic)
+
+Fix bugs in PDF gradients (Adrian Johnson).
+
+Fix cairo-xlib to build without requiring Xrender header
+files (Behdad Esfahbod).
+
+Make cairo more resilient in the case of glyphs not being available in
+the current font. (Behdad Esfahbod)
+
+Prevent crashes when both atsui and ft font backends are compiled in
+(Brian Ewins).
+
+Make font subsetting code more robust against fonts that don't include
+optional tables (Adrian Johnson).
+
+Fix CFF subsetting bug, (which manifested by generating PDF files that
+Apple's Preview viewer could not read) (Adrian Johnson).
+
+Fixed error handling for quartz and ATSUI backends (Brian Ewins).
+
+Avoid rounding problems by pre-transforming to avoid integer-only
+restrictions on transformation in GDI (Adrian Johnson).
+
+Fixed an obscure bug (#7245) computing extents for some stroked
+paths (Carl Worth).
+
+Fix crashes due to extreme transformation of the pen, (seems to show
+up in many .swf files for some reason) (Carl Worth).
+
+Release 1.4.10 (2007-06-27 Carl Worth <cworth@cworth.org>)
+==========================================================
+This is the fifth update in cairo's stable 1.4 series. It comes
+roughly three weeks after the 1.4.8 release. The most significant
+change in this release is a fix to avoid an X error in certain cases,
+(that were causing OpenOffice.org to crash in Fedora). There is also a
+semantic change to include child window contents when using an xlib
+surface as a source, an optimization when drawing many rectangles, and
+several minor fixes.
+
+Eliminate X errors that were killing OO.o (Chris Wilson)
+--------------------------------------------------------
+Cairo is fixed to avoid the X errors propagated when cleaning up
+Render Pictures after the application had already destroyed the
+Drawable they reference. (It would be nice if the X server wouldn't
+complain that some cleanup work is already done, but there you have
+it.) This fixes the bug causing OpenOffice.org to crash as described
+here:
+
+ XError on right click menus in OOo.
+ https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=243811
+
+Use IncludeInferiors when using xlib surface as a source (Ryan Lortie)
+----------------------------------------------------------------------
+When an xlib surface is used as the source of a draw operation the
+contents of child windows are now included in the source data. The
+semantics of drawing to xlib surfaces are unchanged (ie: draws are
+still clipped by child windows overlapping the destination window).
+
+Optimize drawing of many rectangles (Vladimir Vukicevic)
+--------------------------------------------------------
+Avoid O(N*N) loop when filling many axis-aligned rectangles, (either
+many rectangles as separate sub-paths or due to dashing).
+
+Miscellaneous fixes
+-------------------
+Fix cairo-perf on Solaris by linking to librt. (Behdad Esfahbod)
+
+Fix make check for systems that require executable files to have a
+particular extension. (Behdad Esfahbod)
+
+Eliminate some warnings in cairo-quartz. (Brian Ewins)
+
+Fix build-breaking typo for cairo-directfb. (Chris Wilson)
+
+Release 1.4.8 (2007-06-07 Carl Worth <cworth@cworth.org>)
+=========================================================
+This is the fourth update in cairo's stable 1.4 series. It comes just
+over five weeks after the 1.4.6 release. This release includes a
+thread-safe surface-cache for solid patterns which significantly
+improves text rendering with the xlib backend. Also, dozens of error
+paths in cairo have been fixed thanks to extensive fault-injection
+testing by Chris Wilson.
+
+Surface cache for solid patterns
+--------------------------------
+Originally written by Jorn Baayen, the introduction of a small cache
+for surfaces created for solid patterns improves performance
+dramatically. For example, this reduces the volume of X requests
+during text rendering to the same level as Xft.
+
+This cache first made its appearance in a 1.3.x snapshot, but was
+removed before appearing in any previous major release due to
+complications with multi-threaded programs. For example, programs like
+evince that would carefully restrict usage of cairo-xlib to a single
+thread were unpleasantly surprised to find that using cairo-image in a
+separate thread could trigger X requests.
+
+Behdad Esfahbod designed a fix which was implemented by Chris
+Wilson. Now, the necessary X requests are queued up until the next
+time the application directly operates on an xlib surface.
+
+Improved error handling paths
+------------------------------
+Chris Wilson continued the excellent work he started in cairo 1.4.4 to
+make cairo much more robust against out-of-memory and other errors. He
+applied his memory allocation fault injection cairo's main test suite,
+(previously he had applied it to cairo's performance suite).
+
+Chris's testing found dozens of bugs which he fixed. Many of these
+bugs had perhaps never been hit by any users. But at least one was
+hit by the gnome-about program which resulted in dozens of duplicated
+bug reports against that program:
+
+ http://bugzilla.gnome.org/show_bug.cgi?id=431990
+
+We were very pleasantly surprised to see this bug get fixed as a
+side-effect of Chris's work. Well done, Chris!
+
+Other fixes
+-----------
+Cleanup of mutex declarations (Behdad Esfahbod)
+
+Remove unnecessary clip region from SVG output (Emmanuel Pacaud)
+
+Remove Xsun from the buggy_repeat blacklist (Elaine Xiong)
+
+ATSUI: Fix glyph measurement: faster and more correct (Brian Ewins)
+
+Quartz: fixed 'extend' behaviour for patterns, improved pattern performance,
+and a few smaller correctness fixes. (Brian Ewins, Vladimir Vukicevic)
+
+Release 1.4.6 (2007-05-01 Carl Worth <cworth@cworth.org>)
+=========================================================
+This is the third update in cairo's stable 1.4 series. It comes a
+little less than three weeks since the 1.4.4 release. This release
+fixes the broken mutex initialization that made cairo 1.4.4 unusable
+on win32, OS/2, and BeOS systems. This release also adds significant
+improvements to cairo's PDF backend, (native gradients!), and a couple
+of performance optimizations, (one of which is very significant for
+users of the xlib backend). See below for more details.
+
+Repaired mutex initialization
+-----------------------------
+We apologize that cairo 1.4.4 did little more than crash on many
+platforms which are less-frequently used by the most regular cairo
+maintainers, (win32, OS/2, and BeOS). The mutex initialization
+problems that caused those crashes should be fixed now. And to avoid
+similar problems in the future, we've now started posting pre-release
+snapshots to get better testing, (subscribe to cairo@cairographics.org
+if you're interested in getting notified of those and testing them).
+
+PDF Improvements
+----------------
+Thanks to Adrian Johnson, (cairo PDF hacker extraordinaire), we have
+several improvements to cairo's PDF backend to announce:
+
+Native gradients:
+
+ As of cairo 1.4.6, cairo will now generate native PDF gradients in
+ many cases, (previously, the presence of a gradient on any page
+ would force rasterized output for that page). Currently, only
+ gradients with extend types of PAD (the default) or NONE will
+ generate native PDF gradients---others will still trigger
+ rasterization, (but look for support for other extend modes in a
+ future release). Many thanks to Miklós Erdélyi as well, who did the
+ initial work for this support.
+
+Better compatibility with PDF viewers:
+
+ The PDF output from cairo should now be displayed correctly by a
+ wider range of PDF viewers. Adrian tested cairo's PDF output against
+ many PDF viewers, identified a common bug in many of those viewers
+ (ignoring the CTM matrix in some cases), and modified cairo's output
+ to avoid triggering that bugs (pre-transforming coordinates and
+ using an identity matrix).
+
+Better OpenType/CFF subsetting:
+
+ Cairo will now embed CFF and TrueType fonts as CID fonts.
+
+Performance optimizations
+-------------------------
+Faster cairo_paint_with_alpha:
+
+ The cairo_paint_with_alpha call is used to apply a uniform alpha
+ mask to a pattern. For example, it can be used to gradually fade an
+ image out or in. Jeff Muizelaar fixed some missing/broken
+ optimizations within the implementation of this function resulting
+ in cairo_paint_with_alpha being up to 4 times faster when using
+ cairo's image backend.
+
+Optimize rendering of "off-screen" geometry:
+
+ Something that applications often do is to ask cairo to render
+ things that are either partially or wholly outside the current clip
+ region. Since 1.4.0 the image backend has been fixed to not waste
+ too much time in this case. But other backends have still been
+ suffering.
+
+ In particular, the xlib backend has often performed quite badly in
+ this situation. This is due to a bug in the implementation of
+ trapezoid rasterization in many X servers.
+
+ Now, in cairo 1.4.6 there is a higher-level fix for this
+ situation. Cairo now eliminates or clips trapezoids that are wholly
+ or partially outside the clip region before handing the trapezoids
+ to the backend. This means that the X server's performance bug is
+ avoided in almost all cases.
+
+ The net result is that doing an extreme zoom-in of vector-based
+ objects drawn with cairo might have previously brought the X server
+ to its knees as it allocated buffers large enough to fit all of the
+ geometry, (whether visible or not). But now the memory usage should
+ be bounded and performance should be dramatically better.
+
+Miscellaneous
+-------------
+Behdad contributed an impressively long series of changes that
+organizes cairo's internals in several ways that will be very
+beneficial to cairo developers. Thanks, Behdad!
+
+Behdad has also provided a utility for generating malloc statistics,
+(which was used during the great malloc purges of 1.4.2 and
+1.4.4). This utility isn't specific to cairo so may be of benefit to
+others. It is found in cairo/util/malloc-stats.c and here are Behdad's
+notes on using it:
+
+ To build, do:
+
+ make malloc-stats.so
+
+ inside util/, and to use, run:
+
+ LD_PRELOAD=malloc-stats.so some-program
+
+ For binaries managed by libtool, eg, cairo-perf, do:
+
+ ../libtool --mode=execute /bin/true ./cairo-perf
+ LD_PRELOAD="../util/malloc-stats.so" .libs/lt-cairo-perf
+
+Finally, the cairo-perf-diff-files utility was enhanced to allow for
+generating performance reports from several runs of the same backend
+while some system variables were changed. For example, this is now
+being used to allow cairo-perf to measure the performance of various
+different acceleration architectures and configuration options of the
+X.org X server.
+
+Release 1.4.4 (2007-04-13 Carl Worth <cworth@cworth.org>)
+=========================================================
+This is the second update release in cairo's stable 1.4 series. It
+comes just less than a month after 1.4.2. The changes since 1.4.2
+consist primarily of bug fixes, but also include at least one
+optimization. See below for details.
+
+Of all the work that went into the 1.4.4 release
+
+There have been lots of individuals doing lots of great work on cairo,
+but two efforts during the 1.4.4 series deserve particular mention:
+
+Internal cleanup of error handling, (Chris Wilson)
+--------------------------------------------------
+Chris contributed a tremendous series of patches (74 patches!) to
+improve cairo's handling of out-of-memory and other errors. He began
+by adding gcc's warn_unused_attribute to as many functions as
+possible, and then launched into the ambitious efforts of adding
+correct code to quiet the dozens of resulting warnings.
+
+Chris also wrote a custom valgrind skin to systematically inject
+malloc failures into cairo, and did all the work necessary to verify
+that cairo's performance test suite runs to completion without
+crashing.
+
+The end result is a much more robust implementation. Previously, many
+error conditions would have gone unnoticed and would have led to
+assertion failures, segmentation faults, or other harder-to-diagnose
+problems. Now, more than ever, cairo should cleanly let the user know
+of problems through cairo_status and other similar status
+functions. Well done, Chris!
+
+More malloc reduction, (Mathias Hasselmann)
+-------------------------------------------
+After 1.4.0, Behdad launched an effort to chase down excessive calls
+to malloc within the implementation of cairo. He fixed a lot of
+malloc-happy objects for 1.4.2, but one of the worst offenders,
+(pixman regions), was left around. Mathias contributed an excellent
+series of 15 patches to finish off this effort.
+
+The end result is a cairo that calls malloc much less often than it
+did before. Compared to 1.4.2, 55% of the calls to malloc have been
+eliminate, (and 60% have been eliminated compared to 1.4.0). Well
+done, Mathias!
+
+Other improvements since 1.4.2
+------------------------------
+• Centralize mutex declarations (will reduce future build breaks),
+ (Mathias Hasselmann)
+
+• Reduce malloc by caching recently freed pattern objects (Chris
+ Wilson)
+
+• Fix some broken composite operations (David Reveman)
+ https://bugs.freedesktop.org/show_bug.cgi?id=5777
+
+Backend-specific fixes
+----------------------
+PDF:
+ • Use TJ operator for more compact representation of glyphs (Adrian
+ Johnson)
+
+ • Fix glyph positioning bug when glyphs are not horizontal
+ http://lists.freedesktop.org/archives/cairo/2007-April/010337.html
+
+win32:
+ • Fix crash when rendering with bitmap fonts (Carl Worth)
+ https://bugzilla.mozilla.org/show_bug.cgi?id=376498
+
+xlib:
+ • Turn metrics-hinting on by default (Behdad Esfahbod)
+
+ • Fix edge-effect problem with transformed images drawn to xlib
+ (Behdad Esfahbod)
+ https://bugs.freedesktop.org/show_bug.cgi?id=10508
+
+ • Avoid dereferencing a NULL screen. (Chris Wilson)
+ https://bugs.freedesktop.org/show_bug.cgi?id=10517
+
+Quartz/ATSUI:
+ • Fix scaling of glyph surfaces
+ (Brian Ewins)
+ https://bugs.freedesktop.org/show_bug.cgi?id=9568
+
+ • Fix compilation failure when both xlib and quartz enabled
+ (Brian Ewins)
+
+ • Fix rounding bug leading to incorrectly positioned glyphs
+ (Robert O'Callahan)
+ https://bugs.freedesktop.org/show_bug.cgi?id=10531
+
+Release 1.4.2 (2007-03-19 Carl Worth <cworth@cworth.org>)
+=========================================================
+This is the first update release in cairo's stable 1.4 series. It
+comes just less than 2 weeks after 1.4.0. We hadn't anticipated an
+update this early, but we've managed to collect some important fixes
+that we wanted to get out to cairo users as soon as possible, (6 fixes
+for crashes, 1 case where graphical elements would not be drawn at
+all, a handful of backend-specific bugs, and several important build
+fixes).
+
+There's almost nothing but bug fixes in this release, (see below one
+optimization that Behdad did sneak in), so we recommend that everyone
+upgrade to this release when possible.
+
+Thanks to the many people that worked to fix these bugs, and those
+that did the work to report them and to test the fixes, (wherever
+possible both names are credited below).
+
+Critical fixes
+--------------
+• Fix a crash due to a LOCK vs. UNLOCK typo (M. Drochner fixing Carl
+ Worth's embarrassing typo).
+
+ http://bugs.freedesktop.org/show_bug.cgi?id=10235
+
+• Fix potential buffer overflow, which on some systems with a checking
+ variant of snprintf would lead to a crash (Adrian Johnson, Stanislav
+ Brabec, and sangu).
+
+ https://bugs.freedesktop.org/show_bug.cgi?id=10267
+ https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=232576
+
+• Fix a crash in cairo_stroke_extents or cairo_in_stroke when line
+ width is 0.0. (Carl Worth and Sebastien Bacher)
+
+ https://bugs.freedesktop.org/show_bug.cgi?id=10231
+
+• Fix a crash on certain combinations of X server/video drivers (Carl
+ Worth and Tomas Carnecky).
+
+ https://bugs.freedesktop.org/show_bug.cgi?id=10250
+
+• Fix a crash due to mishandling of invalid user input (Carl Worth and
+ Alexander Darovsky).
+
+ https://bugs.freedesktop.org/show_bug.cgi?id=9844
+
+• xlib: Cleanup server-side glyph caches on XCloseDisplay. This
+ eliminated a crash detected by the perf suite, (and that
+ applications could have run into as well). (Chris Wilson)
+
+Other bug fixes
+---------------
+• Fix for some geometry which simply disappeared under some
+ transformations---a stroked line with an extreme skew in X, for
+ example (Carl Worth and Jonathan Watt).
+
+ https://bugzilla.mozilla.org/show_bug.cgi?id=373632
+
+• SVG: Fix radial gradients for CAIRO_EXTEND_REFLECT and when r0 > r1
+ (Emmanuel Pacaud).
+
+• PDF: Set page group color space to DeviceRGB.
+
+ This fixes incorrect (muddy) transparent colors when rendering cairo
+ PDF output in some viewers. (Adrian Johnson, Adam Goode, and
+ MenTaLguY).
+
+ http://lists.freedesktop.org/archives/cairo/2006-November/008551.html
+
+• win32: Return correct metrics when hinting is off, and fix font
+ descent computation (Behdad Esfahbod).
+
+• quartz: Fix glyph interfaces to correctly return user-space rather
+ than device-space coordinates (Brian Ewins).
+
+ https://bugs.freedesktop.org/show_bug.cgi?id=9568
+
+• xcb: Fix parameter-order confusion with xcb_create_pixmap, which now
+ makes all tests that pass with xlib now pass with xcb (Carl Worth,
+ Jamey Sharp).
+
+• Fix some memory leaks in the perf suite (Chris Wilson).
+
+• Fix perf suite to consider changes in pixman/src (Mathias
+ Hasselmann).
+
+Build fixes
+-----------
+• Don't include pre-generated cairo-features.h file. This was causing
+ build failures when building with the directfb backend enabled
+ (Behdad Esfahbod).
+
+ https://bugs.freedesktop.org/show_bug.cgi?id=10189
+
+• Eliminate use of maintainer mode from cairo's automake/configure
+ script. This means that updates to files such as Makefile.am will
+ take effect, (by rerunning automake and friends as necessary) when
+ invoking make rather than being silently ignored. (Behdad Esfahbod)
+
+• Don't compile cairo-deflate-stream.c, which depends on zlib, unless
+ building the pdf backend which requires it. (Carl Worth, Tor
+ Lillqvist)
+
+ https://bugs.freedesktop.org/show_bug.cgi?id=10202
+
+• Don't make the ps backend link against zlib anymore, since it
+ doesn't require it (Carl Worth).
+
+• Use "find !" rather than "find -not" for better portability (Thomas
+ Klausner).
+
+ https://bugs.freedesktop.org/show_bug.cgi?id=10226
+
+• Don't use unsupported visibility attribute "hidden" on Solaris
+ (Gilles Dauphin, Thomas Klausner).
+
+ https://bugs.freedesktop.org/show_bug.cgi?id=10227
+
+Optimization
+------------
+• It was Behdad that suggested we focus strictly on bug fixes now that
+ we shipped so many performance improvements in 1.4.0, but it was
+ also Behdad that got distracted by the chance to remove a lot of
+ mallocs from cairo. Paths, gstates, trapezoids, splines, polygons,
+ and gradient color stops will now use small, stack-allocated buffers
+ in the most common cases rather than calling malloc as
+ often. (Behdad Esfahbod). And look for more from Mathias Hasselmann
+ soon.
+
+Release 1.4.0 (2007-03-06 Carl Worth <cworth@cworth.org>)
+=========================================================
+The many people[*] who have been working hard on cairo are very
+pleased to announce the long-awaited release of cairo 1.4. This
+release comes 4 months after the last stable update release (1.2.6)
+and 9 months since the initial release of 1.2.0.
+
+The release notes below are intended to capture the highlights of the
+changes that have occurred from the 1.2 series to the new 1.4.0
+release.
+
+Performance improvements
+------------------------
+Within the cairo project, the last 6 months or so has seen an intense
+effort focusing on the performance of cairo itself. That effort has
+paid off considerably, as can be seen in the following highlights of
+some of the performance differences from cairo 1.2.6 to cairo 1.4.0.
+
+(Note: The performance results reported here were measured on an x86
+laptop. Many of the improvements in 1.4---particular those involving
+text rendering---are even more dramatic on embedded platforms without
+hardware floating-point units. Such devices played an important part
+of many of the optimizations that found their way into cairo over the
+last few months.)
+
+• Dramatic improvement when drawing objects that are mostly off-screen
+ with the image backend (with the xlib backend this case is still
+ slow due to an X server bug):
+
+ image-rgba long-lines-uncropped-100 479.64 -> 4.98: 96.24x speedup
+ ███████████████████████████████████████████████▋
+
+• Dramatic improvement when copying a small fraction of an image
+ surface to an xlib surface:
+
+ xlib-rgba subimage_copy-512 3.93 -> 0.07: 54.52x speedup
+ ██████████████████████████▊
+
+• Dramatic improvement to tessellation speed for complex objects:
+
+ image-rgb tessellate-256-100 874.16 -> 34.79: 25.13x speedup
+ ████████████▏
+ xlib-rgba zrusin_another_fill-415 148.40 -> 13.85: 10.72x speedup
+ ████▉
+ xlib-rgb world_map-800 680.20 -> 345.54: 1.97x speedup
+ ▌
+
+• Dramatic improvement to the speed of stroking rectilinear shapes,
+ (such as the outline of a rectangle or "box"):
+
+ image-rgb box-outline-stroke-100 0.18 -> 0.01: 24.22x speedup
+ ███████████▋
+ xlib-rgb box-outline-stroke-100 0.46 -> 0.06: 8.05x speedup
+ ███▌
+
+
+• Dramatic improvements to text rendering speeds:
+
+ xlib-rgba text_image_rgba_over-256 63.12 -> 9.61: 6.57x speedup
+ ██▊
+
+• 3x improvements to floating-point to fixed-point conversion speeds:
+
+ image-rgba pattern_create_radial-16 9.29 -> 3.44: 2.70x speedup
+ ▉
+
+• 2x improvements to linear gradient computation:
+
+ image-rgb paint_linear_rgb_source-512 26.22 -> 11.61: 2.26x speedup
+ ▋
+
+• 2x improvement to a case common in PDF rendering:
+
+ image-rgb unaligned_clip-100 0.10 -> 0.06: 1.81x speedup
+ ▍
+
+• 1.3x improvement to rectangle filling speed (note: this improvement
+ is new since 1.3.16---previously this test case was a 1.3x slowdown
+ compared to 1.2.6):
+
+ image-rgba rectangles-512 6.19 -> 4.37: 1.42x speedup
+ ▎
+ xlib-rgba rectangles-512 7.48 -> 5.58: 1.34x speedup
+ ▏
+
+NOTE: In spite of our best efforts, there are some measurable
+performance regressions in 1.4 compared to 1.2. It appears that the
+primary problem is the increased overhead of the new tessellator when
+drawing many, very simple shapes. The following test cases capture
+some of that slowdown:
+
+ image-rgba mosaic_tessellate_lines-800 11.03 -> 14.29: 1.30x slowdown
+ ▏
+ image-rgba box-outline-fill-100 0.01 -> 0.01: 1.26x slowdown
+ ▏
+ image-rgba fill_solid_rgb_over-64 0.20 -> 0.22: 1.12x slowdown
+
+ image-rgba fill_image_rgba_over-64 0.23 -> 0.25: 1.10x slowdown
+
+ xlib-rgb paint_image_rgba_source-256 3.24 -> 3.47: 1.07x slowdown
+
+We did put some special effort into eliminating this slowdown for the
+very common case of drawing axis-aligned rectangles with an identity
+matrix (see the box-outline-stroke and rectangles speedup numbers
+above). Eliminating the rest of this slowdown will be a worthwhile
+project going forward.
+
+Also note that the "box-outline-fill" case is a slowdown while
+"box-outline-stroke" is a (huge) speedup. These two test cases
+resulted from the fact that some GTK+ theme authors were filling
+between two rectangles to avoid slow performance from the more natural
+means of achieving the same shape by stroking a single rectangle. With
+1.4 that workaround should definitely be eliminated as it will now
+cause things to perform more slowly.
+
+Greatly improved PDF output
+---------------------------
+We are very happy to be able to announce that cairo-generated PDF
+output will now have text that can be selected, cut-and-pasted, and
+searched with most capable PDF viewer applications. This is something
+that was not ever possible with cairo 1.2.
+
+Also, the PDF output now has much more compact encoding of text than
+before. Cairo is now much more careful to not embed multiple copies of
+the same font at different sizes. It also compresses text and font
+streams within the PDF output.
+
+API additions
+-------------
+There are several new functions available in 1.4 that were not
+available in 1.2. Curiously, almost all of the new functions simply
+allow the user to query state that has been set in cairo (many new
+"get" functions) rather than providing any fundamentally new
+operations. The new functionality is:
+
+• Getting information about the current clip region
+
+ cairo_clip_extents
+ cairo_copy_clip_rectangle_list
+ cairo_rectangle_list_destroy
+
+• Getting information about the current dash setting
+
+ cairo_get_dash_count
+ cairo_get_dash
+
+• Getting information from a pattern
+
+ cairo_pattern_get_rgba
+ cairo_pattern_get_surface
+ cairo_pattern_get_color_stop_rgba
+ cairo_pattern_get_color_stop_count
+ cairo_pattern_get_linear_points
+ cairo_pattern_get_radial_circles
+
+• Getting the current scaled font
+
+ cairo_get_scaled_font
+
+• Getting reference counts
+
+ cairo_get_reference_count
+ cairo_surface_get_reference_count
+ cairo_pattern_get_reference_count
+ cairo_font_face_get_reference_count
+ cairo_scaled_font_get_reference_count
+
+• Setting/getting user data on objects
+
+ cairo_set_user_data
+ cairo_get_user_data
+ cairo_pattern_set_user_data
+ cairo_pattern_get_user_data
+ cairo_scaled_font_set_user_data
+ cairo_scaled_font_get_user_data
+
+• New cairo-win32 functions:
+
+ cairo_win32_surface_create_with_ddb
+ cairo_win32_surface_get_image
+ cairo_win32_scaled_font_get_logical_to_device
+ cairo_win32_scaled_font_get_device_to_logical
+
+API deprecation
+---------------
+The CAIRO_FORMAT_RGB16_565 enum value has been deprecated. It never
+worked as a format value for cairo_image_surface_create, and it wasn't
+necessary for supporting 16-bit 565 X server visuals.
+
+A sampling of bug fixes in cairo 1.4
+------------------------------------
+ • Fixed radial gradients
+ • Fixed dashing (degenerate and "leaky" cases)
+ • Fixed transformed images in PDF/PS output (eliminate bogus repeating)
+ • Eliminate errors from CAIRO_EXTEND_REFLECT and CAIRO_EXTEND_PAD
+ • cairo_show_page no longer needed for single-page output
+ • SVG: Fix bug preventing text from appearing in many viewers
+ • cairo-ft: Return correct metrics when hinting is off
+ • Eliminate crash in cairo_create_similar if nil surface is returned
+ • Eliminate crash after INVALID_RESTORE error
+ • Fix many bugs related to multi-threaded use and locking
+ • Fix for glyph spacing 32 times larger than desired (cairo-win32)
+ • Fixed several problems in cairo-atsui (assertion failures)
+ • Fix PDF output to avoid problems when printing from Acrobat Reader
+ • Fix segfault on Mac OS X (measuring a zero-length string)
+ • Fix text extents to not include the size of non-inked characters
+ • Fix for glyph cache race condition in glitz backend (Jinghua Luo)
+ • Fix make check to work on OPD platforms (IA64 or PPC64)
+ • Fix compilation problems of cairo "wideint" code on some platforms
+ • Many, many others...
+
+Experimental backends (quartz, XCB, OS/2, BeOS, directfb)
+---------------------------------------------------------
+None of cairo's experimental backends are graduating to "supported"
+status with 1.4.0, but two of them in particular (quartz and xcb), are
+very close.
+
+The quartz baceknd has been entirely rewritten and is now much more
+efficient. The XCB backend has been updated to track the latest XCB
+API (which recently had a 1.0 release).
+
+We hope to see these backends become supported in a future release,
+(once they are passing all the tests in cairo's test suite).
+
+The experimental OS/2 backend is new in cairo 1.4 compared to cairo
+1.2.
+
+Documentation improvements
+--------------------------
+We have added documentation for several functions and types that
+were previously undocumented, and improved documentation on other
+ones. As of this release, there remain only two undocumented
+symbols: cairo_filter_t and cairo_operator_t.
+
+[*]Thanks to everyone
+---------------------
+I've accounted for 41 distinct people with attributed code added to
+cairo between 1.2.6 and 1.4.0, (their names are below). That's an
+impressive number, but there are certainly dozens more that
+contributed with testing, suggestions, clarifying questions, and
+encouragement. I'm grateful for the friendships that have developed as
+we have worked on cairo together. Thanks to everyone for making this
+all so much fun!
+
+Adrian Johnson, Alfred Peng, Alp Toker, Behdad Esfahbod,
+Benjamin Otte, Brian Ewins, Carl Worth, Christian Biesinger,
+Christopher (Monty) Montgomery, Daniel Amelang, Dan Williams,
+Dave Yeo, David Turner, Emmanuel Pacaud, Eugeniy Meshcheryakov,
+Frederic Crozat, Hans Breuer, Ian Osgood, Jamey Sharp, Jeff Muizelaar,
+Jeff Smith, Jinghua Luo, Jonathan Watt, Joonas Pihlaja, Jorn Baayen,
+Kalle Vahlman, Kjartan Maraas, Kristian Høgsberg, M Joonas Pihlaja,
+Mathias Hasselmann, Mathieu Lacage, Michael Emmel, Nicholas Miell,
+Pavel Roskin, Peter Weilbacher, Robert O'Callahan,
+Soren Sandmann Pedersen, Stuart Parmenter, T Rowley,
+Vladimir Vukicevic
+
+Snapshot 1.3.16 (2007-03-02 Carl Worth <cworth@cworth.org>)
+===========================================================
+New API functions
+-----------------
+A few new public functions have been added to the cairo API since the
+1.3.14 snapshot. These include a function to query the current scaled
+font:
+
+ cairo_get_scaled_font
+
+New functions to query the reference count of all cairo objects:
+
+ cairo_get_reference_count
+
+ cairo_surface_get_reference_count
+ cairo_pattern_get_reference_count
+
+ cairo_font_face_get_reference_count
+ cairo_scaled_font_get_reference_count
+
+And new functions to allow the use of user_data with any cairo object,
+(previously these were only available on cairo_surface_t and
+cairo_font_face_t objects):
+
+ cairo_set_user_data
+ cairo_get_user_data
+
+ cairo_pattern_set_user_data
+ cairo_pattern_get_user_data
+
+ cairo_scaled_font_set_user_data
+ cairo_scaled_font_get_user_data
+
+Usability improvement for PDF/PS/SVG generation
+-----------------------------------------------
+In previous versions of cairo, generating single-page output with the
+cairo-pdf, cairo-ps, or cairo-svg backends required a final call to
+cairo_show_page. This was often quite confusing as people would port
+functional code from a non-paginated backend and be totally mystified
+as to why the output was blank until they learned to add this call.
+
+Now that call to cairo_show_page is optional, (it will be generated
+implicitly if the user does not call it). So cairo_show_page is only
+needed to explicitly separate multiple pages.
+
+Greatly improved PDF output
+---------------------------
+We are very happy to be able to announce that cairo-generated PDF
+output will now have text that can be selected, cut-and-paste, and
+searched with most capable PDF viewer applications. This is something
+that was not ever possible with cairo 1.2.
+
+Also, the PDF output now has much more compact encoding of text than
+before. Cairo is now much more careful to not embed multiple copies of
+the same font at different sizes. It also compresses text and font
+streams within the PDF output.
+
+Major bug fixes
+---------------
+ • Fixed radial gradients
+
+ The rendering of radial gradients has been greatly improved. In
+ the cairo 1.2 series, there was a serious regression affecting
+ radial gradients---results would be very incorrect unless one of
+ the gradient circles had a radius of 0.0 and a center point within
+ the other circle. These bugs have now been fixed.
+
+ • Fixed dashing
+
+ Several fixes have been made to the implementation of dashed
+ stroking. Previously, some dashed, stroked rectangles would
+ mis-render and fill half of the rectangle with a large triangular
+ shape. This bug has now been fixed.
+
+ • Fixed transformed images in PDF/PS output
+
+ In previous versions of cairo, painting with an image-based source
+ surface pattern to the PDF or PS backends would cause many kinds
+ of incorrect results. One of the most common problems was that an
+ image would be repeated many times even when the user had
+ explicitly requested no repetition with CAIRO_EXTEND_NONE. These
+ bugs have now been fixed.
+
+ • Eliminate errors from CAIRO_EXTEND_REFLECT and CAIRO_EXTEND_PAD
+
+ In the 1.2 version of cairo any use of CAIRO_EXTEND_REFLECT or
+ CAIRO_EXTEND_PAD with a surface-based pattern resulted in an
+ error, (cairo would stop rendering). This bug has now been
+ fixed.
+
+ Now, CAIRO_EXTEND_REFLECT should work properly with surface
+ patterns.
+
+ CAIRO_EXTEND_PAD is still not working correctly, but it will now
+ simply behave as CAIRO_EXTEND_NONE rather than triggering the
+ error.
+
+New rewrite of quartz backend (still experimental)
+--------------------------------------------------
+Cairo's quartz backend has been entirely rewritten and is now much
+more efficient. This backend is still marked as experimental, not
+supported, but it is now much closer to becoming an officially
+supported backend. (For people that used the experimental nquartz
+backend in previous snapshots, that implementation has now been
+renamed from "nquartz" to "quartz" and has replaced the old quartz
+backend.)
+
+Documentation improvements
+--------------------------
+We have added documentation for several functions and types that
+were previously undocumented, and improved documentation on other
+ones. As of this release, there remain only two undocumented
+symbols: cairo_filter_t and cairo_operator_t.
+
+Other bug fixes
+---------------
+ • cairo-svg: Fix bug that was preventing text from appearing in many
+ viewers
+
+ • cairo-ft: Return correct metrics when hinting is off
+
+ • Cairo 1.3.14 deadlocks in cairo_scaled_font_glyph_extents or
+ _cairo_ft_unscaled_font_lock_face
+
+ https://bugs.freedesktop.org/show_bug.cgi?id=10035
+
+ • cairo crashes in cairo_create_similar if nil surface returned by
+ other->backend->create_similar
+
+ https://bugs.freedesktop.org/show_bug.cgi?id=9844
+
+ • evolution crash in _cairo_gstate_backend_to_user()
+ https://bugs.freedesktop.org/show_bug.cgi?id=9906
+
+ • Fix memory leak in rectilinear stroking code
+
+Things not in this release
+--------------------------
+ • Solid-surface-pattern cache: This patch had been applied during
+ the 1.3.x series, but it was reverted due to some inter-thread
+ problems it caused. The patch is interesting since it made a big
+ benefit for text rendering performance---so we'll work to bring a
+ corrected version of this patch back as soon as possible.
+
+Snapshot 1.3.14 (2006-02-13 Carl Worth <cworth@cworth.org>)
+===========================================================
+This is the seventh development snapshot in the 1.3 series, (and there
+likely won't be many more before the 1.4.0 release). It comes just
+over 3 weeks after the 1.3.12 snapshot.
+
+Since we're so close to the 1.4.0 release, there are not a lot of new
+features nor even a lot of new performance improvements in this
+snapshot. Instead, there are a great number of bug fixes. Some are
+long-standing bugs that we're glad to say goodbye to, and several are
+fixes for regressions that were introduced as part of the optimization
+efforts during the 1.3.x series.
+
+PDF text selection fixed
+------------------------
+The inability to correctly select text in cairo-generated PDF has been
+a defect ever since the initial support for the PDF backend in the
+cairo 1.2.0 release. With the 1.3.14 snapshot, in most situations, and
+with most PDF viewer applications, the PDF generated by cairo will
+allow text to be correctly selected for copy-and-paste, (as well as
+searching).
+
+We're very excited about this new functionality, (and very grateful to
+Adrian Johnson, Behdad Esfahbod, and others that have put a lot of
+work into this lately). Please test this new ability and give feedback
+on the cairo@cairographics.org list.
+
+Many thread-safety issues fixed
+-------------------------------
+We've discovered that no release of cairo has ever provided safe text
+rendering from a multi-threaded application. With the 1.3.14 snapshot
+a huge number of the bugs in this area have been fixed, and multiple
+application dvelopers have now reported success at writing
+multi-threaded applications with cairo.
+
+Other fixes
+-----------
+Fixed a bug that was causing glyph spacing to be 32 times larger than
+desired when using cairo-win32.
+
+Fixed a regression in the rendering of linear gradients that had been
+present since the 1.3.8 snapshot.
+
+Fixed several problems in cairo-atsui that were leading to assertion
+failures when rendering text.
+
+Fix corrupted results when rendering a transformed source image
+surface to an xlib surface. This was a regression that had been
+present since the 1.3.2 snapshot.
+
+Fixed PDF output to prevent problems printing from some versions of
+Acrobat Reader, (a single glyph was being substituted for every
+glyph).
+
+And many other fixes as well, (see the logs for details).
+
+Snapshot 1.3.12 (2007-01-20 Carl Worth <cworth@cworth.org>)
+===========================================================
+The relentless march toward the cairo 1.4 release continues, (even if
+slightly late out of the starting blocks in 2007). This is the sixth
+development snapshot in the 1.3 series. It comes 4 weeks after the
+1.3.10 snapshot.
+
+Performance
+-----------
+As usual, this snapshot has some fun performance improvements to show
+off:
+
+image-rgba long-lines-uncropped-100 470.08 -> 4.95: 94.91x speedup
+███████████████████████████████████████████████
+image-rgb long-lines-uncropped-100 461.60 -> 4.96: 93.02x speedup
+██████████████████████████████████████████████
+
+This 100x improvement, (and yes, that's 100x, not 100%), in the image
+backend occurs when drawing large shapes where only a fraction of the
+shape actually appears in the final result, (the rest being outside
+the bounds of the destination surface). Many applications should see
+speedups here, and the actual amount of speedup depends on the ratio
+of non-visible to visible portions of geometry.
+
+[Note: There remains a similar performance bug when drawing mostly
+non-visible objects with the xlib backend. This is due to a similar
+bug in the X server itself, but we hope a future cairo snapshot will
+workaround that bug to get a similar speedup with the xlib backend.]
+
+image-rgba unaligned_clip-100 0.09 -> 0.06: 1.67x speedup
+▍
+image-rgb unaligned_clip-100 0.09 -> 0.06: 1.66x speedup
+▍
+
+This speedup is due to further MMX optimization by Soeren Sandmann for
+a case commonly hit when rendering PDF files, (and thanks to Jeff
+Muizelaar for writing code to extract the test case for us).
+
+There's another MMX optimization in this snapshot (without a fancy
+speedup chart) by Dan Williams which improves compositing performance
+specifically for the OLPC machine.
+
+Thanks to Adrian Johnson, cairo's PDF output is now much more
+efficient in the way it encodes text output. By reducing redundant
+information and adding compression to text output streams, Adrian
+achieved a ~25x improvement in the efficiency of encoding text in PDF
+files, (was ~45 bytes per glyph and is now ~1.6 bytes per glyph).
+
+Bug fixes
+---------
+In addition to those performance improvements, this snapshot includes
+several bug fixes:
+
+ * A huge number of bug fixes for cairo-atsui text rendering, (for mac
+ OS X). These bugs affect font selection, glyph positioning, glyph
+ rendering, etc. One noteworthy bug fixes is that
+ cairo_select_font_face will no longer arbitrarily select bold nor
+ italic when not requested, (at least not when using a standard CSS2
+ font family name such as "serif", "sans-serif", "monospace", etc.).
+ All these fixes are thanks to Brian Ewins who continues to do a
+ great job as the new cairo-atsui maintainer.
+
+ * Fix PDF output so that images that are scaled down no longer
+ mysteriously repeat (Carl Worth).
+
+ * Fix segfault on Mac OS X dues to attempt to measure extents of a
+ zero-length string (Behdad Esfahbod).
+
+ * Fix text extents to not include the size of initial/trailing
+ non-inked characters (Behdad Esfahbod).
+
+API tweaks
+----------
+Three functions have had API changes to improve consistency. Note that
+the API functions being changed here are all functions that were
+introduced as new functions during these 1.3.x snapshots. As always,
+there will not be any API changes to functions included in a major
+release (1.2.x, 1.4.x, etc.) of cairo.
+
+The changes are as follows:
+
+ * Rename of cairo_copy_clip_rectangles to cairo_copy_clip_rectangle_list.
+
+ * Change cairo_get_dash_count to return an int rather than accepting a
+ pointer to an int for the return value.
+
+ * Change cairo_get_dash to have a void return type rather than
+ returning cairo_status_t.
+
+It's possible there will be one more round of changes to these
+functions, (and perhaps cairo_get_color_stop as well), as we seek to
+establish a unifying convention for returning lists of values.
+
+Snapshot 1.3.10 (2006-12-23 Carl Worth <cworth@cworth.org>)
+===========================================================
+Santa Claus is coming just a little bit early this year, and he's
+bringing a shiny new cairo snapshot for all the good little boys and
+girls to play with.
+
+This is the fifth development snapshot in the 1.3 series. It comes 9
+days after the 1.3.8 snapshot, and still well within our goal of
+having a new snapshot every week, (though don't expect one next
+week---we'll all be too stuffed with sugar plums).
+
+Speaking of sugar plums, there's a sweet treat waiting in this cairo
+snapshot---greatly improved performance for stroking rectilinear
+shapes, like the ever common rectangle:
+
+image-rgb box-outline-stroke-100 0.18 -> 0.01: 25.58x speedup
+████████████████████████▋
+image-rgba box-outline-stroke-100 0.18 -> 0.01: 25.57x speedup
+████████████████████████▋
+xlib-rgb box-outline-stroke-100 0.49 -> 0.06: 8.67x speedup
+███████▋
+xlib-rgba box-outline-stroke-100 0.22 -> 0.04: 5.39x speedup
+████▍
+
+In past releases of cairo, some people had noticed that using
+cairo_stroke to draw rectilinear shapes could be awfully slow. Many
+people had worked around this by using cairo_fill with a more complex
+path and gotten a 5-15x performance benefit from that.
+
+If you're one of those people, please rip that workaround out, as now
+the more natural use of cairo_stroke should be 1.2-2x faster than the
+unnatural use of cairo_fill.
+
+And if you hadn't ever implemented that workaround, then you just
+might get to see your stroked rectangles now get drawn 5-25x faster.
+
+Beyond that performance fix, there are a handful of bug fixes in this
+snapshot:
+
+ * Fix for glyph cache race condition in glitz backend (Jinghua Luo)
+
+ * Many fixes for ATSUI text rendering (Brian Ewins)
+
+ * Un-break recent optimization-triggered regression in rendering text
+ with a translation in the font matrix (Behdad Esfahbod)
+
+ * Fix make check to work on OPD platforms (IA64 or PPC64)
+ (Frederic Crozat)
+
+ * Fix a couple of character spacing issues on Windows
+ (Jonathan Watt)
+
+Have fun with that, everybody, and we'll be back for more in the new
+year, (with a plan to add the last of our performance improvements in
+this round, fix a few bad, lingering bugs, and then finish off a nice,
+stable 1.4 release before the end of January).
+
+-Carl
+
+Snapshot 1.3.8 (2006-12-14 Carl Worth <cworth@cworth.org>)
+==========================================================
+This is the fourth development snapshot in the 1.3 series. It comes
+just slightly more than one week after the 1.3.6 snapshot.
+
+After the bug fixes in 1.3.6, we're back to our original program of
+weekly snapshots, each one faster than the one from the week
+before. Cairo 1.3.8 brings a 2x improvement in the speed of rendering
+linear gradients (thanks to David Turner), and a significant reduction
+in X traffic when rendering text (thanks to Xan Lopez and Behdad
+Esfahbod), making cairo behave very much like Xft does.
+
+A few other things in the 1.3.8 snapshot worth noting include a more
+forgiving image comparator in the test suite, (using the "perceptual
+diff" metric and GPL implementation by Hector Yee[*]), a bug fix for
+broken linking on x86_64 (thanks to M Joonas Pihlaja) and an even
+better implementation of _cairo_lround, (not faster, but supporting a
+more complete input range), from Daniel Amelang.
+
+[*] http://pdiff.sourceforge.net/
+
+Snapshot 1.3.6 (2006-12-06 Carl Worth <cworth@cworth.org>)
+==========================================================
+This is the third development snapshot in the 1.3 series. It comes two
+weeks after the 1.3.4 snapshot.
+
+We don't have fancy performance charts this week as the primary
+changes in this snapshot are bug fixes. The performance work continues
+and the next snapshot (planned for one week from today) should include
+several improvements. The bug fixes in this snapshot include:
+
+ * Fix undesirable rounding in glyph positioning (Dan Amelang)
+
+ This bug was noticed by several users, most commonly by seeing
+ improper text spacing or scrambled glyphs as drawn by nautilus. For
+ example:
+
+ Update to cairo-1.3.4 worsen font rendering
+ https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=217819
+
+ * Fix reduced range of valid input coordinates to tessellator
+ (M Joonas Pihlaja)
+
+ This bug was causing lots of assertion failures in mozilla as
+ mentioned here:
+
+ CAIRO_BO_GUARD_BITS and coordinate space?
+ http://lists.freedesktop.org/archives/cairo/2006-December/008743.html
+
+ * Fix several regressions in new tessellator (M Joonas Pihlaja)
+
+ Joonas just had a good eye for detail here. I don't think any
+ external cairo users had noticed any of these bugs yet.
+
+ * Fix compilation problems of cairo "wideint" code on some platforms
+ (Mathieu Lacage)
+
+ * Fix failed configure due to broken grep (Dan Amelang)
+
+ This bug was reported here:
+
+ AX_C_FLOAT_WORDS_BIGENDIAN doesn't work because grep doesn't
+ work with binary file
+ https://bugs.freedesktop.org/show_bug.cgi?id=9124
+
+ * Remove the pkg-config minimum version requirement (Behdad Esfahbod)
+
+ Some systems ship with pkg-config 0.15 and there was really no good
+ reason for cairo to insist on having version 0.19 before it would
+ build.
+
+There is also one new (but inert) feature in this snapshot. There's a
+new option that can be passed to cairo's configure script:
+
+ --disable-some-floating-point
+
+ Disable certain code paths that rely heavily on double precision
+ floating-point calculation. This option can improve
+ performance on systems without a double precision floating-point
+ unit, but might degrade performance on those that do.
+
+As of this snapshot, this option does not make any change to cairo,
+but it is possible that future versions of cairo will respect this
+option and change the implementation of various functions as
+appropriate.
+
+Snapshot 1.3.4 (2006-11-22 Carl Worth <cworth@cworth.org>)
+==========================================================
+This is the second development snapshot in the 1.3 series. It comes
+one week after the 1.3.2 snapshot.
+
+This snapshot has a couple of significant performance improvements,
+and also adds new support for producing multi-page SVG output, (when
+targeting SVG 1.2)---thanks to Emmanuel Pacaud. The details of the
+performance improvements are as follows:
+
+1. The long-awaited "new tessellator".
+
+ The credit for this being an improvement goes to Joonas Pihlaja. He
+ took my really slow code and really put it through its paces to get
+ the dramatic performance improvement seen below (up to 38x faster
+ on realistic cases, and more than 10x faster for the zrusin_another
+ test).
+
+ His own writeup of the work he did is quite thorough, but more than
+ can be quoted here. Please see his post for the interesting details:
+
+ http://lists.freedesktop.org/archives/cairo/2006-November/008483.html
+
+ (Though note that this snapshot also includes some additional,
+ significant improvements that were only sketched out in that
+ email---see "Generating fewer trapezoids").
+
+2. More floating-point improvements
+
+ Daniel Amelang continues to work the magic he began in the 1.3.2
+ snapshot. This time he short-circuits floating-point
+ transformations by identity matrices and applies the earlier
+ floating-to-fixed-point technique to the problem of rounding.
+
+ The improvements here will primarily benefit text performance, and
+ will benefit platforms without hardware floating-point more than
+ those that have it, (some text tests show 20% improvement on an x86
+ machine and closer to 80% improvement on arm).
+
+The performance chart comparing 1.3.2 to 1.3.4 really speaks for
+itself, (this is on an x86 laptop). This is quite a lot of progress
+for one week:
+
+ xlib-rgb stroke_similar_rgba_over-256 74.99 1.45% -> 2.03 68.38%: 36.86x speedup
+███████████████████████████████████▉
+ xlib-rgb stroke_similar_rgba_source-256 78.23 1.43% -> 3.30 67.05%: 23.71x speedup
+██████████████████████▊
+ xlib-rgba tessellate-256-100 820.42 0.15% -> 35.06 2.84%: 23.40x speedup
+██████████████████████▍
+image-rgba tessellate-256-100 819.55 0.32% -> 35.04 3.56%: 23.39x speedup
+██████████████████████▍
+ xlib-rgb stroke_image_rgba_over-256 78.10 1.43% -> 4.33 65.56%: 18.04x speedup
+█████████████████
+ xlib-rgb stroke_image_rgba_source-256 80.11 1.63% -> 5.75 63.99%: 13.94x speedup
+█████████████
+ xlib-rgba zrusin_another_tessellate-415 89.22 0.35% -> 8.38 5.23%: 10.65x speedup
+█████████▋
+image-rgba zrusin_another_tessellate-415 87.38 0.89% -> 8.37 5.22%: 10.44x speedup
+█████████▍
+image-rgba zrusin_another_fill-415 117.67 1.34% -> 12.88 2.77%: 9.14x speedup
+████████▏
+ xlib-rgba zrusin_another_fill-415 140.52 1.57% -> 15.79 2.88%: 8.90x speedup
+███████▉
+image-rgba tessellate-64-100 9.68 3.42% -> 1.42 0.60%: 6.82x speedup
+█████▉
+ xlib-rgba tessellate-64-100 9.78 4.35% -> 1.45 0.83%: 6.72x speedup
+█████▊
+ xlib-rgb stroke_linear_rgba_over-256 46.01 2.44% -> 7.74 54.51%: 5.94x speedup
+█████
+ xlib-rgb stroke_linear_rgba_source-256 48.09 2.15% -> 9.14 53.00%: 5.26x speedup
+████▎
+ xlib-rgb stroke_radial_rgba_over-256 50.96 2.34% -> 12.46 47.99%: 4.09x speedup
+███▏
+ xlib-rgb stroke_radial_rgba_source-256 53.06 1.57% -> 13.96 46.57%: 3.80x speedup
+██▊
+image-rgba paint_similar_rgba_source-256 0.12 1.57% -> 0.08 9.92%: 1.42x speedup
+▍
+image-rgba paint_image_rgba_source-256 0.12 2.49% -> 0.08 10.70%: 1.41x speedup
+▍
+image-rgba world_map-800 356.28 0.46% -> 275.72 1.15%: 1.29x speedup
+▎
+ xlib-rgba world_map-800 456.81 0.39% -> 357.95 1.39%: 1.28x speedup
+▎
+image-rgb tessellate-16-100 0.09 0.57% -> 0.07 3.43%: 1.23x speedup
+▎
+image-rgba tessellate-16-100 0.09 0.06% -> 0.07 2.46%: 1.23x speedup
+▎
+image-rgba text_solid_rgb_over-256 5.39 4.01% -> 4.47 0.70%: 1.21x speedup
+▎
+image-rgba text_solid_rgba_over-256 5.37 0.82% -> 4.45 0.75%: 1.21x speedup
+▎
+image-rgba text_image_rgb_over-64 0.78 0.10% -> 0.65 0.74%: 1.20x speedup
+▎
+image-rgba text_image_rgba_over-64 0.78 0.29% -> 0.65 0.68%: 1.19x speedup
+▎
+image-rgb text_solid_rgb_over-64 0.76 2.45% -> 0.63 0.81%: 1.19x speedup
+▎
+image-rgba text_solid_rgba_over-64 0.76 0.33% -> 0.64 0.66%: 1.19x speedup
+▎
+image-rgba text_similar_rgba_over-256 5.99 4.72% -> 5.04 1.09%: 1.19x speedup
+▎
+
+We should point out that there is some potential for slowdown in this
+snapshot. The following are the worst slowdowns reported by the cairo
+performance suite when comparing 1.3.2 to 1.3.4:
+
+image-rgba subimage_copy-256 0.01 0.87% -> 0.01 3.61%: 1.45x slowdown
+▌
+ xlib-rgb paint_solid_rgb_over-256 0.31 10.23% -> 0.38 0.33%: 1.26x slowdown
+▎
+image-rgba box-outline-fill-100 0.01 0.30% -> 0.01 2.52%: 1.21x slowdown
+▎
+image-rgba fill_solid_rgb_over-64 0.20 1.22% -> 0.22 1.59%: 1.12x slowdown
+▏
+image-rgb fill_similar_rgb_over-64 0.21 1.04% -> 0.24 1.06%: 1.11x slowdown
+▏
+image-rgba fill_image_rgb_over-64 0.21 1.19% -> 0.24 0.72%: 1.11x slowdown
+▏
+image-rgba fill_similar_rgb_over-64 0.21 0.18% -> 0.24 0.30%: 1.11x slowdown
+▏
+image-rgb fill_solid_rgba_over-64 0.22 1.66% -> 0.24 1.15%: 1.11x slowdown
+▏
+image-rgb fill_image_rgb_over-64 0.21 0.14% -> 0.24 0.80%: 1.11x slowdown
+▏
+image-rgba fill_image_rgba_over-64 0.22 1.34% -> 0.25 0.20%: 1.11x slowdown
+▏
+image-rgba fill_solid_rgba_over-64 0.22 1.48% -> 0.24 0.95%: 1.11x slowdown
+▏
+image-rgb fill_similar_rgba_over-64 0.22 1.13% -> 0.25 1.25%: 1.10x slowdown
+▏
+
+The 45% slowdown for subimage_copy is an extreme case. It's unlikely
+to hit many applications unless they often use cairo_rectangle;
+cairo_fill to copy a single pixel at a time. In any case, it shows a
+worst-case impact of the overhead of the new tessellator. The other
+slowdowns (~ 10%) are probably more realistic, and still very
+concerning.
+
+We will work to ensure that performance regressions like these are not
+present from one major release of cairo to the next, (for example,
+from 1.2 to 1.4).
+
+But we're putting this 1.3.4 snapshot out there now, even with this
+potential slowdown so that people can experiment with it. If you've
+got complex geometry, we hope you will see some benefit from the new
+tessellator. If you've got primarily simple geometry, we hope things
+won't slowdown too much, but please let us know what slowdown you see,
+if any, so we can calibrate our performance suite against real-world
+impacts.
+
+Thanks, and have fun with cairo!
+
+Snapshot 1.3.2 (2006-11-14 Carl Worth <cworth@cworth.org>)
+==========================================================
+This is the first development snapshot since the 1.2 stable series
+branched off shortly after the 1.2.4 release in August 2006.
+
+This snapshot includes all the bug fixes from the 1.2.6 release,
+(since they originated here on the 1.3 branch first and were
+cherry-picked over to 1.2). But more importantly, it contains some new
+API in preparation for a future 1.4 release, and most importantly, it
+contains several performance improvements.
+
+The bug fixes will not be reviewed here, as most of them are already
+described in the 1.2.6 release notes. But details for the new API and
+some performance improvements are included here.
+
+As with all snapshots, this is experimental code, and the new API
+added here is still experimental and is not guaranteed to appear
+unchanged in any future release of cairo.
+
+API additions
+-------------
+Several new API additions are available in this release. There is a
+common theme among all the additions in that they allow cairo to
+advertise information about its state that it was refusing to
+volunteer earlier. So this isn't groundbreaking new functionality, but
+it is essential for easily achieving several tasks.
+
+The new functions can be divided into three categories:
+
+ Getting information about the current clip region
+ -------------------------------------------------
+ cairo_clip_extents
+ cairo_copy_clip_rectangles
+ cairo_rectangle_list_destroy
+
+ Getting information about the current dash setting
+ --------------------------------------------------
+ cairo_get_dash_count
+ cairo_get_dash
+
+ Getting information from a pattern
+ ----------------------------------
+ cairo_pattern_get_rgba
+ cairo_pattern_get_surface
+ cairo_pattern_get_color_stop_rgba
+ cairo_pattern_get_color_stop_count
+ cairo_pattern_get_linear_points
+ cairo_pattern_get_radial_circles
+
+In each of these areas, we have new API for providing a list of
+uniform values from cairo. The closest thing we had to this before was
+cairo_copy_path, (which is rather unique in providing a list of
+non-uniform data).
+
+The copy_clip_rectangles/rectangle_list_destroy functions follow a
+style similar to that of cairo_copy_path. Meanwhile, the dash and
+pattern color stop functions introduce a new style in which there is a
+single call to return the number of elements available (get_dash_count
+and get_color_stop_count) and then a function to be called once to get
+each element (get_dash and get_color_stop_rgba).
+
+I'm interested in hearing feedback from users of these new API
+functions, particularly from people writing language bindings. One
+open question is whether the clip "getter" functionality should adopt
+a style similar to that of the new dash and color_stop interfaces.
+
+API deprecation
+---------------
+The CAIRO_FORMAT_RGB16_565 enum value has been deprecated. It never
+worked as a format value for cairo_image_surface_create, and it wasn't
+necessary for supporting 16-bit 565 X server visuals.
+
+XCB backend changes
+-------------------
+The XCB backend has been updated to track the latest XCB API (which
+recently had a 1.0 release).
+
+New quartz backend
+------------------
+Vladimir Vukicevic has written a new "native quartz" backend which
+will eventually replace the current "image-surface wrapping" quartz
+backend. For now, both backends are available, (the old one is
+"quartz" and the new one is "nquartz"). But it is anticipated that the
+new backend will replace the old one and take on the "quartz" name
+before this backend is marked as supported in a release of cairo.
+
+New OS/2 backend
+----------------
+Doodle and Peter Weilbacher have contributed a new, experimental
+backend for using cairo on OS/2 systems.
+
+Performance improvements
+------------------------
+Here are some highlights from cairo's performance suite showing
+improvements from cairo 1.2.6 to cairo 1.3.2. The command used to
+generate this data is:
+
+ ./cairo-perf-diff 1.2.6 HEAD
+
+available in the perf/ directory of a recent checkout of cairo's
+source, (the cairo-perf-diff script does require a git checkout and
+will not work from a tar file---though ./cairo-perf can still be used
+to generate a single report there and ./cairo-perf-diff-files can be
+used to compare two reports).
+
+Results are described below both for an x86 laptop (with an old Radeon
+video card, recent X.org build, XAA, free software drivers), as well
+as for a Nokia 770. First the x86 results with comments on each, (all
+times are reported in milliseconds).
+
+Copying subsets of an image surface to an xlib surface (much faster)
+--------------------------------------------------------------------
+ xlib-rgba subimage_copy-512 10.50 -> : 53.97x speedup
+█████████████████████████████████████████████████████
+
+Thanks to Christopher (Monty) Montgomery for this big performance
+improvement. Any application which has a large image surface and is
+copying small pieces of it at a time to an xlib surface, (imagine an
+application that loads a single image containing all the "sprites" for
+that application), will benefit from this fix. The larger the ratio of
+the image surface to the portion being copied, the larger the benefit.
+
+Floating-point conversion (3x faster)
+-------------------------------------
+ xlib-rgba pattern_create_radial-16 27.75 -> 3.93 : 2.94x speedup
+██
+image-rgb pattern_create_radial-16 26.06 -> 3.74 : 2.90x speedup
+█▉
+
+Thanks to Daniel Amelang, (and others who had contributed the idea
+earlier), for this nice improvement in the speed of converting
+floating-point values to fixed-point.
+
+Text rendering (1.3 - 2x faster)
+------------------------------
+ xlib-rgba text_image_rgba_source-256 319.73 -> 62.40 : 2.13x speedup
+█▏
+image-rgb text_solid_rgba_over-64 2.85 -> 0.88 : 1.35x speedup
+▍
+
+I don't think we've ever set out to improve text performance
+specifically, but we did it a bit anyway. I believe the extra
+improvement in the xlib backend is due to Monty's image copying fix
+above, and the rest is due to the floating-point conversion speedup.
+
+Thin stroke improvements (1.5x faster)
+---------------------------------------------
+image-rgb world_map-800 1641.09 -> 414.77 : 1.65x speedup
+▋
+ xlib-rgba world_map-800 1939.66 -> 529.94 : 1.52x speedup
+▌
+
+The most modest stuff to announce in this release is the 50%
+improvement I made in the world_map case. This is in improvement that
+should help basically anything that is doing strokes with many
+straight line segments, (and the thinner the better, since that makes
+tessellation dominate rasterization). The fixes here are to use a
+custom quadrilateral tessellator rather than the generic tessellator
+for straight line segments and the miter joins.
+
+Performance results from the Nokia 770
+--------------------------------------
+ xlib-rgba subimage_copy-512 55.88 -> 2.04 : 27.34x speedup
+██████████████████████████▍
+ xlib-rgb text_image_rgb_over-256 1487.58 -> 294.43 : 5.05x speedup
+████
+image-rgb pattern_create_radial-16 187.13 -> 91.86 : 2.04x speedup
+█
+ xlib-rgba world_map-800 21261.41 -> 15628.02 : 1.36x speedup
+▍
+
+Here we see that the subimage_copy improvement was only about half as
+large as the corresponding improvement on my laptop, (27x faster
+compared to 54x) and the floating-point conversion fix also was quite
+as significant, (2x compared to 3x). Oddly the improvement to text
+rendering performance was more than twice as good (5x compared to
+2x). I don't know what the reason for that is, but I don't think it's
+anything anybody should complain about.
+
+Release 1.2.6 (2006-11-02 Behdad Esfahbod <behdad@behdad.org>)
+==============================================================
+This is the third bug fix release in the 1.2 series, coming less than
+two months after the 1.2.4 release made on August 18.
+
+The 1.2.4 release turned out to be a pretty solid one, except for a crasher
+bug when forwarding an X connection where the client and the server have
+varying byte orders, eg. from a PPC to an i686. Other than that, various
+other small bugs have been fixed.
+
+Various improvements have been made in the testing infrastructure to prevent
+false positives, and to make sure the generated cairo shared object behaves as
+expected in terms of exported symbols and relocations.
+
+There were a total of 89 changes since 1.2.4. The following list the most
+important ones:
+
+Common fixes
+------------
+- Avoid unsigned loop control variable to eliminate infinite,
+ memory-scribbling loop. (#7593)
+- Fix cairo_image_surface_create to report INVALID_FORMAT errors.
+ Previously the detected error was being lost and a nil surface was
+ returned that erroneously reported CAIRO_STATUS_NO_MEMORY.
+- Change _cairo_color_compute_shorts to not rely on any particular
+ floating-point epsilon value. (#7497)
+- Fix infinite-join test case (bug #8379)
+- Pass correct surface to create_similar in _cairo_clip_init_deep_copy().
+
+PS/PDF fixes
+------------
+- Fix Type 1 embedding in PDF.
+- Correct the value of /LastChar in the PDF Type 1 font dictionary.
+- Improve error checking in TrueType subsetting.
+- Compute right index when looking up left side bearing. (bug #8180)
+- Correct an unsigned to signed conversion problem in truetype subsetting
+ bbox.
+- Type1 subsetting: Don't put .notdef in Encoding when there are 256 glyphs.
+- Add cairo version to PS header / PDF document info dictionary.
+- Set CTM before path construction.
+
+Win32 fixes
+-----------
+- Get correct unhinted outlines on win32. (bug 7603)
+- Make cairo as a win32 static library possible.
+- Use CAIRO_FORMAT_RGB24 for BITSPIXEL==32 surfaces too.
+
+Build system fixes
+------------------
+- Define WINVER if it's not defined. (bug 6456)
+- Fix the AMD64 final link by removing SLIM from pixman.
+- Misc win32 compilation fixes.
+- Add Sun Pro C definition of pixman_private.
+- Use pixman_private consistently as prefix not suffix.
+- Added three tests check-plt.sh, check-def.sh, and check-header.sh that check
+ that the shared object, the .def file, and the public headers agree about
+ the exported symbols.
+- Require pkg-config 0.19. (#8686)
+
+
+Release 1.2.4 (2006-08-18 Carl Worth <cworth@cworth.org>)
+=========================================================
+This is the second bug fix release in the 1.2 series, coming less than
+two weeks after the 1.2.2 release made on August 8.
+
+The big motivation for a quick release was that there were a log of
+build system snags that people ran into with the 1.2.2 release. But,
+by the time we got those all done, we found that we had a bunch of
+fixes for cairo's rendering as well. So there's a lot of goodness in
+here for such a short time period.
+
+Rendering fixes
+---------------
+Fix image surfaces to not be clipped when used as a source (Vladimir Vukicevic)
+http://gitweb.freedesktop.org/?p=cairo;a=commit;h=72e25648c4c4bc82ddd938aa4e05887a293f0d8b
+
+Fix a couple of corner cases in dashing degenerate paths (Jeff Muizelaar)
+http://gitweb.freedesktop.org/?p=cairo;a=commit;h=fbb1758ba8384650157b2bbbc93d161b0c2a05f0
+
+Fix support for type1 fonts on win32 (Adrian Johnson)
+http://gitweb.freedesktop.org/?p=cairo;a=commit;h=da1019c9138695cb838a54f8b871bbfd0e8996d7
+
+Fix assertion failure when rotating bitmap fonts (Carl Worth)
+http://gitweb.freedesktop.org/?p=cairo;a=commit;h=0bfa6d4f33b8ddb5dc55bbe419c15df4af856ff9
+
+Fix assertion failure when calling cairo_text_path with bitmap fonts (Carl Worth)
+http://gitweb.freedesktop.org/?p=cairo;a=commit;h=9878a033531e6b96b5f27e69e10e90dee7440cd9
+
+Fix mis-handling of cairo_close_path in some situations (Tim Rowley, Carl Worth)
+http://gitweb.freedesktop.org/?p=cairo;a=commit;h=53f74e59faf1af78f2f0741ccf1f23aa5dad4efc
+
+Respect font_matrix translation in _cairo_gstate_glyph_path (Behdad Esfahbod)
+http://gitweb.freedesktop.org/?p=cairo;a=commit;h=f183b835b111d23e838889178aa8106ec84663b3
+
+Fix vertical metrics adjustment to work with non-identity shapes (Behdad Esfahbod)
+http://gitweb.freedesktop.org/?p=cairo;a=commit;h=b7bc263842a798d657a95e539e1693372448837f
+
+[PS] Set correct ImageMatrix in _cairo_ps_surface_emit_bitmap_glyph_data (Behdad Esfahbod)
+http://gitweb.freedesktop.org/?p=cairo;a=commit;h=d47388ad759b0a1a0869655a87d9b5eb6ae2445d
+
+Build system fixes
+------------------
+Fix xlib detection to prefer pkg-config to avoid false libXt dependency (Behdad Esfahbod)
+http://gitweb.freedesktop.org/?p=cairo;a=commit;h=0e78e7144353703cbd28aae6a67cd9ca261f1d68
+
+Fix typos causing win32 build problem with PS,PDF, and SVG backends (Behdad Esfahbod)
+http://gitweb.freedesktop.org/?p=cairo;a=commit;h=aea83b908d020e26732753830bb3056e6702a774
+
+Fix configure cache to not use stale results (Behdad Esfahbod)
+http://gitweb.freedesktop.org/?p=cairo;a=commit;h=6d0e3260444a2d5b6fb0cb223ac79f1c0e7b3a6e
+
+Fix to not pass unsupported warning options to the compiler (Jens Granseuer)
+http://gitweb.freedesktop.org/?p=cairo;a=commit;h=97524a8fdb899de1ae4a3e920fb7bda6d76c5571
+
+Fix to allow env. variables such as png_REQUIRES to override configure detection (Jens Granseuer)
+http://gitweb.freedesktop.org/?p=cairo;a=commit;h=abd16e47d6331bd3811c908e524b4dcb6bd23bf0
+
+Fix test suite to not use an old system cairo when converting svg2png (Behdad Esfahbod)
+http://gitweb.freedesktop.org/?p=cairo;a=commit;h=6122cc85c8f71b1ba2df3ab86907768edebe1781
+
+Fix test suite to not require signal.h to be present (Behdad Esfahbod)
+http://gitweb.freedesktop.org/?p=cairo;a=commit;h=6f8cf53b1e1ccdbe1ab6a275656b19c6e5120e40
+
+Code cleanups
+-------------
+Many useful warnings cleanups from sparse, valgrind, and careful eyes
+(Kjartan Maraas, Pavel Roskin)
+
+Release 1.2.2 (2006-08-08 Carl Worth <cworth@cworth.org>)
+=========================================================
+This is the first bug fix release in the 1.2 series since the original
+1.2.0 release made six weeks ago.
+
+There were some very serious bugs in the 1.2.0 release, (see below),
+so everybody is encouraged to upgrade from 1.2.0 to 1.2.2. The 1.2.2
+release maintains source and binary compatibility with 1.2.0 and does
+not make any API additions.
+
+Fix crashes with BGR X servers
+------------------------------
+With cairo 1.2.0 many people reported problems with all cairo-using
+programs, (including all GTK+ programs with GTK+ >= 2.8) immediately
+crashing with a complaint about an unsupported image format. This bug
+affected X servers that do not provide the Render extension and that
+provide a visual with BGR rather than RGB channel order.
+
+report: https://bugs.freedesktop.org/show_bug.cgi?id=7294
+fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=9ae66174e774b57f16ad791452ed44efc2770a59
+
+Fix the "disappearing text" bug
+-------------------------------
+With cairo 1.2.0 many people reported that text would disappear from
+applications, sometimes reappearing with mouse motion or
+selection. The text would disappear after the first space in a string
+of text. This bug was caused by an underlying bug in (very common) X
+servers, and only affected text rendered without antialiasing, (either
+a bitmap font or a vector font with antialiasing disabled). The bug
+was also exacerbated by a KDE migration bug that caused antialiasing
+to be disabled more than desired.
+
+report: https://bugs.freedesktop.org/show_bug.cgi?id=7494
+fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=456cdb3058f3b416109a9600167cd8842300ae14
+see also:
+Xorg: https://bugs.freedesktop.org/show_bug.cgi?id=7681
+KDE: http://qa.mandriva.com/show_bug.cgi?id=23990
+
+Fix broken image fallback scaling (aka. "broken printing")
+----------------------------------------------------------
+The various "print" backends, (pdf, ps, and svg), sometimes fallback
+to using image-based rendering for some operations. In cairo 1.2.0
+these image fallbacks were scaled improperly. Applications using cairo
+can influence the resolution of the image fallbacks with
+cairo_surface_set_fallback_resolution. With the bug, any value other
+than 72.0 would lead to incorrect results, (larger values would lead
+to increasingly shrunken output).
+
+report: https://bugs.freedesktop.org/show_bug.cgi?id=7533
+fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=1feb4291cf7813494355459bb547eec604c54ffb
+
+Fix inadvertent semantic change of font matrix translation (Behdad Esfahbod)
+----------------------------------------------------------------------------
+The 1.2.0 release introduced an inadvertent change to how the
+translation components of a font matrix are interpreted. In the 1.0
+series, font matrix translation could be used to offset the glyph
+origin, (though glyph metrics were reported incorrectly in
+1.0). However in 1.2.0, the translation was applied to the advance
+values between each glyph. The 1.2.0 behavior is fairly useless in
+practice, and it was not intentional to introduce a semantic
+change. With 1.2.2 we return to the 1.0 semantics, with a much better
+implementation that provides correct glyph metrics.
+
+fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=84840e6bba6e72aa88fad7a0ee929e8955ba9051
+
+Fix create_similar to preserve fallback resolution and font options (Behdad Esfahbod)
+-------------------------------------------------------------------------------------
+There has been a long-standing issue with cairo_surface_create_similar
+such that font options and other settings from the original
+destination surface would not be preserved to the intermediate
+"similar" surface. This could result in incorrect rendering
+(particularly with respect to text hinting/antialiasing) with
+fallbacks, for example.
+
+report: https://bugs.freedesktop.org/show_bug.cgi?id=4106
+fixes: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=9fcb3c32c1f16fe6ab913e27eb54d18b7d9a06b0
+ http://gitweb.freedesktop.org/?p=cairo;a=commit;h=bdb4e1edadb78a2118ff70b28163f8bd4317f1ec
+
+xlib: Fix text performance regression from 1.0 to 1.2.0 (Vladimir Vukicevic)
+----------------------------------------------------------------------------
+Several people noticed that upgrading from cairo 1.0 to cairo 1.2.0
+caused a significant performance regression when using the xlib
+backend. This performance regression was particularly noticeable when
+doing lots of text rendering and when using a high-latency connection
+to the X server, (such as a remote X server over an ssh
+connection). The slowdown was identified and fixed in 1.2.2.
+
+report: https://bugs.freedesktop.org/show_bug.cgi?id=7514
+fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=b7191885c88068dad57d68ced69a752d1162b12c
+
+PDF: Eliminate dependency on FreeType library dependency (Adrian Johnson)
+-------------------------------------------------------------------------
+The cairo 1.2 series adds a supported pdf backend to cairo. In cairo
+1.2.0 this backend required the freetype library, which was an
+undesirable dependency on systems such as win32, (cairo is designed to
+always prefer the "native" font system). As of cairo 1.2.2 the
+freetype library is not required to use the pdf backend on the win32
+platform.
+
+report: https://bugs.freedesktop.org/show_bug.cgi?id=7538
+fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=a0989f427be87c60415963dd6822b3c5c3781691
+
+PDF: Fix broken output on amd64 (Adrian Johnson)
+------------------------------------------------
+report: http://bugzilla.gnome.org/show_bug.cgi?id=349826
+fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=f4b12e497b7ac282b2f6831b8fb68deebc412e60
+
+PS: Fix broken output for truetype fonts > 64k (Adrian Johnson)
+---------------------------------------------------------------
+fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=067d97eb1793a6b0d0dddfbd0b54117844511a94
+
+PDF: Fix so that dashing doesn't get stuck on (Kent Worsnop)
+------------------------------------------------------------
+Kent notices that with the PDF backend in cairo 1.2.0 as soon as a
+stroke was performed with dashing, all subsequent strokes would also
+be dashed. There was no way to turn dashing off again.
+
+fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=778c4730a86296bf0a71080cf7008d7291792256
+
+Fix memory leaks in failure paths in gradient creation (Alfred Peng)
+--------------------------------------------------------------------
+fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=db06681b487873788b51a6766894fc619eb8d8f2
+
+Fix memory leak in _cairo_surface_show_glyphs (Chris Wilson)
+------------------------------------------------------------
+report: https://bugs.freedesktop.org/show_bug.cgi?id=7766
+fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=e2fddcccb43d06486d3680a19cfdd5a54963fcbd
+
+Solaris: Add definition of cairo_private for some Sun compilers (Alfred Peng)
+-----------------------------------------------------------------------------
+report: https://bugzilla.mozilla.org/show_bug.cgi?id=341874
+fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=04757a3aa8deeff3265719ebe01b021638990ec6
+
+Solaris: Change version number of Sun's Xorg server with buggy repeat (Brian Cameron)
+-------------------------------------------------------------------------------------
+report: https://bugs.freedesktop.org/show_bug.cgi?id=7483
+fix: http://gitweb.freedesktop.org/?p=cairo;a=commit;h=e0ad1aa995bcec4246c0b8ab0d5a5a79871ce235
+
+Various memory leak fixes
+-------------------------
+Fix memory leak in _cairo_surface_show_glyphs (bug 7766)
+Fix file handle leak in failure path (bug 7616)
+Fix some memory leaks in the test cases.
+Fix some memory leaks in font subsetting code used in print backends.
+
+Documentation improvements (Behdad Esfahbod)
+--------------------------------------------
+Added new documentation for several functions (cairo_show_page,
+cairo_copy_page, cairo_in_stroke, cairo_in_fill).
+
+Fixed some syntax errors that were preventing some existing
+documentation from being published.
+
+Fixed several minor typographical errors.
+
+Added an index for new symbols in 1.2.
+
+Release 1.2.0 (2006-06-27 Carl Worth <cworth@cworth.org>)
+=========================================================
+This is the culmination of the work that has gone on within the 1.1
+branch of cairo.
+
+There has been one API addition since the cairo 1.1.10 snapshot:
+
+ cairo_xlib_surface_get_width
+ cairo_xlib_surface_get_height
+
+There's also a new feature without any API change:
+
+ Dots can now be drawn by using CAIRO_LINE_CAP_ROUND with
+ degenerate sub-paths, (cairo_move_to() followed by either
+ cairo_close_path() or a cairo_line_to() to the same location).
+
+And at least the following bugs have been fixed:
+
+ 6759 fontconfig option AntiAlias doesn't work in cairo 1.1.2
+ 6955 Some characters aren't displayed when using xlib (cache u...
+ 7268 positive device_offset values don't work as source
+ * PDF emit_glyph function needs to support bitmapped glyphs
+ * PS emit_glyph function needs to support bitmapped glyphs
+ * SVG emit_glyph function needs to support bitmapped glyphs
+ * PDF: minefield page one is falling back unnecessarily
+ * PS/PDF: Fix broken placement for vertical glyphs
+ * PS: Fix to not draw BUTT-capped zero-length dash segments
+ * Do device offset before float->fixed conversion
+ http://bugzilla.gnome.org/show_bug.cgi?id=332266
+ * PS: Fix source surfaces with transformations
+ * PS: Fix to not draw BUTT-capped degnerate sub-paths
+ * PS: Don't walk off end of array when printing "~>"
+ * Fix some memory leaks in the test suite rig
+ * SVG: Fix memory leak when using cairo_mask
+ * Fix EXTEND_REFLECT and EXTEND_PAD to not crash (though these are
+ still not yet fully implemented for surface patterns).
+
+This has been a tremendous effort by everyone, and I'm proud to have
+been a part of it. Congratulations to all contributors to cairo!
+
+Snapshot 1.1.10 (2006-06-16 Carl Worth <cworth@cworth.org>)
+===========================================================
+This is the fifth in a series of snapshots working toward the 1.2
+release of cairo.
+
+The primary motivation for this snapshot is to fix a long-standing bug
+that had long been silent, but as of the 1.1.8 snapshot started
+causing crashes when run against 16-bit depth X servers, (often Xvnc
+or Xnest). The fix for this adds a new CAIRO_FORMAT_RGB16_565 to the
+API.
+
+This snapshot also includes a rewrite of cairo's SVG backend to
+eliminate the dependency on libxml2. With this in place, cairo 1.2
+will not depend on any libraries that cairo 1.0 did not.
+
+As usual, there are also a few fixes for minor bugs.
+
+Snapshot 1.1.8 (2006-06-14 Carl Worth <cworth@cworth.org>)
+==========================================================
+This is the fourth in a series of snapshots working toward the 1.2
+release of cairo. At this point, all major features of the 1.2 release
+are in place, leaving just a few bug fixes left.
+
+In particular, there well be no additional API changes between this
+1.1.8 snapshot and the 1.2 release.
+
+The announcement for 1.1.6 mentioned several API changes being
+considered. Only one of these changes was actually implemented
+(set_dpi -> fallback_resolution). This change does introduce one
+source-level incompatibility with respect to previous 1.1.x snapshots,
+so see below for details.
+
+Here is an abbreviated summary of changes since the 1.1.6 snapshot:
+
+** API Change **
+----------------
+According to the plan mentioned in the 1.1.6 notes, one source-level
+incompatible change has been implemented. The following three
+functions have been removed from cairo's API:
+
+ cairo_pdf_surface_set_dpi
+ cairo_ps_surface_set_dpi
+ cairo_svg_surface_set_dpi
+
+and in their place the following function has been added:
+
+ cairo_surface_set_fallback_resolution
+
+The signature and semantics of the function remains the same, so it is
+a simple matter of changing the name of the function when calling
+it. As a transition mechanism, this snapshot will (on many systems)
+build to include the old symbols so that code previously compiled will
+still run. However, all source code using the old names must be
+updated before it will compile. And the upcoming 1.2 release is not
+anticipated to include the old symbols.
+
+Finally, it should be pointed out that the old symbols never existed
+in the supported API of any stable release of cairo. (In the stable
+1.0 releases the PDF, PS, and SVG backends were advertised as
+experimental and unstable.)
+
+And, as always, cairo continues to maintain source and binary
+compatibility between major releases. So applications compiled against
+supported backends in a stable release of cairo (1.0.4 say) will
+continue to compile and run without modification against new major
+releases (1.2.0 say) without modification.
+
+API additions
+-------------
+The following new functions have been added to cairo's API:
+
+ cairo_surface_get_content
+ cairo_debug_reset_static_data
+ cairo_image_surface_get_data
+ cairo_image_surface_get_format
+ cairo_image_surface_get_stride
+ cairo_win32_font_face_create_for_hfont
+
+New, backend-specific pkg-config files
+--------------------------------------
+In addition to the original cairo.pc file, cairo will also now install
+a pkg-config files for each configured backend, (for example
+cairo-pdf.pc, cairo-svg.pc, cairo-xlib.pc, cairo-win32.pc, etc.) this
+also includes optional font backends (such as cairo-ft.pc) and the
+optional png functionality (cairo-png.pc).
+
+These new pkg-config files should be very convenient for allowing
+cairo-using code to easily check for the existing of optional
+functionality in cairo without having to write complex rules to grub
+through cairo header files or the compiled library looking for
+symbols.
+
+Printing backend (PS, PDF, and SVG)
+-----------------------------------
+Improving the quality of the "printing" backends has been a priority
+of the development between cairo 1.1.6 and cairo 1.1.8.
+
+The big improvement here is in the area of text output. Previously, at
+best, text was output as paths without taking advantage of any font
+support available in the output file format.
+
+Now, at the minimum text paths will be shared by using type3 fonts
+(for PS and PDF---and similarly, defs for SVG). Also, if possible,
+type3 and truetype fonts will be embedded in PostScript and PDF
+output. There are still some known bugs with this, (for example,
+selecting text in a cairo-generated PDF file with an embedded truetype
+font does not work). So there will be some more changes in this area
+before cairo 1.2, but do try test this feature out as it exists so
+far.
+
+Many thanks to Kristian Høgsberg for the truetype and type1 font
+embedding.
+
+win32 backend
+-------------
+Performance improvements by preferring GDI over pixman rendering when possible.
+Fixes for text rendering.
+
+xlib backend
+------------
+Fix potentially big performance bug by making xlib's create_similar
+try harder to create a pixmap of a depth matching that of the screen.
+
+Bug fixes
+---------
+Among various other fixes, the following bugs listed in bugzilla have
+been fixed:
+
+ Bug 2488: Patch to fix pixman samping location bug (#2488).
+ https://bugs.freedesktop.org/show_bug.cgi?id=2488
+
+ Bug 4196: undef MIN an MAX before defining to avoid duplicate definition
+ https://bugs.freedesktop.org/show_bug.cgi?id=4196
+
+ Bug 4723: configure.in: Fix m4 quoting when examining pkg-config version
+ https://bugs.freedesktop.org/show_bug.cgi?id=4723
+
+ Bug 4882: Flag Sun's X server has having buggy_repeat.
+ https://bugs.freedesktop.org/show_bug.cgi?id=4882
+
+ Bug 5306: test/pdf2png: Add missing include of stdio.h
+ https://bugs.freedesktop.org/show_bug.cgi?id=5306
+
+ Bug 7075: Fix make clean to remove cairo.def
+ https://bugs.freedesktop.org/show_bug.cgi?id=7075
+
+(Many thanks to Behdad Esfahbod for helping us track down and fix many
+of these.)
+
+Snapshot 1.1.6 (2006-05-04 Carl Worth <cworth@cworth.org>)
+==========================================================
+This is the third in a series of snapshots working toward the imminent
+1.2 release of cairo. For a list of items still needing work on the
+cairo 1.2 roadmap, please see:
+
+ http://cairographics.org/ROADMAP
+
+As can be seen in that list, there are no longer any API additions
+left on the roadmap. Instead, there is a feature (PDF type 3 fonts) a
+performance optimization (X server gradients) and a list of bug
+fixes. This gives us a fair amount of freedom to cut the 1.2 release
+at almost any point by deciding to defer remaining bug fixes to
+subsequent maintenance releases such as 1.2.2 and 1.2.4.
+
+Before we will do that, we must first be wiling to commit to all the
+new API additions. As a heads-up, there are a couple of potential API
+changes being considered. (Note that these are changes to new API
+introduced during 1.1 so these will not introduce API
+incompatibilities compared to the stable 1.0 series). The changes
+being considered are:
+
+ cairo_get_group_target: may acquire x and y offset return
+ parameters. May also be eliminated in favor of
+ cairo_get_target assuming its role
+
+ cairo_pdf_surface_set_dpi:
+ cairo_ps_surface_set_dpi:
+ cairo_svg_surface_set_dpi: These functions may be removed in favor
+ of a new cairo_surface_set_fallback_resolution
+
+Additionally there is the possibility of a slight change in the
+semantics of cairo_set_line_width. We believe the current behavior of the sequence:
+
+ cairo_set_line_width; ... change CTM ...; cairo_stroke;
+
+is buggy. It is currently behaving the same as:
+
+ ... change CTM ...; cairo_set_line_width; cairo_stroke;
+
+We are considering fixing this bug before 1.2 with the hope that
+nobody is already relying on the buggy behavior described here. Do
+shout if you suspect you might be in that position.
+
+The items included in this snapshot (since the 1.1.4 snapshot) are
+described below.
+
+API additions
+-------------
+The long-awaited group-rendering support is now available with the
+following function calls:
+
+ cairo_push_group
+ cairo_push_group_with_content
+ cairo_pop_group
+ cairo_pop_group_to_source
+ cairo_get_group_target
+
+This API provides a much more convenient mechanism for doing rendering
+to an intermediate surface without the need to manually create a
+temporary cairo_surface_t and a temporary cairo_t and clean them up
+afterwards.
+
+Add the following missing get function to complement
+cairo_surface_set_device_offset:
+
+ cairo_surface_get_device_offset
+
+PDF backend (API addition)
+--------------------------
+The PDF backend now provides for per-page size changes, (similar to
+what the PostScript backend got in the 1.1.4 snapshot). The new API
+is:
+
+ cairo_pdf_surface_set_size
+
+Xlib backend (API additions)
+----------------------------
+The following functions have been added to allow the extraction of
+Xlib surface:
+
+ cairo_xlib_surface_get_display
+ cairo_xlib_surface_get_drawable
+ cairo_xlib_surface_get_screen
+ cairo_xlib_surface_get_visual
+ cairo_xlib_surface_get_depth
+
+XCB backend (experimental)
+--------------------------
+Update backend so that it now compiles with the recent XCB 0.9 release.
+
+Bug fixes and memory leak cleanup
+---------------------------------
+Various little things, nothing too significant though.
+
+Snapshot 1.1.4 (2006-05-03 Carl Worth <cworth@cworth.org>)
+==========================================================
+This is the second in a series of snapshots working toward the
+upcoming 1.2 release of cairo. For a list of items still needing work
+on the cairo 1.2 roadmap, please see:
+
+ http://cairographics.org/ROADMAP
+
+The items included in this snapshot (since the 1.1.2 snapshot) are
+described below.
+
+PostScript backend: new printing-oriented API
+---------------------------------------------
+We anticipate that with cairo 1.2, toolkits will begin to use cairo
+for printing on systems that use PostScript as the spool format. To
+support this use case, we have added 4 new function calls that are
+specific to the PostScript backend:
+
+ cairo_ps_surface_set_size
+ cairo_ps_surface_dsc_comment
+ cairo_ps_surface_dsc_begin_setup
+ cairo_ps_surface_dsc_begin_page_setup
+
+These functions allow variation of the page size/orientation from one
+page to the next in the PostScript output. They also allow the toolkit
+to provide per-document and per-page printer control options in a
+device-independent way, (for example, by using PPD options and
+emitting them as DSC comments into the PostScript output). This should
+allow toolkits to provide very fine-grained control of many options
+available in printers, (media size, media type, tray selection, etc.).
+
+SVG backend: builds by default, version control
+-----------------------------------------------
+The SVG backend continues to see major improvements. It is expected
+that the SVG backend will be a supported backend in the 1.2
+release. This backend will now be built by default if its dependencies
+(freetype and libxml2) are met.
+
+Additionally, the SVG backend now has flexibility with regard to what
+version of SVG it targets. It will target SVG 1.1 by default, which
+will require image fallbacks for some of the "fancier" cairo
+compositing operators. Or with the following new function calls:
+
+ cairo_svg_surface_restrict_to_version
+ cairo_svg_get_versions
+ cairo_svg_version_to_string
+
+it can be made to target SVG 1.2 in which there is native support for
+these compositing operators.
+
+Bug fixes
+---------
+At least the following bugs have been fixed since the 1.1.2 snapshot:
+
+crash at XRenderAddGlyphs
+https://bugs.freedesktop.org/show_bug.cgi?id=4705
+
+Can't build cairo-1.1.2 on opensolaris due to " void function cannot return value"
+https://bugs.freedesktop.org/show_bug.cgi?id=6792
+
+Missing out-of-memory check at gfx/cairo/cairo/src/cairo-atsui-font.c:185
+https://bugzilla.mozilla.org/show_bug.cgi?id=336129
+
+A couple of memory leaks.
+
+Snapshot 1.1.2 (2006-04-25 Carl Worth <cworth@cworth.org>)
+==========================================================
+This is the first in a series of snapshots working toward the upcoming
+1.2 release of cairo. (Subsequent snapshot will use successive even
+numbers for the third digit, 1.1.4, 1.1.6, etc.) This snapshot is
+backwards-compatible with the 1.0 series---it makes a few API
+additions but does not remove any API.
+
+PostScript and PDF backends are no longer "experimental"
+--------------------------------------------------------
+The major theme of the 1.2 release is improved PostScript and PDF
+backends for cairo. Unlike the 1.0 series, in the 1.2 series these
+backends will not be marked as experimental and will be enabled by
+default. We encourage people to test this snapshot and the PS/PDF
+backends in particular as much as possible.
+
+The PostScript and PDF output is not yet ideal.
+
+ * One major problem with the PostScript output is that image
+ fallbacks are used more often than strictly necessary, and the
+ image fallbacks are at a lower resolution than desired, (the
+ cairo_ps_surface_set_dpi call is ignored).
+
+ * The major drawback of the current PDF backend implementation is
+ its text support. Every glyph is represented by a filled path in
+ the PDF file. The causes file sizes to be much larger and
+ rendering to be much slower than desired.
+
+It is anticipated that both of these shortcomings will see some
+improvements before the final 1.2 release.
+
+In spite of those shortcomings, we hope that the PS and PDF backends
+will yield faithful results for pretty much any cairo operations you
+can throw at them. Please let us know if you are getting obviously
+"different" results from the PS/PDF backends than from the image or
+xlib backends.
+
+Other new experimental backends
+-------------------------------
+This snapshot includes three new backends that did not exist in the
+1.0 series:
+
+ * beos backend
+
+ * directfb backend
+
+ * svg backend
+
+These are all currently marked "experimental" and are disabled by
+default. But the SVG backend in particular has seen a lot of recent
+development and is very close to passing the entire cairo test
+suite. It is possible that this backend will become a fully supported
+backend by the time of the cairo 1.2 release.
+
+Public API additions
+--------------------
+There have been a few new API functions added to cairo, including:
+
+New get_type functions for querying sub-types of object:
+
+ cairo_surface_get_type
+ cairo_pattern_get_type
+ cairo_font_face_get_type
+ cairo_scaled_font_get_type
+
+More convenience in working with cairo_scaled_font_t with new getter
+functions:
+
+ cairo_scaled_font_get_font_face
+ cairo_scaled_font_get_font_matrix
+ cairo_scaled_font_get_ctm
+ cairo_scaled_font_get_font_options
+
+As well as a convenience function for setting a scaled font into a
+cairo context:
+
+ cairo_set_scaled_font
+
+and a function to allow text extents to be queried directly from a
+scaled font, (without requiring a cairo_surface_t or a cairo_t):
+
+ cairo_scaled_font_text_extents
+
+These new scaled font functions were motivated by the needs of the
+pango library.
+
+Finally, a new path-construction function was added which clears the
+current point in preparation for a new sub path. This makes cairo_arc
+easier to use in some situations:
+
+ cairo_new_sub_path
+
+Before the 1.2 release is final we do still plan a few more API
+additions specifically motivated by the needs of Mozilla/Firefox.
+
+Optimizations and bug fixes
+---------------------------
+Shortly after the 1.0 maintenance series branched off the mainline
+there was a major rework of the cairo font internals. This should
+provide some good performance benefits, but it's also another area
+people should look at closely for potential regressions.
+
+There has not yet been any widespread, systematic optimization of
+cairo, but various performance improvements have been made, (and some
+of them are fairly significant). So if some things seem faster than
+1.0 then things are good. If there are any performance regressions
+compared to 1.0 then there is a real problem and we would like to hear
+about that.
+
+There has been a huge number of bug fixes---too many to mention in
+detail. Again, things should be better, and never worse compared to
+1.0. Please let us know if your testing shows otherwise.
+
+Release 1.0.2 (2005-10-03 Carl Worth <cworth@cworth.org>)
+=========================================================
+For each bug number XXXX below, see:
+
+ https://bugs.freedesktop.org/show_bug.cgi?id=XXXX
+
+for more details.
+
+General bug fixes
+-----------------
+ * 4408 - Add support for dashing of stroked curves
+ (Carl Worth)
+
+ * 4409 - Fix dashing so that each dash is capped on both ends
+ (Carl Worth)
+
+ * 4414 - Prevent SIGILL failures (proper use of -mmmx and -msse flags)
+ (Sebastien Bacher, Billy Biggs)
+
+ * 4299 - Fix crashes with text display in multi-threaded program
+ (Alexey Shabalin, Carl Worth)
+
+ * 4401 - Do not use sincos function since it is buggy on some platforms)
+ (Tim Mooney, Carl Worth)
+
+ * 4245 - Fix several bugs in the test suite exposed by amd64 systems
+ (Seemant Kulleen, Carl Worth)
+
+ * 4321 - Add missing byteswapping on GetImage/PutImage
+ (Sjoerd Simons, Owen Taylor)
+
+ * 4220 - Make the check for rectangular trapezoids simpler and more accurate
+ (Richard Stellingwerff, Owen Taylor)
+
+ * 4260 - Add missing channel-order swapping for antialised fonts
+ (Barbie LeVile, Owen Taylor)
+
+ * 4283 - Fix compilation failure with aggressive inlining (gcc -O3)
+ (Marco Manfredini, Owen Taylor)
+
+ * 4208 - Fix some warnings from sparse
+ (Kjartan Maraas, Billy Biggs)
+
+ * 4269 - Fix to not crash when compiled with -fomit-frame-pointer
+ (Ronald Wahl, Owen Taylor)
+
+ * 4263 - Improve performance for vertical gradients
+ (Richard Stellingwerff, Owen Taylor)
+
+ * 4231
+ * 4298 - Accomodate gentoo and Mandriva versions in X server vendor string check
+ (Billy Biggs, Frederic Crozat, Owen Taylor)
+
+win32-specific fixes
+--------------------
+ * 4599 - Fix "missing wedges" on some stroked paths (win32)
+ (Tim Rowley, Jonathan Watt, Bertram Felgenhauer, Carl Worth, Keith Packard)
+
+ * 4612 - Fix disappearing text if first character out of surface (win32)
+ (Tim Rowley)
+
+ * 4602 - Fix shutdown of cairo from failing intermediate, size-0 bitmaps (win32)
+ Aka. the "white rectangles" bug from mozilla-svg testing
+ (Tim Rowley)
+
+ * Various portability improvements for win32
+ (Hans Breuer, Owen Taylor, Carl Worth)
+
+ * 4593 - Fix font sizes to match user expectations (win32)
+ (Tor Lillqvist, Owen Taylor)
+
+ * 3927 - Fix to report metrics of size 0 for glyph-not-available (win32)
+ (Hans Breuer, Owen Taylor, Tor Lillqvist)
+
+ * Add locking primitives for win32
+ (Hans Breuer)
+
+xlib-specific fixes
+-------------------
+ * Fix crash from size-0 pixmap due to empty clip region (xlib)
+ (Radek Doulík, Carl Worth)
+
+Release 1.0.0 (2005-08-24 Carl Worth <cworth@cworth.org>)
+=========================================================
+Experimental backends
+---------------------
+ * The Glitz, PS, PDF, Quartz, and XCB backends have been declared
+ experimental, and are not part of the API guarantees that accompany
+ this release. They are not built by default, even when the required
+ libraries are available, and must be enabled explicitly with
+ --enable-ps, --enable-pdf, --enable-quartz or --enable-xcb.
+
+ It is very painful for us to be pushing out a major release without
+ these backends enabled. There has been a tremendous amount of work
+ put into each one and all are quite functional to some
+ extent. However, each also has some limitations. And none of these
+ backends have been tested to the level of completeness and
+ correctness that we expect from cairo backends.
+
+ We do encourage people to experiment with these backends and report
+ success, failure, or means of improving them.
+
+Operator behavior
+-----------------
+ * Prior to 0.9.0 the SOURCE, CLEAR and a number of other operators
+ behaved in an inconsistent and buggy fashion and could affect areas
+ outside the clip mask. In 0.9.0, these six "unbounded" operators
+ were fixed to consistently clear areas outside the shape but within
+ the clip mask. This is useful behavior for an operator such as IN,
+ but not what was expected for SOURCE and CLEAR. So, in this release
+ the behavior of SOURCE and CLEAR has been changed again. They now
+ affect areas only within both the source and shape. We can write
+ the new operators as:
+
+ SOURCE: dest' = (mask IN clip) ? source : dest
+ CLEAR: dest' = (mask IN clip) ? 0 : dest
+
+Behavior and API changes
+------------------------
+ * Setting the filter on a gradient pattern would change the
+ interpolation between color stops away from the normal linear
+ interpolation. This dubious behavior has been removed.
+
+ * The CAIRO_CONTENT_VALID() and CAIRO_FORMAT_VALID() macros --
+ implementation details that leaked into cairo.h -- have been moved
+ into an internal header.
+
+ * The cairo_show_text function now advances the current point
+ according to the total advance values of the string.
+
+API additions
+-------------
+ * cairo_set_dash can now detect error and can set
+ CAIRO_STATUS_INVALID_DASH.
+
+Features
+--------
+ * When compiled against recent versions of fontconfig and FreeType,
+ artificial bold fonts can now be turned on from fonts.conf using
+ the FC_EMBOLDEN fontconfig key.
+
+Optimization
+------------
+ * The compositing code from the 'xserver' code tree has now been
+ completely merged into libpixman. This includes MMX optimization of
+ common operations.
+
+ * The image transformation code in libpixman has been improved and
+ now performs significantly faster.
+
+Bug fixes
+---------
+ * Several crashes related to corruption in the font caches have been
+ fixed.
+
+ * All test cases now match pixel-for-pixel on x86 and PPC; this
+ required fixing bugs in the compositing, stroking, and pattern
+ rendering code.
+
+ * Negative dash offsets have been fixed to work correctly.
+
+ * The stroking of paths with mutiple subpaths has now been fixed to
+ apply caps to all subpaths rather than just the last one.
+
+ * Many build fixes for better portability on various systems.
+
+ * Lots of other bug fixes, but we're too tired to describe them in
+ more detail here.
+
+Release 0.9.2 (2005-08-13 Carl Worth <cworth@cworth.org>)
+=========================================================
+Release numbering
+-----------------
+ * You will notice that this release jumped from 0.9.0 to 0.9.2. We've
+ decided to use an odd micro version number (eg. 0.9.1) to indicate
+ in-progress development between releases. As soon as 0.9.2 is
+ tagged, the version will be incremented in CVS to 0.9.3 where it
+ will stay until just before 0.9.4 is built, uploaded, and tagged.
+
+ So, even-micro == a released version, odd-micro == something in-between.
+
+Libpixman dependency dropped
+----------------------------
+ * As of this release, the dependency on an external libpixman has
+ been dropped. Instead, the code from libpixman needed for cairo has
+ been incorporated into the cairo source tree. The motivation for
+ this change is that while cairo's API is stable and ready to be
+ maintained after the 1.0 release, libpixman's API is not, so we do
+ not want to expose it at this time.
+
+ Also, the incorporation of libpixman into cairo also renames all
+ previously-public libpixman symbols in order to avoid any conflict
+ with a future release of libpixman
+
+API additions
+-------------
+ * Macros and functions have been added so that the version of cairo
+ can be queried at either compile-time or at run-time. The version
+ is made available as both a human-readable string and as a single
+ integer:
+
+ CAIRO_VERSION_STRING eg. "0.9.2"
+ CAIRO_VERSION eg. 000902
+
+ const char*
+ cairo_version_string (void); /* eg. "0.9.2" */
+
+ int
+ cairo_version (void); /* eg. 000902 */
+
+ A macro is provided to convert a three-part component version into
+ the encoded single-integer form:
+
+ CAIRO_VERSION_ENCODE(X,Y,Z)
+
+ For example, the CAIRO_VERSION value of 000902 is obtained as
+ CAIRO_VERSION_ENCODE(0,9,2). The intent is to make version
+ comparisons easy, either at compile-time:
+
+ #if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(0,9,2)
+ ...
+ #endif
+
+ Or at run-time:
+
+ if (cairo_version() >= CAIRO_VERSION_ENCODE(0,9,2)) { /* ... */ }
+
+Thread safety
+-------------
+ * This release adds pthread-based locking (when available) to make
+ the caches used by cairo safe for threaded programs. Some may
+ remember a failed experiment with this locking between the 0.5.1
+ and 0.5.2 snapshots, (where even single-threaded programs that
+ linked with -lpthread would deadlock). We believe that that problem
+ has been fixed, so we are looking forward to testing and reports
+ from users with threaded applications.
+
+Bug fixes
+---------
+ * The XCB and Quartz backends failed to compiled in the 0.9.0 release
+ due to minor syntax errors. These have now been fixed.
+
+ * Various crashes in glitz and pixman due to size 0 glyphs have been
+ fixed.
+
+Release 0.9.0 (2005-08-08 Carl Worth <cworth@cworth.org>)
+=========================================================
+Soname change
+-------------
+ * In all prior snapshots, the libtool library versioning was set to
+ 1:0:0. As this release is intended to mark the beginning of
+ backwards-compatible releases, the versioning has been incremented
+ to 2:0:0. You will notice that the numeric extension on the
+ installed library filename will change similarly.
+
+ This change will also require all cairo-using applications to be
+ recompiled. We recognize that this may cause some frustration since
+ this release is backwards-compatible with 0.6.0 and in that sense
+ "shouldn't" require re-compilation. However, since all historical
+ snapshots have used the same 1:0:0 version in spite of incompatible
+ API changes between them, it was essential that the upcoming 1.0
+ release series have distinct library versioning.
+
+ All future releases will use the library versioning to properly
+ indicate compatibility between releases. So, any application
+ re-compiled now to work with the 0.9.0 will not need to be
+ recompiled when a compatible 1.0 release of cairo is made in the
+ future.
+
+API additions
+-------------
+ * Add new function calls to set/get the current antialiasing mode in
+ the graphics state:
+
+ cairo_set_antialias
+ cairo_get_antialias
+
+ This call accepts the same modes recently added for font options
+ (NONE or GRAY) but affects the rendering of geometry other than
+ text. The intent of this call is to enable more precise control of
+ which pixels are affected by each operation, for example to allow
+ for full-scene antialiasing for seam-free rendering. It is not
+ expected that non-antialiased rendering will perform better than
+ anti-aliased rendering.
+
+ * Three new functions were added to provide support for mixed cairo-
+ and non-cairo drawing to the same surface:
+
+ cairo_surface_mark_dirty
+ cairo_surface_mark_dirty_rectangle
+ cairo_surface_flush
+
+ * The return type of the several "reference" functions was change,
+ (API compatibly), from void to the same type as the argument. The
+ affected functions are:
+
+ cairo_font_face_reference
+ cairo_scaled_font_reference
+ cairo_pattern_reference
+ cairo_surface_reference
+ cairo_reference
+
+ This allows a convenient way to assign and reference in a single
+ statement.
+
+Semantic changes
+----------------
+ * The behavior of cairo_set_source with a pattern with a non-identity
+ matrix was previously not well-defined. The new behavior is as
+ follows:
+
+ The pattern's transformation matrix will be locked to the
+ user space in effect at the time of cairo_set_source(). This means
+ that further modifications of the CTM will not affect the source
+ pattern.
+
+cairo-win32
+-----------
+ * Some portability improvements, (eg. workaround for missing stdint.h).
+
+cairo-ft
+--------
+ * Updated to allow compilation with older versions of freetype.
+
+Bug fixes
+---------
+ * Fix the unbounded operators to actually produce a correct result,
+ (previously the results were artificially restricted to the
+ bounding box of whatever shape was being drawn rather than
+ extending out infinitely). The fixed operators are:
+
+ CAIRO_OPERATOR_CLEAR
+ CAIRO_OPERATOR_SOURCE
+ CAIRO_OPERATOR_OUT
+ CAIRO_OPERATOR_IN
+ CAIRO_OPERATOR_DEST_IN
+ CAIRO_OPERATOR_DEST_ATOP
+
+ * Fix cairo_mask and cairo_mask_surface to transform the mask by the
+ current transformation matrix (CTM).
+
+ * Fix cairo_set_source to lock the CTM used to transform the pattern.
+
+ * Workaround for X server Render bug involving repeating patterns
+ with a general transformation matrix.
+
+ * cairo_get_font_face fixed to return a "nil" font face object rather
+ than NULL on error.
+
+ * cairo_set_font_face fixed to not crash if given a NULL font face,
+ (which is the documented interface for restoring the default font
+ face).
+
+ * Fix xlib glyphset caching to not try to free a NULL glyph.
+
+Snapshot 0.6.0 (2005-07-28 Carl Worth <cworth@cworth.org>)
+==========================================================
+API changes
+-----------
+* The prototypes of the following functions have changed:
+
+ cairo_xlib_surface_create_with_xrender_format
+ cairo_xlib_surface_create_for_bitmap
+
+ A Screen* parameter has been added to each. This allows the cairo
+ xlib backend to work correctly with multi-head X servers.
+
+* The following function has been modified:
+
+ cairo_scaled_font_create
+
+ to accept a cairo_font_options_t*. See below fore more details.
+
+* All opaque, reference-counted cairo objects have now been moved to a
+ standard error-handling scheme. The new objects to receive this
+ treatment are cairo_font_face_t, cairo_scaled_font_t, and
+ cairo_surface_t. (Previous snapshots already provided this scheme
+ for cairo_t, cairo_path_t, and cairo_pattern_t.)
+
+ This changes two functions to have a return type of void rather than
+ cairo_status_t:
+
+ cairo_scaled_font_extent
+ cairo_surface_finish
+
+ And significantly, none of the create functions for any of the
+ objects listed above will return NULL. The pointer returned from any
+ function will now always be a valid pointer and should always be
+ passed to the corresponding destroy function when finished
+
+ The simplest strategy for porting code is to switch from:
+
+ object = cairo_<object>_create ();
+ if (object == NULL)
+ goto BAILOUT;
+
+ /* act on object */
+
+ cairo_<object>_destroy (object);
+
+ to:
+
+ object = cairo_<object>_create ();
+ if (cairo_<object>_status (object))
+ goto BAILOUT;
+
+ /* act on object */
+
+ cairo_<object>_destroy (object);
+
+ But significantly, it is not required to check for an error status
+ before the "act on object" portions of the code above. All
+ operations on an object with an error status are, by definition,
+ no-ops without side effect. So new code might be written in an
+ easier-to-read style of:
+
+ object = cairo_<object>_create ();
+
+ /* act on object */
+
+ cairo_<object>_destroy (object);
+
+ with cairo_<object>_status checks placed only at strategic
+ locations. For example, passing an error object to another object,
+ (eg. cairo_set_source with an in-error pattern), will propagate the
+ error to the subsequent object (eg. the cairo_t). This means that
+ error checking can often be deferred even beyond the destruction of
+ a temporary object.
+
+API additions
+-------------
+* New functions for checking the status of objects that have been
+ switched to the common error-handling scheme:
+
+ cairo_font_face_status
+ cairo_scaled_font_status
+ cairo_surface_status
+
+* The _cairo_error function which was added in 0.5.1 has now been made
+ much more useful. In 0.5.1 only errors on cairo_t objects passed
+ through _cairo_error. Now, an error on any object should pass
+ through _cairo_error making it much more reliable as a debugging
+ mechanism for finding when an error first occurs.
+
+* Added new font options support with a myriad of functions:
+
+ cairo_font_options_create
+ cairo_font_options_copy
+ cairo_font_options_destroy
+
+ cairo_font_options_status
+
+ cairo_font_options_merge
+ cairo_font_options_equal
+ cairo_font_options_hash
+
+ cairo_font_options_set_antialias
+ cairo_font_options_get_antialias
+ cairo_font_options_set_subpixel_order
+ cairo_font_options_get_subpixel_order
+ cairo_font_options_set_hint_style
+ cairo_font_options_get_hint_style
+ cairo_font_options_set_hint_metrics
+ cairo_font_options_get_hint_metrics
+
+ cairo_surface_get_font_options
+
+ cairo_ft_font_options_substitute
+
+ cairo_set_font_options
+ cairo_get_font_options
+
+ This new font options support allows the application to have much
+ more fine-grained control over how fonts are rendered.
+ Significantly, it also allows surface backends to have some
+ influence over the process. For example, the xlib backend now
+ queries existing Xft properties to set font option defaults.
+
+* New function:
+
+ cairo_xlib_surface_set_drawable
+
+ which allows the target drawable for an xlib cairo_surface_t to be
+ changed to another with the same format, screen, and display. This
+ is necessary in certain double-buffering techniques.
+
+New features
+------------
+* Sub-pixel text antialiasing is now supported.
+
+Bug fixes
+---------
+* Fixed assertion failure in cairo_surface_create_similar when
+ application commits an error by passing a cairo_format_t rather than
+ a cairo_content_t.
+
+* Avoid division by zero in various places (cairo-ft).
+
+* Fix infinite loop when using non-default visuals (cairo-xlib).
+
+* Eliminate segfault in cairo_image_surface_create_from_png_stream.
+
+* Prevent errant sign-extension of masks on 64-bit architectures
+ (cairo-xlib and cairo-xcb).
+
+* Other miscellaneous fixes.
+
+Snapshot 0.5.2 (2005-07-18 Carl Worth <cworth@cworth.org>)
+==========================================================
+API changes
+-----------
+* New functions for creating patterns of a single color:
+
+ cairo_pattern_create_rgb
+ cairo_pattern_create_rgba
+
+* Change cairo_surface_create_similar to accept a new type of
+ cairo_content_t rather than cairo_format_t:
+
+ typedef enum _cairo_content {
+ CAIRO_CONTENT_COLOR = 0x1000,
+ CAIRO_CONTENT_ALPHA = 0x2000,
+ CAIRO_CONTENT_COLOR_ALPHA = 0x3000
+ } cairo_content_t;
+
+* Add new CAIRO_FORMAT_VALID and CAIRO_CONTENT_VALID macros.
+
+* Remove unused status value:
+
+ CAIRO_STATUS_NO_TARGET_SURFACE
+
+* Add new status values:
+
+ CAIRO_STATUS_INVALID_STATUS
+
+* Require libpixman >= 0.1.5 (for necessary bug fixes)
+
+Bug fixes
+---------
+* Fix cairo_surface_write_to_png for RGB24 images.
+
+* Fix broken metrics and rendering for bitmap fonts. Add mostly
+ useless bitmap glyph transformation.
+
+* Fix glyph caches to not eject entries that might be immediately
+ needed, (fixing intermittent crashes when rendering text).
+
+* Fix all memory leaks found by running "make check-valgrind".
+
+ATSUI backend changes
+---------------------
+* Allow building against < 10.3 SDK.
+
+* Prevent crash on empty strings.
+
+Glitz backend changes
+---------------------
+* Require glitz >= 0.4.4.
+
+* Use frame buffer objects instead of pbuffers for accelerated
+ offscreen drawing.
+
+* Minor improvement to gradient pattern creation.
+
+PostScript backend fixes
+------------------------
+* Rewrite of the PS backend to generate more interesting output that
+ the old big-image implementation.
+
+Win32 backend fixes
+-------------------
+* Implement glyph path support.
+
+* Fix swap of blue and green values in the fill_rectangles path.
+
+Xlib backend fixes
+------------------
+* Add optimization to use XCopyArea rather than XRenderComposite when
+ transforming only with an integer translation, and using SOURCE
+ operator or OVER with a source pattern without alpha.
+
+Snapshot 0.5.1 (2005-06-20 Carl Worth <cworth@cworth.org>)
+==========================================================
+API changes
+-----------
+* Removed cairo_status_string(cairo_t*) and add
+ cairo_status_to_string(cairo_status_t) in its place. Code using
+ cairo_status_string can be ported forward as follows:
+
+ cairo_status (cr);
+ ->
+ cairo_status_to_string (cairo_status (cr));
+
+* Removed the BAD_NESTING restriction which means that two different
+ cairo_t objects can now interleave drawing to the same
+ cairo_surface_t without causing an error.
+
+* The following functions which previously had a return type of
+ cairo_status_t now have a return type of void:
+
+ cairo_pattern_add_color_stop_rgba
+ cairo_pattern_set_matrix
+ cairo_pattern_get_matrix
+ cairo_pattern_set_extend
+ cairo_pattern_set_filter
+
+ See discussion of cairo_pattern_status below for more details.
+
+API additions
+-------------
+* Improved error handling:
+
+ cairo_status_t
+ cairo_pattern_status (cairo_pattern_t *pattern);
+
+ This snapshot expands the status-based error handling scheme from
+ cairo_t to cairo_path_t and cairo_pattern_t. It also expands the
+ scheme so that object-creating functions, (cairo_create,
+ cairo_pattern_create_*, cairo_copy_path_*), are now guaranteed to
+ not return NULL. Instead, in the case of out-of-memory these
+ functions will return a static object with
+ status==CAIRO_STATUS_NO_MEMORY. The status can be checked with the
+ functions cairo_status and cairo_pattern_status, or by direct
+ inspection of the new status field in cairo_path_t.
+
+ Please note that some objects, including cairo_surface_t and all of
+ the font-related objects have not been converted to this
+ error-handling scheme.
+
+* In addition to the above changes, a new private function has been added:
+
+ _cairo_error
+
+ This function can be used to set a breakpoint in a debugger to make
+ it easier to find programming error in cairo-using code. (Currently,
+ _cairo_error is called when any error is detected within a cairo_t
+ context, but is not called for non-cairo_t errors such as for
+ cairo_path_t and cairo_pattern_t).
+
+* Fixed cairo_path_data_t so that its enum is visible to C++ code, (as
+ cairo_path_data_type_t).
+
+Performance improvements
+------------------------
+* Made a minor performance improvement for clipping, (restrict clip
+ surface to the new intersected bounds).
+
+* Optimize rendering of a solid source pattern with a pixel-aligned
+ rectangular path to use backend clipping rather than rasterization
+ and backend compositing.
+
+* Optimize cairo_paint_with_alpha to defer to cairo_paint when alpha
+ is 1.0.
+
+Bug fixes
+---------
+* Fixed memory leak in cairo_copy_path.
+
+* A build fix for non-srcdir builds.
+
+PDF backend fixes
+-----------------
+* New support for path-based clipping.
+
+* Fix for text rotated to angles other than multiples of π/2.
+
+Win32 backend fixes
+-------------------
+* Fix for text extents.
+
+Xlib backend
+------------
+* Implemented a complex workaround for X server bug[*] related to
+ Render-based compositing with untransformed, repeating source
+ pictures. The workaround uses core Xlib when possible for
+ performance, (ie. with CAIRO_OPERATOR_SOURCE or CAIRO_OPERATOR_OVER
+ with an opaque source surface), and falls back to the pixman
+ image-based compositing otherwise.
+
+ [*] https://bugs.freedesktop.org/show_bug.cgi?id=3566
+
+* Various bug fixes, particularly in the fallback paths.
+
+Snapshot 0.5.0 (2005-05-17 Carl Worth <cworth@cworth.org>)
+==========================================================
+This is a pretty big, and fairly significant snapshot. It represents
+between 2 and 3 months of solid work from a lot of people on improving
+the API as much as possible. I'd like to express my appreciation and
+congratulations to everyone who has worked on the big API Shakeup,
+(whether in email battles over names, or fixing my silly bugs).
+
+This snapshot will require some effort on the part of users, since
+there are a _lot_ of API changes (ie. no cairo program ever written is
+safe --- they're all broken now in at least one way). But, in spite of
+that, we do encourage everyone to move their code to this snapshot as
+soon as possible. And we're doing everything we can think of to make
+the transition as smooth as possible.
+
+The idea behind 0.5 is that we've tried to make every good API change
+we could want now, and get them all done with. That is, between now
+and the 1.0 release of cairo, we expect very few new API changes,
+(though some will certainly sneak in). We will have some significant
+additions, but the pain of moving code from cairo 0.4 to cairo 0.5
+should be a one time experience, and things should be much smoother as
+we continue to move toward cairo 1.0.
+
+And with so many changes coming out for the first time in this 0.5
+release, we really do need a lot of people trying this out to make
+sure the ideas are solid before we freeze the API in preparation for
+the 1.0 release.
+
+OK, enough introduction. Here is a (not-quite-complete) description of
+the API removals, changes and additions in this snapshot, (compared to
+0.4.0)
+
+API removals
+============
+The following public functions have been removed:
+
+- cairo_set_target_*
+
+ This is a big change. See the description of cairo_create in
+ the API changes section for how to deal with this.
+
+- cairo_set_alpha
+
+ Alpha blending hasn't gone away; there's just a much more
+ unified rendering model now. Almost all uses of
+ cairo_set_alpha will be trivially replaced with
+ cairo_set_source_rgba and a few others will be replaced just
+ as easily with cairo_paint_with_alpha.
+
+- cairo_show_surface
+
+ Another useful function that we realized was muddling up the
+ rendering model. The replacement is quite easy:
+ cairo_set_source_surface and cairo_paint.
+
+- cairo_matrix_create
+- cairo_matrix_destroy
+- cairo_matrix_copy
+- cairo_matrix_get_affine
+
+ These functions supported an opaque cairo_matrix_t. We now
+ have an exposed cairo_matrix_t structure, so these can be
+ dropped.
+
+- cairo_surface_set_repeat
+- cairo_surface_set_matrix
+- cairo_surface_set_filter
+
+ These properties don't belong on surfaces. If you were using
+ them, you'll just want to instead use
+ cairo_pattern_create_for_surface and then set these properties
+ on the pattern.
+
+- cairo_copy
+
+ This was a confusing function and hopefully nobody will miss
+ it. But if you really don't find cairo_save/restore adequate,
+ let us know and we have another idea for a potential
+ replacement.
+
+And while we're on the subject of removals, we carefully tightened up
+the cairo header files so they no longer gratuitously include header
+files that are not strictly necessary, (stdio.h, stdint.h, pixman.h,
+Xrender.h, etc. and their dependencies). This may lead to some
+surprising errors, so keep your eyes open for that.
+
+API changes
+===========
+Here are some of the API changes that have occurred:
+
+~ cairo_create(void) -> cairo_create(cairo_surface_t *)
+
+ This is the big change that breaks every program. The ability
+ to re-target a cairo_t was not particularly useful, but it did
+ introduce a lot of muddy semantic questions. To eliminate
+ that, cairo_create now requires its target surface to be
+ passed in at creation time. This isn't too hard to cope with
+ as the typical first operation after cairo_create was often
+ cairo_set_target_foo. So the order of those two swap and the
+ application instead has cairo_foo_surface_create, then
+ cairo_create.
+
+~ cairo_current_* -> cairo_get_*
+
+ We had a strange mixture of cairo_get and cairo_current
+ functions. They've all been standardized on cairo_get, (though
+ note one is cairo_get_current_point).
+
+~ CAIRO_OPERATOR_SRC -> CAIRO_OPERATOR_SOURCE
+~ CAIRO_OPERATOR_OVER_REVERSE -> CAIRO_OPERATOR_DEST_OVER
+
+ Many of the cairo_operator_t symbolic values were renamed to
+ reduce the amount of abbreviation. The confusing "OP_REVERSE"
+ naming was also changed to use "DEST_OP" instead which is
+ easier to read and has wider acceptance in other
+ libraries/languages.
+
+~ cairo_set_pattern -> cairo_set_source
+~ cairo_set_rgb_color -> cairo_set_source_rgb
+
+ All of the various functions that changed the source
+ color/pattern were unified to use cairo_set_source names to
+ make the relation more clear.
+
+~ cairo_transform_point -> cairo_user_to_device
+~ cairo_transform_distance -> cairo_user_to_device_distance
+~ cairo_inverse_transform_point -> cairo_device_to_user
+~ cairo_inverse_transform_distance -> cairo_device_to_user_distance
+
+ These names just seemed a lot more clear.
+
+~ cairo_init_clip -> cairo_reset_clip
+~ cairo_concat_matrix -> cairo_transform
+
+ More abbreviation elimination
+
+~ cairo_current_path -> cairo_copy_path
+~ cairo_current_path_flat -> cairo_copy_path_flat
+
+ The former mechanism for examining the current path was a
+ function that required 3 or 4 callbacks. This was more
+ complexity than warranted in most situations. The new
+ cairo_copy_path function copies the current path into an
+ exposed data structure, and the documentation provides a
+ convenient idiom for navigating the path data.
+
+API additions
+-------------
++ cairo_paint
+
+ A generalized version of the painting operators cairo_stroke
+ and cairo_fill. The cairo_paint call applies the source paint
+ everywhere within the current clip region. Very useful for
+ clearing a surface to a solid color, or painting an image,
+ (see cairo_set_source_surface).
+
++ cairo_paint_with_alpha
+
+ Like cairo_paint but applying some alpha to the source,
+ (making the source paint translucent, eg. to blend an image on
+ top of another).
+
++ cairo_mask
+
+ A more generalized version of cairo_paint_with_alpha which
+ allows a pattern to specify the amount of translucence at each
+ point rather than using a constant value everywhere.
+
++ cairo_mask_surface
+
+ A convenience function on cairo_mask for when the mask pattern
+ is already contained within a surface.
+
++ cairo_surface_set_user_data
++ cairo_surface_get_user_data
++ cairo_font_face_set_user_data
++ cairo_font_face_get_user_data
+
+ Associate arbitrary data with a surface or font face for later
+ retrieval. Get notified when a surface or font face object is
+ destroyed.
+
++ cairo_surface_finish
+
+ Allows the user to instruct cairo to finish all of its
+ operations for a given surface. This provides a safe point for
+ doing things such as flushing and closing files that the
+ surface may have had open for writing.
+
++ cairo_fill_preserve
++ cairo_stroke_preserve
++ cairo_clip_preserve
+
+ One interesting change in cairo is that the path is no longer
+ part of the graphics state managed by
+ cairo_save/restore. This allows functions to construct paths
+ without interfering with the graphics state. But it prevents
+ the traditional idiom for fill-and-stroke:
+
+ cairo_save; cairo_fill; cairo_restore; cairo_stroke
+
+ Instead we know have alternate versions cairo cairo_fill,
+ cairo_stroke, and cairo_clip that preserve the current path
+ rather than consuming it. So the idiom now becomes simply:
+
+ cairo_fill_preserve; cairo_stroke
+
++ cairo_surface_write_to_png
++ cairo_surface_write_to_png_stream
+
+ In place of a single PNG backend, now a surface created
+ through any backend (except PDF currently) can be written out
+ to a PNG image.
+
++ cairo_image_surface_create_from_png
++ cairo_image_surface_create_from_png_stream
+
+ And its just as easy to load a PNG image into a surface as well.
+
++ cairo_append_path
+
+ With the new, exposed path data structure, it's now possible
+ to append bulk path data to the current path, (rather than
+ issuing a long sequence of cairo_move_to/line_to/curve_to
+ function calls).
+
+Xlib and XCB backends
+---------------------
+
+Any cairo_format_t and Colormap arguments have been dropped from
+cairo_xlib_surface_create. There are also two new
+cairo_xlib|xcb_surface_create functions:
+
+ cairo_xlib|xcb_surface_create_for_bitmap
+ (Particular for creating A1 surfaces)
+ cairo_xlib|xcb_surface_create_with_xrender_format
+ (For any other surface types, not described by a Visual*)
+
+All of these surface create functions now accept width and height. In
+addition, there are new cairo_xlib|xcb_surface_set_size functions
+which must be called each time a window that is underlying a surface
+changes size.
+
+Print backends (PS and PDF)
+---------------------------
+The old FILE* based interfaces have been eliminated. In their place we
+have two different functions. One accepts a simple const char
+*filename. The other is a more general function which accepts a
+callback write function and a void* closure. This should allow the
+flexibility needed to hook up with various stream object in many
+languages.
+
+In addition, when specifying the surface size during construction, the
+units are now device-space units (ie. points) rather than inches. This
+provides consistency with all the other surface types and also makes
+it much easier to reason about the size of the surface when drawing to
+it with the default identity matrix.
+
+Finally, the DPI parameters, which are only needed to control the
+quality of fallbacks, have been made optional. Nothing is required
+during surface_create (300 DPI is assumed) and
+cairo_ps|pdf_surface_set_dpi can be used to set alternate values if
+needed.
+
+Font system
+-----------
+Owen very graciously listened to feedback after the big font rework he
+had done for 0.4, and came up with way to improve it even more. In 0.4
+there was a cairo_font_t that was always pre-scaled. Now, there is an
+unscaled cairo_font_face_t which is easier to construct, (eg. no
+scaling matrix required) and work with, (it can be scaled and
+transformed after being set on the graphics state). And the font size
+manipulation functions are much easier. You can set an explicit size
+and read/modify/write the font matrix with:
+
+ cairo_set_font_size
+ cairo_get_font_matrix
+ cairo_set_font_matrix
+
+(Previously you could only multiply in a scale factor or a matrix.) A
+pleasant side effect is that we can (and do) now have a default font
+size that is reasonable, as opposed to the old default height of one
+device-space unit which was useless until scaled.
+
+Of course, the old pre-scaled font had allowed some performance
+benefits when getting many metrics for a font. Those benefits are
+still made available through the new cairo_scaled_font_t. And a
+cairo_font_face_t can be "promoted" to a cairo_scaled_font_t by
+suppling a font_matrix and the desired CTM.
+
+Quartz backend
+--------------
+Tim Rowley put in the work to bring the Quartz backend back after it
+had been disabled in the 0.4.0 snapshot. He was not able to bring back
+the function that allows one to create a cairo_font_t from an ATSUI
+style:
+
+ cairo_font_t *
+ cairo_atsui_font_create (ATSUStyle style);
+
+because he didn't have a test case for it. If you care about this
+function, please provide a fairly minimal test and we'll try to bring
+it back in an upcoming snapshot.
+
+Snapshot 0.4.0 (2005-03-08 Carl Worth <cworth@cworth.org>)
+==========================================================
+New documentation
+-----------------
+Owen Taylor has converted cairo's documentation system to gtk-doc and
+has begun some long-needed work on the documentation, which can now be
+viewed online here:
+
+ http://cairographics.org/manual/
+
+New backend: win32
+------------------
+This is the first snapshot to include a functional win32 backend,
+(thanks to Owen Taylor). The interface is as follows:
+
+ #include <cairo-win32.h>
+
+ void
+ cairo_set_target_win32 (cairo_t *cr,
+ HDC hdc);
+
+ cairo_surface_t *
+ cairo_win32_surface_create (HDC hdc);
+
+ cairo_font_t *
+ cairo_win32_font_create_for_logfontw (LOGFONTW *logfont,
+ cairo_matrix_t *scale);
+
+ cairo_status_t
+ cairo_win32_font_select_font (cairo_font_t *font,
+ HDC hdc);
+
+ void
+ cairo_win32_font_done_font (cairo_font_t *font);
+
+ double
+ cairo_win32_font_get_scale_factor (cairo_font_t *font);
+
+And see also the documentation at:
+
+http://cairographics.org/manual/cairo-Microsoft-Windows-Backend.html
+
+Disabled backend: quartz
+------------------------
+Unfortunately, the quartz backend code is currently out of date with
+respect to some recent backend interface changes. So, the quartz
+backend is disabled in this snapshot.
+
+If the quartz backend is brought up-to-date before the next snapshot,
+we would be glad to make a 0.4.1 snapshot that re-enables it, (we do
+not expect many more big backend interface changes).
+
+API Changes
+-----------
+The font system has been revamped, (as Owen Taylor's work with
+integrating pango and cairo gave us the first serious usage of the
+non-toy font API).
+
+One fundamental, user-visible change is that the cairo_font_t object
+now represents a font that is scaled to a particular device
+resolution. Further changes are described below.
+
+ cairo.h
+ -------
+ Removed cairo_font_set_transform and cairo_font_current_transform.
+
+ Added cairo_font_extents and cairo_font_glyph_extents. See
+ documentation for details:
+
+ http://cairographics.org/manual/cairo-cairo-t.html#cairo-font-extents
+
+ cairo-ft.h
+ ----------
+ The cairo_ft_font API changed considerably. Please see the
+ documentation for details:
+
+ http://cairographics.org/manual/cairo-FreeType-Fonts.html
+
+Performance
+-----------
+Make the fast-path clipping (pixel-aligned rectangles) faster.
+
+Add optimization for applying a constant alpha to a pattern.
+
+Optimize gradients that are horizontal or vertical in device space.
+
+Xlib: When RENDER is not available, use image surfaces for
+intermediate surfaces rather than xlib surfaces.
+
+Backend-specific changes
+------------------------
+ Glitz
+ -----
+ Major update to glitz backend. The output quality should now be just
+ as good as the image and xlib backends.
+
+ Track changes to glitz 0.4.0.
+
+ PDF
+ ---
+ Various improvements to produce more conformant output.
+
+Internals
+---------
+David Reveman contributed a large re-work of the cairo_pattern_t
+implementation, providing cleaner code and more optimization
+opportunities.
+
+ Backend interface changes
+ -------------------------
+ Rework backend interface to accept patterns, not surfaces for source
+ and mask.
+
+ Remove set_matrix, set_filter, and set_repeat functions.
+
+ More sophisticated backend interface for image fallbacks,
+ ({acquire,release}_{source,dest}_image() and clone_similar).
+
+Bug fixes
+---------
+Only install header files for backends that have been compiled.
+
+Fixed some rounding errors leading to incorrectly placed glyphs.
+
+Many other minor fixes.
+
+Snapshot 0.3.0 (2005-01-21 Carl Worth <cworth@cworth.org>)
+==========================================================
+Major API changes
+-----------------
+1) The public header files will no longer be directly installed into
+ the system include directory. They will now be installed in a
+ subdirectory named "cairo", (eg. in /usr/include/cairo rather than
+ in /usr/include).
+
+ As always, the easiest way for applications to discover the
+ location of the header file is to let pkg-config generate the
+ necessary -I CFLAGS and -L/-l LDFLAGS. For example:
+
+ cc `pkg-config --cflags --libs cairo` -o foo foo.c
+
+ IMPORTANT: Users with old versions of cairo installed will need to
+ manually remove cairo.h and cairo-features.h from the
+ system include directories in order to prevent the old
+ headers from being used in preference to the new ones.
+
+2) The backend-specific portions of the old monolithic cairo.h have
+ been split out into individual public header files. The new files
+ are:
+
+ cairo-atsui.h
+ cairo-ft.h
+ cairo-glitz.h
+ cairo-pdf.h
+ cairo-png.h
+ cairo-ps.h
+ cairo-quartz.h
+ cairo-xcb.h
+ cairo-xlib.h
+
+ Applications will need to be modified to explicitly include the new
+ header files where appropriate.
+
+3) There are two new graphics backends in this snapshot, a PDF
+ backend, and a Quartz backend. There is also one new font backend,
+ ATSUI.
+
+PDF backend
+-----------
+Kristian Høgsberg has contributed a new backend to allow cairo-based
+applications to generate PDF output. The interface for creating a PDF
+surface is similar to that of the PS backend, as can be seen in
+cairo-pdf.h:
+
+ void
+ cairo_set_target_pdf (cairo_t *cr,
+ FILE *file,
+ double width_inches,
+ double height_inches,
+ double x_pixels_per_inch,
+ double y_pixels_per_inch);
+
+ cairo_surface_t *
+ cairo_pdf_surface_create (FILE *file,
+ double width_inches,
+ double height_inches,
+ double x_pixels_per_inch,
+ double y_pixels_per_inch);
+
+Once a PDF surface has been created, applications can draw to it as
+any other cairo surface.
+
+This code is still a bit rough around the edges, and does not yet
+support clipping, surface patterns, or transparent gradients. Text
+only works with TrueType fonts at this point and only black text is
+supported. Also, the size of the generated PDF files is currently
+quite big.
+
+Kristian is still actively developing this backend, so watch this
+space for future progress.
+
+Quartz backend
+--------------
+Calum Robinson has contributed a new backend to allow cairo
+applications to target native Mac OS X windows through the Quartz
+API. Geoff Norton integrated this backend into the current
+configure-based build system, while Calum also provided Xcode build
+support in the separate "macosx" module available in CVS.
+
+The new interface, available in cairo-quartz.h, is as follows:
+
+ void
+ cairo_set_target_quartz_context (cairo_t *cr,
+ CGContextRef context,
+ int width,
+ int height);
+
+ cairo_surface_t *
+ cairo_quartz_surface_create (CGContextRef context,
+ int width,
+ int height);
+
+There is an example program available in CVS in cairo-demo/quartz. It
+is a port of Keith Packard's fdclock program originally written for
+the xlib backend. A screenshot of this program running on Mac OS X is
+available here:
+
+ http://cairographics.org/~cworth/images/fdclock-quartz.png
+
+ATSUI font backend
+------------------
+This new font backend complements the Quartz backend by allowing
+applications to use native font selection on Mac OS X. The interface
+is a single new function:
+
+ cairo_font_t *
+ cairo_atsui_font_create (ATSUStyle style);
+
+Minor API changes
+-----------------
+Prototype for non-existent function "cairo_ft_font_destroy" removed.
+
+Now depends on libpixman 0.1.2 or newer, (0.1.3 is being released
+concurrently and has some useful performance improvements).
+
+Default paint color is now opaque black, (was opaque white). Default
+background color is transparent (as before).
+
+Renamed "struct cairo" to "struct _cairo" to free up the word "cairo"
+from the C++ identifier name space.
+
+Functions returning multiple return values through provided pointers,
+(cairo_matrix_get_affine, cairo_current_point, and
+cairo_current_color_rgb), will now accept NULL for values the user
+wants to ignore.
+
+CAIRO_HAS_FREETYPE_FONT has now been renamed to CAIRO_HAS_FT_FONT.
+
+Performance improvements
+------------------------
+Alexander Larsson provided some fantastic performance improvements
+yielding a 10000% performance improvement in his application, (when
+also including his performance work in libpixman-0.1.3). These include
+
+ * Fixed handling of cache misses.
+
+ * Creating intermediate clip surfaces at the minimal size required.
+
+ * Eliminating roundtrips when creating intermediate Xlib surfaces.
+
+Implementation
+--------------
+Major re-work of font metrics system by Keith Packard. Font metrics
+should now be much more reliable.
+
+Glitz backend
+-------------
+Updated for glitz-0.3.0.
+Bug fixes in reference counting.
+
+Test suite
+----------
+New tests for cache crashing, rotating text, improper filling of
+complex polygons, and leaky rasterization.
+
+Bug fixes
+---------
+Fixed assertion failure when selecting the same font multiple times in
+sequence.
+
+Fixed reference counting so cache_destroy functions work.
+
+Remove unintended copyright statement from files generated with
+PostScript backend.
+
+Fixed to eliminate new warnings from gcc 3.4 and gcc 4.
+
+Snapshot 0.2.0 (2004-10-27 Carl Worth <cworth@cworth.org>)
+===========================================================
+New license: LGPL/MPL
+---------------------
+The most significant news with this release is that the license of
+cairo has changed. It is now dual-licensed under the LGPL and the
+MPL. For details see the COPYING file as well as COPYING-LGPL-2.1 and
+COPYING-MPL-1.1.
+
+I express my thanks to everyone involved in the license change process
+for their patience and support!
+
+New font and glyph internals
+----------------------------
+Graydon Hoare has put a tremendous amount of work into new internals
+for handling fonts and glyphs, including caches where appropriate.
+This work has no impact on the user-level API, but should result in
+great performance improvements for applications using text.
+
+New test suite
+--------------
+This snapshot of cairo includes a (small) test suite in
+cairo/test. The tests can be run with "make check". The test suite was
+designed to make it very easy to add new tests, and we hope to see
+many contributions here. As you find bugs, please try adding a minimal
+test case to the suite, and submit it with the bug report to the
+cairo@cairographics.org mailing list. This will make it much easier
+for us to track progress in fixing bugs.
+
+New name for glitz backend
+--------------------------
+The gl backend has now been renamed to the glitz backend. This means
+that the following names have changed:
+
+ CAIRO_HAS_GL_SURFACE -> CAIRO_HAS_GLITZ_SURFACE
+ cairo_set_target_gl -> cairo_set_target_glitz
+ cairo_gl_surface_create -> cairo_glitz_surface_create
+
+This change obviously breaks backwards compatibility for applications
+using the old gl backend.
+
+Up-to-date with latest glitz snapshots
+--------------------------------------
+This snapshot of cairo is now up to date with the latest glitz
+snapshot, (currently 0.2.3). We know that the latest cairo and glitz
+snapshots have been incompatible for a very long time. We've finally
+fixed that now and we're determined to not let that happen again.
+
+Revert some tessellation regression bugs
+----------------------------------------
+People that have been seeing some tessellation bugs, (eg. leaked
+fills), in the CVS version of cairo may have better luck with this
+release. A change since the last snapshot was identified to trigger
+some of these bugs and was reverted before making the snapshot. The
+behavior should be the same as the previous (0.1.23) snapshot.
+
+Miscellaneous changes
+---------------------
+Changed CAIRO_FILTER_DEFAULT to CAIRO_FILTER_BEST to make gradients
+easier.
+
+Track XCB API change regarding iterators.
+
+Various bug fixes
+-----------------
+Fix calculation of required number of vertices for pen.
+
+Fix to avoid zero-dimensioned pixmaps.
+
+Fix broken sort of pen vertices.
+
+Fix bug when cairo_show_text called with a NULL string.
+
+Fix clipping bugs.
+
+Fix bug in computing image length with XCB.
+
+Fix infinite loop bug in cairo_arc.
+
+Fix memory management interactions with libpixman.
+
+Snapshot 0.1.23 (2004-05-11 Carl Worth <cworth@isi.edu>)
+========================================================
+Fixes for gcc 3.4
+-----------------
+Fix prototype mismatches so that cairo can be built by gcc 3.4.
+
+Updates to track glitz
+----------------------
+Various fixes to support the latest glitz snapshot (0.1.2).
+
+Gradient updates
+----------------
+Radial gradients now support both inner and outer circles.
+Transformed linear gradients are now properly handled.
+Fixes for extend type reflect.
+
+Glitz updates
+-------------
+Converted shading routines to use fixed point values and introduced a
+shading operator structure for more efficient shading calculations.
+Support compositing with mask surface when mask is solid or
+multi-texturing is available.
+
+PNG backend cleanups
+--------------------
+Fix output to properly compensate for pre-multiplied alpha format in cairo.
+Add support for A8 and A1 image formats.
+
+Bug fixes
+---------
+Avoid crash or infinite loop on null strings and degeneratively short
+splines.
+
+New? bugs in cairo_clip
+-----------------------
+There are some fairly serious bugs in cairo_clip. It is sometimes
+causing an incorrect result. And even when it does work, it is
+sometimes so slow as to be unusable. Some of these bugs may not be
+new, (indeed cairo_clip has only ever had a braindead-slow
+implementation), but I think they're worth mentioning here.
+
+Snapshot 0.1.22 (2004-04-16 Carl Worth <cworth@isi.edu>)
+========================================================
+Cairo was updated to track the changes in libpixman, and now depends
+on libpixman version 0.1.1.
+
+Snapshot 0.1.21 (2004-04-09 David Reveman <c99drn@cs.umu.se>)
+=============================================================
+New OpenGL backend
+------------------
+The OpenGL backend provides hardware accelerated output for
+X11 and OS X. The significant new functions are:
+
+ cairo_set_target_gl
+ cairo_gl_surface_create
+
+Automatic detection of available backends
+-----------------------------------------
+The configure script now automatically detect what backends are
+available, (use ./configure --disable-`backend' to prevent
+compilation of specific backends).
+
+Snapshot 0.1.20 (2004-04-06 Carl Worth <cworth@isi.edu>)
+========================================================
+New pattern API
+---------------
+David Reveman has contributed a new pattern API which enable linear
+and radial gradient patterns in addition to the original surface-based
+patterns. The significant new top-level functions are:
+
+ cairo_pattern_create_linear
+ cairo_pattern_create_radial
+ cairo_pattern_create_for_surface
+ cairo_pattern_add_color_stop
+ cairo_set_pattern
+
+Any code using the old cairo_set_pattern, (which accepted a
+cairo_surface_t rather than a cairo_pattern_t), will need to be
+updated.
+
+Update to XCB backend
+---------------------
+The XCB backend is now enabled by default, (use ./configure
+--disable-xcb to turn it off).
+
+Faster clipping
+---------------
+Graydon Hoare has added optimizations that make cairo_clip much faster
+when the path is a pixel-aligned, rectangular region.
+
+Bug fixes.
+
+Snapshot 0.1.19 (2004-02-24 Carl Worth <cworth@isi.edu>)
+========================================================
+New PNG backend
+---------------
+Olivier Andrieu contributed a new PNG backend. It builds on the
+existing image backend to make it easy to render "directly" to a
+.png file. The user never needs to deal with the actual image
+buffer. The significant new functions are:
+
+ cairo_set_target_png
+ cairo_png_surface_create
+
+The PNG backend is not enabled by default so that by default there is
+not a new dependency on libpng. Use ./configure --enable-png to enable
+this backend.
+
+Snapshot 0.1.18 (2004-02-17 Carl Worth <cworth@isi.edu>)
+========================================================
+Path query functionality
+------------------------
+It's now possible to query the current path. The two new functions
+are:
+
+ cairo_current_path
+ cairo_current_path_flat
+
+Each function accepts a number of callback functions that will be
+called for each element in the path (move_to, line_to, curve_to,
+close_path). The cairo_current_path_flat function does not accept a
+curve_to callback. Instead, all curved portions of the path will be
+converted to line segments, (within the current tolerance value). This
+can be handy for doing things like text-on-path without having to
+manually interpolate Bézier splines.
+
+New XCB backend
+---------------
+Jamey Sharp has contributed a second X backend that uses the new, lean
+XCB library rather than Xlib. It cannot currently be compiled at the
+same time as the Xlib backend. See ./configure --enable-xcb.
+
+Build fixes for cygwin.
+
+Bug fixes.
+
+Snapshot 0.1.17 (2003-12-16 Carl Worth <cworth@isi.edu>)
+========================================================
+
+Better text support
+-------------------
+This snapshot provides much better text support by implementing the
+following four functions:
+
+ cairo_text_extents
+ cairo_glyph_extents
+ cairo_text_path
+ cairo_glyph_path
+
+The text/glyph_extents functions can be used to determine the bounding
+box (and advance) for text as if drawn by show_text/glyphs.
+
+The text/glyph_path objects functions place text shapes on the current
+path, where they can be subsequently manipulated. For example,
+following these functions with cairo_stroke allows outline text to be
+drawn. Calling cairo_clip allows clipping to a text-shaped region.
+
+Combined dependencies
+---------------------
+The cairo core now depends only on the libpixman library. This single
+library replaces the three previous libraries libic, libpixregion, and
+slim. Thanks to Dave Beckett <dave.beckett@bristol.ac.uk> for all of
+the heavy lifting with this renaming effort.
+
+Conditional compilation of backends
+-----------------------------------
+Cairo now allows optional backends to be disabled at compile time. The
+following options may now be passed to the configure script:
+
+ --disable-xlib
+ --disable-ps
+
+Note that the first option is a change from the old --without-x option
+which will no longer have any effect.
+
+OS X supported - several byte-order issues resolved
+---------------------------------------------------
+Cairo has now been successfully compiled under OS X. Testing revealed
+that there were some byte-order problems in the PostScript backend and
+the PNG generation in the demos. These have now been resolved.
+
+2003-10
+=======
+Graydon Hoare <graydon@redhat.com> implemented the first real text
+support using Freetype/fontconfig, (previous versions of cairo used
+Xft and could only draw text when using an X backend).
+
+2003-09
+=======
+Graydon Hoare <graydon@redhat.com> added the first real support for
+running cairo with a non-render-aware X server.
+
+Jamey Sharp <jamey@minilop.net> virtualized the backend font and
+surface interfaces in September, 2003.
+
+2003-06
+=======
+Xr is renamed cairo to avoid confusion since it no longer had a strict
+dependence on X.
+
+2003-05
+=======
+A new image surface backend is added to Xr. Keith Packard
+<keithp@keithp.com> wrote the image compositing code in libic that is
+used for the image_surface backend. This code was originally written
+as the software fallback for the render extension within the X
+server.
+
+2002-06
+=======
+Carl Worth <cworth@isi.edu> wrote the first lines of Xr, after Keith
+Packard <keithp@keithp.com> proposed the plan for a stateful drawing
+library in C providing a PostScript-like rendering model.
+
+ LocalWords: mutex BeOS extraordinaire distro's URL lcd bool tarball
diff --git a/PORTING_GUIDE b/PORTING_GUIDE
new file mode 100755
index 000000000..7488173c4
--- /dev/null
+++ b/PORTING_GUIDE
@@ -0,0 +1,265 @@
+ ...-----=======-----...
+ Cairo 1.0 Porting Guide
+ ...-----=======-----...
+
+Here are some notes on more easily porting cairo_code from cairo 0.4
+to cairo 1.0. It is sorted roughly in order of importance, (the items
+near the top are expected to affect the most people).
+
+Automated API renamings
+=======================
+There have been a lot of simple renamings where the functionality is
+the same but the name of the symbol is different. We have provided a
+script to automate the conversion of these symbols. It can be found
+within the cairo distribution in:
+
+ util/cairo-api-update
+
+This script is used by installing it somewhere on your PATH, and the
+running it and providing the names of your source files on the command
+line. For example:
+
+ cairo-api-update *.[ch]
+
+The script will first save backup copies of each file (renamed with a
+.bak extension) and then will perform all of the simple renamings.
+
+For your benefit, the script also produces messages giving filenames
+and line numbers for several of the manual API updates that you will
+need to perform as described below.
+
+
+Manual API changes
+==================
+This section of the porting guide describes changes you will have to
+manually make to your source code. In addition to the information in
+this guide, the cairo-api-update script will notify you of some of
+these issues as described above.
+
+Cairo's deprecation warnings
+----------------------------
+Also, if your compiler provides warnings for implicit declarations of
+functions, (eg. "gcc -Wall"), then simply attempting to compile your
+program will cause cairo to generate messages intended to guide you
+through the porting process.
+
+For example, if you neglect to update an old call to
+cairo_set_target_drawable, you might see an error message as follows:
+
+ foo.c:10: warning: implicit declaration of function
+ ‘cairo_set_target_drawable_DEPRECATED_BY_cairo_xlib_surface_create’
+
+This message is indicating to you that the deprecatd function
+cairo_set_target_drawable appears in your program foo.c on line 10,
+and you should rewrite your program to call cairo_xlib_surface_create
+instead.
+
+The remainder of this porting guide is arranged as a set of common
+code patterns that appear in old (cairo-0.4) code and how it should be
+transformed to new (cairo-0.5) code.
+
+cairo_create
+------------
+Was: cr = cairo_create ();
+ cairo_set_target_foo (cr, args);
+ /* draw */
+ cairo_destroy (cr);
+
+Now: cairo_surface_t *surface;
+
+ surface = cairo_foo_surface_create (args);
+ cr = cairo_create (surface);
+ /* draw */
+ cairo_destroy (cr);
+ cairo_surface_destroy (surface);
+
+Or: cairo_surface_t *surface;
+
+ surface = cairo_foo_surface_create (args);
+ cr = cairo_create (surface);
+ cairo_surface_destroy (surface);
+ /* draw */
+ cairo_destroy (cr);
+
+NOTE: Many of the cairo_foo_surface_create functions accept the
+ identical arguments as the the old cairo_set_target_foo
+ functions, (minus the cairo_t*), making this transformation
+ quite easy. One notable exception is cairo_set_target_drawable
+ which, when it becomes cairo_xlib_surface_create must pickup new
+ arguments for the Visual*, the width, and the height.
+
+cairo_set_alpha (1)
+-------------------
+Was: cairo_set_rgb_color (cr, red, green, blue);
+ cairo_set_alpha (cr, alpha);
+
+Now: cairo_set_source_rgba (cr, red, green, blue, alpha);
+
+cairo_show_surface
+------------------
+Was: cairo_show_surface (cr, surface, width, height);
+
+Now: cairo_set_source_surface (cr, surface, x, y);
+ cairo_paint (cr);
+
+NOTE: The type signatures of cairo_show_surface and cairo_set_source
+ are the same, but pay attention that cairo_show_surface required
+ the width and height, while cairo_set_source_surface requires
+ the X,Y location to where the surface will be placed.
+
+cairo_set_alpha (2)
+-------------------
+Was: cairo_set_alpha (cr, alpha);
+ cairo_show_surface (cr, surface, width, height);
+
+Now: cairo_set_source_surface (cr, surface, x, y);
+ cairo_paint_with_alpha (cr, alpha);
+
+filling and stroking
+--------------------
+Was: cairo_save (cr);
+ /* set fill color */
+ cairo_fiill (cr);
+ cairo_restore (cr);
+ /* set stroke color */
+ cairo_stroke (cr);
+
+Now: /* set fill color */
+ cairo_fill_preserve (cr);
+ /* set stroke color */
+ cairo_stroke (cr);
+
+NOTE: The current path is no longer saved/restored by
+ cairo_save/cairo_restore. This can lead to some subtle
+ surprises, so look out.
+
+cairo_matrix_t
+--------------
+Was: cairo_matrix_t *matrix;
+
+ matrix = cairo_matrix_create ();
+ /* Do stuff with matrix */
+ cairo_matrix_destroy (matrix);
+
+Now: cairo_matrix_t matrix;
+ cairo_matrix_init_identity (&matrix);
+ /* Do stuff with &matrix */
+
+NOTE: If you are really lazy, you can still use a cairo_matrix_t* and
+ avoid putting the &matrix all over by just replacing
+ cairo_matrix_create() with malloc() and cairo_matrix_destroy()
+ with free(). That's not as nice, and you still need to be
+ careful to see if you need to initialize it to an identity
+ matrix as cairo_matrix_create() did for you.
+
+Rendering to a temporary surface
+--------------------------------
+Was: cairo_save (cr);
+ {
+ cairo_set_target_surface (cr, temporary);
+ /* draw through cr onto temporary */
+ }
+ cairo_restore (cr);
+ /* use temporary as source on cr */
+
+Now: {
+ cr2 = cairo_create (temporary);
+ /* draw through cr2 onto temporary */
+ cairo_destory (cr2);
+ }
+ /* use temporary as source on cr */
+
+NOTE: Having to create another cairo_t is a bit annoying, but having
+ to invent a new name for it is just awful, (imagine a deeply
+ nested version of this code). Fortunately, the style above is
+ just a stop-gap measure until the new group API comes along.
+
+Iterating over a path
+---------------------
+Was: cairo_current_path (cr,
+ my_move_to,
+ my_line_to,
+ my_curve_to,
+ my_close_path,
+ closure);
+
+Now: int i;
+ cairo_path_t *path;
+ cairo_path_data_t *data;
+
+ path = cairo_copy_path (cr);
+
+ for (i=0; i < path->num_data; i += path->data[i].header.length) {
+ data = &path->data[i];
+ switch (data->header.type) {
+ case CAIRO_PATH_MOVE_TO:
+ my_move_to (closure, data[1].point.x, data[1].point.y);
+ break;
+ case CAIRO_PATH_LINE_TO:
+ my_line_to (closure, data[1].point.x, data[1].point.y);
+ break;
+ case CAIRO_PATH_CURVE_TO:
+ my_curve_to (closure, data[1].point.x, data[1].point.y,
+ data[2].point.x, data[2].point.y,
+ data[3].point.x, data[3].point.y);
+ break;
+ case CAIRO_PATH_CLOSE_PATH:
+ my_close_path (closure);
+ break;
+ }
+ }
+ cairo_path_destroy (path);
+
+NOTE: This version makes it looks like the new form is a _lot_ more
+ verbose than the old version. But realize that the old version
+ required the support of 4 additional functions. The new approach
+ allows great flexibility including the ability to inline the
+ entire operation within the switch statement when appropriate.
+
+Erasing a surface to transparent
+--------------------------------
+Was: cairo_set_rgb_color (cr, 0., 0., 0.);
+ cairo_set_alpha (cr, 0.)
+ cairo_set_operator (cr, CAIRO_OPERATOR_SRC);
+ cairo_rectangle (cr, 0., 0., surface_width, surface_height);
+ cairo_fill (cr);
+
+ or: cairo_set_rgb_color (cr, 0., 0., 0.);
+ cairo_set_operator (cr, CAIRO_OPERATOR_CLEAR);
+ cairo_rectangle (cr, 0., 0., surface_width, surface_height);
+ cairo_fill (cr);
+
+Now: cairo_set_source_rgba (cr, 0., 0., 0., 0.);
+ cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
+ cairo_paint (cr);
+
+ or: cairo_set_operator (cr, CAIRO_OPERATOR_CLEAR);
+ cairo_paint (cr);
+
+NOTE: Using cairo_rectangle and fill would still work just fine. It's
+ just a lot more convenient to use cairo_paint now, (particularly
+ as it doesn't require you to even know what the bounds of the
+ target surface are).
+
+Drawing to a PNG file
+---------------------
+Was: file = fopen (filename, "w");
+ cr = cairo_create ();
+ cairo_set_target_png (cr, file, format, width, height);
+ /* draw image */
+ cairo_destroy (cr);
+ fclose (file);
+
+Now: surface = cairo_image_surface_create (format, width, height);
+ cr = cairo_create (surface);
+ /* draw image */
+ cairo_surface_write_to_png (surface, filename);
+ cairo_destroy (cr);
+ cairo_surface_destroy (surface);
+
+NOTE: The png backend is gone. So there is no cairo_png_surface_create
+ to take the place of cairo_set_target_png. And notice that we
+ used an image surface here, but it is just as easy to use
+ cairo_surface_write_to_png with an xlib or other surface, (but
+ not PDF at the moment). This is one of the big advantages of
+ this approach as opposed to a PNG surface.
diff --git a/README b/README
new file mode 100755
index 000000000..67ce4f58d
--- /dev/null
+++ b/README
@@ -0,0 +1,194 @@
+Cairo - Multi-platform 2D graphics library
+http://cairographics.org
+
+What is cairo
+=============
+Cairo is a 2D graphics library with support for multiple output
+devices. Currently supported output targets include the X Window
+System (via both Xlib and XCB), quartz, win32, and image buffers,
+as well as PDF, PostScript, and SVG file output. Experimental backends
+include OpenGL, BeOS, OS/2, and DirectFB.
+
+Cairo is designed to produce consistent output on all output media
+while taking advantage of display hardware acceleration when available
+(for example, through the X Render Extension).
+
+The cairo API provides operations similar to the drawing operators of
+PostScript and PDF. Operations in cairo include stroking and filling
+cubic Bézier splines, transforming and compositing translucent images,
+and antialiased text rendering. All drawing operations can be
+transformed by any affine transformation (scale, rotation, shear,
+etc.).
+
+Cairo has been designed to let you draw anything you want in a modern
+2D graphical user interface. At the same time, the cairo API has been
+designed to be as fun and easy to learn as possible. If you're not
+having fun while programming with cairo, then we have failed
+somewhere---let us know and we'll try to fix it next time around.
+
+Cairo is free software and is available to be redistributed and/or
+modified under the terms of either the GNU Lesser General Public
+License (LGPL) version 2.1 or the Mozilla Public License (MPL) version
+1.1.
+
+Where to get more information about cairo
+=========================================
+The primary source of information about cairo is:
+
+ http://cairographics.org/
+
+The latest versions of cairo can always be found at:
+
+ http://cairographics.org/download
+
+Documentation on using cairo and frequently-asked questions:
+
+ http://cairographics.org/documentation
+ http://cairographics.org/FAQ
+
+Mailing lists for contacting cairo users and developers:
+
+ http://cairographics.org/lists
+
+Roadmap and unscheduled things to do, (please feel free to help out):
+
+ http://cairographics.org/roadmap
+ http://cairographics.org/todo
+
+Dependencies
+============
+The set of libraries needed to compile cairo depends on which backends
+are enabled when cairo is configured. So look at the list below to
+determine which dependencies are needed for the backends of interest.
+
+For the surface backends, we have both "supported" and "experimental"
+backends. Further, the supported backends can be divided into the
+"standard" backends which can be easily built on any platform, and the
+"platform" backends which depend on some underlying platform-specific
+system, (such as the X Window System or some other window system).
+
+As an example, for a standard Linux build, (with image, png, pdf,
+PostScript, svg, and xlib surface backends, and the freetype font
+backend), the following sample commands will install necessary
+dependencies:
+
+ Debian (and similar):
+
+ apt-get install libpng12-dev libz-dev libxrender-dev libfontconfig1-dev
+
+ Fedora (and similar):
+
+ yum install libpng-devel zlib-devel libXrender-devel fontconfig-devel
+
+(Those commands intentionally don't install pixman from a distribution
+package since if you're manually compiling cairo, then you likely want
+to grab pixman from the same place at the same time and compile it as
+well.)
+
+Supported, "standard" surface backends
+------------------------------------
+ image backend (required)
+ ------------------------
+ pixman >= 0.20.2 http://cairographics.org/releases
+
+ png support (can be left out if desired, but many
+ ----------- applications expect it to be present)
+ libpng http://www.libpng.org/pub/png/libpng.html
+
+ pdf backend
+ -----------
+ zlib http://www.gzip.org/zlib
+
+ postscript backend
+ ------------------
+ zlib http://www.gzip.org/zlib
+
+ svg backend
+ -----------
+ [none]
+
+Supported, "platform" surface backends
+-----------------------------------
+ xlib backend
+ ------------
+ X11 http://freedesktop.org/Software/xlibs
+
+ xlib-xrender backend
+ --------------------
+ Xrender >= 0.6 http://freedesktop.org/Software/xlibs
+
+ quartz backend
+ --------------
+ MacOS X >= 10.4 with Xcode >= 2.4
+
+ win32 backend
+ -------------
+ Microsoft Windows 2000 or newer[*].
+
+ xcb backend
+ -----------
+ XCB http://xcb.freedesktop.org
+
+Font backends (required to have at least one)
+---------------------------------------------
+ freetype font backend
+ ---------------------
+ freetype >= 2.1.9 http://freetype.org
+ fontconfig http://fontconfig.org
+
+ quartz-font backend
+ -------------------
+ MacOS X >= 10.4 with Xcode >= 2.4
+
+ win32 font backend
+ ------------------
+ Microsoft Windows 2000 or newer[*].
+
+ [*] The Win32 backend should work on Windows 2000 and newer
+ (excluding Windows Me.) Most testing has been done on
+ Windows XP. While some portions of the code have been
+ adapted to work on older versions of Windows, considerable
+ work still needs to be done to get cairo running in those
+ environments.
+
+ Cairo can be compiled on Windows with either the gcc
+ toolchain (see http://www.mingw.org) or with Microsoft
+ Visual C++. If the gcc toolchain is used, the standard
+ build instructions using configure apply, (see INSTALL).
+ If Visual C++ is desired, GNU make is required and
+ Makefile.win32 can be used via 'make -f Makefile.win32'.
+ The compiler, include paths, and library paths must be set
+ up correctly in the environment.
+
+ MSVC versions earlier than 7.1 are known to miscompile
+ parts of cairo and pixman, and so should be avoided. MSVC
+ 7.1 or later, including the free Microsoft Visual Studio
+ Express editions, produce correct code.
+
+Experimental surface backends
+-----------------------------
+ beos backend
+ ------------
+ No dependencies in itself other than an installed BeOS system, but cairo
+ requires a font backend. See the freetype dependency list.
+
+ os2 backend
+ -----------
+ Cairo should run on any recent version of OS/2 or eComStation, but it
+ requires a font backend. See the freetype dependency list. Ready to use
+ packages and developer dependencies are available at Netlabs:
+ ftp://ftp.netlabs.org/pub/cairo
+
+Compiling
+=========
+See the INSTALL document for build instructions.
+
+History
+=======
+Cairo was originally developed by Carl Worth <cworth@cworth.org> and
+Keith Packard <keithp@keithp.com>. Many thanks are due to Lyle Ramshaw
+without whose patient help our ignorance would be much more apparent.
+
+Since the original development, many more people have contributed to
+cairo. See the AUTHORS files for as complete a list as we've been able
+to compile so far.
diff --git a/README.win32 b/README.win32
new file mode 100755
index 000000000..ff962b72a
--- /dev/null
+++ b/README.win32
@@ -0,0 +1,66 @@
+Building Cairo on Windows
+=========================
+There are two primary ways to build Cairo on Windows. You can use a
+UNIX emulation based setup, such as Cygwin or MSYS, with the
+conventional configure script shipped with Cairo releases. In this
+configuration, you will build with GCC and (implicitly) libtool. In
+the Cygwin case you end up with a DLL that depends on Cygwin and
+should be used only from Cygwin applications. In the MSYS case you end
+up with a "normal" Win32 DLL that can be used either from GCC- or
+Microsoft Visual C++-compiled code. In theory, this technique is no
+different than the ordinary build process for the Cairo library. In
+practise there are lots of small details that can go wrong.
+
+The second way is to use a GNU-compatible make, but build using
+Microsoft's Visual C++ compiler to produce native libraries. This is
+the setup this README.win32 is written for. Also the DLL produced this
+way is usable either from GCC- or MSVC-compiled code.
+
+Tools required
+==============
+You will need GNU make, version 3.80 or later. Earlier versions or
+other modern make implementations may work, but are not guaranteed to.
+
+You will also need Microsoft Visual C++. Version 7 has been most
+heavily tested, but other versions are likely to work fine.
+
+Libraries required
+==================
+Cairo requires a compatible version of the pixman library. Full build
+instructions are beyond the scope of this document; however, using the
+same tools, it should be possible to build pixman simply by entering
+the pixman/src directory and typing:
+
+ make -f Makefile.win32 CFG=release
+
+Depending on your feature set, you may also need zlib and libpng.
+
+Building
+========
+There are a few files that you will need to edit. First, you must
+determine which features will be built. Edit
+build/Makefile.win32.features and set the features as desired. Note
+that most features have external dependencies; specifically,
+CAIRO_HAS_PNG_FUNCTIONS requires libpng to be present, and
+CAIRO_HAS_PS_SURFACE and CAIRO_HAS_PDF_SURFACE both require zlib.
+
+To ensure that the compiler can find all dependencies, you may need to
+edit build/Makefile.win32.common. In particular, ensure that
+PIXMAN_CFLAGS contains a -I parameter pointing to the location of
+your pixman header files and that PIXMAN_LIBS points to the actual
+location of your pixman-1.lib file. You may also need to edit the
+various occurrences of CAIRO_LIBS to point to other libraries
+correctly. Note also that if you wish to link statically with zlib,
+you should replace zdll.lib with zlib.lib.
+
+Finally, from the top Cairo directory, type:
+
+ make -f Makefile.win32 CFG=release
+
+If this command succeeds, you will end up with src/release/cairo.dll.
+To successfully use Cairo from your own programs, you will probably
+want to move this file to some central location. You will also
+probably want to copy the Cairo header files. These should be placed
+in a cairo subdirectory (for instance, c:/code/common/include/cairo).
+The exact set to copy depends on your features and is reported to you
+at the end of the build.
diff --git a/RELEASING b/RELEASING
new file mode 100755
index 000000000..a1edceba9
--- /dev/null
+++ b/RELEASING
@@ -0,0 +1,140 @@
+Here are the steps to follow to create a new cairo release:
+
+1) Ensure that there are no local, uncommitted/unpushed
+ modifications. You're probably in a good state if both "git diff
+ HEAD" and "git log master..origin/master" give no output.
+
+2) Verify that the code passes "make distcheck"
+
+ First, make sure you have 'nm' and 'readelf' commands in PATH.
+ this should be OK with any Linux distro.
+
+ Running "make distcheck" should result in no warnings or
+ errors and end with a message of the form:
+
+ =============================================
+ cairo-X.Y.Z archives ready for distribution:
+ cairo-X.Y.Z.tar.gz
+ =============================================
+
+ (But the tar file isn't actually ready yet, as we still have
+ some more steps to follow).
+
+ Note that it's allowed (and perhaps recommended) to run the
+ "make distcheck" step against an all-software X server such as
+ Xvfb to avoid getting tripped up by any X-server-driver-specific
+ bugs. See test/README for details
+
+ If you get errors about local PLT entries, you get the list of
+ cairo entries with the error. For each of these, a call to
+ slim_hidden_def and slim_hidden_proto is needed in the cairo
+ implementation in the style of other similar calls.
+
+ In the unfortunate case that you have to push a snapshot out
+ (note, I said snapshot, not release) without the entire test
+ suite passing, here's the magic env vars to set when doing
+ 'make distcheck' and 'make release-publish' that will let you
+ get away with it. At any cost, never ever release without
+ (implied) distchecking. Every time we got around it, it turned
+ out to be a disaster. Anyway, here's the pass code:
+
+ DISPLAY= CAIRO_TEST_TARGET=" "
+
+3) Fill out an entry in the NEWS file
+
+ Sift through the logs since the last release. This is most
+ easily done with a command such as:
+
+ git log --stat X.Y.Z..
+
+ where X.Y.Z is the previous release version.
+
+ Summarize major changes briefly in a style similar to other
+ entries in NEWS. Take special care to note any additions in
+ the API. These should be easy to find by noting modifications
+ to .h files in the log command above. And more specifically,
+ the following command will show each patch that has changed a
+ public header file since the given version:
+
+ find src/ -name '*.h' ! -name '*-private.h' ! -name 'cairoint.h' ! -name 'cairo-*features*.h' | \
+ xargs git diff X.Y.Z.. --
+
+4) Increment cairo_version_{minor|micro} in cairo-version.h:
+
+ If there are backward-incompatible changes in the API, stop
+ now and don't release. Go back and fix the API instead. Cairo
+ is intended to remain backwards-compatible as far as API.
+
+ So cairo_version_major will not be incremented unless we come
+ up with a new versioning scheme to take advantage of it.
+
+ If there are API additions, then increment cairo_version_minor
+ and reset cairo_version_micro to 0. NOTE: The minor version is
+ only incremented for releases, not for snapshots.
+
+ Otherwise, (i.e. there are only bug fixes), increment
+ cairo_version_micro to the next larger (even) number.
+
+5) Commit the changes to NEWS and cairo-version.h
+
+ It's especially important to mention the new version number in your
+ commit log.
+
+6) Run "make release-publish" which will perform the following steps
+ for you:
+
+ * Generate ChangeLog files out of git repository
+ * Check that ChangeLog files were generated properly
+ * Check that the version number ends with an even micro component
+ * Check that no release exists with the current version
+ * Verify that make distcheck completes successfully
+ * Generate the final tar file
+ * Generate an sha1sum file
+ * Sign the sha1sum using your GPG setup (asks for your GPG password)
+ * scp the three files to appear on http://cairographics.org/releases
+ * Generate a versioned manual and upload it to appear as both:
+ http://cairographics.org/manual-X.Y.Z
+ http://cairographics.org/manual
+ * Place local copies of the three files in the releases directory
+ * Create a LATEST-package-version file (after deleting any old one)
+ * Tag the entire source tree with a tag of the form X.Y.Z, and sign
+ the tag with your GPG key (asks for your GPG password, and you
+ may need to set GIT_COMMITTER_NAME and GIT_COMMITTER_EMAIL to match
+ your public-key's setting or this fails.)
+ * Provide some text for the release announcement (see below).
+ If for some reason you lost this message, "make release-publish-message"
+ prints it for you.
+
+7) Increment cairo_version_micro to the next larger (odd) number in
+ cairo-version.h, commit, and push.
+
+8) Push the newly created tag out to the central tree with a command
+ something like:
+
+ git push cairo X.Y.Z
+
+9) Edit the cairo bugzilla product and add the new version numbers. Note
+ that you need to add two versions. One for the release/snapshot (with
+ an even micro version), another with the post-release version (with an
+ odd micro version).
+
+10) Send a message to cairo-announce@cairographics.org and CC
+ gnome-announce-list@gnome.org and ftp-release@lists.freedesktop.org
+ (pr@lwn.net as well for major releases) to announce the new release
+ using the text provided from "make release-publish", adding the excerpt
+ from NEWS, your signature, followed by the standard "What is cairo" and
+ "Where to get more information about cairo" blurbs from README, and
+ finally the shortlog of all changes since last release, generated by:
+
+ git shortlog X.Y.Z...
+
+ where X.Y.Z is the last released version.
+
+11) Edit the cairo wiki to add the announcement to the NEWS page and
+ the front page. (just the parts before your signature).
+
+12) For minor releases (no X.Y change), notify desktop-devel-list@gnome.org
+ or update the ExternalDependencies page for the current cycle if you
+ know where it is. Currently it's:
+
+ http://live.gnome.org/TwoPointNineteen/ExternalDependencies
diff --git a/acinclude.m4 b/acinclude.m4
new file mode 100755
index 000000000..dcf54f935
--- /dev/null
+++ b/acinclude.m4
@@ -0,0 +1,55 @@
+dnl -*- mode: autoconf -*-
+
+dnl [m4_newline] didn't appear until autoconf 2.62
+m4_ifdef([m4_newline],,[m4_define([m4_newline],[
+])])
+
+dnl These are not available in autoconf 2.59
+
+m4_ifdef([m4_foreach_w],,[m4_define([m4_foreach_w],
+[m4_foreach([$1], m4_split(m4_normalize([$2]), [ ]), [$3])])])
+
+m4_ifdef([AS_CASE],,[
+m4_define([_AS_CASE],
+[m4_if([$#], 0, [m4_fatal([$0: too few arguments: $#])],
+ [$#], 1, [ *) $1 ;;],
+ [$#], 2, [ $1) m4_default([$2], [:]) ;;],
+ [ $1) m4_default([$2], [:]) ;;
+$0(m4_shift2($@))])dnl
+])
+m4_defun([AS_CASE],
+[m4_ifval([$2$3],
+[case $1 in
+_AS_CASE(m4_shift($@))
+esac
+])dnl
+])# AS_CASE
+])
+
+m4_ifdef([m4_shift2],, [m4_define([m4_shift2], [m4_shift(m4_shift($@))])])
+
+
+dnl ==========================================================================
+
+dnl This has to be in acinclude.m4 as it includes other files
+
+dnl Parse Version.mk and declare m4 variables out of it
+m4_define([CAIRO_PARSE_VERSION],dnl
+ m4_translit(dnl
+ m4_bpatsubst(m4_include(cairo-version.h),
+ [^.define \([a-zA-Z0-9_]*\) *\([0-9][0-9]*\)],
+ [[m4_define(\1, \2)]]),
+ [A-Z], [a-z])dnl
+)dnl
+
+dnl ==========================================================================
+
+m4_pattern_forbid([^cr_])
+
+dnl AC_AUTOCONF_VERSION was introduced in 2.62, so its definition works as
+dnl a conditional on version >= 2.62. Older versions did not call
+dnl m4_pattern_allow from AC_DEFINE and friends. To avoid lots of warnings we
+dnl only forbid CAIRO_ if autoconf is recent enough.
+m4_ifdef([AC_AUTOCONF_VERSION],
+[m4_pattern_forbid([CAIRO])],
+[m4_pattern_forbid([_CAIRO])])
diff --git a/autogen.sh b/autogen.sh
new file mode 100755
index 000000000..4d113f8be
--- /dev/null
+++ b/autogen.sh
@@ -0,0 +1,31 @@
+#!/bin/sh
+# Run this to generate all the initial makefiles, etc.
+
+test -n "$srcdir" || srcdir=`dirname "$0"`
+test -n "$srcdir" || srcdir=.
+
+ORIGDIR=`pwd`
+cd $srcdir
+
+AUTORECONF=`which autoreconf`
+if test -z $AUTORECONF; then
+ echo "*** No autoreconf found, please intall it ***"
+ exit 1
+fi
+
+GTKDOCIZE=`which gtkdocize`
+if test -z $GTKDOCIZE; then
+ echo "*** No GTK-Doc found, documentation won't be generated ***"
+else
+ gtkdocize || exit $?
+fi
+
+# create dummy */Makefile.am.features and ChangeLog to make automake happy
+> boilerplate/Makefile.am.features
+> src/Makefile.am.features
+touch ChangeLog
+
+autoreconf --install --verbose || exit $?
+
+cd $ORIGDIR
+test -n "$NOCONFIGURE" || "$srcdir/configure" "$@"
diff --git a/boilerplate/.gitignore b/boilerplate/.gitignore
new file mode 100755
index 000000000..a81663b80
--- /dev/null
+++ b/boilerplate/.gitignore
@@ -0,0 +1,24 @@
+TAGS
+tags
+Makefile
+Makefile.in
+Makefile.am.features
+#Makefile.win32.features
+*.lo
+*.la
+*.exe
+*.manifest
+*.o
+*.gcda
+*.gcno
+*.obj
+*.ilk
+*.suo
+*.lib
+*.pdb
+*~
+.*.sw?
+check-link
+cairo-boilerplate-constructors.c
+cairo-boilerplate-constructors
+make-cairo-boilerplate-constructors
diff --git a/boilerplate/Makefile.am b/boilerplate/Makefile.am
new file mode 100755
index 000000000..29ad015ac
--- /dev/null
+++ b/boilerplate/Makefile.am
@@ -0,0 +1,76 @@
+# Note: All source files are listed in Makefile.sources.
+
+include $(top_srcdir)/build/Makefile.am.common
+include $(srcdir)/Makefile.am.features
+
+EXTRA_DIST += Makefile.win32 Makefile.win32.features
+#MAINTAINERCLEANFILES += $(srcdir)/Makefile.win32.features
+
+AM_CPPFLAGS = \
+ -I$(srcdir) \
+ -I$(top_builddir)/src \
+ -I$(top_srcdir)/src \
+ $(CAIRO_CFLAGS) \
+ $(NULL)
+AM_LDFLAGS = $(CAIRO_LDFLAGS)
+
+if BUILD_CXX
+cxx_boilerplate_lib = libcairoboilerplate_cxx.la
+else
+cxx_boilerplate_lib =
+endif
+
+EXTRA_LTLIBRARIES += libcairoboilerplate.la $(cxx_boilerplate_lib)
+
+
+libcairoboilerplate_la_SOURCES = \
+ $(enabled_cairo_boilerplate_headers) \
+ $(enabled_cairo_boilerplate_private) \
+ $(enabled_cairo_boilerplate_sources) \
+ cairo-boilerplate-constructors.c \
+ $(NULL)
+libcairoboilerplate_cxx_la_SOURCES = \
+ $(enabled_cairo_boilerplate_cxx_sources) \
+ $(NULL)
+libcairoboilerplate_la_LIBADD = $(top_builddir)/src/libcairo.la \
+ $(cxx_boilerplate_lib) \
+ $(CAIRO_LIBS) \
+ $(CAIROBOILERPLATE_LIBS) \
+ $(NULL)
+libcairoboilerplate_cxx_la_LIBADD = $(top_builddir)/src/libcairo.la \
+ $(CAIRO_LIBS) \
+ $(CAIROBOILERPLATE_LIBS) \
+ $(NULL)
+libcairoboilerplate_la_DEPENDENCIES = \
+ $(cxx_boilerplate_lib) \
+ $(NULL)
+
+if CAIRO_HAS_DL
+libcairoboilerplate_la_LIBADD += -ldl
+endif
+
+if CAIRO_HAS_BEOS_SURFACE
+# BeOS system headers trigger this warning
+libcairoboilerplate_cxx_la_CXXFLAGS = -Wno-multichar
+endif
+
+if CAIRO_HAS_WIN32_SURFACE
+libcairoboilerplate_la_LIBADD += -lwinspool
+endif
+
+cairo-boilerplate-constructors.c: Makefile $(enabled_cairo_boilerplate_sources) $(enabled_cairo_boilerplate_cxx_sources) make-cairo-boilerplate-constructors.sh
+ (cd $(srcdir) && sh ./make-cairo-boilerplate-constructors.sh $(enabled_cairo_boilerplate_sources) $(enabled_cairo_boilerplate_cxx_sources)) > $@
+
+BUILT_SOURCES += cairo-boilerplate-constructors.c
+EXTRA_DIST += $(BUILT_SOURCES) make-cairo-boilerplate-constructors.sh
+CLEANFILES += $(BUILT_SOURCES)
+
+test: check
+
+if CROSS_COMPILING
+else
+TESTS += check-link$(EXEEXT)
+endif
+
+check_PROGRAMS += check-link
+check_link_LDADD = libcairoboilerplate.la
diff --git a/boilerplate/Makefile.sources b/boilerplate/Makefile.sources
new file mode 100755
index 000000000..e0fdb4e99
--- /dev/null
+++ b/boilerplate/Makefile.sources
@@ -0,0 +1,43 @@
+# Makefile.sources
+#
+# This file is pretty similar to $(top_srcdir)/src/Makefile.sources,
+# but for boilerplate. Unlike that file, there are no special headers.
+#
+
+cairo_boilerplate_headers = \
+ cairo-boilerplate-getopt.h \
+ cairo-boilerplate-scaled-font.h \
+ cairo-boilerplate-system.h \
+ cairo-boilerplate.h \
+ $(NULL)
+cairo_boilerplate_sources = \
+ cairo-boilerplate-getopt.c \
+ cairo-boilerplate-system.c \
+ cairo-boilerplate.c \
+ $(NULL)
+cairo_boilerplate_private = \
+ cairo-boilerplate-private.h \
+ $(NULL)
+
+cairo_boilerplate_beos_cxx_sources = cairo-boilerplate-beos.cpp
+cairo_boilerplate_directfb_sources = cairo-boilerplate-directfb.c
+cairo_boilerplate_drm_sources = cairo-boilerplate-drm.c
+cairo_boilerplate_glx_sources = cairo-boilerplate-glx.c
+cairo_boilerplate_wgl_sources = cairo-boilerplate-wgl.c
+cairo_boilerplate_egl_sources = cairo-boilerplate-egl.c
+cairo_boilerplate_evasgl_sources = cairo-boilerplate-evas-gl.c
+cairo_boilerplate_pdf_sources = cairo-boilerplate-pdf.c
+cairo_boilerplate_ps_sources = cairo-boilerplate-ps.c
+cairo_boilerplate_qt_cxx_sources = cairo-boilerplate-qt.cpp
+cairo_boilerplate_quartz_sources = cairo-boilerplate-quartz.c
+cairo_boilerplate_script_sources = cairo-boilerplate-script.c
+cairo_boilerplate_skia_sources = cairo-boilerplate-skia.c
+cairo_boilerplate_svg_sources = cairo-boilerplate-svg.c
+cairo_boilerplate_test_surfaces_sources = cairo-boilerplate-test-surfaces.c
+cairo_boilerplate_win32_sources = cairo-boilerplate-win32.c cairo-boilerplate-win32-printing.c
+cairo_boilerplate_xcb_sources = cairo-boilerplate-xcb.c
+cairo_boilerplate_xlib_headers = cairo-boilerplate-xlib.h
+cairo_boilerplate_xlib_sources = cairo-boilerplate-xlib.c
+cairo_boilerplate_vg_sources = cairo-boilerplate-vg.c
+cairo_boilerplate_cogl_sources = cairo-boilerplate-cogl.c
+cairo_boilerplate_tg_sources = cairo-boilerplate-tg.c
diff --git a/boilerplate/Makefile.win32 b/boilerplate/Makefile.win32
new file mode 100755
index 000000000..29df5cf79
--- /dev/null
+++ b/boilerplate/Makefile.win32
@@ -0,0 +1,24 @@
+top_srcdir = ..
+include $(top_srcdir)/build/Makefile.win32.common
+include Makefile.win32.features
+
+HEADERS = \
+ $(enabled_cairo_boilerplate_headers) \
+ $(enabled_cairo_boilerplate_private) \
+ $(NULL)
+
+SOURCES = \
+ $(enabled_cairo_boilerplate_sources) \
+ cairo-boilerplate-constructors.c \
+ $(NULL)
+
+OBJECTS = $(patsubst %.c, $(CFG)/%-static.obj, $(SOURCES))
+
+cairo-boilerplate-constructors.c: Makefile.sources Makefile.win32 $(enabled_cairo_boilerplate_sources) make-cairo-boilerplate-constructors.sh
+ sh ./make-cairo-boilerplate-constructors.sh $(enabled_cairo_boilerplate_sources) > $@
+
+all: $(CFG)/boiler.lib
+
+
+$(CFG)/boiler.lib: $(OBJECTS)
+ @$(AR) $(CAIRO_ARFLAGS) -OUT:$@ $(OBJECTS)
diff --git a/boilerplate/Makefile.win32.features b/boilerplate/Makefile.win32.features
new file mode 100755
index 000000000..8efe8562c
--- /dev/null
+++ b/boilerplate/Makefile.win32.features
@@ -0,0 +1,586 @@
+# Generated by configure. Do not edit.
+
+ifeq ($(top_srcdir),)
+include Makefile.sources
+else
+include $(top_srcdir)/boilerplate/Makefile.sources
+endif
+
+supported_cairo_boilerplate_headers = $(cairo_boilerplate_headers)
+unsupported_cairo_boilerplate_headers =
+all_cairo_boilerplate_headers = $(cairo_boilerplate_headers)
+all_cairo_boilerplate_private = $(cairo_boilerplate_private)
+all_cairo_boilerplate_cxx_sources = $(cairo_boilerplate_cxx_sources)
+all_cairo_boilerplate_sources = $(cairo_boilerplate_sources)
+
+enabled_cairo_boilerplate_headers = $(cairo_boilerplate_headers)
+enabled_cairo_boilerplate_private = $(cairo_boilerplate_private)
+enabled_cairo_boilerplate_cxx_sources = $(cairo_boilerplate_cxx_sources)
+enabled_cairo_boilerplate_sources = $(cairo_boilerplate_sources)
+
+
+all_cairo_boilerplate_private += $(cairo_boilerplate_tls_private) $(cairo_boilerplate_tls_headers)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_tls_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_tls_sources)
+ifeq ($(CAIRO_HAS_TLS),1)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_tls_private) $(cairo_boilerplate_tls_headers)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_tls_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_tls_sources)
+endif
+
+all_cairo_boilerplate_private += $(cairo_boilerplate_pthread_setspecific_private) $(cairo_boilerplate_pthread_setspecific_headers)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_pthread_setspecific_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_pthread_setspecific_sources)
+ifeq ($(CAIRO_HAS_PTHREAD_SETSPECIFIC),1)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_pthread_setspecific_private) $(cairo_boilerplate_pthread_setspecific_headers)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_pthread_setspecific_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_pthread_setspecific_sources)
+endif
+
+supported_cairo_boilerplate_headers += $(cairo_boilerplate_xlib_headers)
+all_cairo_boilerplate_headers += $(cairo_boilerplate_xlib_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_xlib_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_xlib_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_xlib_sources)
+ifeq ($(CAIRO_HAS_XLIB_SURFACE),1)
+enabled_cairo_boilerplate_headers += $(cairo_boilerplate_xlib_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_xlib_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_xlib_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_xlib_sources)
+endif
+
+supported_cairo_boilerplate_headers += $(cairo_boilerplate_xlib_xrender_headers)
+all_cairo_boilerplate_headers += $(cairo_boilerplate_xlib_xrender_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_xlib_xrender_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_xlib_xrender_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_xlib_xrender_sources)
+ifeq ($(CAIRO_HAS_XLIB_XRENDER_SURFACE),1)
+enabled_cairo_boilerplate_headers += $(cairo_boilerplate_xlib_xrender_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_xlib_xrender_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_xlib_xrender_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_xlib_xrender_sources)
+endif
+
+supported_cairo_boilerplate_headers += $(cairo_boilerplate_xcb_headers)
+all_cairo_boilerplate_headers += $(cairo_boilerplate_xcb_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_xcb_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_xcb_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_xcb_sources)
+ifeq ($(CAIRO_HAS_XCB_SURFACE),1)
+enabled_cairo_boilerplate_headers += $(cairo_boilerplate_xcb_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_xcb_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_xcb_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_xcb_sources)
+endif
+
+unsupported_cairo_boilerplate_headers += $(cairo_boilerplate_xlib_xcb_headers)
+all_cairo_boilerplate_headers += $(cairo_boilerplate_xlib_xcb_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_xlib_xcb_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_xlib_xcb_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_xlib_xcb_sources)
+ifeq ($(CAIRO_HAS_XLIB_XCB_FUNCTIONS),1)
+enabled_cairo_boilerplate_headers += $(cairo_boilerplate_xlib_xcb_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_xlib_xcb_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_xlib_xcb_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_xlib_xcb_sources)
+endif
+
+supported_cairo_boilerplate_headers += $(cairo_boilerplate_xcb_shm_headers)
+all_cairo_boilerplate_headers += $(cairo_boilerplate_xcb_shm_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_xcb_shm_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_xcb_shm_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_xcb_shm_sources)
+ifeq ($(CAIRO_HAS_XCB_SHM_FUNCTIONS),1)
+enabled_cairo_boilerplate_headers += $(cairo_boilerplate_xcb_shm_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_xcb_shm_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_xcb_shm_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_xcb_shm_sources)
+endif
+
+unsupported_cairo_boilerplate_headers += $(cairo_boilerplate_qt_headers)
+all_cairo_boilerplate_headers += $(cairo_boilerplate_qt_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_qt_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_qt_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_qt_sources)
+ifeq ($(CAIRO_HAS_QT_SURFACE),1)
+enabled_cairo_boilerplate_headers += $(cairo_boilerplate_qt_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_qt_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_qt_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_qt_sources)
+endif
+
+supported_cairo_boilerplate_headers += $(cairo_boilerplate_quartz_headers)
+all_cairo_boilerplate_headers += $(cairo_boilerplate_quartz_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_quartz_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_quartz_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_quartz_sources)
+ifeq ($(CAIRO_HAS_QUARTZ_SURFACE),1)
+enabled_cairo_boilerplate_headers += $(cairo_boilerplate_quartz_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_quartz_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_quartz_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_quartz_sources)
+endif
+
+supported_cairo_boilerplate_headers += $(cairo_boilerplate_quartz_font_headers)
+all_cairo_boilerplate_headers += $(cairo_boilerplate_quartz_font_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_quartz_font_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_quartz_font_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_quartz_font_sources)
+ifeq ($(CAIRO_HAS_QUARTZ_FONT),1)
+enabled_cairo_boilerplate_headers += $(cairo_boilerplate_quartz_font_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_quartz_font_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_quartz_font_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_quartz_font_sources)
+endif
+
+unsupported_cairo_boilerplate_headers += $(cairo_boilerplate_quartz_image_headers)
+all_cairo_boilerplate_headers += $(cairo_boilerplate_quartz_image_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_quartz_image_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_quartz_image_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_quartz_image_sources)
+ifeq ($(CAIRO_HAS_QUARTZ_IMAGE_SURFACE),1)
+enabled_cairo_boilerplate_headers += $(cairo_boilerplate_quartz_image_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_quartz_image_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_quartz_image_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_quartz_image_sources)
+endif
+
+supported_cairo_boilerplate_headers += $(cairo_boilerplate_win32_headers)
+all_cairo_boilerplate_headers += $(cairo_boilerplate_win32_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_win32_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_win32_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_win32_sources)
+ifeq ($(CAIRO_HAS_WIN32_SURFACE),1)
+enabled_cairo_boilerplate_headers += $(cairo_boilerplate_win32_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_win32_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_win32_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_win32_sources)
+endif
+
+supported_cairo_boilerplate_headers += $(cairo_boilerplate_win32_font_headers)
+all_cairo_boilerplate_headers += $(cairo_boilerplate_win32_font_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_win32_font_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_win32_font_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_win32_font_sources)
+ifeq ($(CAIRO_HAS_WIN32_FONT),1)
+enabled_cairo_boilerplate_headers += $(cairo_boilerplate_win32_font_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_win32_font_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_win32_font_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_win32_font_sources)
+endif
+
+unsupported_cairo_boilerplate_headers += $(cairo_boilerplate_skia_headers)
+all_cairo_boilerplate_headers += $(cairo_boilerplate_skia_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_skia_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_skia_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_skia_sources)
+ifeq ($(CAIRO_HAS_SKIA_SURFACE),1)
+enabled_cairo_boilerplate_headers += $(cairo_boilerplate_skia_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_skia_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_skia_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_skia_sources)
+endif
+
+unsupported_cairo_boilerplate_headers += $(cairo_boilerplate_os2_headers)
+all_cairo_boilerplate_headers += $(cairo_boilerplate_os2_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_os2_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_os2_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_os2_sources)
+ifeq ($(CAIRO_HAS_OS2_SURFACE),1)
+enabled_cairo_boilerplate_headers += $(cairo_boilerplate_os2_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_os2_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_os2_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_os2_sources)
+endif
+
+unsupported_cairo_boilerplate_headers += $(cairo_boilerplate_beos_headers)
+all_cairo_boilerplate_headers += $(cairo_boilerplate_beos_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_beos_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_beos_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_beos_sources)
+ifeq ($(CAIRO_HAS_BEOS_SURFACE),1)
+enabled_cairo_boilerplate_headers += $(cairo_boilerplate_beos_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_beos_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_beos_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_beos_sources)
+endif
+
+unsupported_cairo_boilerplate_headers += $(cairo_boilerplate_drm_headers)
+all_cairo_boilerplate_headers += $(cairo_boilerplate_drm_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_drm_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_drm_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_drm_sources)
+ifeq ($(CAIRO_HAS_DRM_SURFACE),1)
+enabled_cairo_boilerplate_headers += $(cairo_boilerplate_drm_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_drm_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_drm_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_drm_sources)
+endif
+
+unsupported_cairo_boilerplate_headers += $(cairo_boilerplate_gallium_headers)
+all_cairo_boilerplate_headers += $(cairo_boilerplate_gallium_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_gallium_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_gallium_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_gallium_sources)
+ifeq ($(CAIRO_HAS_GALLIUM_SURFACE),1)
+enabled_cairo_boilerplate_headers += $(cairo_boilerplate_gallium_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_gallium_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_gallium_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_gallium_sources)
+endif
+
+supported_cairo_boilerplate_headers += $(cairo_boilerplate_png_headers)
+all_cairo_boilerplate_headers += $(cairo_boilerplate_png_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_png_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_png_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_png_sources)
+ifeq ($(CAIRO_HAS_PNG_FUNCTIONS),1)
+enabled_cairo_boilerplate_headers += $(cairo_boilerplate_png_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_png_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_png_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_png_sources)
+endif
+
+unsupported_cairo_boilerplate_headers += $(cairo_boilerplate_gl_headers)
+all_cairo_boilerplate_headers += $(cairo_boilerplate_gl_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_gl_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_gl_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_gl_sources)
+ifeq ($(CAIRO_HAS_GL_SURFACE),1)
+enabled_cairo_boilerplate_headers += $(cairo_boilerplate_gl_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_gl_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_gl_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_gl_sources)
+endif
+
+unsupported_cairo_boilerplate_headers += $(cairo_boilerplate_evasgl_headers)
+all_cairo_boilerplate_headers += $(cairo_boilerplate_evasgl_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_evasgl_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_evasgl_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_evasgl_sources)
+ifeq ($(CAIRO_HAS_EVASGL_SURFACE),1)
+enabled_cairo_boilerplate_headers += $(cairo_boilerplate_evasgl_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_evasgl_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_evasgl_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_evasgl_sources)
+endif
+
+unsupported_cairo_boilerplate_headers += $(cairo_boilerplate_glesv2_headers)
+all_cairo_boilerplate_headers += $(cairo_boilerplate_glesv2_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_glesv2_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_glesv2_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_glesv2_sources)
+ifeq ($(CAIRO_HAS_GLESV2_SURFACE),1)
+enabled_cairo_boilerplate_headers += $(cairo_boilerplate_glesv2_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_glesv2_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_glesv2_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_glesv2_sources)
+endif
+
+unsupported_cairo_boilerplate_headers += $(cairo_boilerplate_glesv3_headers)
+all_cairo_boilerplate_headers += $(cairo_boilerplate_glesv3_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_glesv3_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_glesv3_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_glesv3_sources)
+ifeq ($(CAIRO_HAS_GLESV3_SURFACE),1)
+enabled_cairo_boilerplate_headers += $(cairo_boilerplate_glesv3_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_glesv3_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_glesv3_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_glesv3_sources)
+endif
+
+unsupported_cairo_boilerplate_headers += $(cairo_boilerplate_cogl_headers)
+all_cairo_boilerplate_headers += $(cairo_boilerplate_cogl_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_cogl_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_cogl_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_cogl_sources)
+ifeq ($(CAIRO_HAS_COGL_SURFACE),1)
+enabled_cairo_boilerplate_headers += $(cairo_boilerplate_cogl_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_cogl_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_cogl_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_cogl_sources)
+endif
+
+unsupported_cairo_boilerplate_headers += $(cairo_boilerplate_directfb_headers)
+all_cairo_boilerplate_headers += $(cairo_boilerplate_directfb_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_directfb_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_directfb_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_directfb_sources)
+ifeq ($(CAIRO_HAS_DIRECTFB_SURFACE),1)
+enabled_cairo_boilerplate_headers += $(cairo_boilerplate_directfb_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_directfb_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_directfb_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_directfb_sources)
+endif
+
+unsupported_cairo_boilerplate_headers += $(cairo_boilerplate_tg_headers)
+all_cairo_boilerplate_headers += $(cairo_boilerplate_tg_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_tg_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_tg_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_tg_sources)
+ifeq ($(CAIRO_HAS_TG_SURFACE),1)
+enabled_cairo_boilerplate_headers += $(cairo_boilerplate_tg_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_tg_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_tg_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_tg_sources)
+endif
+
+unsupported_cairo_boilerplate_headers += $(cairo_boilerplate_vg_headers)
+all_cairo_boilerplate_headers += $(cairo_boilerplate_vg_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_vg_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_vg_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_vg_sources)
+ifeq ($(CAIRO_HAS_VG_SURFACE),1)
+enabled_cairo_boilerplate_headers += $(cairo_boilerplate_vg_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_vg_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_vg_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_vg_sources)
+endif
+
+supported_cairo_boilerplate_headers += $(cairo_boilerplate_egl_headers)
+all_cairo_boilerplate_headers += $(cairo_boilerplate_egl_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_egl_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_egl_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_egl_sources)
+ifeq ($(CAIRO_HAS_EGL_FUNCTIONS),1)
+enabled_cairo_boilerplate_headers += $(cairo_boilerplate_egl_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_egl_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_egl_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_egl_sources)
+endif
+
+supported_cairo_boilerplate_headers += $(cairo_boilerplate_glx_headers)
+all_cairo_boilerplate_headers += $(cairo_boilerplate_glx_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_glx_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_glx_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_glx_sources)
+ifeq ($(CAIRO_HAS_GLX_FUNCTIONS),1)
+enabled_cairo_boilerplate_headers += $(cairo_boilerplate_glx_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_glx_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_glx_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_glx_sources)
+endif
+
+supported_cairo_boilerplate_headers += $(cairo_boilerplate_wgl_headers)
+all_cairo_boilerplate_headers += $(cairo_boilerplate_wgl_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_wgl_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_wgl_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_wgl_sources)
+ifeq ($(CAIRO_HAS_WGL_FUNCTIONS),1)
+enabled_cairo_boilerplate_headers += $(cairo_boilerplate_wgl_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_wgl_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_wgl_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_wgl_sources)
+endif
+
+supported_cairo_boilerplate_headers += $(cairo_boilerplate_script_headers)
+all_cairo_boilerplate_headers += $(cairo_boilerplate_script_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_script_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_script_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_script_sources)
+ifeq ($(CAIRO_HAS_SCRIPT_SURFACE),1)
+enabled_cairo_boilerplate_headers += $(cairo_boilerplate_script_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_script_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_script_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_script_sources)
+endif
+
+supported_cairo_boilerplate_headers += $(cairo_boilerplate_ft_headers)
+all_cairo_boilerplate_headers += $(cairo_boilerplate_ft_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_ft_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_ft_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_ft_sources)
+ifeq ($(CAIRO_HAS_FT_FONT),1)
+enabled_cairo_boilerplate_headers += $(cairo_boilerplate_ft_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_ft_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_ft_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_ft_sources)
+endif
+
+supported_cairo_boilerplate_headers += $(cairo_boilerplate_fc_headers)
+all_cairo_boilerplate_headers += $(cairo_boilerplate_fc_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_fc_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_fc_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_fc_sources)
+ifeq ($(CAIRO_HAS_FC_FONT),1)
+enabled_cairo_boilerplate_headers += $(cairo_boilerplate_fc_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_fc_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_fc_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_fc_sources)
+endif
+
+supported_cairo_boilerplate_headers += $(cairo_boilerplate_ps_headers)
+all_cairo_boilerplate_headers += $(cairo_boilerplate_ps_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_ps_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_ps_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_ps_sources)
+ifeq ($(CAIRO_HAS_PS_SURFACE),1)
+enabled_cairo_boilerplate_headers += $(cairo_boilerplate_ps_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_ps_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_ps_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_ps_sources)
+endif
+
+supported_cairo_boilerplate_headers += $(cairo_boilerplate_pdf_headers)
+all_cairo_boilerplate_headers += $(cairo_boilerplate_pdf_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_pdf_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_pdf_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_pdf_sources)
+ifeq ($(CAIRO_HAS_PDF_SURFACE),1)
+enabled_cairo_boilerplate_headers += $(cairo_boilerplate_pdf_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_pdf_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_pdf_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_pdf_sources)
+endif
+
+supported_cairo_boilerplate_headers += $(cairo_boilerplate_svg_headers)
+all_cairo_boilerplate_headers += $(cairo_boilerplate_svg_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_svg_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_svg_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_svg_sources)
+ifeq ($(CAIRO_HAS_SVG_SURFACE),1)
+enabled_cairo_boilerplate_headers += $(cairo_boilerplate_svg_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_svg_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_svg_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_svg_sources)
+endif
+
+all_cairo_boilerplate_private += $(cairo_boilerplate_test_surfaces_private) $(cairo_boilerplate_test_surfaces_headers)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_test_surfaces_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_test_surfaces_sources)
+ifeq ($(CAIRO_HAS_TEST_SURFACES),1)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_test_surfaces_private) $(cairo_boilerplate_test_surfaces_headers)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_test_surfaces_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_test_surfaces_sources)
+endif
+
+supported_cairo_boilerplate_headers += $(cairo_boilerplate_image_headers)
+all_cairo_boilerplate_headers += $(cairo_boilerplate_image_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_image_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_image_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_image_sources)
+enabled_cairo_boilerplate_headers += $(cairo_boilerplate_image_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_image_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_image_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_image_sources)
+
+supported_cairo_boilerplate_headers += $(cairo_boilerplate_mime_headers)
+all_cairo_boilerplate_headers += $(cairo_boilerplate_mime_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_mime_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_mime_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_mime_sources)
+enabled_cairo_boilerplate_headers += $(cairo_boilerplate_mime_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_mime_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_mime_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_mime_sources)
+
+supported_cairo_boilerplate_headers += $(cairo_boilerplate_recording_headers)
+all_cairo_boilerplate_headers += $(cairo_boilerplate_recording_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_recording_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_recording_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_recording_sources)
+enabled_cairo_boilerplate_headers += $(cairo_boilerplate_recording_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_recording_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_recording_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_recording_sources)
+
+supported_cairo_boilerplate_headers += $(cairo_boilerplate_observer_headers)
+all_cairo_boilerplate_headers += $(cairo_boilerplate_observer_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_observer_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_observer_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_observer_sources)
+enabled_cairo_boilerplate_headers += $(cairo_boilerplate_observer_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_observer_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_observer_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_observer_sources)
+
+unsupported_cairo_boilerplate_headers += $(cairo_boilerplate_tee_headers)
+all_cairo_boilerplate_headers += $(cairo_boilerplate_tee_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_tee_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_tee_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_tee_sources)
+ifeq ($(CAIRO_HAS_TEE_SURFACE),1)
+enabled_cairo_boilerplate_headers += $(cairo_boilerplate_tee_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_tee_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_tee_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_tee_sources)
+endif
+
+unsupported_cairo_boilerplate_headers += $(cairo_boilerplate_xml_headers)
+all_cairo_boilerplate_headers += $(cairo_boilerplate_xml_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_xml_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_xml_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_xml_sources)
+ifeq ($(CAIRO_HAS_XML_SURFACE),1)
+enabled_cairo_boilerplate_headers += $(cairo_boilerplate_xml_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_xml_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_xml_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_xml_sources)
+endif
+
+supported_cairo_boilerplate_headers += $(cairo_boilerplate_user_headers)
+all_cairo_boilerplate_headers += $(cairo_boilerplate_user_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_user_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_user_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_user_sources)
+enabled_cairo_boilerplate_headers += $(cairo_boilerplate_user_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_user_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_user_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_user_sources)
+
+all_cairo_boilerplate_private += $(cairo_boilerplate_openmp_private) $(cairo_boilerplate_openmp_headers)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_openmp_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_openmp_sources)
+ifeq ($(CAIRO_HAS_OPENMP),1)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_openmp_private) $(cairo_boilerplate_openmp_headers)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_openmp_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_openmp_sources)
+endif
+
+all_cairo_boilerplate_private += $(cairo_boilerplate_pthread_private) $(cairo_boilerplate_pthread_headers)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_pthread_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_pthread_sources)
+ifeq ($(CAIRO_HAS_PTHREAD),1)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_pthread_private) $(cairo_boilerplate_pthread_headers)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_pthread_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_pthread_sources)
+endif
+
+supported_cairo_boilerplate_headers += $(cairo_boilerplate_gobject_headers)
+all_cairo_boilerplate_headers += $(cairo_boilerplate_gobject_headers)
+all_cairo_boilerplate_private += $(cairo_boilerplate_gobject_private)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_gobject_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_gobject_sources)
+ifeq ($(CAIRO_HAS_GOBJECT_FUNCTIONS),1)
+enabled_cairo_boilerplate_headers += $(cairo_boilerplate_gobject_headers)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_gobject_private)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_gobject_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_gobject_sources)
+endif
+
+all_cairo_boilerplate_private += $(cairo_boilerplate_trace_private) $(cairo_boilerplate_trace_headers)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_trace_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_trace_sources)
+ifeq ($(CAIRO_HAS_TRACE),1)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_trace_private) $(cairo_boilerplate_trace_headers)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_trace_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_trace_sources)
+endif
+
+all_cairo_boilerplate_private += $(cairo_boilerplate_interpreter_private) $(cairo_boilerplate_interpreter_headers)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_interpreter_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_interpreter_sources)
+ifeq ($(CAIRO_HAS_INTERPRETER),1)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_interpreter_private) $(cairo_boilerplate_interpreter_headers)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_interpreter_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_interpreter_sources)
+endif
+
+all_cairo_boilerplate_private += $(cairo_boilerplate_symbol_lookup_private) $(cairo_boilerplate_symbol_lookup_headers)
+all_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_symbol_lookup_cxx_sources)
+all_cairo_boilerplate_sources += $(cairo_boilerplate_symbol_lookup_sources)
+ifeq ($(CAIRO_HAS_SYMBOL_LOOKUP),1)
+enabled_cairo_boilerplate_private += $(cairo_boilerplate_symbol_lookup_private) $(cairo_boilerplate_symbol_lookup_headers)
+enabled_cairo_boilerplate_cxx_sources += $(cairo_boilerplate_symbol_lookup_cxx_sources)
+enabled_cairo_boilerplate_sources += $(cairo_boilerplate_symbol_lookup_sources)
+endif
diff --git a/boilerplate/README b/boilerplate/README
new file mode 100755
index 000000000..2a27c415c
--- /dev/null
+++ b/boilerplate/README
@@ -0,0 +1,14 @@
+This directory provides code that is common to both of cairo's tests
+suites:
+
+ * The test suite for correctness in test/
+ * The test suite for performance in perf/
+
+We call it boilerplate as it consists primarily of the boilerplate
+code necessary for initializing a backend in order to create a surface
+for that backend.
+
+The code here just might be useful for someone looking to get started
+writing cairo code to use a particular backend, (but there are no
+promises that the boilerplate code found here for any particular
+backend is exemplary).
diff --git a/boilerplate/cairo-boilerplate-beos.cpp b/boilerplate/cairo-boilerplate-beos.cpp
new file mode 100755
index 000000000..8a1b1afb5
--- /dev/null
+++ b/boilerplate/cairo-boilerplate-beos.cpp
@@ -0,0 +1,273 @@
+/* vim:set ts=8 sw=4 noet cin: */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Mozilla Communicator client code.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by the Initial Developer are Copyright (C) 1998
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Takashi Toyoshima <toyoshim@be-in.org>
+ * Fredrik Holmqvist <thesuckiestemail@yahoo.se>
+ * Christian Biesinger <cbiesinger@web.de>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either of the GNU General Public License Version 2 or later (the "GPL"),
+ * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+#include "cairo-boilerplate.h"
+#include <cairo-beos.h>
+
+// Part of this code was originally part of
+// xpfe/bootstrap/nsNativeAppSupportBeOS.cpp in the Mozilla source code.
+
+#include <Application.h>
+#include <Window.h>
+#include <View.h>
+#include <Bitmap.h>
+
+class CairoTestWindow : public BWindow
+{
+public:
+ CairoTestWindow(BRect frame, const char* title);
+ virtual ~CairoTestWindow();
+ BView* View() const { return mView; }
+private:
+ BView* mView;
+};
+
+CairoTestWindow::CairoTestWindow(BRect frame, const char* title)
+ : BWindow(frame, title, B_TITLED_WINDOW,
+ B_NOT_RESIZABLE|B_NOT_ZOOMABLE)
+{
+ mView = new BView(frame, "CairoWindowTestView", B_FOLLOW_ALL_SIDES, 0);
+ AddChild(mView);
+ Show();
+
+ // Make sure the window is actually on screen
+ Lock();
+ Sync();
+ mView->SetViewColor(B_TRANSPARENT_COLOR);
+ mView->Sync();
+ Unlock();
+}
+
+CairoTestWindow::~CairoTestWindow()
+{
+ RemoveChild(mView);
+ delete mView;
+}
+
+
+class nsBeOSApp : public BApplication
+{
+public:
+ nsBeOSApp(sem_id sem) : BApplication(GetAppSig()), init(sem)
+ {}
+
+ void ReadyToRun()
+ {
+ release_sem(init);
+ }
+
+ static int32 Main(void *args)
+ {
+ nsBeOSApp *app = new nsBeOSApp( (sem_id)args );
+ if(app == NULL)
+ return B_ERROR;
+ return app->Run();
+ }
+
+private:
+
+ const char *GetAppSig()
+ {
+ return "application/x-vnd.cairo-test-app";
+ }
+
+ sem_id init;
+}; //class nsBeOSApp
+
+class AppRunner
+{
+ public:
+ AppRunner();
+ ~AppRunner();
+};
+
+AppRunner::AppRunner()
+{
+ if (be_app)
+ return;
+
+ sem_id initsem = create_sem(0, "Cairo BApplication init");
+ if (initsem < B_OK) {
+ fprintf (stderr, "Error creating BeOS initialization semaphore\n");
+ return;
+ }
+
+ thread_id tid = spawn_thread(nsBeOSApp::Main, "Cairo/BeOS test", B_NORMAL_PRIORITY, (void *)initsem);
+ if (tid < B_OK || B_OK != resume_thread(tid)) {
+ fprintf (stderr, "Error spawning thread\n");
+ return;
+ }
+
+ if (B_OK != acquire_sem(initsem)) {
+ fprintf (stderr, "Error acquiring semaphore\n");
+ return;
+ }
+
+ delete_sem(initsem);
+ return;
+}
+
+AppRunner::~AppRunner()
+{
+ if (be_app) {
+ if (be_app->Lock())
+ be_app->Quit();
+ delete be_app;
+ be_app = NULL;
+ }
+}
+
+// Make sure that the BApplication is initialized
+static AppRunner sAppRunner;
+
+struct beos_boilerplate_closure {
+ BView* view;
+ BBitmap* bitmap;
+ BWindow* window;
+};
+
+// Test a real window
+static cairo_surface_t *
+_cairo_boilerplate_beos_create_surface (const char *name,
+ cairo_content_t content,
+ double width,
+ double height,
+ cairo_boilerplate_mode_t mode,
+ void **closure)
+{
+ float right = width ? width - 1 : 0;
+ float bottom = height ? height - 1 : 0;
+ BRect rect(0.0, 0.0, right, bottom);
+ CairoTestWindow* wnd = new CairoTestWindow(rect, name);
+
+ beos_boilerplate_closure* bclosure = new beos_boilerplate_closure;
+ bclosure->view = wnd->View();
+ bclosure->bitmap = NULL;
+ bclosure->window = wnd;
+
+ *closure = bclosure;
+
+ return cairo_beos_surface_create(wnd->View());
+}
+
+static void
+_cairo_boilerplate_beos_cleanup (void *closure)
+{
+ beos_boilerplate_closure* bclosure = reinterpret_cast<beos_boilerplate_closure*>(closure);
+
+ bclosure->window->Lock();
+ bclosure->window->Quit();
+
+ delete bclosure;
+}
+
+// Test a bitmap
+static cairo_surface_t *
+_cairo_boilerplate_beos_create_surface_for_bitmap (const char *name,
+ cairo_content_t content,
+ double width,
+ double height,
+ cairo_boilerplate_mode_t mode,
+ void **closure)
+{
+ BRect rect(0.0, 0.0, width - 1, height - 1);
+ color_space beosformat = (content == CAIRO_CONTENT_COLOR_ALPHA) ? B_RGBA32
+ : B_RGB32;
+ BBitmap* bmp = new BBitmap(rect, beosformat, true);
+ BView* view = new BView(rect, "Cairo test view", B_FOLLOW_ALL_SIDES, 0);
+ bmp->AddChild(view);
+
+ beos_boilerplate_closure* bclosure = new beos_boilerplate_closure;
+ bclosure->view = view;
+ bclosure->bitmap = bmp;
+ bclosure->window = NULL;
+ *closure = bclosure;
+
+ return cairo_beos_surface_create_for_bitmap(view, bmp);
+}
+
+static void
+_cairo_boilerplate_beos_cleanup_bitmap (void *closure)
+{
+ beos_boilerplate_closure* bclosure = reinterpret_cast<beos_boilerplate_closure*>(closure);
+
+ bclosure->bitmap->RemoveChild(bclosure->view);
+
+
+ delete bclosure->view;
+ delete bclosure->bitmap;
+
+ delete bclosure;
+}
+
+static const cairo_boilerplate_target_t targets[] = {
+ /* BeOS sometimes produces a slightly different image. Perhaps this
+ * is related to the fact that it doesn't use premultiplied alpha...
+ * Just ignore the small difference. */
+ {
+ "beos", "beos", NULL, NULL,
+ CAIRO_SURFACE_TYPE_BEOS, CAIRO_CONTENT_COLOR, 1,
+ _cairo_boilerplate_beos_create_surface,
+ NULL, NULL,
+ _cairo_boilerplate_get_image_surface,
+ cairo_surface_write_to_png,
+ _cairo_boilerplate_beos_cleanup
+ },
+ {
+ "beos-bitmap", "beos", NULL, NULL,
+ CAIRO_SURFACE_TYPE_BEOS, CAIRO_CONTENT_COLOR, 1,
+ _cairo_boilerplate_beos_create_surface_for_bitmap,
+ NULL, NULL,
+ _cairo_boilerplate_get_image_surface,
+ cairo_surface_write_to_png,
+ _cairo_boilerplate_beos_cleanup_bitmap
+ },
+ {
+ "beos-bitmap", "beos", NULL, NULL,
+ CAIRO_SURFACE_TYPE_BEOS, CAIRO_CONTENT_COLOR_ALPHA, 1,
+ _cairo_boilerplate_beos_create_surface_for_bitmap,
+ NULL, NULL,
+ _cairo_boilerplate_get_image_surface,
+ cairo_surface_write_to_png,
+ _cairo_boilerplate_beos_cleanup_bitmap
+ },
+};
+CAIRO_BOILERPLATE (beos, targets)
+
diff --git a/boilerplate/cairo-boilerplate-cogl.c b/boilerplate/cairo-boilerplate-cogl.c
new file mode 100755
index 000000000..e39ad333d
--- /dev/null
+++ b/boilerplate/cairo-boilerplate-cogl.c
@@ -0,0 +1,206 @@
+/* Cairo - a vector graphics library with display and print output
+ *
+ * Copyright © 2009 Chris Wilson
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it either under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation
+ * (the "LGPL") or, at your option, under the terms of the Mozilla
+ * Public License Version 1.1 (the "MPL"). If you do not alter this
+ * notice, a recipient may use your version of this file under either
+ * the MPL or the LGPL.
+ *
+ * You should have received a copy of the LGPL along with this library
+ * in the file COPYING-LGPL-2.1; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
+ * You should have received a copy of the MPL along with this library
+ * in the file COPYING-MPL-1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.1 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
+ * OF ANY KIND, either express or implied. See the LGPL or the MPL for
+ * the specific language governing rights and limitations.
+ *
+ * The Original Code is the cairo graphics library.
+ *
+ * The Initial Developer of the Original Code is Chris Wilson.
+ */
+
+#include "cairo-boilerplate-private.h"
+
+#include <cairo-cogl.h>
+#include <cogl/cogl2-experimental.h>
+
+typedef struct _cogl_closure {
+ cairo_device_t *device;
+ CoglFramebuffer *fb;
+ cairo_surface_t *surface;
+} cogl_closure_t;
+
+static const cairo_user_data_key_t cogl_closure_key;
+
+static CoglContext *context = NULL;
+
+static void
+_cairo_boilerplate_cogl_cleanup (void *abstract_closure)
+{
+ cogl_closure_t *closure = abstract_closure;
+
+ cogl_object_unref (closure->fb);
+
+ cairo_device_finish (closure->device);
+ cairo_device_destroy (closure->device);
+
+ free (closure);
+}
+
+static cairo_surface_t *
+_cairo_boilerplate_cogl_create_offscreen_color_surface (const char *name,
+ cairo_content_t content,
+ double width,
+ double height,
+ double max_width,
+ double max_height,
+ cairo_boilerplate_mode_t mode,
+ void **abstract_closure)
+{
+ cairo_device_t *device;
+ CoglTexture *tex;
+ CoglHandle offscreen;
+ CoglFramebuffer *fb;
+ cogl_closure_t *closure;
+ cairo_status_t status;
+
+ if (!context)
+ context = cogl_context_new (NULL, NULL);
+
+ device = cairo_cogl_device_create (context);
+ tex = cogl_texture_new_with_size (width, height,
+ COGL_TEXTURE_NO_SLICING,
+ COGL_PIXEL_FORMAT_BGRA_8888_PRE);
+ offscreen = cogl_offscreen_new_to_texture (tex);
+ fb = COGL_FRAMEBUFFER (offscreen);
+
+ cogl_framebuffer_allocate (fb, NULL);
+ cogl_push_framebuffer (fb);
+ cogl_ortho (0, cogl_framebuffer_get_width (fb),
+ cogl_framebuffer_get_height (fb), 0,
+ -1, 100);
+ cogl_pop_framebuffer ();
+
+ closure = malloc (sizeof (cogl_closure_t));
+ *abstract_closure = closure;
+ closure->device = device;
+ closure->fb = fb;
+ closure->surface = cairo_cogl_surface_create (device, fb);
+
+ status = cairo_surface_set_user_data (closure->surface,
+ &cogl_closure_key, closure, NULL);
+ if (status == CAIRO_STATUS_SUCCESS)
+ return closure->surface;
+
+ _cairo_boilerplate_cogl_cleanup (closure);
+ return cairo_boilerplate_surface_create_in_error (status);
+}
+
+static cairo_surface_t *
+_cairo_boilerplate_cogl_create_onscreen_color_surface (const char *name,
+ cairo_content_t content,
+ double width,
+ double height,
+ double max_width,
+ double max_height,
+ cairo_boilerplate_mode_t mode,
+ void **abstract_closure)
+{
+ cairo_device_t *device;
+ CoglOnscreen *onscreen;
+ CoglFramebuffer *fb;
+ cogl_closure_t *closure;
+ cairo_status_t status;
+
+ if (!context)
+ context = cogl_context_new (NULL, NULL);
+
+ device = cairo_cogl_device_create (context);
+ onscreen = cogl_onscreen_new (context, width, height);
+ fb = COGL_FRAMEBUFFER (onscreen);
+
+ cogl_onscreen_show (onscreen);
+
+ cogl_push_framebuffer (fb);
+ cogl_ortho (0, cogl_framebuffer_get_width (fb),
+ cogl_framebuffer_get_height (fb), 0,
+ -1, 100);
+ cogl_pop_framebuffer ();
+
+ closure = malloc (sizeof (cogl_closure_t));
+ *abstract_closure = closure;
+ closure->device = device;
+ closure->fb = fb;
+ closure->surface = cairo_cogl_surface_create (device, fb);
+
+ status = cairo_surface_set_user_data (closure->surface,
+ &cogl_closure_key, closure, NULL);
+ if (status == CAIRO_STATUS_SUCCESS)
+ return closure->surface;
+
+ _cairo_boilerplate_cogl_cleanup (closure);
+ return cairo_boilerplate_surface_create_in_error (status);
+}
+
+static cairo_status_t
+_cairo_boilerplate_cogl_finish_onscreen (cairo_surface_t *surface)
+{
+ cogl_closure_t *closure = cairo_surface_get_user_data (surface, &cogl_closure_key);
+
+ cairo_cogl_surface_end_frame (surface);
+
+ cogl_framebuffer_swap_buffers (closure->fb);
+
+ return CAIRO_STATUS_SUCCESS;
+}
+
+static void
+_cairo_boilerplate_cogl_synchronize (void *abstract_closure)
+{
+ cogl_closure_t *closure = abstract_closure;
+ cogl_framebuffer_finish (closure->fb);
+}
+
+static const cairo_boilerplate_target_t targets[] = {
+ {
+ "cogl-offscreen-color", "cogl", NULL, NULL,
+ CAIRO_SURFACE_TYPE_COGL, CAIRO_CONTENT_COLOR_ALPHA, 1,
+ "cairo_cogl_device_create",
+ _cairo_boilerplate_cogl_create_offscreen_color_surface,
+ cairo_surface_create_similar,
+ NULL, NULL,
+ _cairo_boilerplate_get_image_surface,
+ cairo_surface_write_to_png,
+ _cairo_boilerplate_cogl_cleanup,
+ _cairo_boilerplate_cogl_synchronize,
+ NULL,
+ TRUE, FALSE, FALSE
+ },
+ {
+ "cogl-onscreen-color", "cogl", NULL, NULL,
+ CAIRO_SURFACE_TYPE_COGL, CAIRO_CONTENT_COLOR_ALPHA, 1,
+ "cairo_cogl_device_create",
+ _cairo_boilerplate_cogl_create_onscreen_color_surface,
+ cairo_surface_create_similar,
+ NULL,
+ _cairo_boilerplate_cogl_finish_onscreen,
+ _cairo_boilerplate_get_image_surface,
+ cairo_surface_write_to_png,
+ _cairo_boilerplate_cogl_cleanup,
+ _cairo_boilerplate_cogl_synchronize,
+ NULL,
+ TRUE, FALSE, FALSE
+ }
+};
+CAIRO_BOILERPLATE (cogl, targets)
diff --git a/boilerplate/cairo-boilerplate-directfb.c b/boilerplate/cairo-boilerplate-directfb.c
new file mode 100755
index 000000000..a479011d9
--- /dev/null
+++ b/boilerplate/cairo-boilerplate-directfb.c
@@ -0,0 +1,235 @@
+/*
+Test were run with the following script
+target can be directfb_bitmap or directfb
+
+export CAIRO_TEST_TARGET=directfb_bitmap
+export DFBARGS=quiet,no-banner,no-debug,log-file=dfblog,system=x11
+cd cairo/test
+make check
+
+*/
+
+#include "cairo-boilerplate-private.h"
+
+#include <cairo-directfb.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <direct/debug.h>
+
+D_DEBUG_DOMAIN (CairoDFB_Boiler, "CairoDFB/Boiler", "Cairo DirectFB Boilerplate");
+
+/* macro for a safe call to DirectFB functions */
+#define DFBCHECK(x...) do{ \
+ err = x; \
+ if (err != DFB_OK) { \
+ fprintf (stderr, "%s <%d>:\n\t", __FILE__, __LINE__); \
+ goto ERROR; \
+ } \
+} while (0)
+
+typedef struct _DFBInfo {
+ IDirectFB *dfb;
+ IDirectFBDisplayLayer *layer;
+ IDirectFBWindow *window;
+ IDirectFBSurface *surface;
+} DFBInfo;
+
+static void
+_cairo_boilerplate_directfb_cleanup (void *closure)
+{
+ DFBInfo *info = (DFBInfo *) closure;
+
+ if (info->surface)
+ info->surface->Release (info->surface);
+
+ if (info->window)
+ info->window->Release (info->window);
+
+ if (info->layer)
+ info->layer->Release (info->layer);
+
+ if (info->dfb)
+ info->dfb->Release (info->dfb);
+
+ free (info);
+}
+
+static DFBInfo *
+init (void)
+{
+ DFBDisplayLayerConfig layer_config;
+ DFBGraphicsDeviceDescription desc;
+ int err;
+ DFBInfo *info;
+
+ info = xcalloc (1, sizeof (DFBInfo));
+ if (info == NULL)
+ return NULL;
+
+ DFBCHECK (DirectFBInit (NULL, NULL));
+ DFBCHECK (DirectFBCreate (&info->dfb));
+ info->dfb->GetDeviceDescription (info->dfb, &desc);
+
+ DFBCHECK (info->dfb->GetDisplayLayer (info->dfb,
+ DLID_PRIMARY, &info->layer));
+ info->layer->SetCooperativeLevel (info->layer, DLSCL_ADMINISTRATIVE);
+
+ if ((desc.blitting_flags & (DSBLIT_BLEND_ALPHACHANNEL |
+ DSBLIT_BLEND_COLORALPHA)) !=
+ (DSBLIT_BLEND_ALPHACHANNEL | DSBLIT_BLEND_COLORALPHA))
+ {
+ layer_config.flags = DLCONF_BUFFERMODE;
+ layer_config.buffermode = DLBM_BACKSYSTEM;
+ info->layer->SetConfiguration (info->layer, &layer_config);
+ }
+
+ return info;
+
+ERROR:
+ if (info != NULL)
+ _cairo_boilerplate_directfb_cleanup (info);
+ return NULL;
+}
+
+static cairo_surface_t *
+_cairo_boilerplate_directfb_window_create_surface (DFBInfo *info,
+ cairo_content_t content,
+ int width,
+ int height)
+{
+ DFBWindowDescription desc;
+ int err;
+
+ D_DEBUG_AT (CairoDFB_Boiler, "%s (%p, %s, %dx%d)\n", __FUNCTION__, info,
+ content == CAIRO_CONTENT_ALPHA ? "ALPHA" :
+ content == CAIRO_CONTENT_COLOR ? "RGB" :
+ content == CAIRO_CONTENT_COLOR_ALPHA ? "ARGB" : "unknown content!",
+ width, height);
+
+ desc.flags = DWDESC_POSX | DWDESC_POSY |
+ DWDESC_WIDTH | DWDESC_HEIGHT;
+ desc.caps = DSCAPS_NONE;
+ desc.posx = 0;
+ desc.posy = 0;
+ desc.width = width;
+ desc.height = height;
+ if (content == CAIRO_CONTENT_COLOR_ALPHA) {
+ desc.flags |= DWDESC_CAPS | DWDESC_PIXELFORMAT;
+ desc.caps |= DWCAPS_DOUBLEBUFFER | DWCAPS_ALPHACHANNEL;
+ desc.pixelformat = DSPF_ARGB;
+ }
+
+ DFBCHECK (info->layer->CreateWindow (info->layer, &desc, &info->window));
+ info->window->SetOpacity (info->window, 0xFF);
+ info->window->GetSurface (info->window, &info->surface);
+ info->surface->SetColor (info->surface, 0xFF, 0xFF, 0xFF, 0xFF);
+ info->surface->FillRectangle (info->surface,0, 0, desc.width, desc.height);
+ info->surface->Flip (info->surface, NULL, 0);
+
+ return cairo_directfb_surface_create (info->dfb, info->surface);
+
+ERROR:
+ _cairo_boilerplate_directfb_cleanup (info);
+ return NULL;
+}
+
+static cairo_surface_t *
+_cairo_boilerplate_directfb_bitmap_create_surface (DFBInfo *info,
+ cairo_content_t content,
+ int width,
+ int height)
+{
+ int err;
+ DFBSurfaceDescription desc;
+
+ D_DEBUG_AT (CairoDFB_Boiler, "%s (%p, %s, %dx%d)\n", __FUNCTION__, info,
+ content == CAIRO_CONTENT_ALPHA ? "ALPHA" :
+ content == CAIRO_CONTENT_COLOR ? "RGB" :
+ content == CAIRO_CONTENT_COLOR_ALPHA ? "ARGB" : "unknown content!",
+ width, height);
+
+ desc.flags = DSDESC_WIDTH | DSDESC_HEIGHT;
+ desc.caps = DSCAPS_NONE;
+ desc.width = width;
+ desc.height = height;
+ if (content == CAIRO_CONTENT_COLOR_ALPHA) {
+ desc.flags |= DSDESC_PIXELFORMAT;
+ desc.pixelformat = DSPF_ARGB;
+ }
+ DFBCHECK (info->dfb->CreateSurface (info->dfb, &desc, &info->surface));
+
+ return cairo_directfb_surface_create (info->dfb, info->surface);
+
+ERROR:
+ _cairo_boilerplate_directfb_cleanup (info);
+ return NULL;
+}
+
+static cairo_surface_t *
+_cairo_boilerplate_directfb_create_surface (const char *name,
+ cairo_content_t content,
+ double width,
+ double height,
+ double max_width,
+ double max_height,
+ cairo_boilerplate_mode_t mode,
+ void **closure)
+{
+
+ DFBInfo *info;
+
+ info = init ();
+ if (info == NULL)
+ return NULL;
+
+ *closure = info;
+
+ D_DEBUG_AT (CairoDFB_Boiler, "%s ('%s', %s, %dx%d, %s)\n",
+ __FUNCTION__, name,
+ content == CAIRO_CONTENT_ALPHA ? "ALPHA" :
+ content == CAIRO_CONTENT_COLOR ? "RGB" :
+ content == CAIRO_CONTENT_COLOR_ALPHA ? "ARGB" : "unknown content!",
+ width, height,
+ mode == CAIRO_BOILERPLATE_MODE_TEST ? "TEST" :
+ mode == CAIRO_BOILERPLATE_MODE_PERF ? "PERF" : "unknown mode!");
+
+ if (width == 0)
+ width = 1;
+ if (height == 0)
+ height = 1;
+
+ if (mode == CAIRO_BOILERPLATE_MODE_TEST)
+ return _cairo_boilerplate_directfb_bitmap_create_surface (info, content, width, height);
+ else /* mode == CAIRO_BOILERPLATE_MODE_PERF */
+ return _cairo_boilerplate_directfb_window_create_surface (info, content, width, height);
+}
+
+static const cairo_boilerplate_target_t targets[] = {
+ {
+ "directfb", "directfb", NULL, NULL,
+ CAIRO_SURFACE_TYPE_DIRECTFB, CAIRO_CONTENT_COLOR, 0,
+ "cairo_directfb_surface_create",
+ _cairo_boilerplate_directfb_create_surface,
+ cairo_surface_create_similar,
+ NULL, NULL,
+ _cairo_boilerplate_get_image_surface,
+ cairo_surface_write_to_png,
+ _cairo_boilerplate_directfb_cleanup,
+ NULL, NULL, TRUE, FALSE, FALSE
+ },
+ {
+ "directfb-bitmap", "directfb", NULL, NULL,
+ CAIRO_SURFACE_TYPE_DIRECTFB, CAIRO_CONTENT_COLOR_ALPHA, 0,
+ "cairo_directfb_surface_create",
+ _cairo_boilerplate_directfb_create_surface,
+ cairo_surface_create_similar,
+ NULL, NULL,
+ _cairo_boilerplate_get_image_surface,
+ cairo_surface_write_to_png,
+ _cairo_boilerplate_directfb_cleanup,
+ NULL, NULL, FALSE, FALSE, FALSE
+ },
+};
+CAIRO_BOILERPLATE (directfb, targets);
diff --git a/boilerplate/cairo-boilerplate-drm.c b/boilerplate/cairo-boilerplate-drm.c
new file mode 100755
index 000000000..214ce50cd
--- /dev/null
+++ b/boilerplate/cairo-boilerplate-drm.c
@@ -0,0 +1,106 @@
+/* Cairo - a vector graphics library with display and print output
+ *
+ * Copyright © 2009 Chris Wilson
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it either under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation
+ * (the "LGPL") or, at your option, under the terms of the Mozilla
+ * Public License Version 1.1 (the "MPL"). If you do not alter this
+ * notice, a recipient may use your version of this file under either
+ * the MPL or the LGPL.
+ *
+ * You should have received a copy of the LGPL along with this library
+ * in the file COPYING-LGPL-2.1; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
+ * You should have received a copy of the MPL along with this library
+ * in the file COPYING-MPL-1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.1 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
+ * OF ANY KIND, either express or implied. See the LGPL or the MPL for
+ * the specific language governing rights and limitations.
+ *
+ * The Original Code is the cairo graphics library.
+ *
+ * The Initial Developer of the Original Code is Chris Wilson.
+ */
+
+#include "cairo-boilerplate-private.h"
+
+#include <cairo-drm.h>
+
+static cairo_surface_t *
+_cairo_boilerplate_drm_create_surface (const char *name,
+ cairo_content_t content,
+ double width,
+ double height,
+ double max_width,
+ double max_height,
+ cairo_boilerplate_mode_t mode,
+ void **closure)
+{
+ cairo_device_t *device;
+ cairo_format_t format;
+
+ device = cairo_drm_device_default ();
+ if (device == NULL)
+ return NULL; /* skip tests if no supported h/w found */
+
+ switch (content) {
+ case CAIRO_CONTENT_ALPHA: format = CAIRO_FORMAT_A8; break;
+ case CAIRO_CONTENT_COLOR: format = CAIRO_FORMAT_RGB24; break;
+ default:
+ case CAIRO_CONTENT_COLOR_ALPHA: format = CAIRO_FORMAT_ARGB32; break;
+ }
+
+ return *closure = cairo_drm_surface_create (device, format, width, height);
+}
+
+static void
+_cairo_boilerplate_drm_synchronize (void *closure)
+{
+ cairo_surface_t *image;
+
+ image = cairo_drm_surface_map_to_image (closure);
+ if (cairo_surface_status (image) == CAIRO_STATUS_SUCCESS)
+ cairo_drm_surface_unmap (closure, image);
+}
+
+static const cairo_boilerplate_target_t targets[] = {
+ /* Acceleration architectures may make the results differ by a
+ * bit, so we set the error tolerance to 1. */
+ {
+ "drm", "drm", NULL, NULL,
+ CAIRO_SURFACE_TYPE_DRM, CAIRO_CONTENT_COLOR_ALPHA, 1,
+ "cairo_drm_surface_create",
+ _cairo_boilerplate_drm_create_surface,
+ cairo_surface_create_similar,
+ NULL, NULL,
+ _cairo_boilerplate_get_image_surface,
+ cairo_surface_write_to_png,
+ NULL,
+ _cairo_boilerplate_drm_synchronize,
+ NULL,
+ TRUE, FALSE, FALSE
+ },
+ {
+ "drm", "drm", NULL, NULL,
+ CAIRO_SURFACE_TYPE_DRM, CAIRO_CONTENT_COLOR, 1,
+ "cairo_drm_surface_create",
+ _cairo_boilerplate_drm_create_surface,
+ cairo_surface_create_similar,
+ NULL, NULL,
+ _cairo_boilerplate_get_image_surface,
+ cairo_surface_write_to_png,
+ NULL,
+ _cairo_boilerplate_drm_synchronize,
+ NULL,
+ FALSE, FALSE, FALSE
+ },
+};
+CAIRO_BOILERPLATE (drm, targets)
diff --git a/boilerplate/cairo-boilerplate-egl.c b/boilerplate/cairo-boilerplate-egl.c
new file mode 100755
index 000000000..dd62ea8a0
--- /dev/null
+++ b/boilerplate/cairo-boilerplate-egl.c
@@ -0,0 +1,184 @@
+/* Cairo - a vector graphics library with display and print output
+ *
+ * Copyright © 2009 Chris Wilson
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it either under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation
+ * (the "LGPL") or, at your option, under the terms of the Mozilla
+ * Public License Version 1.1 (the "MPL"). If you do not alter this
+ * notice, a recipient may use your version of this file under either
+ * the MPL or the LGPL.
+ *
+ * You should have received a copy of the LGPL along with this library
+ * in the file COPYING-LGPL-2.1; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
+ * You should have received a copy of the MPL along with this library
+ * in the file COPYING-MPL-1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.1 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
+ * OF ANY KIND, either express or implied. See the LGPL or the MPL for
+ * the specific language governing rights and limitations.
+ *
+ * The Original Code is the cairo graphics library.
+ *
+ * The Initial Developer of the Original Code is Chris Wilson.
+ */
+
+#include "cairo-boilerplate-private.h"
+
+#if CAIRO_HAS_EVASGL_SURFACE && CAIRO_HAS_GLESV2_SURFACE
+extern void glFinish (void);
+#endif
+
+#include <cairo-gl.h>
+#if CAIRO_HAS_GL_SURFACE
+#include <GL/gl.h>
+#elif CAIRO_HAS_GLESV2_SURFACE
+#include <GLES2/gl2.h>
+#endif
+
+static const cairo_user_data_key_t gl_closure_key;
+
+typedef struct _egl_target_closure {
+ EGLDisplay dpy;
+ EGLContext ctx;
+
+ cairo_device_t *device;
+ cairo_surface_t *surface;
+} egl_target_closure_t;
+
+static void
+_cairo_boilerplate_egl_cleanup (void *closure)
+{
+ egl_target_closure_t *gltc = closure;
+
+ cairo_device_finish (gltc->device);
+ cairo_device_destroy (gltc->device);
+
+ eglDestroyContext (gltc->dpy, gltc->ctx);
+ eglMakeCurrent (gltc->dpy, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
+ eglTerminate (gltc->dpy);
+
+ free (gltc);
+}
+
+static cairo_surface_t *
+_cairo_boilerplate_egl_create_surface (const char *name,
+ cairo_content_t content,
+ double width,
+ double height,
+ double max_width,
+ double max_height,
+ cairo_boilerplate_mode_t mode,
+ void **closure)
+{
+ egl_target_closure_t *gltc;
+ cairo_surface_t *surface;
+ int major, minor;
+ EGLConfig config;
+ EGLint numConfigs;
+ EGLint config_attribs[] = {
+ EGL_RED_SIZE, 8,
+ EGL_GREEN_SIZE, 8,
+ EGL_BLUE_SIZE, 8,
+ EGL_ALPHA_SIZE, 8,
+ EGL_SURFACE_TYPE, EGL_PBUFFER_BIT,
+#if CAIRO_HAS_GL_SURFACE
+ EGL_RENDERABLE_TYPE, EGL_OPENGL_BIT,
+#elif CAIRO_HAS_GLESV2_SURFACE
+ EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
+#endif
+ EGL_SAMPLES, 4,
+ EGL_NONE
+ };
+ const EGLint ctx_attribs[] = {
+#if CAIRO_HAS_GLESV2_SURFACE
+ EGL_CONTEXT_CLIENT_VERSION, 2,
+#endif
+ EGL_NONE
+ };
+
+ gltc = xcalloc (1, sizeof (egl_target_closure_t));
+ *closure = gltc;
+
+ gltc->dpy = eglGetDisplay (EGL_DEFAULT_DISPLAY);
+
+ if (! eglInitialize (gltc->dpy, &major, &minor)) {
+ free (gltc);
+ return NULL;
+ }
+
+ eglChooseConfig (gltc->dpy, config_attribs, &config, 1, &numConfigs);
+ if (numConfigs == 0) {
+ free (gltc);
+ return NULL;
+ }
+
+#if CAIRO_HAS_GL_SURFACE
+ eglBindAPI (EGL_OPENGL_API);
+#elif CAIRO_HAS_GLESV2_SURFACE
+ eglBindAPI (EGL_OPENGL_ES_API);
+#endif
+
+ gltc->ctx = eglCreateContext (gltc->dpy, config, EGL_NO_CONTEXT,
+ ctx_attribs);
+ if (gltc->ctx == EGL_NO_CONTEXT) {
+ eglTerminate (gltc->dpy);
+ free (gltc);
+ return NULL;
+ }
+
+ gltc->device = cairo_egl_device_create (gltc->dpy, gltc->ctx);
+ cairo_gl_device_set_thread_aware (gltc->device, FALSE);
+
+ if (width < 1)
+ width = 1;
+ if (height < 1)
+ height = 1;
+
+ gltc->surface = surface = cairo_gl_surface_create (gltc->device,
+ content,
+ ceil (width),
+ ceil (height));
+ if (cairo_surface_status (surface))
+ _cairo_boilerplate_egl_cleanup (gltc);
+
+ return surface;
+}
+
+static void
+_cairo_boilerplate_egl_synchronize (void *closure)
+{
+ egl_target_closure_t *gltc = closure;
+
+ if (cairo_device_acquire (gltc->device))
+ return;
+
+ glFinish ();
+
+ cairo_device_release (gltc->device);
+}
+
+static const cairo_boilerplate_target_t targets[] = {
+ {
+ "egl", "gl", NULL, NULL,
+ CAIRO_SURFACE_TYPE_GL, CAIRO_CONTENT_COLOR_ALPHA, 1,
+ "cairo_egl_device_create",
+ _cairo_boilerplate_egl_create_surface,
+ cairo_surface_create_similar,
+ NULL, NULL,
+ _cairo_boilerplate_get_image_surface,
+ cairo_surface_write_to_png,
+ _cairo_boilerplate_egl_cleanup,
+ _cairo_boilerplate_egl_synchronize,
+ NULL,
+ TRUE, FALSE, FALSE
+ }
+};
+CAIRO_BOILERPLATE (egl, targets)
diff --git a/boilerplate/cairo-boilerplate-evas-gl.c b/boilerplate/cairo-boilerplate-evas-gl.c
new file mode 100755
index 000000000..151e6af29
--- /dev/null
+++ b/boilerplate/cairo-boilerplate-evas-gl.c
@@ -0,0 +1,143 @@
+/* Cairo - a vector graphics library with display and print output
+ *
+ * Copyright © 2009 Chris Wilson
+ * Copyright © 2014 Samsung Research America, Inc - Silicon Valley
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it either under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation
+ * (the "LGPL") or, at your option, under the terms of the Mozilla
+ * Public License Version 1.1 (the "MPL"). If you do not alter this
+ * notice, a recipient may use your version of this file under either
+ * the MPL or the LGPL.
+ *
+ * You should have received a copy of the LGPL along with this library
+ * in the file COPYING-LGPL-2.1; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
+ * You should have received a copy of the MPL along with this library
+ * in the file COPYING-MPL-1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.1 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
+ * OF ANY KIND, either express or implied. See the LGPL or the MPL for
+ * the specific language governing rights and limitations.
+ *
+ * The Original Code is the cairo graphics library.
+ *
+ * The Initial Developer of the Original Code is Henry Song.
+ */
+
+#include "cairo-boilerplate-private.h"
+
+#include <cairo-gl.h>
+#include <cairo-evas-gl.h>
+#include <Ecore_Evas.h>
+#include <Ecore.h>
+#include <Evas_GL.h>
+
+static const cairo_user_data_key_t gl_closure_key;
+
+typedef struct _evas_gl_target_closure {
+ Evas_GL *evas_gl;
+ Evas_GL_Context *evas_ctx;
+ Evas_GL_API *evas_api;
+
+ cairo_device_t *device;
+ cairo_surface_t *surface;
+} evas_gl_target_closure_t;
+
+static void
+_cairo_boilerplate_evas_gl_cleanup (void *closure)
+{
+ evas_gl_target_closure_t *gltc = closure;
+
+ cairo_device_finish (gltc->device);
+ cairo_device_destroy (gltc->device);
+
+ evas_gl_context_destroy (gltc->evas_gl, gltc->evas_ctx);
+ evas_gl_free (gltc->evas_gl);
+
+ free (gltc);
+
+ ecore_evas_shutdown ();
+ ecore_shutdown ();
+}
+
+static cairo_surface_t *
+_cairo_boilerplate_evas_gl_create_surface (const char *name,
+ cairo_content_t content,
+ double width,
+ double height,
+ double max_width,
+ double max_height,
+ cairo_boilerplate_mode_t mode,
+ void **closure)
+{
+ Ecore_Evas *ee;
+ Evas *canvas;
+
+ evas_gl_target_closure_t *gltc;
+ cairo_surface_t *surface;
+
+ if (width < 1)
+ width = 1;
+ if (height < 1)
+ height = 1;
+
+ ecore_init ();
+ ecore_evas_init ();
+ ee = ecore_evas_gl_x11_new (NULL, 0, 0, 0, ceil (width), ceil (height));;
+ canvas = ecore_evas_get (ee);
+
+ gltc = xcalloc (1, sizeof (evas_gl_target_closure_t));
+ *closure = gltc;
+
+ gltc->evas_gl = evas_gl_new (canvas);
+ gltc->evas_ctx = evas_gl_context_create (gltc->evas_gl, NULL);
+ gltc->evas_api = evas_gl_api_get (gltc->evas_gl);
+
+ gltc->device = cairo_evas_gl_device_create (gltc->evas_gl, gltc->evas_ctx);
+
+ gltc->surface = surface =
+ cairo_gl_surface_create (gltc->device, CAIRO_CONTENT_COLOR_ALPHA,
+ ceil (width), ceil (height));
+ if (cairo_surface_status (surface))
+ _cairo_boilerplate_evas_gl_cleanup (gltc);
+
+ return surface;
+}
+
+static void
+_cairo_boilerplate_evas_gl_synchronize (void *closure)
+{
+ evas_gl_target_closure_t *gltc = closure;
+
+ if (cairo_device_acquire (gltc->device))
+ return;
+
+ gltc->evas_api->glFinish ();
+
+ cairo_device_release (gltc->device);
+}
+
+static const cairo_boilerplate_target_t targets[] = {
+ {
+ "evasgl", "gl", NULL, NULL,
+ CAIRO_SURFACE_TYPE_GL, CAIRO_CONTENT_COLOR_ALPHA, 1,
+ "cairo_evas_gl_device_create",
+ _cairo_boilerplate_evas_gl_create_surface,
+ cairo_surface_create_similar,
+ NULL, NULL,
+ _cairo_boilerplate_get_image_surface,
+ cairo_surface_write_to_png,
+ _cairo_boilerplate_evas_gl_cleanup,
+ _cairo_boilerplate_evas_gl_synchronize,
+ NULL,
+ TRUE, FALSE, FALSE
+ }
+};
+CAIRO_BOILERPLATE (evasgl, targets)
diff --git a/boilerplate/cairo-boilerplate-getopt.c b/boilerplate/cairo-boilerplate-getopt.c
new file mode 100755
index 000000000..53b150c29
--- /dev/null
+++ b/boilerplate/cairo-boilerplate-getopt.c
@@ -0,0 +1,247 @@
+/*****************************************************************************
+* getopt.c - competent and free getopt library.
+* $Header: /cvsroot/freegetopt/freegetopt/getopt.c,v 1.2 2003/10/26 03:10:20 vindaci Exp $
+*
+* Copyright (c)2002-2003 Mark K. Kim
+* All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions
+* are met:
+*
+* * Redistributions of source code must retain the above copyright
+* notice, this list of conditions and the following disclaimer.
+*
+* * Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions and the following disclaimer in
+* the documentation and/or other materials provided with the
+* distribution.
+*
+* * Neither the original author of this software nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
+* THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+* DAMAGE.
+*/
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "cairo-boilerplate-getopt.h"
+
+
+char* optarg = NULL;
+int optind = 0;
+int opterr = 1;
+int optopt = '?';
+
+
+static char** prev_argv = NULL; /* Keep a copy of argv and argc to */
+static int prev_argc = 0; /* tell if getopt params change */
+static int argv_index = 0; /* Option we're checking */
+static int argv_index2 = 0; /* Option argument we're checking */
+static int opt_offset = 0; /* Index into compounded "-option" */
+static int dashdash = 0; /* True if "--" option reached */
+static int nonopt = 0; /* How many nonopts we've found */
+
+static void increment_index(void)
+{
+ /* Move onto the next option */
+ if(argv_index < argv_index2)
+ {
+ while(prev_argv[++argv_index] && prev_argv[argv_index][0] != '-'
+ && argv_index < argv_index2+1);
+ }
+ else argv_index++;
+ opt_offset = 1;
+}
+
+
+/*
+* Permutes argv[] so that the argument currently being processed is moved
+* to the end.
+*/
+static int permute_argv_once(void)
+{
+ /* Movability check */
+ if(argv_index + nonopt >= prev_argc) return 1;
+ /* Move the current option to the end, bring the others to front */
+ else
+ {
+ char* tmp = prev_argv[argv_index];
+
+ /* Move the data */
+ memmove(&prev_argv[argv_index], &prev_argv[argv_index+1],
+ sizeof(char**) * (prev_argc - argv_index - 1));
+ prev_argv[prev_argc - 1] = tmp;
+
+ nonopt++;
+ return 0;
+ }
+}
+
+
+int _cairo_getopt(int argc, char** argv, const char* optstr)
+{
+ int c = 0;
+
+ /* If we have new argv, reinitialize */
+ if(prev_argv != argv || prev_argc != argc)
+ {
+ /* Initialize variables */
+ prev_argv = argv;
+ prev_argc = argc;
+ argv_index = 1;
+ argv_index2 = 1;
+ opt_offset = 1;
+ dashdash = 0;
+ nonopt = 0;
+ }
+
+ /* Jump point in case we want to ignore the current argv_index */
+ getopt_top:
+
+ /* Misc. initializations */
+ optarg = NULL;
+
+ /* Dash-dash check */
+ if(argv[argv_index] && !strcmp(argv[argv_index], "--"))
+ {
+ dashdash = 1;
+ increment_index();
+ }
+
+ /* If we're at the end of argv, that's it. */
+ if(argv[argv_index] == NULL)
+ {
+ c = -1;
+ }
+ /* Are we looking at a string? Single dash is also a string */
+ else if(dashdash || argv[argv_index][0] != '-' || !strcmp(argv[argv_index], "-"))
+ {
+ /* If we want a string... */
+ if(optstr[0] == '-')
+ {
+ c = 1;
+ optarg = argv[argv_index];
+ increment_index();
+ }
+ /* If we really don't want it (we're in POSIX mode), we're done */
+ else if(optstr[0] == '+' || getenv("POSIXLY_CORRECT"))
+ {
+ c = -1;
+
+ /* Everything else is a non-opt argument */
+ nonopt = argc - argv_index;
+ }
+ /* If we mildly don't want it, then move it back */
+ else
+ {
+ if(!permute_argv_once()) goto getopt_top;
+ else c = -1;
+ }
+ }
+ /* Otherwise we're looking at an option */
+ else
+ {
+ char* opt_ptr = NULL;
+
+ /* Grab the option */
+ c = argv[argv_index][opt_offset++];
+
+ /* Is the option in the optstr? */
+ if(optstr[0] == '-') opt_ptr = strchr(optstr+1, c);
+ else opt_ptr = strchr(optstr, c);
+ /* Invalid argument */
+ if(!opt_ptr)
+ {
+ if(opterr)
+ {
+ fprintf(stderr, "%s: invalid option -- %c\n", argv[0], c);
+ }
+
+ optopt = c;
+ c = '?';
+
+ /* Move onto the next option */
+ increment_index();
+ }
+ /* Option takes argument */
+ else if(opt_ptr[1] == ':')
+ {
+ /* ie, -oARGUMENT, -xxxoARGUMENT, etc. */
+ if(argv[argv_index][opt_offset] != '\0')
+ {
+ optarg = &argv[argv_index][opt_offset];
+ increment_index();
+ }
+ /* ie, -o ARGUMENT (only if it's a required argument) */
+ else if(opt_ptr[2] != ':')
+ {
+ /* One of those "you're not expected to understand this" moment */
+ if(argv_index2 < argv_index) argv_index2 = argv_index;
+ while(argv[++argv_index2] && argv[argv_index2][0] == '-');
+ optarg = argv[argv_index2];
+
+ /* Don't cross into the non-option argument list */
+ if(argv_index2 + nonopt >= prev_argc) optarg = NULL;
+
+ /* Move onto the next option */
+ increment_index();
+ }
+ else
+ {
+ /* Move onto the next option */
+ increment_index();
+ }
+
+ /* In case we got no argument for an option with required argument */
+ if(optarg == NULL && opt_ptr[2] != ':')
+ {
+ optopt = c;
+ c = '?';
+
+ if(opterr)
+ {
+ fprintf(stderr,"%s: option requires an argument -- %c\n",
+ argv[0], optopt);
+ }
+ }
+ }
+ /* Option does not take argument */
+ else
+ {
+ /* Next argv_index */
+ if(argv[argv_index][opt_offset] == '\0')
+ {
+ increment_index();
+ }
+ }
+ }
+
+ /* Calculate optind */
+ if(c == -1)
+ {
+ optind = argc - nonopt;
+ }
+ else
+ {
+ optind = argv_index;
+ }
+
+ return c;
+}
+
+
+/* vim:ts=3
+*/
diff --git a/boilerplate/cairo-boilerplate-getopt.h b/boilerplate/cairo-boilerplate-getopt.h
new file mode 100755
index 000000000..74bce14c7
--- /dev/null
+++ b/boilerplate/cairo-boilerplate-getopt.h
@@ -0,0 +1,63 @@
+/*****************************************************************************
+* getopt.h - competent and free getopt library.
+* $Header: /cvsroot/freegetopt/freegetopt/getopt.h,v 1.2 2003/10/26 03:10:20 vindaci Exp $
+*
+* Copyright (c)2002-2003 Mark K. Kim
+* All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions
+* are met:
+*
+* * Redistributions of source code must retain the above copyright
+* notice, this list of conditions and the following disclaimer.
+*
+* * Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions and the following disclaimer in
+* the documentation and/or other materials provided with the
+* distribution.
+*
+* * Neither the original author of this software nor the names of its
+* contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
+* THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+* DAMAGE.
+*/
+#ifndef GETOPT_H_
+#define GETOPT_H_
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+extern char* optarg;
+extern int optind;
+extern int opterr;
+extern int optopt;
+
+int _cairo_getopt(int argc, char** argv, const char* optstr);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* GETOPT_H_ */
+
+
+/* vim:ts=3
+*/
diff --git a/boilerplate/cairo-boilerplate-glx.c b/boilerplate/cairo-boilerplate-glx.c
new file mode 100755
index 000000000..52cd99f9b
--- /dev/null
+++ b/boilerplate/cairo-boilerplate-glx.c
@@ -0,0 +1,454 @@
+/* Cairo - a vector graphics library with display and print output
+ *
+ * Copyright © 2009 Chris Wilson
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it either under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation
+ * (the "LGPL") or, at your option, under the terms of the Mozilla
+ * Public License Version 1.1 (the "MPL"). If you do not alter this
+ * notice, a recipient may use your version of this file under either
+ * the MPL or the LGPL.
+ *
+ * You should have received a copy of the LGPL along with this library
+ * in the file COPYING-LGPL-2.1; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
+ * You should have received a copy of the MPL along with this library
+ * in the file COPYING-MPL-1.1
+ *
+ * The contents of this file are subject to the Mozilla Public License
+ * Version 1.1 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
+ * OF ANY KIND, either express or implied. See the LGPL or the MPL for
+ * the specific language governing rights and limitations.
+ *
+ * The Original Code is the cairo graphics library.
+ *
+ * The Initial Developer of the Original Code is Chris Wilson.
+ */
+
+#include "cairo-boilerplate-private.h"
+
+#include <cairo-gl.h>
+
+#include <X11/X.h>
+#include <X11/Xutil.h> /* for XDestroyImage */
+
+static const cairo_user_data_key_t gl_closure_key;
+
+typedef struct _gl_target_closure {
+ Display *dpy;
+ int screen;
+ Window drawable;
+
+ GLXContext ctx;
+ cairo_device_t *device;
+ cairo_surface_t *surface;
+} gl_target_closure_t;
+
+static void
+_cairo_boilerplate_gl_cleanup (void *closure)
+{
+ gl_target_closure_t *gltc = closure;
+
+ cairo_device_finish (gltc->device);
+ cairo_device_destroy (gltc->device);
+
+ glXDestroyContext (gltc->dpy, gltc->ctx);
+
+ if (gltc->drawable)
+ XDestroyWindow (gltc->dpy, gltc->drawable);
+ XCloseDisplay (gltc->dpy);
+
+ free (gltc);
+}
+
+static cairo_surface_t *
+_cairo_boilerplate_gl_create_surface (const char *name,
+ cairo_content_t content,
+ double width,
+ double height,
+ double max_width,
+ double max_height,
+ cairo_boilerplate_mode_t mode,
+ void **closure)
+{
+ int rgba_attribs[] = { GLX_RGBA,
+ GLX_RED_SIZE, 1,
+ GLX_GREEN_SIZE, 1,
+ GLX_BLUE_SIZE, 1,
+ GLX_ALPHA_SIZE, 1,
+ GLX_DOUBLEBUFFER,
+ None };
+ int rgb_attribs[] = { GLX_RGBA,
+ GLX_RED_SIZE, 1,
+ GLX_GREEN_SIZE, 1,
+ GLX_BLUE_SIZE, 1,
+ GLX_DOUBLEBUFFER,
+ None };
+ XVisualInfo *visinfo;
+ GLXContext ctx;
+ gl_target_closure_t *gltc;
+ cairo_surface_t *surface;
+ Display *dpy;
+
+ gltc = calloc (1, sizeof (gl_target_closure_t));
+ *closure = gltc;
+
+ width = ceil (width);
+ height = ceil (height);
+
+ if (width == 0)
+ width = 1;
+ if (height == 0)
+ height = 1;
+
+ dpy = XOpenDisplay (NULL);
+ gltc->dpy = dpy;
+ if (!gltc->dpy) {
+ fprintf (stderr, "Failed to open display: %s\n", XDisplayName(0));
+ free (gltc);
+ return NULL;
+ }
+
+ if (mode == CAIRO_BOILERPLATE_MODE_TEST)
+ XSynchronize (gltc->dpy, 1);
+
+ if (content == CAIRO_CONTENT_COLOR)
+ visinfo = glXChooseVisual (dpy, DefaultScreen (dpy), rgb_attribs);
+ else
+ visinfo = glXChooseVisual (dpy, DefaultScreen (dpy), rgba_attribs);
+
+ if (visinfo == NULL) {
+ fprintf (stderr, "Failed to create RGB, double-buffered visual\n");
+ XCloseDisplay (dpy);
+ free (gltc);
+ return NULL;
+ }
+
+ ctx = glXCreateContext (dpy, visinfo, NULL, True);
+ XFree (visinfo);
+
+ gltc->ctx = ctx;
+ gltc->device = cairo_glx_device_create (dpy, ctx);
+
+ gltc->surface = surface = cairo_gl_surface_create (gltc->device,
+ content, width, height);
+ if (cairo_surface_status (surface))
+ _cairo_boilerplate_gl_cleanup (gltc);
+
+ return surface;
+}
+
+static cairo_surface_t *
+_cairo_boilerplate_gl_create_window_common (int rgba_attribs[],
+ cairo_content_t content,
+ double width,
+ double height,
+ double max_width,
+ double max_height,
+ cairo_boilerplate_mode_t mode,
+ gl_target_closure_t *gltc)
+{
+ XVisualInfo *vi;
+ GLXContext ctx;
+ cairo_surface_t *surface;
+ Display *dpy;
+ XSetWindowAttributes attr;
+
+ width = ceil (width);
+ height = ceil (height);
+
+ if (width == 0)
+ width = 1;
+ if (height == 0)
+ height = 1;
+
+ dpy = XOpenDisplay (NULL);
+ gltc->dpy = dpy;
+ if (!gltc->dpy) {
+ fprintf (stderr, "Failed to open display: %s\n", XDisplayName(0));
+ free (gltc);
+ return NULL;
+ }
+
+ if (mode == CAIRO_BOILERPLATE_MODE_TEST)
+ XSynchronize (gltc->dpy, 1);
+
+ vi = glXChooseVisual (dpy, DefaultScreen (dpy), rgba_attribs);
+ if (vi == NULL) {
+ fprintf (stderr, "Failed to create RGBA, double-buffered visual\n");
+ XCloseDisplay (dpy);
+ free (gltc);
+ return NULL;
+ }
+
+ attr.colormap = XCreateColormap (dpy,
+ RootWindow (dpy, vi->screen),
+ vi->visual,
+ AllocNone);
+ attr.border_pixel = 0;
+ attr.override_redirect = True;
+ gltc->drawable = XCreateWindow (dpy, DefaultRootWindow (dpy), 0, 0,
+ width, height, 0, vi->depth,
+ InputOutput, vi->visual,
+ CWOverrideRedirect | CWBorderPixel | CWColormap,
+ &attr);
+ XMapWindow (dpy, gltc->drawable);
+
+ ctx = glXCreateContext (dpy, vi, NULL, True);
+ XFree (vi);
+
+ gltc->ctx = ctx;
+ gltc->device = cairo_glx_device_create (dpy, ctx);
+
+ gltc->surface = surface = cairo_gl_surface_create_for_window (gltc->device,
+ gltc->drawable,
+ width, height);
+ if (cairo_surface_status (surface)) {
+ _cairo_boilerplate_gl_cleanup (gltc);
+ return NULL;
+ }
+ return surface;
+}
+
+static cairo_surface_t *
+_cairo_boilerplate_gl_create_window (const char *name,
+ cairo_content_t content,
+ double width,
+ double height,
+ double max_width,
+ double max_height,
+ cairo_boilerplate_mode_t mode,
+ void **closure)
+{
+ gl_target_closure_t *gltc;
+
+ int rgba_attribs[] = { GLX_RGBA,
+ GLX_RED_SIZE, 1,
+ GLX_GREEN_SIZE, 1,
+ GLX_BLUE_SIZE, 1,
+ GLX_ALPHA_SIZE, 1,
+ GLX_DOUBLEBUFFER,
+ None };
+
+ gltc = calloc (1, sizeof (gl_target_closure_t));
+ *closure = gltc;
+
+ return _cairo_boilerplate_gl_create_window_common (rgba_attribs, content,
+ width, height,
+ max_width, max_height,
+ mode, gltc);
+}
+
+static cairo_surface_t *
+_cairo_boilerplate_gl_create_window_msaa (const char *n