From d3af8dc0117dc1ce4fea3d05c7a2d7786bd78986 Mon Sep 17 00:00:00 2001 From: root Date: Mon, 14 May 2012 00:02:14 +0000 Subject: Mon May 14 00:02:13 UTC 2012 --- multilib/lib32-cairo/PKGBUILD | 20 +- multilib/lib32-cairo/git_fixes.patch | 1086 ++++++++++++++++++++++++++++++++++ 2 files changed, 1099 insertions(+), 7 deletions(-) create mode 100644 multilib/lib32-cairo/git_fixes.patch (limited to 'multilib') diff --git a/multilib/lib32-cairo/PKGBUILD b/multilib/lib32-cairo/PKGBUILD index 1af993d35..6eb22f943 100644 --- a/multilib/lib32-cairo/PKGBUILD +++ b/multilib/lib32-cairo/PKGBUILD @@ -1,10 +1,10 @@ -# $Id: PKGBUILD 63485 2012-02-05 11:45:09Z ibiru $ +# $Id: PKGBUILD 70602 2012-05-12 13:12:37Z bluewind $ # Maintainer: Ionut Biru _pkgbasename=cairo pkgname=lib32-$_pkgbasename -pkgver=1.10.2 -pkgrel=3 +pkgver=1.12.0 +pkgrel=1 pkgdesc="Cairo vector graphics library (32-bit)" arch=('x86_64') url="http://cairographics.org/" @@ -13,9 +13,11 @@ depends=('lib32-libpng' 'lib32-libxrender' 'lib32-fontconfig' 'lib32-pixman' 'lib32-glib2' ${_pkgbasename}) makedepends=('gcc-multilib') source=(http://cairographics.org/releases/${_pkgbasename}-${pkgver}.tar.gz - cairo-1.10.0-buggy_gradients.patch) -sha1sums=('ccce5ae03f99c505db97c286a0c9a90a926d3c6e' - '8b843a9934e5112b6188e5bcf4adfc1fdaf9fa04') + cairo-1.10.0-buggy_gradients.patch + git_fixes.patch) +md5sums=('e6c85575ba7094f88b637bdfd835a751' + '9b323790dab003e228c6955633cb888e' + 'ce32ba4639d910bce7159c9a67ff2355') build() { export CC="gcc -m32" @@ -23,9 +25,13 @@ build() { export PKG_CONFIG_PATH="/usr/lib32/pkgconfig" cd "${srcdir}/${_pkgbasename}-${pkgver}" + + patch -Np1 -i ${srcdir}/git_fixes.patch + autoreconf -vfi + ./configure --prefix=/usr --libdir=/usr/lib32 \ --sysconfdir=/etc --localstatedir=/var \ - --disable-static --enable-tee + --disable-static --enable-tee --disable-xlib-xcb make } diff --git a/multilib/lib32-cairo/git_fixes.patch b/multilib/lib32-cairo/git_fixes.patch new file mode 100644 index 000000000..6ad8979eb --- /dev/null +++ b/multilib/lib32-cairo/git_fixes.patch @@ -0,0 +1,1086 @@ +From ede11b2954db19e3ca9d31cef7d04a7bf0e42ddc Mon Sep 17 00:00:00 2001 +From: Behdad Esfahbod +Date: Sun, 25 Mar 2012 18:37:14 +0000 +Subject: Fix math in comments + +--- +diff --git a/src/cairo-arc.c b/src/cairo-arc.c +index dc07fee..6977e88 100644 +--- a/src/cairo-arc.c ++++ b/src/cairo-arc.c +@@ -139,7 +139,7 @@ _arc_segments_needed (double angle, + + From that paper, a very practical value of h is: + +- h = 4/3 * tan(angle/4) ++ h = 4/3 * R * tan(angle/4) + + This value does not give the spline with minimal error, but it does + provide a very good approximation, (6th-order convergence), and the +-- +cgit v0.9.0.2-2-gbebe +From fba21ef2a4c4eb343668267fda713aedbb6af2a4 Mon Sep 17 00:00:00 2001 +From: Henry (Yu) Song +Date: Tue, 27 Mar 2012 21:25:37 +0000 +Subject: gl: use font's antialias option to check whether it needs mask + +There is need to loop over number of glyphs to check wether the glyph +image is a ARGB32 as the font's antialias option can be used for checking. +If antialias is SUBPIXEL or BEST, the glyph surface will be ARGB32, +otherwise it will be A8 format. Therefore we will only be using +component-alpha at SUBPIXEL (or better) font quality and only then need +a mask for multiple pass glyph composition. +--- +diff --git a/src/cairo-gl-glyphs.c b/src/cairo-gl-glyphs.c +index 832956f..9756ea4 100644 +--- a/src/cairo-gl-glyphs.c ++++ b/src/cairo-gl-glyphs.c +@@ -427,23 +427,15 @@ _cairo_gl_composite_glyphs (void *_dst, + + TRACE ((stderr, "%s\n", __FUNCTION__)); + +- /* If any of the glyphs are component alpha, we have to go through a mask, +- * since only _cairo_gl_surface_composite() currently supports component +- * alpha. ++ /* If any of the glyphs require component alpha, we have to go through ++ * a mask, since only _cairo_gl_surface_composite() currently supports ++ * component alpha. + */ +- if (!dst->base.is_clear && ! info->use_mask && op != CAIRO_OPERATOR_OVER) { +- for (i = 0; i < info->num_glyphs; i++) { +- cairo_scaled_glyph_t *scaled_glyph; +- +- if (_cairo_scaled_glyph_lookup (info->font, info->glyphs[i].index, +- CAIRO_SCALED_GLYPH_INFO_SURFACE, +- &scaled_glyph) == CAIRO_INT_STATUS_SUCCESS && +- scaled_glyph->surface->format == CAIRO_FORMAT_ARGB32) +- { +- info->use_mask = TRUE; +- break; +- } +- } ++ if (!dst->base.is_clear && ! info->use_mask && op != CAIRO_OPERATOR_OVER && ++ (info->font->options.antialias == CAIRO_ANTIALIAS_SUBPIXEL || ++ info->font->options.antialias == CAIRO_ANTIALIAS_BEST)) ++ { ++ info->use_mask = TRUE; + } + + if (info->use_mask) { +-- +cgit v0.9.0.2-2-gbebe +From d304f0e57be8036719c3709e2419487326369105 Mon Sep 17 00:00:00 2001 +From: Chris Wilson +Date: Wed, 28 Mar 2012 23:32:36 +0000 +Subject: composite-rectangles: Trim extents for SOURCE and CLEAR to the mask + +The SOURCE and CLEAR are the odd pair in Cairo's range of operators that +are bound by the shape/mask, but are unbound by the source. This +regularly leads to bugs as only track the bound/unbound rectangles and +confuse the meaning when bound only by the mask. + +What is required is that the unbound extents in this case is only +trimmed by the mask (the bounded extents are still the intersection of +all). + +Fixes bug-source-cu + +Signed-off-by: Chris Wilson +--- +diff --git a/src/cairo-composite-rectangles.c b/src/cairo-composite-rectangles.c +index 106571e..8c5cd5a 100644 +--- a/src/cairo-composite-rectangles.c ++++ b/src/cairo-composite-rectangles.c +@@ -147,8 +147,12 @@ _cairo_composite_rectangles_intersect (cairo_composite_rectangles_t *extents, + if (! ret && extents->is_bounded & CAIRO_OPERATOR_BOUND_BY_MASK) + return CAIRO_INT_STATUS_NOTHING_TO_DO; + +- if (extents->is_bounded == (CAIRO_OPERATOR_BOUND_BY_MASK | CAIRO_OPERATOR_BOUND_BY_SOURCE)) ++ if (extents->is_bounded == (CAIRO_OPERATOR_BOUND_BY_MASK | CAIRO_OPERATOR_BOUND_BY_SOURCE)) { + extents->unbounded = extents->bounded; ++ } else if (extents->is_bounded & CAIRO_OPERATOR_BOUND_BY_MASK) { ++ if (!_cairo_rectangle_intersect (&extents->unbounded, &extents->mask)) ++ return CAIRO_INT_STATUS_NOTHING_TO_DO; ++ } + + extents->clip = _cairo_clip_reduce_for_composite (clip, extents); + if (_cairo_clip_is_all_clipped (extents->clip)) +@@ -199,8 +203,12 @@ _cairo_composite_rectangles_intersect_source_extents (cairo_composite_rectangles + rect.height == extents->bounded.height) + return CAIRO_INT_STATUS_SUCCESS; + +- if (extents->is_bounded == (CAIRO_OPERATOR_BOUND_BY_MASK | CAIRO_OPERATOR_BOUND_BY_SOURCE)) ++ if (extents->is_bounded == (CAIRO_OPERATOR_BOUND_BY_MASK | CAIRO_OPERATOR_BOUND_BY_SOURCE)) { + extents->unbounded = extents->bounded; ++ } else if (extents->is_bounded & CAIRO_OPERATOR_BOUND_BY_MASK) { ++ if (!_cairo_rectangle_intersect (&extents->unbounded, &extents->mask)) ++ return CAIRO_INT_STATUS_NOTHING_TO_DO; ++ } + + clip = extents->clip; + extents->clip = _cairo_clip_reduce_for_composite (clip, extents); +@@ -253,8 +261,12 @@ _cairo_composite_rectangles_intersect_mask_extents (cairo_composite_rectangles_t + mask.height == extents->bounded.height) + return CAIRO_INT_STATUS_SUCCESS; + +- if (extents->is_bounded == (CAIRO_OPERATOR_BOUND_BY_MASK | CAIRO_OPERATOR_BOUND_BY_SOURCE)) ++ if (extents->is_bounded == (CAIRO_OPERATOR_BOUND_BY_MASK | CAIRO_OPERATOR_BOUND_BY_SOURCE)) { + extents->unbounded = extents->bounded; ++ } else if (extents->is_bounded & CAIRO_OPERATOR_BOUND_BY_MASK) { ++ if (!_cairo_rectangle_intersect (&extents->unbounded, &extents->mask)) ++ return CAIRO_INT_STATUS_NOTHING_TO_DO; ++ } + + clip = extents->clip; + extents->clip = _cairo_clip_reduce_for_composite (clip, extents); +-- +cgit v0.9.0.2-2-gbebe +From af6e084dd78fcbb8ecce46c57f655f5e24343b8c Mon Sep 17 00:00:00 2001 +From: Chris Wilson +Date: Thu, 29 Mar 2012 13:48:24 +0000 +Subject: cairoint: Mark PDF surface as requiring the deflate stream output + +Signed-off-by: Chris Wilson +--- +diff --git a/src/cairoint.h b/src/cairoint.h +index 9a8003e..9f20d51 100644 +--- a/src/cairoint.h ++++ b/src/cairoint.h +@@ -73,7 +73,10 @@ + #include "cairo-compiler-private.h" + #include "cairo-error-private.h" + +-#if CAIRO_HAS_PS_SURFACE || CAIRO_HAS_SCRIPT_SURFACE || CAIRO_HAS_XML_SURFACE ++#if CAIRO_HAS_PDF_SURFACE || \ ++ CAIRO_HAS_PS_SURFACE || \ ++ CAIRO_HAS_SCRIPT_SURFACE || \ ++ CAIRO_HAS_XML_SURFACE + #define CAIRO_HAS_DEFLATE_STREAM 1 + #endif + +@@ -84,7 +87,9 @@ + #define CAIRO_HAS_FONT_SUBSET 1 + #endif + +-#if CAIRO_HAS_PS_SURFACE || CAIRO_HAS_PDF_SURFACE || CAIRO_HAS_FONT_SUBSET ++#if CAIRO_HAS_PS_SURFACE || \ ++ CAIRO_HAS_PDF_SURFACE || \ ++ CAIRO_HAS_FONT_SUBSET + #define CAIRO_HAS_PDF_OPERATORS 1 + #endif + +-- +cgit v0.9.0.2-2-gbebe +From a965b0f95fdeb567f7ccb51f7c8c47735a61e2d9 Mon Sep 17 00:00:00 2001 +From: Henry (Yu) Song +Date: Thu, 29 Mar 2012 01:08:51 +0000 +Subject: gl: fix y-axis origin when map_to_image() for non texture GL surface + +We need to fix y-axis origin when map a GL surface to image surface for +non-texture GL surface. + +Test cases: extended-blend-alpha-mask, extended-blend-mask. +Although the image outputs is not right, but the image on the first grid +(upper-left corner) is correct comparing to image output. +--- +diff --git a/src/cairo-gl-surface.c b/src/cairo-gl-surface.c +index 8bbf939..32ecf63 100644 +--- a/src/cairo-gl-surface.c ++++ b/src/cairo-gl-surface.c +@@ -985,6 +985,7 @@ _cairo_gl_surface_map_to_image (void *abstract_surface, + unsigned int cpp; + cairo_bool_t invert; + cairo_status_t status; ++ int y; + + /* Want to use a switch statement here but the compiler gets whiny. */ + if (surface->base.content == CAIRO_CONTENT_COLOR_ALPHA) { +@@ -1065,7 +1066,12 @@ _cairo_gl_surface_map_to_image (void *abstract_surface, + glPixelStorei (GL_PACK_ROW_LENGTH, image->stride / cpp); + if (invert) + glPixelStorei (GL_PACK_INVERT_MESA, 1); +- glReadPixels (extents->x, extents->y, ++ ++ y = extents->y; ++ if (! _cairo_gl_surface_is_texture (surface)) ++ y = surface->height - extents->y - extents->height; ++ ++ glReadPixels (extents->x, y, + extents->width, extents->height, + format, type, image->data); + if (invert) +-- +cgit v0.9.0.2-2-gbebe +From c77112c5464d7ff21052527f82f4d729cc509291 Mon Sep 17 00:00:00 2001 +From: Uli Schlachter +Date: Mon, 02 Apr 2012 18:43:00 +0000 +Subject: xcb: Fix SHM in _get_image() + +Commit 2283ab9 introduced a logic error. Instead of falling back to the non-SHM +path when getting the image via SHM failed, we now did the fallback when getting +the image via SHM worked (which means that the SHM operation was a waste of +time). + +Signed-off-by: Uli Schlachter +--- +diff --git a/src/cairo-xcb-surface.c b/src/cairo-xcb-surface.c +index fff4f52..6bedbda 100644 +--- a/src/cairo-xcb-surface.c ++++ b/src/cairo-xcb-surface.c +@@ -367,7 +367,7 @@ _get_image (cairo_xcb_surface_t *surface, + if (use_shm) { + image = _get_shm_image (surface, x, y, width, height); + if (image) { +- if (image->status) { ++ if (image->status == CAIRO_STATUS_SUCCESS) { + _cairo_xcb_connection_release (connection); + return image; + } +-- +cgit v0.9.0.2-2-gbebe +From cc247c346b75353f16ab40ac74c54cdd9663d16b Mon Sep 17 00:00:00 2001 +From: Henry (Yu) Song +Date: Mon, 02 Apr 2012 21:29:47 +0000 +Subject: gl: Remove an unused variable + +--- +diff --git a/src/cairo-gl-gradient.c b/src/cairo-gl-gradient.c +index b364b92..ce7c0dd 100644 +--- a/src/cairo-gl-gradient.c ++++ b/src/cairo-gl-gradient.c +@@ -207,7 +207,6 @@ _cairo_gl_gradient_create (cairo_gl_context_t *ctx, + cairo_status_t status; + int tex_width; + void *data; +- cairo_gl_dispatch_t *dispatch = &ctx->dispatch; + + if ((unsigned int) ctx->max_texture_size / 2 <= n_stops) + return CAIRO_INT_STATUS_UNSUPPORTED; +-- +cgit v0.9.0.2-2-gbebe +From 7a262fd398c8a1f3c9052e8d9ec459e27ff91b4d Mon Sep 17 00:00:00 2001 +From: Adrian Johnson +Date: Wed, 04 Apr 2012 10:23:09 +0000 +Subject: fix bug in _cairo_image_analyze_color + +--- +diff --git a/src/cairo-image-surface.c b/src/cairo-image-surface.c +index 8208a15..e860e1b 100644 +--- a/src/cairo-image-surface.c ++++ b/src/cairo-image-surface.c +@@ -1130,9 +1130,12 @@ _cairo_image_analyze_color (cairo_image_surface_t *image) + if (image->color != CAIRO_IMAGE_UNKNOWN_COLOR) + return image->color; + +- if (image->format == CAIRO_FORMAT_A1 || image->format == CAIRO_FORMAT_A8) ++ if (image->format == CAIRO_FORMAT_A1) + return image->color = CAIRO_IMAGE_IS_MONOCHROME; + ++ if (image->format == CAIRO_FORMAT_A8) ++ return image->color = CAIRO_IMAGE_IS_GRAYSCALE; ++ + if (image->format == CAIRO_FORMAT_ARGB32) { + image->color = CAIRO_IMAGE_IS_MONOCHROME; + for (y = 0; y < image->height; y++) { +-- +cgit v0.9.0.2-2-gbebe +From 70b2856ed3d31b41e69b3d82fb9c5c11c2b3d3d4 Mon Sep 17 00:00:00 2001 +From: Adrian Johnson +Date: Thu, 05 Apr 2012 23:43:35 +0000 +Subject: type1-subset: use fallback font if glyph widths are calculated + +Bug 48349 has a pdf file with a Type 1 font where the glyph widths are +of the form: + +34 9302 19 div hsbw +--- +diff --git a/src/cairo-type1-subset.c b/src/cairo-type1-subset.c +index 607ac8e..ba1008a 100644 +--- a/src/cairo-type1-subset.c ++++ b/src/cairo-type1-subset.c +@@ -751,6 +751,9 @@ cairo_type1_font_subset_parse_charstring (cairo_type1_font_subset_t *font, + command = *p++; + switch (command) { + case TYPE1_CHARSTRING_COMMAND_HSBW: ++ if (! last_op_was_integer) ++ return CAIRO_INT_STATUS_UNSUPPORTED; ++ + font->glyphs[glyph].width = font->build_stack.stack[1]/font->base.units_per_em; + font->build_stack.sp = 0; + last_op_was_integer = FALSE; +@@ -797,6 +800,9 @@ cairo_type1_font_subset_parse_charstring (cairo_type1_font_subset_t *font, + break; + + case TYPE1_CHARSTRING_COMMAND_SBW: ++ if (! last_op_was_integer) ++ return CAIRO_INT_STATUS_UNSUPPORTED; ++ + font->glyphs[glyph].width = font->build_stack.stack[2]/font->base.units_per_em; + font->build_stack.sp = 0; + last_op_was_integer = FALSE; +-- +cgit v0.9.0.2-2-gbebe +From a6d955fcc46ae2da8d6f3b2cadeae64c03066461 Mon Sep 17 00:00:00 2001 +From: Adrian Johnson +Date: Thu, 05 Apr 2012 23:53:50 +0000 +Subject: fix indentation in cairo_type1_font_subset_parse_charstring + +--- +diff --git a/src/cairo-type1-subset.c b/src/cairo-type1-subset.c +index ba1008a..ddef8ae 100644 +--- a/src/cairo-type1-subset.c ++++ b/src/cairo-type1-subset.c +@@ -1,3 +1,4 @@ ++/* -*- Mode: c; c-basic-offset: 4; indent-tabs-mode: t; tab-width: 8; -*- */ + /* cairo - a vector graphics library with display and print output + * + * Copyright © 2006 Red Hat, Inc +@@ -750,86 +751,79 @@ cairo_type1_font_subset_parse_charstring (cairo_type1_font_subset_t *font, + if (*p < 32) { + command = *p++; + switch (command) { +- case TYPE1_CHARSTRING_COMMAND_HSBW: +- if (! last_op_was_integer) +- return CAIRO_INT_STATUS_UNSUPPORTED; ++ case TYPE1_CHARSTRING_COMMAND_HSBW: ++ if (! last_op_was_integer) ++ return CAIRO_INT_STATUS_UNSUPPORTED; ++ ++ font->glyphs[glyph].width = font->build_stack.stack[1]/font->base.units_per_em; ++ font->build_stack.sp = 0; ++ last_op_was_integer = FALSE; ++ break; ++ ++ case TYPE1_CHARSTRING_COMMAND_CALLSUBR: ++ if (font->subset_subrs && ++ last_op_was_integer && ++ font->build_stack.top_value >= 0 && ++ font->build_stack.top_value < font->num_subrs) ++ { ++ subr_num = font->build_stack.top_value; ++ font->subrs[subr_num].used = TRUE; ++ last_op_was_integer = FALSE; ++ status = cairo_type1_font_subset_parse_charstring (font, ++ glyph, ++ font->subrs[subr_num].subr_string, ++ font->subrs[subr_num].subr_length); ++ } else { ++ font->subset_subrs = FALSE; ++ } ++ break; ++ ++ case TYPE1_CHARSTRING_COMMAND_ESCAPE: ++ command = command << 8 | *p++; ++ switch (command) { ++ case TYPE1_CHARSTRING_COMMAND_SEAC: ++ /* The seac command takes five integer arguments. The ++ * last two are glyph indices into the PS standard ++ * encoding give the names of the glyphs that this ++ * glyph is composed from. All we need to do is to ++ * make sure those glyphs are present in the subset ++ * under their standard names. */ ++ status = use_standard_encoding_glyph (font, font->build_stack.stack[3]); ++ if (unlikely (status)) ++ return status; ++ ++ status = use_standard_encoding_glyph (font, font->build_stack.stack[4]); ++ if (unlikely (status)) ++ return status; + +- font->glyphs[glyph].width = font->build_stack.stack[1]/font->base.units_per_em; + font->build_stack.sp = 0; + last_op_was_integer = FALSE; + break; + +- case TYPE1_CHARSTRING_COMMAND_CALLSUBR: +- if (font->subset_subrs && +- last_op_was_integer && +- font->build_stack.top_value >= 0 && +- font->build_stack.top_value < font->num_subrs) +- { +- subr_num = font->build_stack.top_value; +- font->subrs[subr_num].used = TRUE; +- last_op_was_integer = FALSE; +- status = cairo_type1_font_subset_parse_charstring (font, +- glyph, +- font->subrs[subr_num].subr_string, +- font->subrs[subr_num].subr_length); +- } else { +- font->subset_subrs = FALSE; +- } ++ case TYPE1_CHARSTRING_COMMAND_SBW: ++ if (! last_op_was_integer) ++ return CAIRO_INT_STATUS_UNSUPPORTED; ++ ++ font->glyphs[glyph].width = font->build_stack.stack[2]/font->base.units_per_em; ++ font->build_stack.sp = 0; ++ last_op_was_integer = FALSE; + break; + +- case TYPE1_CHARSTRING_COMMAND_ESCAPE: +- command = command << 8 | *p++; +- switch (command) { +- case TYPE1_CHARSTRING_COMMAND_SEAC: +- /* The seac command takes five integer arguments. The +- * last two are glyph indices into the PS standard +- * encoding give the names of the glyphs that this +- * glyph is composed from. All we need to do is to +- * make sure those glyphs are present in the subset +- * under their standard names. */ +- status = use_standard_encoding_glyph (font, font->build_stack.stack[3]); +- if (unlikely (status)) +- return status; +- +- status = use_standard_encoding_glyph (font, font->build_stack.stack[4]); +- if (unlikely (status)) +- return status; +- +- font->build_stack.sp = 0; +- last_op_was_integer = FALSE; +- break; +- +- case TYPE1_CHARSTRING_COMMAND_SBW: +- if (! last_op_was_integer) +- return CAIRO_INT_STATUS_UNSUPPORTED; +- +- font->glyphs[glyph].width = font->build_stack.stack[2]/font->base.units_per_em; +- font->build_stack.sp = 0; +- last_op_was_integer = FALSE; +- break; +- +- case TYPE1_CHARSTRING_COMMAND_CALLOTHERSUBR: +- for (i = 0; i < font->build_stack.sp; i++) +- font->ps_stack.other_subr_args[i] = font->build_stack.stack[i]; +- font->ps_stack.num_other_subr_args = font->build_stack.sp; +- font->ps_stack.cur_other_subr_arg = 0; +- font->build_stack.sp = 0; +- last_op_was_integer = FALSE; +- break; +- +- case TYPE1_CHARSTRING_COMMAND_POP: +- if (font->ps_stack.num_other_subr_args > font->ps_stack.cur_other_subr_arg) { +- font->build_stack.top_value = font->ps_stack.other_subr_args[font->ps_stack.cur_other_subr_arg++]; +- last_op_was_integer = TRUE; +- } else { +- font->subset_subrs = FALSE; +- } +- break; +- +- default: +- font->build_stack.sp = 0; +- last_op_was_integer = FALSE; +- break; ++ case TYPE1_CHARSTRING_COMMAND_CALLOTHERSUBR: ++ for (i = 0; i < font->build_stack.sp; i++) ++ font->ps_stack.other_subr_args[i] = font->build_stack.stack[i]; ++ font->ps_stack.num_other_subr_args = font->build_stack.sp; ++ font->ps_stack.cur_other_subr_arg = 0; ++ font->build_stack.sp = 0; ++ last_op_was_integer = FALSE; ++ break; ++ ++ case TYPE1_CHARSTRING_COMMAND_POP: ++ if (font->ps_stack.num_other_subr_args > font->ps_stack.cur_other_subr_arg) { ++ font->build_stack.top_value = font->ps_stack.other_subr_args[font->ps_stack.cur_other_subr_arg++]; ++ last_op_was_integer = TRUE; ++ } else { ++ font->subset_subrs = FALSE; + } + break; + +@@ -837,6 +831,13 @@ cairo_type1_font_subset_parse_charstring (cairo_type1_font_subset_t *font, + font->build_stack.sp = 0; + last_op_was_integer = FALSE; + break; ++ } ++ break; ++ ++ default: ++ font->build_stack.sp = 0; ++ last_op_was_integer = FALSE; ++ break; + } + } else { + /* integer argument */ +-- +cgit v0.9.0.2-2-gbebe +From 8886220b5027296f5b3b95e9c2f93509108d3b9e Mon Sep 17 00:00:00 2001 +From: Adrian Johnson +Date: Fri, 06 Apr 2012 00:13:53 +0000 +Subject: type1-subset: if font name is prefixed with a subset tag, strip it off + +--- +diff --git a/src/cairo-type1-subset.c b/src/cairo-type1-subset.c +index ddef8ae..e507abe 100644 +--- a/src/cairo-type1-subset.c ++++ b/src/cairo-type1-subset.c +@@ -381,6 +381,7 @@ cairo_type1_font_subset_get_fontname (cairo_type1_font_subset_t *font) + { + const char *start, *end, *segment_end; + char *s; ++ int i; + + segment_end = font->header_segment + font->header_segment_size; + start = find_token (font->header_segment, segment_end, "/FontName"); +@@ -406,6 +407,16 @@ cairo_type1_font_subset_get_fontname (cairo_type1_font_subset_t *font) + return CAIRO_INT_STATUS_UNSUPPORTED; + } + ++ /* If font name is prefixed with a subset tag, strip it off. */ ++ if (strlen(start) > 7 && start[6] == '+') { ++ for (i = 0; i < 6; i++) { ++ if (start[i] < 'A' || start[i] > 'Z') ++ break; ++ } ++ if (i == 6) ++ start += 7; ++ } ++ + font->base.base_font = strdup (start); + free (s); + if (unlikely (font->base.base_font == NULL)) +-- +cgit v0.9.0.2-2-gbebe +From 8657ca10e34b0034602680b4304d47ecf90ccbfd Mon Sep 17 00:00:00 2001 +From: Adrian Johnson +Date: Fri, 06 Apr 2012 11:50:40 +0000 +Subject: fix _cairo_pattern_get_ink_extents to work with snapshot recording surfaces + +It had caused pdf bbox sizes to regress to page size bboxes. +--- +diff --git a/src/cairo-pattern.c b/src/cairo-pattern.c +index 27ba004..5b3e177 100644 +--- a/src/cairo-pattern.c ++++ b/src/cairo-pattern.c +@@ -37,6 +37,7 @@ + #include "cairo-path-private.h" + #include "cairo-pattern-private.h" + #include "cairo-recording-surface-private.h" ++#include "cairo-surface-snapshot-private.h" + + #include + +@@ -3666,6 +3667,9 @@ _cairo_pattern_get_ink_extents (const cairo_pattern_t *pattern, + (const cairo_surface_pattern_t *) pattern; + cairo_surface_t *surface = surface_pattern->surface; + ++ if (_cairo_surface_is_snapshot (surface)) ++ surface = _cairo_surface_snapshot_get_target (surface); ++ + if (_cairo_surface_is_recording (surface)) { + cairo_matrix_t imatrix; + cairo_box_t box; +-- +cgit v0.9.0.2-2-gbebe +From 6f28f0b33cb12f3b2dd48c87da0018bd00c17107 Mon Sep 17 00:00:00 2001 +From: Chris Wilson +Date: Sun, 08 Apr 2012 10:28:59 +0000 +Subject: stroke: Fix misuse of half_line_x for vertical caps on dashes + +A typo using half_line_x instead of half_line_y when emitting dashed +segments of the rectilinear stroke. + +Signed-off-by: Chris Wilson +--- +diff --git a/src/cairo-path-stroke-boxes.c b/src/cairo-path-stroke-boxes.c +index 3e8c5a4..cc9dd19 100644 +--- a/src/cairo-path-stroke-boxes.c ++++ b/src/cairo-path-stroke-boxes.c +@@ -342,15 +342,15 @@ _cairo_rectilinear_stroker_emit_segments_dashed (cairo_rectilinear_stroker_t *st + box.p1.x = box.p2.x - half_line_x; + } + if (out_slope.dy >= 0) +- box.p1.y -= half_line_x; ++ box.p1.y -= half_line_y; + if (out_slope.dy <= 0) +- box.p2.y += half_line_x; ++ box.p2.y += half_line_y; + } else { + if (box.p1.y <= box.p2.y) { + box.p1.y = box.p2.y; +- box.p2.y += half_line_x; ++ box.p2.y += half_line_y; + } else { +- box.p1.y = box.p2.y - half_line_x; ++ box.p1.y = box.p2.y - half_line_y; + } + if (out_slope.dx >= 0) + box.p1.x -= half_line_x; +-- +cgit v0.9.0.2-2-gbebe +From 113ec6bf0c8ed1ff12293d1ed2a2de9bd5b9904b Mon Sep 17 00:00:00 2001 +From: Chris Wilson +Date: Sun, 08 Apr 2012 16:58:13 +0000 +Subject: traps: Clip the trapezoid extents against the clip extents + +Just in case the clip polygon turns out to be much larger than the +operation extents (silly us for not reducing it correctly) and lead to +catastrophe, such as: + +Program received signal SIGSEGV, Segmentation fault. +pixman_fill_sse2 (bits=, stride=4, bpp=8, x=0, y=0, +width=3, height=-34811, data=0) at pixman-sse2.c:3369 +3369 *(uint16_t *)d = data; + +Signed-off-by: Chris Wilson +--- +diff --git a/src/cairo-traps-compositor.c b/src/cairo-traps-compositor.c +index 284a0be..c49e208 100644 +--- a/src/cairo-traps-compositor.c ++++ b/src/cairo-traps-compositor.c +@@ -218,8 +218,13 @@ combine_clip_as_traps (const cairo_traps_compositor_t *compositor, + _cairo_traps_fini (&traps); + cairo_surface_destroy (src); + +- if (status == CAIRO_INT_STATUS_SUCCESS && +- (fixup.width < extents->width || fixup.height < extents->height)) { ++ if (unlikely (status)) ++ return status; ++ ++ if (! _cairo_rectangle_intersect (&fixup, extents)) ++ return CAIRO_STATUS_SUCCESS; ++ ++ if (fixup.width < extents->width || fixup.height < extents->height) { + cairo_boxes_t clear; + + _cairo_boxes_init (&clear); +-- +cgit v0.9.0.2-2-gbebe +From de61681574eb7d6e0e497ea7f25797e3d9b20ac4 Mon Sep 17 00:00:00 2001 +From: Chris Wilson +Date: Mon, 09 Apr 2012 11:47:34 +0000 +Subject: build: Disable -Wset-but-unused-variable + +This is too noisy in the current build, and masking more important +warnings. + +Signed-off-by: Chris Wilson +--- +diff --git a/build/configure.ac.warnings b/build/configure.ac.warnings +index 3eb0104..f1b17f4 100644 +--- a/build/configure.ac.warnings ++++ b/build/configure.ac.warnings +@@ -21,6 +21,9 @@ MAYBE_WARN="-Wall -Wextra \ + -Wno-missing-field-initializers -Wno-unused-parameter \ + -Wno-attributes -Wno-long-long -Winline" + ++# -Wunused-but-set-variable is too noisy at present ++NO_WARN="-Wno-unused-but-set-variable" ++ + dnl Sun Studio 12 likes to rag at us for abusing enums like + dnl having cairo_status_t variables hold cairo_int_status_t + dnl values. It's bad, we know. Now please be quiet. +@@ -34,6 +37,8 @@ MAYBE_WARN="$MAYBE_WARN -fno-strict-aliasing -fno-common -flto" + dnl Also to turn various gcc/glibc-specific preprocessor checks + MAYBE_WARN="$MAYBE_WARN -Wp,-D_FORTIFY_SOURCE=2" + ++MAYBE_WARN="$MAYBE_WARN $NO_WARN" ++ + # invalidate cached value if MAYBE_WARN has changed + if test "x$cairo_cv_warn_maybe" != "x$MAYBE_WARN"; then + unset cairo_cv_warn_cflags +-- +cgit v0.9.0.2-2-gbebe +From 7cb5053c0694992320b5f7ea3b91ea497431813b Mon Sep 17 00:00:00 2001 +From: Chris Wilson +Date: Mon, 09 Apr 2012 11:49:20 +0000 +Subject: analysis: Apply the integer translation to the bbox as well + +The bbox is used to compute the ink extents (and so the pattern extents +of a recording surface) and if given an integer translation we failed to +transform the bbox into the target space. + +Fixes mask (pdf). + +Signed-off-by: Chris Wilson +--- +diff --git a/src/cairo-analysis-surface.c b/src/cairo-analysis-surface.c +index b8abe02..8878f62 100644 +--- a/src/cairo-analysis-surface.c ++++ b/src/cairo-analysis-surface.c +@@ -220,6 +220,14 @@ _add_operation (cairo_analysis_surface_t *surface, + if (_cairo_matrix_is_integer_translation (&surface->ctm, &tx, &ty)) { + rect->x += tx; + rect->y += ty; ++ ++ tx = _cairo_fixed_from_int (tx); ++ bbox.p1.x += tx; ++ bbox.p2.x += tx; ++ ++ ty = _cairo_fixed_from_int (ty); ++ bbox.p1.y += ty; ++ bbox.p2.y += ty; + } else { + _cairo_matrix_transform_bounding_box_fixed (&surface->ctm, + &bbox, NULL); +-- +cgit v0.9.0.2-2-gbebe +From 038e4991912656a3239ca82d60056ca129016ba6 Mon Sep 17 00:00:00 2001 +From: Adrian Johnson +Date: Mon, 09 Apr 2012 08:31:44 +0000 +Subject: pdf: avoid unnecessary use of patterns in mask groups + +--- +diff --git a/src/cairo-pdf-surface.c b/src/cairo-pdf-surface.c +index 4930e72..78537ce 100644 +--- a/src/cairo-pdf-surface.c ++++ b/src/cairo-pdf-surface.c +@@ -5703,56 +5703,68 @@ _cairo_pdf_surface_write_mask_group (cairo_pdf_surface_t *surface, + if (unlikely (status)) + return status; + +- pattern_res.id = 0; +- gstate_res.id = 0; +- status = _cairo_pdf_surface_add_pdf_pattern (surface, group->mask, NULL, +- &pattern_res, &gstate_res); +- if (unlikely (status)) +- return status; +- +- if (gstate_res.id != 0) { +- smask_group = _cairo_pdf_surface_create_smask_group (surface, &group->extents); +- if (unlikely (smask_group == NULL)) +- return _cairo_error (CAIRO_STATUS_NO_MEMORY); +- +- smask_group->width = group->width; +- smask_group->height = group->height; +- smask_group->operation = PDF_PAINT; +- smask_group->source = cairo_pattern_reference (group->mask); +- smask_group->source_res = pattern_res; +- status = _cairo_pdf_surface_add_smask_group (surface, smask_group); +- if (unlikely (status)) { +- _cairo_pdf_smask_group_destroy (smask_group); +- return status; +- } +- +- status = _cairo_pdf_surface_add_smask (surface, gstate_res); +- if (unlikely (status)) +- return status; +- +- status = _cairo_pdf_surface_add_xobject (surface, smask_group->group_res); ++ if (_can_paint_pattern (group->mask)) { ++ _cairo_output_stream_printf (surface->output, "q\n"); ++ status = _cairo_pdf_surface_paint_pattern (surface, ++ group->mask, ++ &group->extents, ++ FALSE); + if (unlikely (status)) + return status; + +- _cairo_output_stream_printf (surface->output, +- "q /s%d gs /x%d Do Q\n", +- gstate_res.id, +- smask_group->group_res.id); ++ _cairo_output_stream_printf (surface->output, "Q\n"); + } else { +- status = _cairo_pdf_surface_select_pattern (surface, group->mask, pattern_res, FALSE); ++ pattern_res.id = 0; ++ gstate_res.id = 0; ++ status = _cairo_pdf_surface_add_pdf_pattern (surface, group->mask, NULL, ++ &pattern_res, &gstate_res); + if (unlikely (status)) + return status; + +- _cairo_output_stream_printf (surface->output, +- "%f %f %f %f re f\n", +- bbox.p1.x, +- bbox.p1.y, +- bbox.p2.x - bbox.p1.x, +- bbox.p2.y - bbox.p1.y); ++ if (gstate_res.id != 0) { ++ smask_group = _cairo_pdf_surface_create_smask_group (surface, &group->extents); ++ if (unlikely (smask_group == NULL)) ++ return _cairo_error (CAIRO_STATUS_NO_MEMORY); + +- status = _cairo_pdf_surface_unselect_pattern (surface); +- if (unlikely (status)) +- return status; ++ smask_group->width = group->width; ++ smask_group->height = group->height; ++ smask_group->operation = PDF_PAINT; ++ smask_group->source = cairo_pattern_reference (group->mask); ++ smask_group->source_res = pattern_res; ++ status = _cairo_pdf_surface_add_smask_group (surface, smask_group); ++ if (unlikely (status)) { ++ _cairo_pdf_smask_group_destroy (smask_group); ++ return status; ++ } ++ ++ status = _cairo_pdf_surface_add_smask (surface, gstate_res); ++ if (unlikely (status)) ++ return status; ++ ++ status = _cairo_pdf_surface_add_xobject (surface, smask_group->group_res); ++ if (unlikely (status)) ++ return status; ++ ++ _cairo_output_stream_printf (surface->output, ++ "q /s%d gs /x%d Do Q\n", ++ gstate_res.id, ++ smask_group->group_res.id); ++ } else { ++ status = _cairo_pdf_surface_select_pattern (surface, group->mask, pattern_res, FALSE); ++ if (unlikely (status)) ++ return status; ++ ++ _cairo_output_stream_printf (surface->output, ++ "%f %f %f %f re f\n", ++ bbox.p1.x, ++ bbox.p1.y, ++ bbox.p2.x - bbox.p1.x, ++ bbox.p2.y - bbox.p1.y); ++ ++ status = _cairo_pdf_surface_unselect_pattern (surface); ++ if (unlikely (status)) ++ return status; ++ } + } + + status = _cairo_pdf_surface_close_group (surface, &mask_group); +@@ -5764,54 +5776,66 @@ _cairo_pdf_surface_write_mask_group (cairo_pdf_surface_t *surface, + if (unlikely (status)) + return status; + +- pattern_res.id = 0; +- gstate_res.id = 0; +- status = _cairo_pdf_surface_add_pdf_pattern (surface, group->source, NULL, +- &pattern_res, &gstate_res); +- if (unlikely (status)) +- return status; +- +- if (gstate_res.id != 0) { +- smask_group = _cairo_pdf_surface_create_smask_group (surface, &group->extents); +- if (unlikely (smask_group == NULL)) +- return _cairo_error (CAIRO_STATUS_NO_MEMORY); +- +- smask_group->operation = PDF_PAINT; +- smask_group->source = cairo_pattern_reference (group->source); +- smask_group->source_res = pattern_res; +- status = _cairo_pdf_surface_add_smask_group (surface, smask_group); +- if (unlikely (status)) { +- _cairo_pdf_smask_group_destroy (smask_group); +- return status; +- } +- +- status = _cairo_pdf_surface_add_smask (surface, gstate_res); +- if (unlikely (status)) +- return status; +- +- status = _cairo_pdf_surface_add_xobject (surface, smask_group->group_res); ++ if (_can_paint_pattern (group->source)) { ++ _cairo_output_stream_printf (surface->output, "q\n"); ++ status = _cairo_pdf_surface_paint_pattern (surface, ++ group->source, ++ &group->extents, ++ FALSE); + if (unlikely (status)) + return status; + +- _cairo_output_stream_printf (surface->output, +- "q /s%d gs /x%d Do Q\n", +- gstate_res.id, +- smask_group->group_res.id); ++ _cairo_output_stream_printf (surface->output, "Q\n"); + } else { +- status = _cairo_pdf_surface_select_pattern (surface, group->source, pattern_res, FALSE); ++ pattern_res.id = 0; ++ gstate_res.id = 0; ++ status = _cairo_pdf_surface_add_pdf_pattern (surface, group->source, NULL, ++ &pattern_res, &gstate_res); + if (unlikely (status)) + return status; + +- _cairo_output_stream_printf (surface->output, +- "%f %f %f %f re f\n", +- bbox.p1.x, +- bbox.p1.y, +- bbox.p2.x - bbox.p1.x, +- bbox.p2.y - bbox.p1.y); ++ if (gstate_res.id != 0) { ++ smask_group = _cairo_pdf_surface_create_smask_group (surface, &group->extents); ++ if (unlikely (smask_group == NULL)) ++ return _cairo_error (CAIRO_STATUS_NO_MEMORY); + +- status = _cairo_pdf_surface_unselect_pattern (surface); +- if (unlikely (status)) +- return status; ++ smask_group->operation = PDF_PAINT; ++ smask_group->source = cairo_pattern_reference (group->source); ++ smask_group->source_res = pattern_res; ++ status = _cairo_pdf_surface_add_smask_group (surface, smask_group); ++ if (unlikely (status)) { ++ _cairo_pdf_smask_group_destroy (smask_group); ++ return status; ++ } ++ ++ status = _cairo_pdf_surface_add_smask (surface, gstate_res); ++ if (unlikely (status)) ++ return status; ++ ++ status = _cairo_pdf_surface_add_xobject (surface, smask_group->group_res); ++ if (unlikely (status)) ++ return status; ++ ++ _cairo_output_stream_printf (surface->output, ++ "q /s%d gs /x%d Do Q\n", ++ gstate_res.id, ++ smask_group->group_res.id); ++ } else { ++ status = _cairo_pdf_surface_select_pattern (surface, group->source, pattern_res, FALSE); ++ if (unlikely (status)) ++ return status; ++ ++ _cairo_output_stream_printf (surface->output, ++ "%f %f %f %f re f\n", ++ bbox.p1.x, ++ bbox.p1.y, ++ bbox.p2.x - bbox.p1.x, ++ bbox.p2.y - bbox.p1.y); ++ ++ status = _cairo_pdf_surface_unselect_pattern (surface); ++ if (unlikely (status)) ++ return status; ++ } + } + + status = _cairo_pdf_surface_close_group (surface, NULL); +-- +cgit v0.9.0.2-2-gbebe +From 9fcbe25c2dcf831783bb0fd20af9754c0b5c409b Mon Sep 17 00:00:00 2001 +From: Maarten Bosmans +Date: Mon, 09 Apr 2012 19:33:50 +0000 +Subject: Protect code using dlfcn.h with CAIRO_HAS_DLSYM + +--- +diff --git a/configure.ac b/configure.ac +index cedfebe..5d2e6ec 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -52,6 +52,7 @@ AM_CONDITIONAL(CAIRO_HAS_DL, test "x$have_dl" = "xyes") + if test "x$have_dlsym" = "xyes"; then + AC_DEFINE([CAIRO_HAS_DLSYM], 1, [Define to 1 if dlsym is available]) + fi ++AM_CONDITIONAL(CAIRO_HAS_DLSYM, test "x$have_dlsym" = "xyes") + + dnl =========================================================================== + +diff --git a/util/Makefile.am b/util/Makefile.am +index f202f35..82d0a80 100644 +--- a/util/Makefile.am ++++ b/util/Makefile.am +@@ -12,20 +12,24 @@ endif + + if CAIRO_HAS_TRACE + SUBDIRS += cairo-trace ++if CAIRO_HAS_DLSYM + if CAIRO_HAS_SCRIPT_SURFACE + if CAIRO_HAS_TEE_SURFACE + SUBDIRS += cairo-fdr + endif + endif + endif ++endif + + if BUILD_SPHINX ++if CAIRO_HAS_DLSYM + if CAIRO_HAS_SCRIPT_SURFACE + if CAIRO_HAS_TEE_SURFACE + SUBDIRS += cairo-sphinx + endif + endif + endif ++endif + + AM_CPPFLAGS = -I$(top_srcdir)/src \ + -I$(top_builddir)/src \ +-- +cgit v0.9.0.2-2-gbebe +From c7b86ab97be1d3d3ccf43b652832f148a2fcf290 Mon Sep 17 00:00:00 2001 +From: Adrian Johnson +Date: Tue, 10 Apr 2012 13:04:05 +0000 +Subject: any2ppm: fix missing enumeration warning + +--- +diff --git a/test/any2ppm.c b/test/any2ppm.c +index 6b61c47..2403347 100644 +--- a/test/any2ppm.c ++++ b/test/any2ppm.c +@@ -193,6 +193,7 @@ write_ppm (cairo_surface_t *surface, int fd) + break; + case CAIRO_FORMAT_A1: + case CAIRO_FORMAT_RGB16_565: ++ case CAIRO_FORMAT_RGB30: + case CAIRO_FORMAT_INVALID: + default: + return "unhandled image format"; +-- +cgit v0.9.0.2-2-gbebe +From 09de481ce5f6ed1c38c0d5bf3af7c60642c4c947 Mon Sep 17 00:00:00 2001 +From: Gilles Espinasse +Date: Sat, 07 Apr 2012 21:09:51 +0000 +Subject: Cosmetic configure fix + +'how to allow undefined symbols in shared libraries' test should use CAIRO_CC_TRY_FLAG_SILENT or configure display is a bit out of order like this + +checking how to allow undefined symbols in shared libraries used by test suite... checking whether gcc supports -Wl,--allow-shlib-undefined... yes +-Wl,--allow-shlib-undefined + +Signed-off-by: Gilles Espinasse +Signed-off-by: Uli Schlachter +--- +diff --git a/build/configure.ac.warnings b/build/configure.ac.warnings +index f1b17f4..3b2c6f3 100644 +--- a/build/configure.ac.warnings ++++ b/build/configure.ac.warnings +@@ -89,7 +89,7 @@ AC_DEFINE_UNQUOTED([WARN_UNUSED_RESULT], [$cairo_cv_warn_unused_result], + + dnl check linker flags + AC_CACHE_CHECK([how to allow undefined symbols in shared libraries used by test suite], cairo_cv_test_undefined_ldflags, +- [CAIRO_CC_TRY_FLAG([-Wl,--allow-shlib-undefined], [], ++ [CAIRO_CC_TRY_FLAG_SILENT([-Wl,--allow-shlib-undefined], [], + [cairo_cv_test_undefined_ldflags="-Wl,--allow-shlib-undefined]")]) + CAIRO_TEST_UNDEFINED_LDFLAGS="$cairo_cv_test_undefined_ldflags" + AC_SUBST(CAIRO_TEST_UNDEFINED_LDFLAGS) +-- +cgit v0.9.0.2-2-gbebe +From 07fc63676dfdaa57ed919ad7be8f59c97c615473 Mon Sep 17 00:00:00 2001 +From: Uli Schlachter +Date: Wed, 11 Apr 2012 19:37:55 +0000 +Subject: xlib: Disable fallback compositor with xlib-xcb + +When xlib-xcb is enabled, this is just dead code which is never used. Thus, this +shouldn't hurt. However, this does include cairo-xlib-private.h. Shouldn't be a +problem? Well, that header contains static inline functions which some compiler +on Solaris will emit even when they are unused. + +This brings us to the real problem: That static inline function refers to a +function which isn't compiled with xlib-xcb and thus linking fails with +undefined symbols. + +This can be reproduced with GCC by adding a call to +_cairo_xlib_screen_put_gc(NULL, NULL, 0, 0); to +_cairo_xlib_fallback_compositor_get. + +Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=48489 +Signed-off-by: Uli Schlachter +--- +diff --git a/src/cairo-xlib-fallback-compositor.c b/src/cairo-xlib-fallback-compositor.c +index 5391926..7d45cd1 100644 +--- a/src/cairo-xlib-fallback-compositor.c ++++ b/src/cairo-xlib-fallback-compositor.c +@@ -42,6 +42,8 @@ + + #include "cairoint.h" + ++#if !CAIRO_HAS_XLIB_XCB_FUNCTIONS ++ + #include "cairo-xlib-private.h" + + #include "cairo-compositor-private.h" +@@ -52,3 +54,5 @@ _cairo_xlib_fallback_compositor_get (void) + /* XXX Do something interesting here to mitigate fallbacks ala xcb */ + return &_cairo_fallback_compositor; + } ++ ++#endif /* !CAIRO_HAS_XLIB_XCB_FUNCTIONS */ +-- +cgit v0.9.0.2-2-gbebe -- cgit v1.2.3-54-g00ecf