[Ftp-release] cairo snapshot 1.9.8 now available

Chris Wilson chris at chris-wilson.co.uk
Mon Jun 14 05:57:11 PDT 2010

[Having to resend as I failed miserably to send this over the weekend...]

A new cairo snapshot 1.9.8 is now available from:


    which can be verified with:

	25f1a445ac0e2b33355ab9bc046b4ee7639554a1  cairo-1.9.8.tar.gz

	(signed by Chris Wilson)

  Additionally, a git clone of the source tree:

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

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

    which can be verified with:
	git verify-tag 1.9.8

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

One major API change 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


API additions

    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.


    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
    these subregions of another cairo_surface_t both as a source and as a render


    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

  Benjamin Otte made more than 300 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.


  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


  A notable improvement was contributed by Alexander Shulgin to enable SVG to
  reference external image through the use an extended MIME data type.

Complete list of changes between 1.9.6 and 1.9.8
Adrian Johnson (4):
      PDF-operators: ensure text operations flushed before emitting clip
      PS: Add missing 'q' when resetting clip path
      type1: Use correct glyph advance when subsetting type 1 fonts
      cff: Use correct glyph advance when subsetting cff fonts

Alexander Shulgin (1):
      Added new MIME type CAIRO_MIME_TYPE_URI and it's support in SVG backend

Andrea Canciani (46):
      xcb: Fix compilation without dri2
      test: Add gradient-zero-stops-mask
      pattern: Fix _gradient_is_opaque() for zero stops
      trace: Fix trace endianness
      script: Fix script scanner endianness
      perf: Fix timestamp computation on MacOS X
      Correct masking optimization
      Actually check for memory allocation failure
      perf: Correct cairo-perf-diff syntax
      boilerplate: Compile xlib without xrender
      Revert "script: Another RGB16_565 warning."
      Update FSF address
      quartz: Stroke without ctm_inverse multiplication
      quartz: Simplify path creation
      quartz: Assert success of path creation
      atomic: Remove unused function _cairo_atomic_int_set()
      atomic: Separate bool and old-value compare-and-exchange
      atomic: Correct implementation of _atomic_fetch ()
      atomic: Add MacOSX atomic implementation
      Revert bd672d080ca0036ef1b88d26583e6af36f541461     on src/cairo-composite-rectangles.c
      test: add linear-gradient-extend and radial-gradient-extend
      test: improve copyright notices
      quartz-font: Conform context and antialias handling to quartz-surface
      quartz-font: Silence 0x0 CGContext warning
      quartz: fallback for A1 images on little endian archs
      quartz: silence compiler warnings
      quartz: fix repeating radial gradients on 64 bits
      test: add degenerate gradient and single stop tests
      test: fix typo
      test: add/update reference images
      gl: fix compilation on MacOS X
      surface: remove content argument from is_similar
      pattern: remove content field from solid patterns
      pattern: improve clear/opaque check functions
      pattern: add gradient_is_solid function
      gstate: correct optimizations
      pattern: improve degenerate gradients handling
      test: exercise ps crash with single stop gradients
      pattern: improve single stop gradients handling
      pdf: support single stop gradients
      ps: support single stop gradients
      gl: support single stop gradients
      test: make test font family a define
      test: update font family name
      test: quartz ref image refresh
      test: update quartz ref images in makefile

Behdad Esfahbod (1):
      Improve doc syntax check to allow inline macro docs

