[cairo-announce] cairo release 1.14.0 now available

Bryce Harrington bryce at osg.samsung.com
Mon Oct 13 20:24:44 PDT 2014

A new cairo release 1.14.0 is now available from:


    which can be verified with:

    53cf589b983412ea7f78feee2e1ba9cea6e3ebae  cairo-1.14.0.tar.xz

    (signed by Bryce Harrington)

  Additionally, a git clone of the source tree:

  git clone git://git.cairographics.org/git/cairo

    will include a signed 1.14.0 tag which points to a commit named:

    which can be verified with:
    git verify-tag 1.14.0

    and can be checked out with a command such as:
    git checkout -b build 1.14.0

Release 1.14.0 (2014-10-13 Bryce Harrington <bryce at osg.samsung.com>)
Hard to believe it's been over a year since our last release, but it's
not for lack of activity.  This release includes contributions of a wide
assortment of bug fixes, build system improvements, warnings cleanups,
codebase refactoring, test suite repairs, and static analysis work.

This release is lighter on features (compared with 1.12.10) but includes
a highly demanded rehaul of our image downscaling functionality, which
solves a serious problem experienced by Inkscape users when shrinking
embedded bitmaps in SVG files.  The new scaling algorithms are used by
the image backend and by other backends as needed for fallbacks.


  Filtering improvements for the image backend, in particular
  down-scaling of images produces filtered images that depend on all the
  pixels of the source. When using the image backend you get the
  following settings:

  CAIRO_FILTER_GOOD: uses a box filter for scales less than .75 in
    either direction. For scales larger than this, the same filter as

  CAIRO_FILTER_BEST: uses a Catmull-Rom filter always. When upscaling
    more than 2x this will produce anti-aliased square pixels, similar
    to OS/X.

    pixman is the same as BILINEAR. (This is subject to change in the

  xlib and xcb also use the image fallback for GOOD/BEST filters, but
  note that other backends do not implement these filtering fixes yet,
  however other actions may cause them to use an image fallback which
  will cause these filters to be used.

  Improve handling of device transformation and scaling, allowing Cairo
  to now support scaling at a device level, permitting easier, more
  transparent HiDPI support.

  Support JBIG2 mime data in PDF.  This allows embedding of more
  compressed JPEG formats within PDF, rather than including the full
  uncompressed image.  Also, reduce the number of transparency groups
  used by PDF to keep the file size small and viewing/printing of the
  PDF fast.

  Expand the embedding section to include stencil mask support.

  Reorder font declarations to be in natural order.

  Update the Skia backend to build against current Skia (as of June

  Drop Link-Time Optimization (LTO) support from build system.  This
  seems to have caused much trouble for unclear benefit, and most
  distros are reverting or disabling it anyway.

  Optimize VBO size on GL to 1M and to 16k for EGL.  This improves
  (theoretical) performance for desktop GLX use cases while avoiding
  hitting VBO memory size limitations on embedded devices.

API Changes

  cairo_surface_set_device_scale, cairo_surface_get_device_scale:

    Sets a scale that is multiplied to the device coordinates
    determined by the CTM when drawing to @surface. One common use for
    this is to render to very high resolution display devices at a scale
    factor, so that code that assumes 1 pixel will be a certain size
    will still work.

  cairo_egl_device_get_display, cairo_egl_device_get_context:

    Support get/set of EGLContext and EGLDisplay for egl-based cairo
    devices, similar to GLX.

Dependency Changes

  Cairo now requires glib 2.14 for its gobject helper functions,
  and pixman 0.30 for downscaling.

Bug fixes

  Don't embed CMYK Jpeg images in svg.

  Fix tests to place output in proper location.

  Fix determination of alpha for all surfaces when recording.

  Extend oversize check to cairo_gl_surface_create_for_texture, so an
  error surface is returned if the texture is too large to render to.

  Fix embedding of mime data in PDF and PS files.

  Remove useless error handling in *_reply() functions in XCB.

  Fix a double-free exposed by multithreaded apps creating and
  destroying the same font concurrently.

  Fix corrupt stacks produced by bugs in operand emission for trace.

  Fix out of bounds array access in format cache for xlib

  Don't rename glyphs used by seac operator.  This can cause certain
  combined characters to use their decorations (e.g. umlauts on ö) to be
  lost during printing of PDFs using evince.

  Fix crash on calling cairo_create with a finished surface

  Fix SSIZE_T definition problem when making with MSYS on Windows7

  Fix one off issue in gl context cleanup


  Fix rectangle stroke with non rectilinear pen

  Fix imagemask with pattern source failure on some printers.  This bug
  could cause files converted using pdftops to fail for example on Ricoh
  printers, or opening in Adobe Distiller on Windows.

  Fix whitespace in font names

  Fix page size in generated PDFs.  When printing using pdftocairo on
  larger page sizes, such as 11x17, the image would be cropped to letter

  Fix path-currentpoint test by preserving current-point in
  copy_path()/append_path() sequence

  Fix generation of HTML in code docs for
  cairo-format-stride-for-width.  Raw HTML code was being passed
  to the browser, instead of displaying normally.

  Fix spelling of "tessellator" throughout code.  We're using the
  American rather than British spelling of this word.

  Fix crash in pixman_image_composite32

  Fix crash when trying to modify a (const) all-clipped cairo_clip_t

  Add check_composite method to all compositors, to fix crashes in the
  test suite.

  Fix crash in Firefox when scrolling on certain pages.

  Fix memory leaks found by static analysis.

  Fix build of any2ppm if fork is not available.

  Fix broken build for Qt backend, due to missing libstdc++.

  Fix typo in two cairo_uint128 functions.  Fixes potential build issues
  on systems without a uint128 type.

  Fix build when --enable-pdf=no

  Fix cache_frozen assertions for Win32 print.

  Correctly check for xcb image surface for inplace upload

  Fix webkit-based web browser crashes due to empty boxes by skipping
  over them when tesselating.

  Make pixman, libpng, and zlib paths commandline configurable for win32

  Fix image scale on Win32 when GDI scale is not identity.

  Fix float endian configure test when using clang -O4

  Fix compilation with Android bionic libc

  Don't try to build util/sphinx on Windows

  Fix loss of precision when emitting joins.  This was caused by
  discrepancies in line gradients when passing trapezoids around.

  Fix loss of precision and associated rendering issues in
  cairo-tor-scan-converter from projection onto sample grid.

  Fix pixman oversampling of neighbouring edges within a cell by
  eliminating self-intersections for the pixman traps compositor.

  Fix multi-line string splitting in PDFs

  Various cleanups and fixes to warnings, documentation, tests, and
  build system.  Improve error handling and return value checks.
  Cleanup XFAIL tests and reference images.  Cover recently added

Bryce Harrington
Senior Open Source Developer  -  bryce at osg.samsung.com
Open Source Group             -  Samsung Research America


Cairo - Multi-platform 2D graphics library

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,

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

Where to get more information about cairo
The primary source of information about cairo is:


The latest versions of cairo can always be found at:


Documentation on using cairo and frequently-asked questions:


Mailing lists for contacting cairo users and developers:


Roadmap and unscheduled things to do, (please feel free to help out):


List of changes in this release:

Adrian Johnson (24):
      Downscaling requires pixman 0.30
      svg: Don't embed CMYK Jpeg images
      pdf: avoid making groups a transparency group if not required
      pdf: fix embedding of mime data that has been broken since 0a10982f
      ps: fix embedding of mime data
      pdf: support JBIG2 mime data
      test: update mime-data to test jbig2 mime types
      pdf: combine source and mask images into single image
      pdf: Support stencil masks with jpeg/jpx/jbig2 embedding
      pdf: stencil masks may be opaque
      type1-subset: don't rename glyphs used by seac operator
      pdf/ps: avoid outputting excess decimal places in matrices
      Add test for rectangle path optimization with non rectilinear pen
      pdf: fix rectangle stroke with non rectilinear pen
      Add test for paint with alpha and clipping bug
      ps: remove duplicate /Interpolate from image dictionary
      ps: fix imagemask with pattern source failure on some printers
      ps: use setpagedevice to set page size
      ps: cairo_set_page_size does not need to be in eps output
      ps: add font DSC comments
      type1: strip space from end of font name
      win32 printing: fix image scale when GDI scale is not identity
      Fix compilation with bionic libc
      pdf: don't use '\' to split strings across multiple lines

Alexander Larsson (10):
      gstate: Respect device transform in stroke
      default-context: Inherit device scale in push_group surface
      subsurface: Handle device scales
      gstate: Move device-scale font scaling to gstate
      gstate: Handle device scale on surface as source
      surface: expose the device scale
      tests: Add device scale test to "full" testrun similar to offsets
      surface: Opencode create_similar
      surface: Merge scratch construction into _cairo_surface_create_scratch
      surface: Inherit device scale in cairo_surface_create_similar()

Andrea Canciani (2):
      quartz: Fix build
      quartz-image: Fix build

Behdad Esfahbod (9):
      Check for XRenderSolidFill()
      [tests] Add path-currentpoint
      Preserve current-point in copy_path()/append_path() sequence
      Revert "[ft] Fix memory bug in copying bitmaps"
      chmod a+x cairo-trace
      [trace] Don't print FC_CHARSET, FC_LANG, and FC_CAPABILITY
      [cairo-trace] Work around fontconfig :charset= parse format change
      Binary mode in any2ppm
      More binary mode for Windows

Benjamin Otte (1):
      xlib: Fix typo in documentation

Bill Spitzak (8):
      V6 image: Use convolution filters for sample reconstruction when downscaling
      V5: Use NEAREST filter when possible
      image: Move filter decision to _cairo_pattern_analyze_filter
      xlib: Add symbols to indicate if XRender supports GOOD/BEST filtering
      xlib: Use image fallback for GOOD/BEST filters
      xcb: Add switches for whether XRender supports GOOD/BEST filtering
      xcb: Use image fallback for GOOD/BEST filters
      image: Corrected extents calculations

Bryce Harrington (65):
      test: Add test for image downscaling
      test: Test a variety of scales when downscaling
      test: Exercise image scaling quality when downscaling
      test: Move cairo_pattern_set_filter to after cairo_set_source_surface
      test:  Drop unnecessary math.h include
      Fix SSIZE_T definition problem when making with MSYS on Windows7
      test:  Replace deprecated rsvg_init() in any2ppm test
      test:  Handle error in fgets call in ps-eps test
      test:  Drop unused path variable in two recently added tests
      cairo-trace:  Stringify CAIRO_STATUS_JBIG2_GLOBAL_MISSING
      cairo-script: Error if asked to decompress with missing compression lib
      cairo-script: Compare status with CSI enums
      perf: Guarantee path width is non-negative
      test: Quell warning for inclusion of old rsvg header files
      test: Quell warning for deprecated g_type_init()
      xml: Drop unused variable
      xml: constify source objects for emit routines
      mesh: Avoid theoretical infinite loops
      gl: Handle PIXMAN_a8r8g8b8_sRGB format in switch
      image: Fix bad HTML generation in code docs for cairo-format-stride-for-width
      Add explanation to enum _cairo_int_status
      Add explanation to _cairo_surface_create_in_error
      Add comment to explain _cairo_edge_compute_intersection_*
      Correct spelling of "tessellator" throughout code
      gitignore: Ignore generated tmpl dir in public docs
      doc: Add missing sections and symbols for public docs
      doc: Drop a couple quartz routines which distcheck claims don't exist
      Mark recently added _cairo_output_stream_print_matrix private symbol
      surface: Make parameter naming consistent between header and impl
      Document that libglib2.0-doc is needed to avoid some xref warnings
      skia: Add section definitions and code docs for skia backend
      perf: Refactor some common macros to cairo-perf.h
      NEWS: Add bug links and reword feature and bug descriptions
      Fix segfault in firefox when scrolling on certain pages
      .gitignore: Ignore two generated files in build/
      configure.ac: Quell warnings about AM_PROG_AR when using automake 1.12
      configure.ac: Add a --disable-lto configure option
      configure.ac: Fix broken build for Qt backend
      cairo-wideint:  Fix typo in two cairo_uint128 functions
      xlib: Fix mispelling in a comment
      Disable font options for xcb.
      NEWS:  Bring up to date with recent bug fixes.
      README:  Update required dependencies
      AUTHORS: Add Ravi, myself, and a couple other frequent contributors
      NEWS: Drop unfinished thought
      cairo-gl: Make VBO size run-time settable
      gl: Track the VBO size as a property of the ctx
      gl: Increase default VBO size on GL to 1M
      NEWS: Note that downscaling changes only affect image + fallback
      Don't return NULL to clients when getting image
      Don't return NULL to clients when getting device
      build:  Fix float endian configure test when using clang -O4
      NEWS: Revise downscaling feature description
      sphinx: Add ickle's explanation of what sphinx does
      quartz: Check for quartz surface type before conversion
      Declare as private the new cairo_lines_compare_at_y symbol
      Get make check back to a happy spot
      test: Fix error message to specify the executable that was missing
      test: Add an update-refs.sh script to update reference images
      test: Update pixman downscaling 95 reference images
      NEWS: Update with latest changes and finalize for release
      NEWS: Flesh out docs for new APIs
      1.14.0 release
      pattern: Restore dropped inclusion of cairoint.h
      Start 1.14.1 development

Bryce W. Harrington (10):
      test: Don't ignore test output files left in test directory
      test: Fix several tests to place output files in the output directory
      test: Make cairo_test_mkdir() usable throughout tests.
      test: Ensure output dirs exist, falling back to current dir if needed
      svg, test: Refer to output filename by variable, not a hardcoded value
      gitignore: Ignore build chaff when configuring with --enable-gtk-doc
      test: Comma separate keywords
      test: Space out keywords for clarity
      test: Document use of -k and CAIRO_TEST_TARGET to run test subsets
      NEWS: Summarize recent changes

Chris Wilson (35):
      Post-release version bump
      Bump version for new development tree, 1.13.1
      spans,traps: Undo device transform from source matrix for recording replays
      test: Allow CAIRO_TEST_MODE to independently enable extended testing
      trace: Record set-device-scale
      script: Add support for replaying device-scale
      test/pixman-downscale: Open-code fmin()
      font: Push the last reference dec into the backend->destroy() callback
      trace: Fix operand emission
      win32: Reorder font declarations to be in natural order
      clip: Do not modify the special all-clipped cairo_clip_t
      xlib: Undo debug hack to force fallbacks
      traps,xcb: Prefilter zero-area boxes when converting traps
      traps,xcb: Set the box count after filtering
      arc: Insert the initial point on the arc
      test: Exercise stroking bugs with xlib/trapezoids
      test/coverage: Exercise invariance under mirror symmetry
      stroke,traps: Emit join without loss of precision
      test: Remove redundant reference images
      tor: Fix loss of precision from projection onto sample grid
      test: Include coverage in the normal test run
      tor: Review full-row walker
      test: Remove more duplicated reference images
      test: Explicitly flip the reference image for recordflip
      test: Add another coverage example demonstrating the seams in tor
      test: Fix coverage-abutting
      test: Add a simple rasteriser to check fidelity of edge rendering
      test/simple: Tighten sanity checks in reference image generator
      tor: Perform analytic coverage over the pixel not sample points
      tor: Enable analytic processing for starting rows
      test: Refresh reference images for tor rendering changes
      image: Eliminate self-intersections for the pixman traps compositor
      test: Add whole flipped replays
      test: Teach check-preprocessor-syntax.sh about -inlines.h
      test: Fix conflation of different device scales in index.html

David Weiß (1):
      made paths to pixman, libpng and zlib configurable by commandline for win32 builds

Eric Le Bihan (1):
      test: fix build of any2ppm if fork not available

Henry Song (1):
      gl: Fix one off issue in context cleanup

Jeff Muizelaar (2):
      Don't use __FUNCTION__ as a string literal
      clang-cl: Use size of the pointer explicitly

Koji Egashira (1):
      image: Add NULL checks for return value of _pixman_image_for_color()

Kouhei Sutou (1):
      cairo_create(): Add finished surface check

Krzysztof Kosiński (1):
      image: Use convolution filters for sample reconstruction when downscaling

Lukáš Lalinský (1):
      xcb: Initialize font options from Xft resources

Maks Naumov (3):
      Fix width and height args for _cairo_xcb_connection_copy_area()
      Fix font x_scale value in _compute_transform()
      Fix _cairo_mesh_pattern_equal() when cairo_mesh_patch_t structs are different

Marc-André Lureau (1):
      build-sys: do not try to build util/sphinx on Windows

Marek Kasik (1):
      font: Generate PDFs with correct font names

Martin Robinson (1):
      gl: Extend oversize check to cairo_gl_surface_create_for_texture

Ravi Nanjundappa (22):
      perf: Refactor some macros to cairo-perf.h
      test and util: maintain consistency in the usage of ARRAY_LENGTH macro
      boilerplate: Maintain consistency in the usage of switch cases
      glx: Use GLX_NONE in place of None
      test : Maintain consistency in the usage of xcalloc
      vg: Use EGL_NONE and GLX_NONE in place of None
      src : Fix warn_unused_result warnings from gcc
      xcb: make use of _cairo_surface_is_xcb to check for surface type
      skia: update the source to build with the latest skia
      .gitignore: Ignore the generated profile data files from callgrind tool in test/
      skia : Add Debug support for skia backend
      test : build fix when --enable-pdf=no
      test: Selective execution of Cairo tests based on FORMAT option
      test: improve selective execution of Cairo tests based on FORMAT option
      README : Update README file related to usage of FORMAT make variable
      configure.ac: configuration check to enable either gl or glesv2, not both at the same time
      src: Fix memory issue reported by cppcheck static analysis tool
      test: Fix null pointer issue reported by cppcheck static analysis tool
      qt: Suppress warnings in qt backend build
      test: Add test oversized egl surfaces
      src: check the surface backend for NULL
      test: Add test for egl-surface-source

Rodrigo Rivas Costa (1):
      win32 print: fix cache_frozen assertions

Ryan Lortie (1):
      cairo-version: fix docs build

Sylvestre Ledru (3):
      Remove some useless declarations found by scan-build, the LLVM/clang static analyzer
      Remove some potential double free
      Fix some memory leaks found by scan-build, the LLVM/Clang static analyzer

Søren Sandmann Pedersen (1):
      _cairo_color_double_to_short(): Use standard rounding algorithm

Uli Schlachter (23):
      recording: Fix unitialized variable 'free_me'
      recording: Correctly determine alpha of all surfaces
      cairo-gobject: Require at least glib 2.14
      check-doc-syntax: Don't hardcode path to awk
      image: Handle PIXMAN_a8r8g8b8_sRGB in switch
      test/multi-page: Fix use-after-free
      xcb: Remove useless error handling
      fill_reduces_to_source(): Handle failure of color_to_pixel()
      Remove XFAIL_TESTS from Makefile.am
      README: Don't mention XFAIL_TESTS anymore
      Revert "[xlib] Fast-path the likely case of retrieving a known xrender_format"
      cairo-xlib: Fix out of bounds array access in format cache
      Correct usage of CAIRO_STACK_ARRAY_LENGTH
      cairo svg: Use \n instead of /n in bitmap fonts
      clip: Fix handling of special all-clipped cairo_clip_t
      Fix warnings from check-doc-syntax.sh
      mask compositor: Set a check_composite method
      mesh-rasterize: Fix number of iterations
      pthread-same-source: Add ref image generation
      pthread-same-source: Refresh reference images
      Revert "image: Use convolution filters for sample reconstruction when downscaling"
      Remove LTO support
      xcb: Correctly check for image surface for inplace upload

egag (1):
      Fixes stroke-clipped, i.c. of a dashed stroke

jimmyfrasche (2):
      Pattern document clarification
      Add more info to cairo_surface_set_mime_data docs.

More information about the cairo-announce mailing list