diff --git a/src/Gtk/Perspex.Cairo/Media/TileBrushes.cs b/src/Gtk/Perspex.Cairo/Media/TileBrushes.cs index 94fb19ea0b..98361427f0 100644 --- a/src/Gtk/Perspex.Cairo/Media/TileBrushes.cs +++ b/src/Gtk/Perspex.Cairo/Media/TileBrushes.cs @@ -113,7 +113,7 @@ namespace Perspex.Cairo.Media out drawRect); using (ctx.PushClip(drawRect)) - using (ctx.PushTransform(transform)) + using (ctx.PushPostTransform(transform)) { ctx.Render(visual); } diff --git a/src/Perspex.Application/Application.cs b/src/Perspex.Application/Application.cs index 1e19736154..88f3a23ffe 100644 --- a/src/Perspex.Application/Application.cs +++ b/src/Perspex.Application/Application.cs @@ -177,7 +177,7 @@ namespace Perspex /// The value of Environment.OSVersion.Platform. protected void InitializeSubsystems(int platformID) { - if (true)//platformID == 4 || platformID == 6) + if (platformID == 4 || platformID == 6) { InitializeSubsystem("Perspex.Cairo"); InitializeSubsystem("Perspex.Gtk"); diff --git a/src/Perspex.SceneGraph/Media/DrawingContext.cs b/src/Perspex.SceneGraph/Media/DrawingContext.cs index 5f95ba021b..32edc8d8fa 100644 --- a/src/Perspex.SceneGraph/Media/DrawingContext.cs +++ b/src/Perspex.SceneGraph/Media/DrawingContext.cs @@ -147,10 +147,14 @@ namespace Perspex.Media /// /// The matrix /// A disposable used to undo the transformation. - public PushedState PushTransform(Matrix matrix) + public PushedState PushPostTransform(Matrix matrix) => PushSetTransform(CurrentTransform*matrix); + + public PushedState PushPreTransform(Matrix matrix) => PushSetTransform(matrix*CurrentTransform); + + + PushedState PushSetTransform(Matrix matrix) { var oldMatrix = CurrentTransform; - matrix = oldMatrix*matrix; _impl.Transform = matrix; return new PushedState(this, PushedState.PushedStateType.Matrix, oldMatrix); } diff --git a/src/Perspex.SceneGraph/Rendering/RendererBase.cs b/src/Perspex.SceneGraph/Rendering/RendererBase.cs index 679407f7bf..88601e7ef8 100644 --- a/src/Perspex.SceneGraph/Rendering/RendererBase.cs +++ b/src/Perspex.SceneGraph/Rendering/RendererBase.cs @@ -50,9 +50,10 @@ namespace Perspex.Rendering var offset = Matrix.CreateTranslation(origin); renderTransform = (-offset)*visual.RenderTransform.Value*(offset); } - m = context.CurrentTransform.Invert()*renderTransform*m*context.CurrentTransform; + m = renderTransform*m; - using (context.PushTransform(m)) + + using (context.PushPreTransform(m)) using (context.PushOpacity(opacity)) using (visual.ClipToBounds ? context.PushClip(new Rect(visual.Bounds.Size)) : default(DrawingContext.PushedState)) { diff --git a/src/Windows/Perspex.Direct2D1/Media/VisualBrushImpl.cs b/src/Windows/Perspex.Direct2D1/Media/VisualBrushImpl.cs index ddb82fba19..74377b67e6 100644 --- a/src/Windows/Perspex.Direct2D1/Media/VisualBrushImpl.cs +++ b/src/Windows/Perspex.Direct2D1/Media/VisualBrushImpl.cs @@ -55,7 +55,7 @@ namespace Perspex.Direct2D1.Media using (var ctx = renderer.CreateDrawingContext()) using (ctx.PushClip(drawRect)) - using (ctx.PushTransform(transform)) + using (ctx.PushPostTransform(transform)) { ctx.Render(visual); }