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);
}