- Fix corrupted drawing, cherry-picked from upstream (fdo#61876)

- Add a few windows related fixes
This commit is contained in:
Marc-André Lureau 2013-04-03 00:51:33 +02:00
parent 5058e3a71c
commit 602fd779ff
5 changed files with 179 additions and 1 deletions

View File

@ -0,0 +1,37 @@
From 4b69464dde07f2d5c23664499cb61ac984344e66 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= <marcandre.lureau@gmail.com>
Date: Tue, 2 Apr 2013 21:00:20 +0200
Subject: [PATCH] build-sys: do not try to build util/sphinx on Windows
glib and dlfcn exist on windows, but sphinx code uses a lot of
Unix-only API
Fixes the following build error on mingw-fedora
CC cairo-boilerplate-system.lo
../../../util/cairo-sphinx/sphinx.c:8:22: fatal error: sys/mman.h: No such file or directory
compilation terminated.
https://bugs.freedesktop.org/show_bug.cgi?id=63043
https://bugs.freedesktop.org/show_bug.cgi?id=63044
---
configure.ac | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/configure.ac b/configure.ac
index 928a169..9a9be60 100644
--- a/configure.ac
+++ b/configure.ac
@@ -797,7 +797,7 @@ CAIRO_ENABLE(symbol_lookup, symbol-lookup, auto, [
PKG_CHECK_MODULES(glib, glib-2.0, have_glib=yes, have_glib=no)
AC_SUBST(glib_CFLAGS)
AC_SUBST(glib_LIBS)
-AM_CONDITIONAL(BUILD_SPHINX, test "x$have_glib" = "xyes")
+AM_CONDITIONAL(BUILD_SPHINX, test "x$have_glib" = "xyes" -a "x$have_windows" = "xno")
save_LIBS="$LIBS"
AC_CHECK_LIB(rt, shm_open, shm_LIBS="-lrt")
--
1.8.1.1.439.g50a6b54

View File

@ -0,0 +1,41 @@
From 3fcaddfefa2024e04217e302e72e15dd22014df0 Mon Sep 17 00:00:00 2001
From: Chris Wilson <chris@chris-wilson.co.uk>
Date: Fri, 15 Feb 2013 14:04:21 +0000
Subject: [PATCH 1/3] win32: Free the fallback upon finish
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Zozó Teki pointed out that we leak the fallback surface upon finish in
case it was active at the time as the preceding flush would only clear
the damage and not decouple the fallback surface.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
---
src/win32/cairo-win32-display-surface.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/src/win32/cairo-win32-display-surface.c b/src/win32/cairo-win32-display-surface.c
index ccd285d..0390625 100644
--- a/src/win32/cairo-win32-display-surface.c
+++ b/src/win32/cairo-win32-display-surface.c
@@ -429,6 +429,8 @@ _cairo_win32_display_surface_finish (void *abstract_surface)
DeleteDC (surface->win32.dc);
}
+ _cairo_win32_display_surface_discard_fallback (surface);
+
if (surface->initial_clip_rgn)
DeleteObject (surface->initial_clip_rgn);
@@ -758,6 +760,7 @@ _cairo_win32_display_surface_discard_fallback (cairo_win32_display_surface_t *su
TRACE ((stderr, "%s (surface=%d)\n",
__FUNCTION__, surface->win32.base.unique_id));
+ cairo_surface_finish (surface->fallback);
cairo_surface_destroy (surface->fallback);
surface->fallback = NULL;
}
--
1.8.1.1.439.g50a6b54

View File

@ -0,0 +1,48 @@
From 9f65974bdaafe700930c6cd7de85915a5450b431 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= <marcandre.lureau@gmail.com>
Date: Tue, 2 Apr 2013 00:32:56 +0200
Subject: [PATCH 2/3] win32: fix corrupted drawing
Fix src bitmap coordinates, which origin is bottom-left. This is
apparently a bug in StretchDIBits(), according to some comments on
MSDN API documentation.
The backend used to have this coordinate change in the past:
if (!StretchDIBits (dst->dc,
/* dst x,y,w,h */
dst_r.x, dst_r.y + dst_r.height - 1,
dst_r.width, - (int) dst_r.height,
/* src x,y,w,h */
src_r.x, src_extents.height - src_r.y + 1,
src_r.width, - (int) src_r.height,
src_image->data,
&bi,
DIB_RGB_COLORS,
SRCCOPY))
https://bugs.freedesktop.org/show_bug.cgi?id=61876
---
src/win32/cairo-win32-gdi-compositor.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/win32/cairo-win32-gdi-compositor.c b/src/win32/cairo-win32-gdi-compositor.c
index c70b0f9..073e889 100644
--- a/src/win32/cairo-win32-gdi-compositor.c
+++ b/src/win32/cairo-win32-gdi-compositor.c
@@ -151,10 +151,11 @@ static cairo_bool_t upload_box (cairo_box_t *box, void *closure)
int y = _cairo_fixed_integer_part (box->p1.y);
int width = _cairo_fixed_integer_part (box->p2.x - box->p1.x);
int height = _cairo_fixed_integer_part (box->p2.y - box->p1.y);
+ int src_height = -cb->bi.bmiHeader.biHeight;
TRACE ((stderr, "%s\n", __FUNCTION__));
return StretchDIBits (cb->dst, x, y + height - 1, width, -height,
- x + cb->tx, height - (y + cb->ty - 1),
+ x + cb->tx, src_height - (y + cb->ty - 1),
width, -height,
cb->data, &cb->bi,
DIB_RGB_COLORS, SRCCOPY);
--
1.8.1.1.439.g50a6b54

View File

@ -0,0 +1,37 @@
From 332bce6142b313f336e5a714543cc9ea202912e0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= <marcandre.lureau@gmail.com>
Date: Tue, 2 Apr 2013 21:00:20 +0200
Subject: [PATCH 3/3] build-sys: do not try to build util/sphinx on Windows
glib and dlfcn exist on windows, but sphinx code uses a lot of
Unix-only API
Fixes the following build error on mingw-fedora
CC cairo-boilerplate-system.lo
../../../util/cairo-sphinx/sphinx.c:8:22: fatal error: sys/mman.h: No such file or directory
compilation terminated.
https://bugs.freedesktop.org/show_bug.cgi?id=63043
https://bugs.freedesktop.org/show_bug.cgi?id=63044
---
configure.ac | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/configure.ac b/configure.ac
index 928a169..9a9be60 100644
--- a/configure.ac
+++ b/configure.ac
@@ -797,7 +797,7 @@ CAIRO_ENABLE(symbol_lookup, symbol-lookup, auto, [
PKG_CHECK_MODULES(glib, glib-2.0, have_glib=yes, have_glib=no)
AC_SUBST(glib_CFLAGS)
AC_SUBST(glib_LIBS)
-AM_CONDITIONAL(BUILD_SPHINX, test "x$have_glib" = "xyes")
+AM_CONDITIONAL(BUILD_SPHINX, test "x$have_glib" = "xyes" -a "x$have_windows" = "xno")
save_LIBS="$LIBS"
AC_CHECK_LIB(rt, shm_open, shm_LIBS="-lrt")
--
1.8.1.1.439.g50a6b54

View File

@ -2,7 +2,7 @@
Name: mingw-cairo
Version: 1.12.14
Release: 1%{?dist}
Release: 2%{?dist}
Summary: MinGW Windows Cairo library
License: LGPLv2 or MPLv1.1
@ -37,8 +37,14 @@ BuildRequires: mingw64-zlib
BuildRequires: mingw64-glib2
BuildRequires: mingw-w64-tools
BuildRequires: autoconf automake libtool
BuildRequires: pkgconfig
# cherry-picked from upcoming 1.12.15
Patch1: 0001-win32-Free-the-fallback-upon-finish.patch
Patch2: 0002-win32-fix-corrupted-drawing.patch
# https://bugs.freedesktop.org/show_bug.cgi?id=63043
Patch3: 0003-build-sys-do-not-try-to-build-util-sphinx-on-Windows.patch
%description
MinGW Windows Cairo library.
@ -87,6 +93,11 @@ Static version of the MinGW Windows Cairo library.
%prep
%setup -q -n cairo-%{version}
%patch1 -p1
%patch2 -p1
%patch3 -p1
autoreconf -vfi
%build
# Function to generate an import library for delay-loading
@ -209,6 +220,10 @@ find $RPM_BUILD_ROOT -name "*.la" -delete
%changelog
* Tue Apr 2 2013 Marc-André Lureau <marcandre.lureau@redhat.com> - 1.12.14-2
- Fix corrupted drawing, cherry-picked from upstream (fdo#61876)
- Add a few windows related fixes
* Fri Mar 29 2013 Kalev Lember <kalevlember@gmail.com> - 1.12.14-1
- Update to 1.12.14