From b9609d3621fd64bb1fee69f83fc800feacc6a7a5 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Sun, 30 Nov 2014 22:56:36 +0100 Subject: [PATCH] Make transforms work. Now draws something resembling the proper content. --- Cairo/Perspex.Cairo/Media/DrawingContext.cs | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/Cairo/Perspex.Cairo/Media/DrawingContext.cs b/Cairo/Perspex.Cairo/Media/DrawingContext.cs index 8db1fa3ca2..75076e6be3 100644 --- a/Cairo/Perspex.Cairo/Media/DrawingContext.cs +++ b/Cairo/Perspex.Cairo/Media/DrawingContext.cs @@ -12,6 +12,7 @@ namespace Perspex.Cairo.Media using Perspex.Media; using IBitmap = Perspex.Media.Imaging.IBitmap; using Matrix = Perspex.Matrix; + using CairoMatrix = global::Cairo.Matrix; /// /// Draws using Direct2D1. @@ -125,7 +126,19 @@ namespace Perspex.Cairo.Media /// A disposable used to undo the transformation. public IDisposable PushTransform(Matrix matrix) { - return Disposable.Empty; + var m = Convert(matrix); + this.context.Transform(m); + + return Disposable.Create(() => + { + m.Invert(); + this.context.Transform(m); + }); + } + + private static CairoMatrix Convert(Matrix m) + { + return new CairoMatrix(m.M11, m.M12, m.M21, m.M22, m.OffsetX, m.OffsetY); } private void SetBrush(Brush brush)