[arch-commits] Commit in pixman/repos (4 files)
Jan de Groot
jgc at archlinux.org
Fri Sep 12 11:52:31 UTC 2008
Date: Friday, September 12, 2008 @ 07:52:31
Author: jgc
Revision: 12277
Merged revisions 12276 via svnmerge from
svn+ssh://svn.archlinux.org/home/svn-packages/pixman/trunk
........
r12276 | jgc | 2008-09-12 13:52:17 +0200 (Fri, 12 Sep 2008) | 2 lines
upgpkg: pixman 0.11.10-2
Fix FS#11419
........
Added:
pixman/repos/testing-x86_64/bug17477.patch
(from rev 12276, pixman/trunk/bug17477.patch)
pixman/repos/testing-x86_64/pixman_image_is_opaque.patch
(from rev 12276, pixman/trunk/pixman_image_is_opaque.patch)
Modified:
pixman/repos/testing-x86_64/ (properties)
pixman/repos/testing-x86_64/PKGBUILD
------------------------------+
PKGBUILD | 15 ++-
bug17477.patch | 27 ++++++
pixman_image_is_opaque.patch | 177 +++++++++++++++++++++++++++++++++++++++++
3 files changed, 215 insertions(+), 4 deletions(-)
Property changes on: pixman/repos/testing-x86_64
___________________________________________________________________
Name: svnmerge-integrated
- /pixman/trunk:1-11995
+ /pixman/trunk:1-12276
Modified: testing-x86_64/PKGBUILD
===================================================================
--- testing-x86_64/PKGBUILD 2008-09-12 11:52:17 UTC (rev 12276)
+++ testing-x86_64/PKGBUILD 2008-09-12 11:52:31 UTC (rev 12277)
@@ -1,19 +1,26 @@
# $Id$
-# Maintainer: Alexander Baldeck <alexander at archlinux.org>
+# Maintainer: Jan de Groot <jgc at archlinux.org>
+# Contributor: Alexander Baldeck <alexander at archlinux.org>
pkgname=pixman
pkgver=0.11.10
-pkgrel=1
+pkgrel=2
pkgdesc="Pixman library"
arch=(i686 x86_64)
url="http://xorg.freedesktop.org"
license=()
depends=('glibc')
options=('!libtool')
-source=(http://xorg.freedesktop.org/releases/individual/lib/${pkgname}-${pkgver}.tar.bz2)
-md5sums=('5db471bffc5caeebb6a07be674d65373')
+source=(http://xorg.freedesktop.org/releases/individual/lib/${pkgname}-${pkgver}.tar.bz2
+ bug17477.patch
+ pixman_image_is_opaque.patch)
+md5sums=('5db471bffc5caeebb6a07be674d65373'
+ 'b1e2cf02b382342fd37f2c0a8a30c82f'
+ '51e44e673949fce6967493df0f4ca965')
build() {
cd "${srcdir}/${pkgname}-${pkgver}"
+ patch -Np1 -i ${srcdir}/bug17477.patch || return 1
+ patch -Np1 -i ${srcdir}/pixman_image_is_opaque.patch || return 1
./configure --prefix=/usr || return 1
make || return 1
make DESTDIR="${pkgdir}" install || return 1
Copied: pixman/repos/testing-x86_64/bug17477.patch (from rev 12276, pixman/trunk/bug17477.patch)
===================================================================
--- testing-x86_64/bug17477.patch (rev 0)
+++ testing-x86_64/bug17477.patch 2008-09-12 11:52:31 UTC (rev 12277)
@@ -0,0 +1,27 @@
+From: Søren Sandmann Pedersen <sandmann at daimi.au.dk>
+Date: Tue, 9 Sep 2008 14:49:56 +0000 (-0400)
+Subject: Fix for bug 17477.
+X-Git-Url: http://gitweb.freedesktop.org/?p=pixman.git;a=commitdiff;h=6f00d98f87c019849c611d27e9593c5eecfef4c2
+
+Fix for bug 17477.
+
+over_2x128 was changing the alphaLo and alphaHi arguments, causing
+stripes.
+---
+
+--- a/pixman/pixman-sse2.c
++++ b/pixman/pixman-sse2.c
+@@ -244,9 +244,11 @@ invertColors_2x128 (__m128i dataLo, __m1
+ static inline void
+ over_2x128 (__m128i* srcLo, __m128i* srcHi, __m128i* alphaLo, __m128i* alphaHi, __m128i* dstLo, __m128i* dstHi)
+ {
+- negate_2x128 (*alphaLo, *alphaHi, alphaLo, alphaHi);
++ __m128i t1, t2;
+
+- pixMultiply_2x128 (dstLo, dstHi, alphaLo, alphaHi, dstLo, dstHi);
++ negate_2x128 (*alphaLo, *alphaHi, &t1, &t2);
++
++ pixMultiply_2x128 (dstLo, dstHi, &t1, &t2, dstLo, dstHi);
+
+ *dstLo = _mm_adds_epu8 (*srcLo, *dstLo);
+ *dstHi = _mm_adds_epu8 (*srcHi, *dstHi);
Copied: pixman/repos/testing-x86_64/pixman_image_is_opaque.patch (from rev 12276, pixman/trunk/pixman_image_is_opaque.patch)
===================================================================
--- testing-x86_64/pixman_image_is_opaque.patch (rev 0)
+++ testing-x86_64/pixman_image_is_opaque.patch 2008-09-12 11:52:31 UTC (rev 12277)
@@ -0,0 +1,177 @@
+From: Søren Sandmann Pedersen <sandmann at daimi.au.dk>
+Date: Sun, 7 Sep 2008 03:49:25 +0000 (-0400)
+Subject: Fix bug in pixman_image_is_opaque()
+X-Git-Url: http://gitweb.freedesktop.org/?p=pixman.git;a=commitdiff;h=00f3d6ef22b5a062323208fd540a17ca65dca42b
+
+Fix bug in pixman_image_is_opaque()
+
+Non-repeating gradient images would be reported as opaque. Also add
+new test program to test source clipping.
+---
+
+--- a/pixman/pixman-image.c
++++ b/pixman/pixman-image.c
+@@ -818,6 +818,10 @@ pixman_image_is_opaque(pixman_image_t *i
+
+ if (image->common.transform)
+ return FALSE;
++
++ /* Gradients do not necessarily cover the entire compositing area */
++ if (image->type == LINEAR || image->type == CONICAL || image->type == RADIAL)
++ return FALSE;
+ }
+
+ return TRUE;
+--- a/test/Makefile.am
++++ b/test/Makefile.am
+@@ -1,5 +1,6 @@
+ if HAVE_GTK
+-TESTPROGRAMS = \
++TESTPROGRAMS = \
++ clip-test \
+ composite-test \
+ gradient-test \
+ region-test \
+@@ -13,5 +14,6 @@ composite_test_LDADD = $(top_builddir)/p
+ gradient_test_LDADD = $(top_builddir)/pixman/libpixman-1.la $(GTK_LIBS)
+ fetch_test_LDADD = $(top_builddir)/pixman/libpixman-1.la
+ region_test_LDADD = $(top_builddir)/pixman/libpixman-1.la
++clip_test_LDADD = $(top_builddir)/pixman/libpixman-1.la $(GTK_LIBS)
+
+ endif
+--- /dev/null
++++ b/test/clip-test.c
+@@ -0,0 +1,133 @@
++#include <stdio.h>
++#include <stdlib.h>
++#include <gtk/gtk.h>
++#include "pixman.h"
++
++GdkPixbuf *
++pixbuf_from_argb32 (uint32_t *bits,
++ int width,
++ int height,
++ int stride)
++{
++ GdkPixbuf *pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE,
++ 8, width, height);
++ int p_stride = gdk_pixbuf_get_rowstride (pixbuf);
++ guint32 *p_bits = (guint32 *)gdk_pixbuf_get_pixels (pixbuf);
++ int w, h;
++
++ for (h = 0; h < height; ++h)
++ {
++ for (w = 0; w < width; ++w)
++ {
++ uint32_t argb = bits[h * stride + w];
++ guint32 abgr;
++
++ abgr = (argb & 0xff000000) |
++ (argb & 0xff) << 16 |
++ (argb & 0x00ff00) |
++ (argb & 0xff0000) >> 16;
++
++ p_bits[h * (p_stride / 4) + w] = abgr;
++ }
++ }
++
++ return pixbuf;
++}
++
++static gboolean
++on_expose (GtkWidget *widget, GdkEventExpose *expose, gpointer data)
++{
++ GdkPixbuf *pixbuf = data;
++
++ gdk_draw_pixbuf (widget->window, NULL,
++ pixbuf, 0, 0, 0, 0,
++ gdk_pixbuf_get_width (pixbuf),
++ gdk_pixbuf_get_height (pixbuf),
++ GDK_RGB_DITHER_NONE,
++ 0, 0);
++
++ return TRUE;
++}
++
++static void
++show_window (uint32_t *bits, int w, int h, int stride)
++{
++ GdkPixbuf *pixbuf;
++
++ GtkWidget *window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
++
++ pixbuf = pixbuf_from_argb32 (bits, w, h, stride);
++
++ g_signal_connect (window, "expose_event", G_CALLBACK (on_expose), pixbuf);
++ g_signal_connect (window, "delete_event", G_CALLBACK (gtk_main_quit), NULL);
++
++ gtk_widget_show (window);
++
++ gtk_main ();
++}
++
++int
++main (int argc, char **argv)
++{
++#define WIDTH 200
++#define HEIGHT 200
++
++ uint32_t *src = malloc (WIDTH * HEIGHT * 4);
++ pixman_image_t *gradient_img;
++ pixman_image_t *src_img;
++ int i;
++ pixman_gradient_stop_t stops[2] =
++ {
++ { pixman_int_to_fixed (0), { 0xffff, 0x0000, 0x0000, 0xffff } },
++ { pixman_int_to_fixed (1), { 0xffff, 0xffff, 0x0000, 0xffff } }
++ };
++ pixman_point_fixed_t p1 = { 0, 0 };
++ pixman_point_fixed_t p2 = { pixman_int_to_fixed (WIDTH),
++ pixman_int_to_fixed (HEIGHT) };
++ pixman_point_fixed_t c_inner;
++ pixman_point_fixed_t c_outer;
++ pixman_fixed_t r_inner;
++ pixman_fixed_t r_outer;
++
++ gtk_init (&argc, &argv);
++
++ for (i = 0; i < WIDTH * HEIGHT; ++i)
++ src[i] = 0xFF0000ff; /* pale blue */
++
++ src_img = pixman_image_create_bits (PIXMAN_a8r8g8b8,
++ WIDTH, HEIGHT,
++ src,
++ WIDTH * 4);
++
++ c_inner.x = pixman_double_to_fixed (100.0);
++ c_inner.y = pixman_double_to_fixed (100.0);
++ c_outer.x = pixman_double_to_fixed (100.0);
++ c_outer.y = pixman_double_to_fixed (100.0);
++ r_inner = 0;
++ r_outer = pixman_double_to_fixed (100.0);
++
++ gradient_img = pixman_image_create_radial_gradient (&c_inner, &c_outer,
++ r_inner, r_outer,
++ stops, 2);
++
++#if 0
++ gradient_img = pixman_image_create_linear_gradient (&p1, &p2,
++ stops, 2);
++
++#endif
++
++ pixman_image_composite (PIXMAN_OP_OVER, gradient_img, NULL, src_img,
++ 0, 0, 0, 0, 0, 0, WIDTH, HEIGHT);
++
++ printf ("0, 0: %x\n", src[0]);
++ printf ("10, 10: %x\n", src[10 * 10 + 10]);
++ printf ("w, h: %x\n", src[(HEIGHT - 1) * 100 + (WIDTH - 1)]);
++
++ show_window (src, WIDTH, HEIGHT, WIDTH);
++
++ pixman_image_unref (gradient_img);
++ pixman_image_unref (src_img);
++ free (src);
++
++ return 0;
++}
More information about the arch-commits
mailing list