diff options
author | root <root@rshg054.dnsready.net> | 2013-01-24 00:06:07 -0800 |
---|---|---|
committer | root <root@rshg054.dnsready.net> | 2013-01-24 00:06:07 -0800 |
commit | cb33decb284fa3b08652b04f7290d9d4140a927f (patch) | |
tree | e7f2c99536d9a7bc61ca30107cf99cb22064b61f /extra/cairo | |
parent | 91fea2e90c87b282a3bb39b080b8c51eb52cdbbe (diff) |
Thu Jan 24 00:06:07 PST 2013
Diffstat (limited to 'extra/cairo')
-rw-r--r-- | extra/cairo/PKGBUILD | 14 | ||||
-rw-r--r-- | extra/cairo/revert-xlib-Simplify-source-creation-by-use-of-map-to-image.patch | 144 | ||||
-rw-r--r-- | extra/cairo/revert-xlib-map-to-image-requires-an-extents.patch | 24 |
3 files changed, 178 insertions, 4 deletions
diff --git a/extra/cairo/PKGBUILD b/extra/cairo/PKGBUILD index aee810485..1597c2d64 100644 --- a/extra/cairo/PKGBUILD +++ b/extra/cairo/PKGBUILD @@ -1,10 +1,10 @@ -# $Id: PKGBUILD 175769 2013-01-21 16:00:59Z andyrtr $ +# $Id: PKGBUILD 175889 2013-01-23 11:37:31Z jgc $ # Maintainer: Jan de Groot <jgc@archlinux.org> # Contributor: Brice Carpentier <brice@daknet.org> pkgname=cairo pkgver=1.12.10 -pkgrel=1 +pkgrel=2 pkgdesc="Cairo vector graphics library" arch=(i686 x86_64) license=('LGPL' 'MPL') @@ -15,11 +15,17 @@ optdepends=('xcb-util: for XCB backend') # really needed? provides=('cairo-xcb') replaces=('cairo-xcb') options=('!libtool') -source=(http://cairographics.org/releases/$pkgname-$pkgver.tar.xz) -sha1sums=('be06d5aaa272bbbd08380f71ca710d5612881493') +source=(http://cairographics.org/releases/$pkgname-$pkgver.tar.xz + revert-xlib-map-to-image-requires-an-extents.patch + revert-xlib-Simplify-source-creation-by-use-of-map-to-image.patch) +sha1sums=('be06d5aaa272bbbd08380f71ca710d5612881493' + '8bc096dd16a885ad041cb2137a64757f32d1cc88' + 'fd8ffd9aba3679c344e4f25494f199a51b0ae62c') build() { cd "$srcdir/$pkgname-$pkgver" + patch -Np1 -R -i ../revert-xlib-map-to-image-requires-an-extents.patch + patch -Np1 -R -i ../revert-xlib-Simplify-source-creation-by-use-of-map-to-image.patch ./configure --prefix=/usr \ --sysconfdir=/etc \ --localstatedir=/var \ diff --git a/extra/cairo/revert-xlib-Simplify-source-creation-by-use-of-map-to-image.patch b/extra/cairo/revert-xlib-Simplify-source-creation-by-use-of-map-to-image.patch new file mode 100644 index 000000000..ffd324252 --- /dev/null +++ b/extra/cairo/revert-xlib-Simplify-source-creation-by-use-of-map-to-image.patch @@ -0,0 +1,144 @@ +From a73e7ff0186176bc82cd3ae1432c054c1fd3aebd Mon Sep 17 00:00:00 2001 +From: Chris Wilson <chris@chris-wilson.co.uk> +Date: Sun, 06 Jan 2013 11:29:27 +0000 +Subject: xlib: Simplify source creation by use of map-to-image + +We were open-coding the functionality of map-to-image inside the source +creation routines. so refactor to actually use map-to-image instead. + +Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> +--- +diff --git a/src/cairo-xlib-source.c b/src/cairo-xlib-source.c +index e312222..d08052a 100644 +--- a/src/cairo-xlib-source.c ++++ b/src/cairo-xlib-source.c +@@ -898,9 +898,6 @@ surface_source (cairo_xlib_surface_t *dst, + cairo_surface_pattern_t local_pattern; + cairo_status_t status; + cairo_rectangle_int_t upload, limit; +- cairo_matrix_t m; +- pixman_format_code_t format; +- int draw_x, draw_y; + + src = pattern->surface; + if (src->type == CAIRO_SURFACE_TYPE_IMAGE && +@@ -910,7 +907,6 @@ surface_source (cairo_xlib_surface_t *dst, + + cairo_surface_reference (src); + +-prepare_shm_image: + proxy = malloc (sizeof(*proxy)); + if (unlikely (proxy == NULL)) { + cairo_surface_destroy (src); +@@ -954,46 +950,47 @@ prepare_shm_image: + } + } + +- if (_cairo_surface_is_image (src)) +- format = ((cairo_image_surface_t *)src)->pixman_format; +- else +- format = _cairo_format_to_pixman_format_code (_cairo_format_from_content (src->content)); +- src = _cairo_xlib_surface_create_shm (dst, format, +- upload.width, upload.height); +- if (src == NULL) { +- if (_cairo_surface_is_image (pattern->surface)) { +- draw_x = upload.x; +- draw_y = upload.y; +- src = cairo_surface_reference (pattern->surface); +- goto skip_paint; +- } +- +- src = _cairo_image_surface_create_with_pixman_format (NULL, +- format, +- upload.width, +- upload.height, +- 0); ++ xsrc = (cairo_xlib_surface_t *) ++ _cairo_surface_create_similar_scratch (&dst->base, ++ src->content, ++ upload.width, ++ upload.height); ++ if (xsrc->base.type != CAIRO_SURFACE_TYPE_XLIB) { ++ cairo_surface_destroy (src); ++ cairo_surface_destroy (&xsrc->base); ++ return None; + } + +- _cairo_pattern_init_for_surface (&local_pattern, pattern->surface); +- cairo_matrix_init_translate (&local_pattern.base.matrix, +- upload.x, upload.y); ++ if (_cairo_surface_is_image (src)) { ++ status = _cairo_xlib_surface_draw_image (xsrc, (cairo_image_surface_t *)src, ++ upload.x, upload.y, ++ upload.width, upload.height, ++ 0, 0); ++ } else { ++ cairo_image_surface_t *image; + +- status = _cairo_surface_paint (src, +- CAIRO_OPERATOR_SOURCE, +- &local_pattern.base, +- NULL); +- _cairo_pattern_fini (&local_pattern.base); ++ image = _cairo_surface_map_to_image (&xsrc->base, NULL); + +- if (unlikely (status)) { +- cairo_surface_destroy (src); +- return _cairo_surface_create_in_error (status); ++ _cairo_pattern_init_for_surface (&local_pattern, pattern->surface); ++ cairo_matrix_init_translate (&local_pattern.base.matrix, ++ upload.x, upload.y); ++ ++ status = _cairo_surface_paint (&image->base, ++ CAIRO_OPERATOR_SOURCE, ++ &local_pattern.base, ++ NULL); ++ _cairo_pattern_fini (&local_pattern.base); ++ ++ status = _cairo_surface_unmap_image (&xsrc->base, image); ++ if (unlikely (status)) { ++ cairo_surface_destroy (src); ++ return _cairo_surface_create_in_error (status); ++ } + } + +- draw_x = draw_y = 0; +-skip_paint: + _cairo_pattern_init_static_copy (&local_pattern.base, &pattern->base); + if (upload.x | upload.y) { ++ cairo_matrix_t m; + cairo_matrix_init_translate (&m, -upload.x, -upload.y); + cairo_matrix_multiply (&local_pattern.base.matrix, + &local_pattern.base.matrix, +@@ -1001,29 +998,6 @@ skip_paint: + } + + *src_x = *src_y = 0; +- if (src->device == dst->base.device && +- _cairo_xlib_shm_surface_get_pixmap (src)) { +- pattern = &local_pattern; +- goto prepare_shm_image; +- } +- +- xsrc = (cairo_xlib_surface_t *) +- _cairo_surface_create_similar_scratch (&dst->base, +- src->content, +- upload.width, +- upload.height); +- if (xsrc->base.type != CAIRO_SURFACE_TYPE_XLIB) { +- cairo_surface_destroy (src); +- cairo_surface_destroy (&xsrc->base); +- return None; +- } +- +- status = _cairo_xlib_surface_draw_image (xsrc, (cairo_image_surface_t *)src, +- draw_x, draw_y, +- upload.width, upload.height, +- 0, 0); +- cairo_surface_destroy (src); +- + _cairo_xlib_surface_ensure_picture (xsrc); + if (! picture_set_properties (xsrc->display, + xsrc->picture, +-- +cgit v0.9.0.2-2-gbebe diff --git a/extra/cairo/revert-xlib-map-to-image-requires-an-extents.patch b/extra/cairo/revert-xlib-map-to-image-requires-an-extents.patch new file mode 100644 index 000000000..ccc1ebf47 --- /dev/null +++ b/extra/cairo/revert-xlib-map-to-image-requires-an-extents.patch @@ -0,0 +1,24 @@ +From dd20c1f4d6419238bbb37fb93a48986f83c6e6c2 Mon Sep 17 00:00:00 2001 +From: Chris Wilson <chris@chris-wilson.co.uk> +Date: Wed, 09 Jan 2013 12:38:09 +0000 +Subject: xlib: map-to-image requires an extents + +Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> +--- +diff --git a/src/cairo-xlib-source.c b/src/cairo-xlib-source.c +index d08052a..0689d82 100644 +--- a/src/cairo-xlib-source.c ++++ b/src/cairo-xlib-source.c +@@ -968,8 +968,9 @@ surface_source (cairo_xlib_surface_t *dst, + 0, 0); + } else { + cairo_image_surface_t *image; ++ cairo_rectangle_int_t map_extents = { 0,0, upload.width,upload.height }; + +- image = _cairo_surface_map_to_image (&xsrc->base, NULL); ++ image = _cairo_surface_map_to_image (&xsrc->base, &map_extents); + + _cairo_pattern_init_for_surface (&local_pattern, pattern->surface); + cairo_matrix_init_translate (&local_pattern.base.matrix, +-- +cgit v0.9.0.2-2-gbebe |