diff --git a/src/Gtk/Perspex.Cairo/Media/DrawingContext.cs b/src/Gtk/Perspex.Cairo/Media/DrawingContext.cs index 6987e5a19d..e55d75cc5c 100644 --- a/src/Gtk/Perspex.Cairo/Media/DrawingContext.cs +++ b/src/Gtk/Perspex.Cairo/Media/DrawingContext.cs @@ -4,6 +4,7 @@ using System; using System.Linq; using System.Reactive.Disposables; +using System.Runtime.InteropServices; using Perspex.Cairo.Media.Imaging; using Perspex.Media; @@ -200,6 +201,8 @@ namespace Perspex.Cairo.Media } } + private static Random Random = new Random(); + /// /// Pushes a clip rectange. /// @@ -207,10 +210,13 @@ namespace Perspex.Cairo.Media /// A disposable used to undo the clip rectangle. public IDisposable PushClip(Rect clip) { + _context.Save(); + uint fill = 0x90000000 | (unchecked((uint) Random.Next(int.MinValue, int.MaxValue))); + FillRectangle(new SolidColorBrush(fill), clip, 0); _context.Rectangle(clip.ToCairo()); _context.Clip(); - return Disposable.Create(() => _context.ResetClip()); + return Disposable.Create(() => _context.Restore()); } /// @@ -238,11 +244,12 @@ namespace Perspex.Cairo.Media /// A disposable used to undo the transformation. public IDisposable PushTransform(Matrix matrix) { + _context.Save(); _context.Transform(matrix.ToCairo()); return Disposable.Create(() => { - _context.Transform(matrix.Invert().ToCairo()); + _context.Restore(); }); }