From 14f01a53dad505563c558ff295aa67058442c415 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Sat, 26 Mar 2016 16:32:14 +0100 Subject: [PATCH] Set D2D RenderTarget DPI. --- src/Windows/Perspex.Direct2D1/RenderTarget.cs | 23 ++++++++----------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/src/Windows/Perspex.Direct2D1/RenderTarget.cs b/src/Windows/Perspex.Direct2D1/RenderTarget.cs index 0d66ba99bd..2c303ffacb 100644 --- a/src/Windows/Perspex.Direct2D1/RenderTarget.cs +++ b/src/Windows/Perspex.Direct2D1/RenderTarget.cs @@ -15,6 +15,7 @@ namespace Perspex.Direct2D1 { private readonly IntPtr _hwnd; private Size2 _savedSize; + private Size2F _savedDpi; /// /// The render target. @@ -82,28 +83,24 @@ namespace Perspex.Direct2D1 public DrawingContext CreateDrawingContext() { var window = _renderTarget as WindowRenderTarget; - var factor = 1.0; if (window != null) { var size = GetWindowSize(); - factor = GetWindowScaling(); + var dpi = GetWindowDpi(); if (size != _savedSize) { window.Resize(_savedSize = size); } - } - - var ctx = new DrawingContext(new Media.DrawingContext(_renderTarget, DirectWriteFactory)); - if (factor != 1) - { - ctx.PushPostTransform(Matrix.CreateScale(factor, factor)); - ctx.PushTransformContainer(); + if (dpi != _savedDpi) + { + window.DotsPerInch = _savedDpi = dpi; + } } - return ctx; + return new DrawingContext(new Media.DrawingContext(_renderTarget, DirectWriteFactory)); } public void Dispose() @@ -111,7 +108,7 @@ namespace Perspex.Direct2D1 _renderTarget.Dispose(); } - private double GetWindowScaling() + private Size2F GetWindowDpi() { if (UnmanagedMethods.ShCoreAvailable) { @@ -127,11 +124,11 @@ namespace Perspex.Direct2D1 out dpix, out dpiy) == 0) { - return dpix / 96.0; + return new Size2F(dpix, dpiy); } } - return 1; + return new Size2F(1, 1); } private Size2 GetWindowSize()