~ubuntu-branches/ubuntu/oneiric/gimp/oneiric-security

« back to all changes in this revision

Viewing changes to debian/patches/90_git_newer_cairo_backend.patch

  • Committer: Package Import Robot
  • Author(s): Sebastien Bacher
  • Date: 2010-07-05 12:08:35 UTC
  • Revision ID: package-import@ubuntu.com-20100705120835-7nmmpqmye8f1759y
Tags: 2.6.8-2ubuntu2
* debian/patches/90_git_newer_cairo_backend.patch:
  - git change to fix issue with the new cairo version (lp: #597987)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
From 8deda13e5f9b5611387dcd1724bfdcac83f07255 Mon Sep 17 00:00:00 2001
 
2
From: Michael Natterer <mitch@gimp.org>
 
3
Date: Mon, 28 Jun 2010 10:23:31 +0000
 
4
Subject: Make cairo code work with newer cairo backends that actually use caching
 
5
 
 
6
Call cairo_surface_flush() before reading or writing a surface's
 
7
pixels directly, and use cairo_surface_mark_dirty() after writing
 
8
pixels directly, so we don't read old pixels, and our written pixels
 
9
get actually used.
 
10
(manually cherry-picked from fad6053643482e222e246c2db828182b4f2a8c7f)
 
11
---
 
12
diff --git a/app/widgets/gimpviewrenderer.c b/app/widgets/gimpviewrenderer.c
 
13
index 54bc765..9a91a27 100644
 
14
--- a/app/widgets/gimpviewrenderer.c
 
15
+++ b/app/widgets/gimpviewrenderer.c
 
16
@@ -926,6 +926,16 @@ gimp_view_render_to_surface (TempBuf         *temp_buf,
 
17
   g_return_if_fail (temp_buf != NULL);
 
18
   g_return_if_fail (surface != NULL);
 
19
 
 
20
+  /* In rare cases we can get here while GIMP is exiting, handle that
 
21
+   * by checking for availability of the buffers
 
22
+   */
 
23
+  if (! gimp_render_check_buf ||
 
24
+      ! gimp_render_empty_buf ||
 
25
+      ! gimp_render_white_buf)
 
26
+    return;
 
27
+
 
28
+  cairo_surface_flush (surface);
 
29
+
 
30
   dest        = cairo_image_surface_get_data (surface);
 
31
   dest_stride = cairo_image_surface_get_stride (surface);
 
32
 
 
33
@@ -1078,6 +1088,8 @@ gimp_view_render_to_surface (TempBuf         *temp_buf,
 
34
 
 
35
       dest += dest_stride;
 
36
     }
 
37
+
 
38
+  cairo_surface_mark_dirty (surface);
 
39
 }
 
40
 
 
41
 void
 
42
diff --git a/app/widgets/gimpviewrenderergradient.c b/app/widgets/gimpviewrenderergradient.c
 
43
index 563c04d..368f714 100644
 
44
--- a/app/widgets/gimpviewrenderergradient.c
 
45
+++ b/app/widgets/gimpviewrenderergradient.c
 
46
@@ -189,6 +189,8 @@ gimp_view_renderer_gradient_render (GimpViewRenderer *renderer,
 
47
                                                     renderer->width,
 
48
                                                     renderer->height);
 
49
 
 
50
+  cairo_surface_flush (renderer->surface);
 
51
+
 
52
   dest        = cairo_image_surface_get_data (renderer->surface);
 
53
   dest_stride = cairo_image_surface_get_stride (renderer->surface);
 
54
 
 
55
@@ -197,6 +199,8 @@ gimp_view_renderer_gradient_render (GimpViewRenderer *renderer,
 
56
       memcpy (dest, buf, renderer->width * 4);
 
57
     }
 
58
 
 
59
+  cairo_surface_mark_dirty (renderer->surface);
 
60
+
 
61
   renderer->needs_render = FALSE;
 
62
 }
 
63
 
 
64
diff --git a/app/widgets/gimpviewrendererpalette.c b/app/widgets/gimpviewrendererpalette.c
 
65
index 9c9eb8b..eeab3f3 100644
 
66
--- a/app/widgets/gimpviewrendererpalette.c
 
67
+++ b/app/widgets/gimpviewrendererpalette.c
 
68
@@ -139,6 +139,8 @@ gimp_view_renderer_palette_render (GimpViewRenderer *renderer,
 
69
                                                     renderer->width,
 
70
                                                     renderer->height);
 
71
 
 
72
+  cairo_surface_flush (renderer->surface);
 
73
+
 
74
   row = g_new (guchar, renderer->width * 4);
 
75
 
 
76
   dest        = cairo_image_surface_get_data (renderer->surface);
 
77
@@ -202,6 +204,8 @@ gimp_view_renderer_palette_render (GimpViewRenderer *renderer,
 
78
 
 
79
   g_free (row);
 
80
 
 
81
+  cairo_surface_mark_dirty (renderer->surface);
 
82
+
 
83
   renderer->needs_render = FALSE;
 
84
 }
 
85
 
 
86
diff --git a/libgimpwidgets/gimpcairo-utils.c b/libgimpwidgets/gimpcairo-utils.c
 
87
index 467c9ce..22cf5cb 100644
 
88
--- a/libgimpwidgets/gimpcairo-utils.c
 
89
+++ b/libgimpwidgets/gimpcairo-utils.c
 
90
@@ -229,6 +229,8 @@ gimp_cairo_surface_create_from_pixbuf (GdkPixbuf *pixbuf)
 
91
 
 
92
   surface = cairo_image_surface_create (format, width, height);
 
93
 
 
94
+  cairo_surface_flush (surface);
 
95
+
 
96
   src         = gdk_pixbuf_get_pixels (pixbuf);
 
97
   src_stride  = gdk_pixbuf_get_rowstride (pixbuf);
 
98
 
 
99
@@ -281,5 +283,7 @@ gimp_cairo_surface_create_from_pixbuf (GdkPixbuf *pixbuf)
 
100
       break;
 
101
     }
 
102
 
 
103
+  cairo_surface_mark_dirty (surface);
 
104
+
 
105
   return surface;
 
106
 }
 
107
--
 
108
cgit v0.8.3.1
 
109