Benjamin Otte (207):
      test: Add bug-bo-rectangular
      image: split cairo_image_surface_coerce()
      region: Make the 2nd argument to intersect and union const
      test: Add test checking that all setters properly check surface->status
      gl: Really don't write error status to the inert object.
      gl: Use right format
      xlib: Make code not complain about every new format
      xcb: Make code not complain about every new format
      gl: Make code safe for multithreaded access
      glx: Add getters for device's Display and GLXContext
      gl: acquire/release context when getting images
      gl: acquire/release properly in _cairo_gl_draw_image()
      gl: Get rid of "return value not checked" warnings
      Require pixman 0.17.5
      image: Make unbounded fixup code not use pixman_fill()
      Use pixman_image_composite32()
      xlib: Make display a cairo_device_t
      gl: fix typo in comment
      gl: Use correct type when uploading images
      gl: Don't acquire the gl context twice
      gl: Use GLfloat instead of float in gl*Array() functions
      gl: Only unref a surface if it exists
      gl: Make drawing to windows work again
      xlib: Fix screen device handling
      xlib: Fix display closing to work properly
      tests: Integrate xlib-expose-event test into usual tests
      fallback: Fix clip_region handling in mask creation
      test-suite: add image_diff_is_failure() function
      test: run xlib-expose-event test unconditionally
      fallback: Sanitize code that queries surface extents
      pixman_image_composite => pixman_image_composite32
      image: pixman_image_fill_rectangles() => pixman_image_fill_boxes()
      fallback: Pass the correct extents for unbounbded operations
      fallback: Propagate extents properly
      image: translate source pattern in composite_trapezoids()
      test: Set have_result for image matches
      fallback: translate extents regions properly
      fallback: Only do _fill/compsoite_rectangles on bounded source
      xlib: remove unused code
      xlib: Constify some function arguments
      xlib: Don't modify variables that are needed later
      Remove excessive semicolons
      image: Round down when rendering antialiased boxes
      test: Update reference images for last checkin
      Create cleared surface instead of a scratch surface in clone_similar()
      fallback: Create pixman image for correct rectangle
      image: remove useless optimization
      boilerplate: don't compile pdf test code when pdf is not tested
      fallback: get src_x/y variables right when compositing traps
      gl: Acquire context when initing/destroying gl operands
      gl: acquire/release context during surface_finish()
      gl: Acquire the context before destroying it.
      Fix typo in docs
      gl: Make _gl_set_destination() take the context as an argument
      gl: Move device-specific code into cairo-gl-device.c
      gl: Remove unused member variable
      gl: Get rid of cairo_gl_surface_glfinish() from public API
      gl: Introduce _cairo_gl_device_has_glsl() function
      gl: Get rid of another cast to cairo_gl_context_t
      gl: Another case of proper device acquiring
      gl: Get rid of ctx variable
      gl: Make check_span_renderer() call not require a device lock
      gl: Print GL errors when releasing the device
      gl: Make the shader implementation per-context, not global
      test: Add a test for various zero mask operations
      cairo_paint_with_alpha(cr, 0.0) is only a noop when bounded by mask
      image: Fix wholly unbounded fixup
      Make _cairo_color_equal() work for unmultiplied colors, too
      Use a solid color for 0xN and Nx0 surfaces
      gl: Don't create 0x0 surfaces
      gl: Don't keep a temporary surface in the device
      test: Make global variables in new test static
      build: Fix pthread detection
      fallback: Remove span renderer paths
      gl: Remove gradient optimizations
      gl: gl surfaces are only similar when they share the same device
      gl: Share vertex shaders
      gl: s/_cairo_gl_set_destination/_cairo_gl_context_set_destination/
      gl: Get rid of cairo_gl_shader_source/mask_t
      gl: Automatically generate the vertex shader source
      gl: Programmatically generate fragment shaders
      gl: move operator check
      gl: Add cairo_gl_composite_setup_init/fini() functions
      gl: Put shaders into a cache
      gl: acquire device manually in finish, as the default way will error
      gl: use glBlendFuncSeparate()
      gl: cairo_gl_compsite_setup_t => cairo_gl_composite_t
      gl: Move composite code into own file
      gl: Make the span renderer use the new composite APIs
      gl: make show_glyphs use the cairo_composite_t API
      gl: make _cairo_operand_destroy private
      gl: Add _cairo_gl_composite_begin() function
      gl: Implement _composite_emit_rect() and _composite_end()
      gl: Support component alpha in gl_composite_t
      gl: remove unused variables from span renderer
      gl: Change _cairo_gl_composite_emit_rect()
      gl: Convert span renderer to use cairo_gl_composite_begin/end()
      gl: Remove unused variables
      gl: Require ARB_vertex_buffer_object extension unconditionally
      gl: Convert glyphs path to use cairo_gl_composite_t
      gl: Replace _cairo_gl_operand_init() with setters for src/mask
      gl: Set composite->has_component_alpha based on mask
      xlib: ensure variable isn't uninitialized
      gl: Use GL_TRIANGLES instead of GL_QUADS
      gl: Assert that binding values to shaders never fails
      gl: Update copyright statements
      gl: make _set_mask() accept NULL
      gl: Implement fill_rectangles with composite
      gl: Get rid of src and mask argument to composite_init()
      gl: Add missing NULL-check in non-shader code
      gl: Don't name the union in cairo_gl_operand_t
      gl: Make a bunch of functions static
      surface: Add _cairo_surface_release_device_reference() API
      gl: Make glyph cache a real surface
      gl: Get rid of _cairo_gl_composite_set_mask_texture()
      gl: Actually check errors for _cairo_gl_composite_begin()
      gl: Use _cairo_gl_surface_draw_image() when caching glyphs
      gl: detect image uploads and fast-path them
      gl: Detect color-pattern clears of surfaces
      gl: Move _cairo_gl_set_operator() to the file it's used in
      gl: cache the current shader in the context
      gl: Implement texture upload to window with composite()
      gl: Add _cairo_gl_surface_is_texture()
      gl: Use the mask, not the source
      gl: Separate binding to shaders from setting operands
      gl: Binding variables only works for the current shader
      gl: Move texture setup code into its own file
      gl: Move shader checking in the TexEnv setup code
      gl: Don't store the shader in the composite_t anymore
      gl: Actuall do fall back to fixed function paths.
      gl: Move vertex buffer handling from setup into context
      gl: Add an assertion that a context cannot call _begin() twice
      gl: Move vertex array setup code into the texture setup code
      gl: Remove unused variables
      gl: set the active texture before fiddling with with glTexEnv
      gl: Refactor fixed function setup code
      gl: Allow NONE and SPANS sampler for source, too
      gl: Fix coverage passing for spans not being endian safe.
      gl: Don't set is_clear
      gl: spans need the dummy texture
      gl: Flush surface at the right times
      gl: Make cairo_gl_composite_t not require a gl context anymore
      gl: Add API for querying if we need GL_TEXTURE_RECTANGLE_EXT
      gl: Make composite_set_source/mask/mask_spans not require a context
      gl: Make composite_set_clip_region not require the context
      gl: Remove unused code
      gl: Make gl_composite_begin() acquire the context
      gl: Store the clip region in the context
      gl: Move the pre shader to the context, too
      gl: switch OPERAND0 and OPERAND1 in the fixed function path
      gl: Unify fixed function setup code
      gl: Split fixed-function operand setup into own function
      gl: Avoid redundant mask setup
      gl: Switch src alpha handling to a tiny on/off function
      gl: Remove unneeded and broken workaround
      gl: Remove dependency on composite_t in draw function
      gl: Remove composite_t argument from _flush() function
      gl: operand->texture.surface cannot be NULL
      gl: Move struct definitions in header
      gl: Keep a copy of the current operand in the context
      gl: Add an enum for tex units
      gl: Get rid of operand argument to emit functions
      gl: Simplify mask operand setup code
      gl: Move function
      gl: Merge fixed function setup into general texture setup
      gl: Check mask's attributes for component alpha
      gl: get rid of the operand's pattern variable
      gl: Move unsetting the state into the operand destroy function
      device: Make flush vfunc return a cairo_status_t
      docs: fix typo
      gl: Introduce flush functions
      gl: Set GL_BLEND and GL_SCISSOR_TEST globally
      gl: bind all shader variables at the same place
      gl: Make _shader_by_type() a getter
      region: clarify docs of cairo_region_equal()
      gl: Do not reset shaders on _end()
      gl: Stop disabling the vertex array and the array buffer
      gl: Remove check if we're between begin/end
      gl: Don't reset vertex size
      gl: Flush properly in set_destination
      Call cairo_surface_flush() before setting finished
      gl: Only allocate a framebuffer if we need one
      gl: Introduce a temporary texture unit
      gl: Store the vertex offset in the operand
      glx: When acquiring device, use the correct drawable
      gl: Do not reset the current target on release
      gl: Only resetup textures if we need to
      gl: rework _cairo_gl_set_operator()
      gl: Special case blend mode for CAIRO_CONTENT_COLOR
      gl: Make using shaders an explicit argument
      gl: Switch to deferred rendering
      gl: Create separate functions for setting extend and filter
      gl: Use the generic functions for filter/extend in gradients
      gl: Make gradient textures a separate object
      device: flush before setting finished
      gl: Add a gradient texture cache
      gl: Fix vertex size changes not causing updates of the operands
      Remove _cairo_surface_composite_trapezoids_as_polygon()
      gl: Add a simple spans renderer for stroke/fill
      gl: Fix span renderer for unbounded spans
      gl: Fix span renderer doing bad stuff for CLEAR and SOURCE
      Update my copyright notices to preferred version
      gl: Fix argument order
      gl: Only clone texture surfaces
      gl: Add an assertion that we always have a texture
      gl: Add support for clip regions to the span renderer

