[Pkg-cli-apps-commits] [SCM] pinta branch, master, updated. debian/0.4+dfsg-1-8-g7aaf558

Maia Kozheva sikon at ubuntu.com
Tue Jul 27 10:42:40 UTC 2010


The following commit has been merged in the master branch:
commit 70bdeef860e8d37a9b8f5fb24f441870116430a0
Author: Maia Kozheva <sikon at ubuntu.com>
Date:   Tue Jul 27 16:48:20 2010 +0700

    Fix rendering with Cairo 1.9 (Closes: #588886)

diff --git a/debian/patches/cairo_1.9_flush_markdirty.patch b/debian/patches/cairo_1.9_flush_markdirty.patch
new file mode 100644
index 0000000..78925d4
--- /dev/null
+++ b/debian/patches/cairo_1.9_flush_markdirty.patch
@@ -0,0 +1,194 @@
+Description: Fix rendering with Cairo 1.9
+ Cairo 1.9 implements caching for image surfaces, which means that
+ Pinta (which uses Cairo image surfaces as its internal representation)
+ doesn't work correctly with direct pixel operations manipulating the
+ underlying pixel array through pointers. The patch fixes this.
+ The problem will also be fixed in the 0.5 upstream release.
+Bug: https://launchpad.net/bugs/604869
+Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=588886
+Bug-Ubuntu: https://launchpad.net/bugs/604869
+Origin: upstream, http://github.com/jpobst/Pinta/commit/161ccc93f1507c095c707072ebbd26300a98c71f
+Author: Maia Kozheva <sikon at ubuntu.com>
+–––
+Index: pinta-0.4+dfsg/Pinta.Core/Classes/AsyncEffectRenderer.cs
+===================================================================
+--- pinta-0.4+dfsg.orig/Pinta.Core/Classes/AsyncEffectRenderer.cs	2010-07-13 12:21:45.113280805 +0700
++++ pinta-0.4+dfsg/Pinta.Core/Classes/AsyncEffectRenderer.cs	2010-07-13 12:27:34.000000000 +0700
+@@ -256,7 +256,7 @@
+ 				bounds = GetTileBounds (tileIndex);
+ 				
+ 				if (!cancel_render_flag)
+-					effect.RenderEffect (source_surface, dest_surface, new [] { bounds });
++					effect.DoRenderEffect (source_surface, dest_surface, new [] { bounds });
+ 				
+ 			} catch (Exception ex) {		
+ 				exception = ex;
+Index: pinta-0.4+dfsg/Pinta.Core/Classes/GradientRenderer.cs
+===================================================================
+--- pinta-0.4+dfsg.orig/Pinta.Core/Classes/GradientRenderer.cs	2010-07-13 12:21:45.081280921 +0700
++++ pinta-0.4+dfsg/Pinta.Core/Classes/GradientRenderer.cs	2010-07-13 12:27:34.000000000 +0700
+@@ -121,6 +121,8 @@
+ 				endAlpha = this.endColor.A;
+ 			}
+ 			
++			surface.Flush ();
++			
+ 			ColorBgra* src_data_ptr = (ColorBgra*)surface.DataPtr;
+ 			int src_width = surface.Width;
+ 			
+@@ -202,6 +204,7 @@
+ 				}
+ 			}
+ 			
++			surface.MarkDirty ();
+ 			AfterRender ();
+ 		}
+ 
+Index: pinta-0.4+dfsg/Pinta.Core/Effects/BaseEffect.cs
+===================================================================
+--- pinta-0.4+dfsg.orig/Pinta.Core/Effects/BaseEffect.cs	2010-07-13 12:21:45.061280329 +0700
++++ pinta-0.4+dfsg/Pinta.Core/Effects/BaseEffect.cs	2010-07-13 12:33:00.701279409 +0700
+@@ -51,6 +51,15 @@
+ 		}
+ 
+ 		#region Overrideable Render Methods
++		public void DoRenderEffect (ImageSurface src, ImageSurface dst, Gdk.Rectangle[] rois)
++		{
++			dst.Flush ();
++			RenderEffect (src, dst, rois);
++			dst.MarkDirty ();
++		}
++
++		// This function should not be public! It is only like this to minimize the diff.
++		// It should be changed to protected in upstream git here and in all derived classes.
+ 		public virtual void RenderEffect (ImageSurface src, ImageSurface dst, Gdk.Rectangle[] rois)
+ 		{
+ 			foreach (var rect in rois)
+Index: pinta-0.4+dfsg/Pinta.Core/Extensions/CairoExtensions.cs
+===================================================================
+--- pinta-0.4+dfsg.orig/Pinta.Core/Extensions/CairoExtensions.cs	2010-07-13 12:21:45.149279527 +0700
++++ pinta-0.4+dfsg/Pinta.Core/Extensions/CairoExtensions.cs	2010-07-13 12:27:34.000000000 +0700
+@@ -652,6 +652,8 @@
+ 		public unsafe static Gdk.Pixbuf ToPixbuf (this Cairo.ImageSurface surfSource)
+ 		{
+ 			Cairo.ImageSurface surf = surfSource.Clone ();
++			surf.Flush ();
++			
+ 			ColorBgra* dstPtr = (ColorBgra*)surf.DataPtr;
+ 			int len = surf.Data.Length / 4;
+ 
+Index: pinta-0.4+dfsg/Pinta.Gui.Widgets/Widgets/Canvas/CanvasRenderer.cs
+===================================================================
+--- pinta-0.4+dfsg.orig/Pinta.Gui.Widgets/Widgets/Canvas/CanvasRenderer.cs	2010-07-13 12:21:44.985279589 +0700
++++ pinta-0.4+dfsg/Pinta.Gui.Widgets/Widgets/Canvas/CanvasRenderer.cs	2010-07-13 12:27:34.000000000 +0700
+@@ -45,12 +45,16 @@
+ 
+ 		public void Render (Cairo.ImageSurface src, Cairo.ImageSurface dst, Gdk.Point offset, bool checker)
+ 		{
++			dst.Flush ();
++		
+ 			if (scale_factor.Ratio == 1)
+ 				RenderOneToOne (src, dst, offset, checker);
+ 			else if (scale_factor.Ratio < 1)
+ 				RenderZoomIn (src, dst, offset, checker);
+ 			else
+ 				RenderZoomOut (src, dst, offset, destination_size, checker);
++			
++			dst.MarkDirty ();
+ 		}
+ 
+ 		#region Algorithms ported from PDN
+Index: pinta-0.4+dfsg/Pinta.Gui.Widgets/Widgets/Canvas/GridRenderer.cs
+===================================================================
+--- pinta-0.4+dfsg.orig/Pinta.Gui.Widgets/Widgets/Canvas/GridRenderer.cs	2010-07-13 12:21:45.025279096 +0700
++++ pinta-0.4+dfsg/Pinta.Gui.Widgets/Widgets/Canvas/GridRenderer.cs	2010-07-13 12:27:34.000000000 +0700
+@@ -40,6 +40,8 @@
+ 			int sTop = d2SLookupY[offset.Y];
+ 			int sBottom = d2SLookupY[offset.Y + dstHeight];
+ 
++			dst.Flush ();
++
+ 			for (int srcY = sTop; srcY <= sBottom; ++srcY) {
+ 				int dstY = s2DLookupY[srcY];
+ 				int dstRow = dstY - offset.Y;
+@@ -77,6 +79,8 @@
+ 					}
+ 				}
+ 			}
++			
++			dst.MarkDirty ();
+ 		}
+ 	}
+ }
+Index: pinta-0.4+dfsg/Pinta.Tools/FloodTool.cs
+===================================================================
+--- pinta-0.4+dfsg.orig/Pinta.Tools/FloodTool.cs	2010-07-13 12:21:45.237279852 +0700
++++ pinta-0.4+dfsg/Pinta.Tools/FloodTool.cs	2010-07-13 12:27:34.000000000 +0700
+@@ -118,11 +118,14 @@
+ 			int tol = (int)(Tolerance * Tolerance * 256);
+ 			Rectangle boundingBox;
+ 
++			surface.Flush ();
++
+ 			if (IsContinguousMode)
+ 				FillStencilFromPoint (surface, stencilBuffer, pos, tol, out boundingBox, currentRegion, limitToSelection);
+ 			else
+ 				FillStencilByColor (surface, stencilBuffer, surface.GetColorBgra (pos.X, pos.Y), tol, out boundingBox, currentRegion, LimitToSelection);
+-				
++			
++			surface.MarkDirty ();
+ 			stencil = stencilBuffer;
+ 			
+ 			Point[][] polygonSet = PathManager.PolygonSetFromStencil (stencilBuffer, boundingBox, 0, 0);
+Index: pinta-0.4+dfsg/Pinta.Tools/RecolorTool.cs
+===================================================================
+--- pinta-0.4+dfsg.orig/Pinta.Tools/RecolorTool.cs	2010-07-13 12:21:45.201279732 +0700
++++ pinta-0.4+dfsg/Pinta.Tools/RecolorTool.cs	2010-07-13 12:27:34.000000000 +0700
+@@ -122,6 +122,8 @@
+ 			
+ 			roi = PintaCore.Workspace.ClampToImageSize (roi);
+ 			myTolerance = (int)(Tolerance * 256);
++			
++			tmp_layer.Flush ();
+ 
+ 			ColorBgra* tmp_data_ptr = (ColorBgra*)tmp_layer.DataPtr;
+ 			int tmp_width = tmp_layer.Width;
+@@ -141,8 +143,9 @@
+ 
+ 					stencil[i, j] = true;
+ 				}
+-
+ 			
++			tmp_layer.MarkDirty ();
++
+ 			using (Context g = new Context (surf)) {
+ 				g.AppendPath (PintaCore.Layers.SelectionPath);
+ 				g.FillRule = FillRule.EvenOdd;
+Index: pinta-0.4+dfsg/Pinta.Tools/TextTool.cs
+===================================================================
+--- pinta-0.4+dfsg.orig/Pinta.Tools/TextTool.cs	2010-07-13 12:21:45.177279745 +0700
++++ pinta-0.4+dfsg/Pinta.Tools/TextTool.cs	2010-07-13 12:27:34.000000000 +0700
+@@ -962,6 +962,7 @@
+ 				int xEnd = Math.Min (dst.Width, pt.X + measuredSize.Width);
+ 				
+ 				bool blending = false;
++				dst.Flush ();
+ 				//AppEnvironment.AlphaBlending;
+ 				//if (dst.IsColumnVisible(pt.X + skipX))
+ 				//{
+@@ -1000,7 +1001,7 @@
+ 					}
+ 				}
+ 				//}
+-				
++				dst.MarkDirty ();
+ 			}
+ 		}
+ 
+@@ -1710,4 +1711,4 @@
+                    ToolBarConfigItems.Brush | ToolBarConfigItems.Text | ToolBarConfigItems.AlphaBlending | ToolBarConfigItems.Antialiasing)
+         {
+         }*/	
+-}
+\ No newline at end of file
++}
diff --git a/debian/patches/series b/debian/patches/series
new file mode 100644
index 0000000..f81ea6a
--- /dev/null
+++ b/debian/patches/series
@@ -0,0 +1 @@
+cairo_1.9_flush_markdirty.patch

-- 
pinta



More information about the Pkg-cli-apps-commits mailing list