Carl Worth (1):
      Update version to 1.9.7.

Carlos Garcia Campos (5):
      [test] Update pdf reference images for clip-operator
      [test] Update pdf reference image for leaky-dashed-rectangle
      [test] Update pdf reference image for surface-pattern-scale-down
      [test] Update pdf reference image for text-rotate
      [configure] Bump poppler dependency to 0.13.3

Chris Wilson (313):
      bo-rectangular: Prevent invalid read during edge traversal
      gl: Return unsupported for h/w that cannot handle shaders.
      gl: Avoid attempting to create a program on GLSL-incapable h/w for spans
      gl: Initialise glyphs mask to ensure allocation in absence of stash.
      fallback: Initialize rects.is_bounded for span renderer.
      bo-rectangular: Fix incorrect skipping of colinear eo edges
      drm: Add missing private headers
      gl: Markup internal functions with cairo_private
      image: Allow reduction of repeat modes for unity scaled patterns.
      Warnings cleanup for CAIRO_FORMAT_INVALID.
      test: Remove the double-clip from clip-group-shapes
      image: Don't rely on clip regions being clipped to surface extents.
      xlib: Handle a1 image uploads through converter
      surface-fallback: Propagate NOTHING_TO_DO
      surface-fallback: Free traps on composite_trapezoids() error
      test: Add references for rounded-rectangle-{fill,stroke}
      test: Avoid derefencing a NULL xcb connection
      gstate: Use _cairo_pattern_clear for CLEAR.
      surface: Simplify is_clear logic.
      drm/intel: Set default extend mode for rendering gradient subsets.
      drm/intel: Set the 1D gradient texture to be untiled.
      drm/i965: Merge the constants into the surface stream.
      drm/i965: Ignore flushing on device finish.
      drm/i915: Acquire device before shader commit.
      drm/i915: Avoid double multiplication of linear alpha.
      drm/i915: Ensure simple alpha is written to green on alpha-only surfaces.
      drm/i915: Fix crash with linear-step-function
      drm/i915: Fix encoding of negated operand channels
      drm/i915: Eliminate redundant radial vertex shader.
      drm/i915: Use a preserved temporary to store the radial texcoord.
      gl: Pad the gradient texture.
      perf: Check for and include unistd.h
      drm/i915: Handle clip/combine coords for spans.
      drm/i915: Adjust clip matrix for clip origin.
      drm/i915: Apply more micro-optimisations when targetting CONTENT_ALPHA
      drm/i915: Discard redundant solitary clips during fill
      test: Add a1-mask-sample
      glew: don't pull in GL/glu.h
      drm/i965: Acquire device around commit.
      gstate: Account for undropped non-transformed glyphs.
      spans: Initialise rects->is_bounded for polygon compat.
      gl: Add EGL interface
      paginated: Use common is_clear.
      ps: Destroy the local surface on error.
      wrapper: Apply device transform inverse as appropriate.
      script: Make the test suite run again!
      test/any2ppm: Check for errors after executing script.
      script: Remove the version check.
      script: Use a stack to push/pop recursed line numbers.
      ps: Free page on error path.
      surface: Check pattern for error status.
      image: Special case wholly unbounded fixups.
      ps: Skip surface emission if in error state.
      recording: Cleanup the clip on error.
      drm/intel: Replace open-coding of _cairo_rtree_node_remove()
      gl: Decouple cache from scaled-font on context destruction
      drm/intel: Revoke glyph caches on device finish
      gl: Hook in glyph cache finalisation.
      xcb: Gracefully destroy any lingering fallback during finish.
      xcb: Destroy reference to local source picture in show-glyphs.
      xcb: Consume the implicit reference for the cached connection on finish
      test/clip-image: Free image after use.
      test/pthread-same-source: Free source after use.
      xcb: Fix leak of clip rectangle during show-glyphs.
      xcb: Relinquish the xcb connection on finish.
      xcb: Destroy reference to clip surface after use.
      test/clear-source: Free source after use.
      xcb: Free traps after conversion from boxes.
      image: Free traps after conversion from boxes.
      cairo: Typos in docs.
      device: Add language binding interfaces.
      clip: Remove the redundant _cairo_clip_init_rectangle()
      boilerplate: Cleanup the list of backends upon shutdown.
      script: More acquire device fixes.
      script: Manually unlink font entries upon destruction
      script: Free the surface/font bitmaps.
      scaled-font: Destroy the old surface when replacing scaled_glyph->recording
      xcb: Ensure that we own the glyph cache before use.
      snapshot: Finish the clone.
      clip: Don't reduce all-clip to no-clip.
      clip: propagate the no-clip through the copy.
      recording: Fix leak of clip from snapshots of recording surfaces.
      subsurface: Ignore return from _cairo_clip_init_copy()
      boilerplate: Create an image16 target
      drm/i915: Normalize spans opacity value
      drm/i915: Avoid using another unpreserved temporary
      perf: Compute ops per second
      perf/micro: Exercise different sizes and antialising modes with glyphs
      scaled-font: Optimize cairo_scaled_font_lookup()
      xcb: Cache whether we have already check a glyph for size.
      scaled-glyph: Allow removal info fields.
      Silence enumeration warnings following addition of RGB16_565
      doc: Fix some missing '%' in gtk-doc comments
      xlib: Avoid multiple evaluations inside bswap_*() macro.
      configure: check -lrt for shm_open()
      xlib: Rearrange xrender stubs to restore compilation without xrender.h
      boilerplate: Allox xlib-fallback to build without RENDER
      perf/micro: Show megapixel fill rate during paint.
      test: Add inverse text
      script: Fix endian encoding of '<|' length.
      perf: Switch between micro and trace benchmarks for cairo-perf-diff
      script: Another RGB16_565 warning.
      script: Compile without FT_FONT
      script: Another RGB16_565 warning.
      test: Add clip-contexts
      clip: Compare the whole clip when testing for equality.
      clip: Compile fix for previous clip.
      xcb: Use normal finish to decouple from surface cache.
      cache: Tidy _cairo_cache_shrink_to_accommodate()
      hull: _cairo_hull_vertex_compare() return 0 for identical elements
      xlib: Don't operate on an error object inside setters.
      surface: Propagate the error status to _cairo_surface_get_device()
      Win32 features update.
      pdf: Don't write error status to the inert object.
      ps: Don't write error status to the inert object.
      svg: Don't write error status to the inert object.
      rtree: Remove the false assert upon collapse.
      script: Flush prior to modifying the image data.
      gl: Don't write error status to the inert object.
      gl: Handle component-alpha ADD
      configure: typo in check for xcb-shm
      build: Spelling correction
      Win32 features update
      cairoint.h: Change ASSERT_NOT_REACHED to remove compiler warning
      pdf: Suppress compiler warning.
      cairo: Use explicit device flushing.
      test: Add clip-empty-group
      cairo: Handle the all-clipped state in cairo_push_group()
      xlib: Simply release the ref, not destroy, from CloseDisplay.
      test: Add clip-shape
      clip: Report the surface offset when retrieving the clip mask
      clip: Fix sign reverse when combining with the clip surface.
      clip: Skip combining with solid pixel aligned boxes.
      region: Cast to remove const to suppress compiler warnings.
      trace: Trivial compiler warning fix
      trace: Check return value to suppress compiler warning
      trace: Remove unused functions
      image: Compute sample extents
      snapshot: propagate status on finish
      test: Add image16 refs
      test: Update image ref images, and used fonts in README
      surface: skip OVER is the source is clear.
      image: Convert 1x1 samples into solid colors.
      snapshot: Simply memcpy if the cloned image matches the original.
      snapshot: The snapshot masquerades as the target surface type.
      test: Mark surfaces as finished if the data goes out of scope.
      test: Expand xlib-expose-event to cover all backends
      trace: Wrap cairo_surface_create_for_region()
      script: Reconstruct subsurfaces.
      subsurface: Mark the image as !clear after copying.
      script: Replace the missing " " after pop
      image: Generate clear/white/black images when !HAS_ATOMIC_OPS
      atomic: Tweak for compilation x86.
      test: Remove group-unaligned.*new.png
      subsurface: s/region/rectangle/
      image: Simplify translation of pattern matrix for composite_trapezoids()
      surface: Convert snapshots from an array to a double-linked list.
      snapshot: Attach the backend generated snapshot to the target
      boilerplate: Destroy the redundant image reference
      boilerplate: Ensure that the recording surfaces are finished.
      paginated: Call surface finish explicitly on recording surface
      ps: Enable native encoding of subsurface patterns.
      pdf; Emit subsurface patterns natively.
      recording: Check that we do not use a finished recording surface.
      boilerplate: Fix use after free from 3ae5723
      Revert "paginated: Call surface finish explicitly on recording surface"
      test: Expand pthread-show-text to cover all surfaces.
      atomic: Add Andrea's copyright notice
      ft: Convert an assert into an unlikely error return.
      image: A few missing tests for malloc failure
      paginated: propagate malloc failures more cleanly.
      scaled-font: Check for an error return when retrieving the implementation
      test: Improve memfault behaviour.
      xlib: Don't delete gradients in unbounded fixup code
      test: Embed the list pointer into cairo_test_t
      image: Replace assert with error return
      test: Cleanup after failed pthread_join().
      ps: Always cleanup used font subsets.
      pdf: Cleanup local reference to source on error paths.
      image: Check for pixman image allocation failure during glyphs
      test/user-font-proxy: Check we install user data on the scaled font
      test/bitmap-font: Check for memfault error
      test/bitmap-font: Propagate memfault
      test/user-font-rescale: Use after free and check for memfault.
      image: Propagate failure from pixman_image_fill_boxes().
      scaled-font: Remove MRU cache upon detection of error.
      test: Add subsurface-modify-{child,parent}
      test: Add subsurface-pad
      ps: Remove the fill stroke command
      scaled-font: Convert to cairo_list_t
      paginated: Mark as clear initially.
      pdf: Assert that no other error can occur for an invertible matrix.
      ps: Force finish of the type3 glyph surfaces.
      type3: Minor tweaks to remove a redundant check.
      test/subsurface-modify-parent: Free region.
      recording: Avoid refcycles by always copying the command array.
      recording: Mark an empty recording surface as clear.
      test/bitmap-font: Destroy FcPattern
      image: Propagate failure from pixman_image_set_clip_region()
      clip: Propagate memfault from translating clip region
      test/mask-glyphs: Check for memfault
      clip: Trivial compiler warning
      test: Add radial-gradient-mask
      scaled-font: Pluck last glyph from the most recent page.
      test: Add xlib-expose-event.image16.ref.png
      clip: Propagate failure from retrieving the previous clip surface.
      image: Propagate error instead of asserting.
      xlib: Ensure the global display mutex is initialized before use.
      xlib: Remove obsolete comment, there is no race anymore
      xlib: Remove screen->has_render
      xlib: Convert visual array to a cairo_list_t
      xlib: Remove reference counting for cairo_xlib_screen_t
      test: Add subsurface-image-repeat
      test/clip-contexts: Free secondary context
      test: Add gl-surface-source
      surface-fallback: Handle memfaults during clipping.
      test/gl-surface-source: Attach GLXContext to device user data.
      device: Reorder finalization so that user data is destroyed last.
      cairo: stash a number of contexts for use with NO_MUTEX
      gl: Enable fixed-function without glsl.
      subsurface: Include device offset in extents
      doc: regen
      surface-fallback: Only destroy the clip after it has been initialized.
      test/copy-path: memfault status checks.
      cairo: Special case cairo_t with NULL_POINTER
      subsurface: Don't double apply device offset for deep subsurfaces.
      test: Force cairo-test-suite to return SUCCESS
      xcb: Reset picture after failed snapshot.
      xcb: Upload images in place.
      xcb: Find the correct xcb_screen_t for faking Screen
      region: _cairo_region_create_in_error()
      xcb: trivial memfault fixes.
      trace: Try wrapping FT_Open_Face()
      trace: And for the bonus round... Make it compile.
      win32-printing: compile fix.
      test: Remove pthread_yield()
      clip: Fill instead of creating intermediate surfaces.
      xcb: discard glyph mask and use dst directly when possible.
      simplify pattern extents for translation matrices
      gstate: reduce a couple more operators
      script: Don't hash the entire image.
      script: Avoid the expensive of the redundant memset.
      rtree: defer propagating pinned nodes until eviction.
      rtree: Remove the unused evict hook.
      drm: code dump, sorry.
      gallium: Refresh.
      gcc-4.5 warnings and optimisation flags.
      gstate: Don't reduce solid source and mask for SOURCE and CLEAR
      color: Special case comparing color stops.
      Make cairo_color_stop_t a unique type.
      rtree: Replace undeclared TRUE/FALSE with 1/0
      configure: Include PTHREAD_CFLAGS in CAIRO_LDFLAGS
      cairo: Missing private markup for _cairo_format_to_pixman_format
      boilerplate: Exercise manual double-buffering to a window
      rtree: Actually pin the node when pinning.
      gl: Pretty print the error GLenum.
      gl: Rename cairo_gl_shader_program_t to cairo_gl_shader_t
      gl: Throw a _cairo_error when detecting a GLerror
      gl: Check status after composite_begin
      atomic: Add memory barriers if required for intel primitives
      freed-pool: Don't access beyond the end of the array.
      script: Update csi-exec to match new interface.
      boilerplate: Exercise RENDER capable windows.
      gl: Make _cairo_gl_shader_(init|compile) static
      gl: Check for an error device when creating surfaces.
      gl: _cairo_set_shader_by_type() cannot return UNSUPPORTED
      gl: Unmap the vertex buffer prior to using in DaawArrays()
      Revert "gstate: reduce a couple more operators"
      bo: Fix debugging for changes in internal traps api.
      test: Add half-coverage to exercise the rasteriser with subpixel geometry.
      bo: And disable DEBUG_TRAPS again.
      test: Fix half-coverage colouration.
      test: Add partial coverage.
      gstate: Track whether the combination of ctm * device is identity.
      test: Update partial coverage.
      test: Exercise partial coverage some more.
      path: Exponentially grow buffer based on populated points and ops.
      test: Distinguish tests that throw an error from a normal fail.
      test: Add a simple coverage test.
      polygon: Reorder conditionals based on likelihood.
      xlib: Adjust trapezoid precision based on antialias.
      test/pdf2png: Don't use DEST_OVER as poppler starts using subpixel text.
      color: Mark _cairo_color_get_content() as private.
      gl: make check insists "cairoint.h" is first.
      test: Add a convenience script to disable the screensaver when testing
      test: Restrict the coverage tests to raster targets.
      Revert "test/pdf2png: Don't use DEST_OVER as poppler starts using subpixel text."
      test: Use a group to render PDF correctly using poppler.
      gstate: Update cached matrix state after device transform changes on the target
      test: ps ref image refresh.
      test: pdf ref image refresh
      pattern: Remove extraordinary _cairo_pattern_fini_snapshot().
      pattern: Remove incorrect optimisations from _cairo_pattern_aquire_surface()
      test: xlib ref image refresh
      image: Apply component alpha to composite masks.
      cairo: Create error objects for cairo_t
      test: More coverage coverage.
      test: More minute geometry exercised by partial-coverage.
      test: Use exact matching on test names by default.
      test: Disable tests that are too slow to run by default.
      test/coverage: Add a comment describing the column_triangle geometry()
      test/coverage: Refine comments
      test/coverage: The comment was still wrong.
      test: Record the expected failure mode for partial-coverage-intersecting-quads
      test: Forgotten ref image.
      gl: start returning the failure status aftern an invalid GL op.
      test: Missing ref images
      NEWS: Boring stub for 1.9.10.
      NEWS: take two.
      check: Disable running cairo-perf-micro
      NEWS: Minor tweaks.
      test: Move all output below test/output/
      version: 1.9.8

Dave Yeo (1):
      os2: Fix get_extents() segfaulting.

Dmitri Vorobiev (1):
      scaled-font: optimize cairo_scaled_font_text_to_glyphs()

Jeff Muizelaar (3):
      Add an implementation of ffs() for MSVC
      Remove comma from the end of the CAIRO_PATTERN_ACQUIRE enum
      Add an additional set parantheses around the container_of macro

Jonathan Kew (2):
      quartz: Work around bad glyph extents returned by CoreGraphics for empty glyphs in Al Bayan font
      win32: Grow glyph extents to account for ClearType

Karl Tomlinson (1):
      xlib: Find matching Visual for XRenderFormat

Kristian Rietveld (1):
      quartz: Define cairo_quartz_float_t and use instead of float

M Joonas Pihlaja (8):
      text: Fix assert failure from compositing by SOURCE with a mask internally.
      test: Fix a wrongly typed return value in scaled-font-zero-matrix.
      compiler: Explain the slim hidden macros.
      test: Add tests covering more clip fast paths in groups.
      test: Test downscaling and extending a surface pattern.
      image: Fix bug optimizing surface pattern extend modes.
      api: Introduce CAIRO_FORMAT_INVALID formally in the API.
      xcb: Update minimum required versions of libxcb.

Makoto Kato (1):
      openvg: fix build break

Metal Sonic (1):
      Update license blocks to use "Mozilla Foundation" instead of "Mozilla Corporation"

Oleg Romashin (1):
      Add back support for CAIRO_FORMAT_RGB16_565

Owen W. Taylor (1):
      language bindings guide: clarify mapping for cairo_pattern_create_rgb[a]

Richard Procter (1):
      Bug 28100 - Font option CAIRO_HINT_METRICS_OFF unhonoured on win32

Robert O'Callahan (4):
      quartz: Don't fallback to pixman for repeating radial gradients.
      Clean up Quartz gradient code by moving some local variables to static const globals.
      Don't repeat a Quartz gradient more times than necessary, to avoid Quartz quality problems when there are lots of repeated color stops.
      Ensure the quartz backend returns the first stop for negative positions on the gradient line of a nonrepeating linear gradient.

timeless (1):
      Remove useless null checks of a and b in _cairo_path_fixed_equal

What is cairo
Cairo is a 2D graphics library with support for multiple output
devices. Currently supported output targets include the X Window
System, quartz, win32, and image buffers, as well as PDF, PostScript,
and SVG file output. Experimental backends include OpenGL, XCB, 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):


Chris Wilson, Intel Open Source Technology Centre

More information about the Ftp-release mailing list