Browse Source

Set D2D RenderTarget DPI.

pull/488/head
Steven Kirk 11 years ago
parent
commit
14f01a53da
  1. 23
      src/Windows/Perspex.Direct2D1/RenderTarget.cs

23
src/Windows/Perspex.Direct2D1/RenderTarget.cs

@ -15,6 +15,7 @@ namespace Perspex.Direct2D1
{ {
private readonly IntPtr _hwnd; private readonly IntPtr _hwnd;
private Size2 _savedSize; private Size2 _savedSize;
private Size2F _savedDpi;
/// <summary> /// <summary>
/// The render target. /// The render target.
@ -82,28 +83,24 @@ namespace Perspex.Direct2D1
public DrawingContext CreateDrawingContext() public DrawingContext CreateDrawingContext()
{ {
var window = _renderTarget as WindowRenderTarget; var window = _renderTarget as WindowRenderTarget;
var factor = 1.0;
if (window != null) if (window != null)
{ {
var size = GetWindowSize(); var size = GetWindowSize();
factor = GetWindowScaling(); var dpi = GetWindowDpi();
if (size != _savedSize) if (size != _savedSize)
{ {
window.Resize(_savedSize = size); window.Resize(_savedSize = size);
} }
}
var ctx = new DrawingContext(new Media.DrawingContext(_renderTarget, DirectWriteFactory));
if (factor != 1) if (dpi != _savedDpi)
{ {
ctx.PushPostTransform(Matrix.CreateScale(factor, factor)); window.DotsPerInch = _savedDpi = dpi;
ctx.PushTransformContainer(); }
} }
return ctx; return new DrawingContext(new Media.DrawingContext(_renderTarget, DirectWriteFactory));
} }
public void Dispose() public void Dispose()
@ -111,7 +108,7 @@ namespace Perspex.Direct2D1
_renderTarget.Dispose(); _renderTarget.Dispose();
} }
private double GetWindowScaling() private Size2F GetWindowDpi()
{ {
if (UnmanagedMethods.ShCoreAvailable) if (UnmanagedMethods.ShCoreAvailable)
{ {
@ -127,11 +124,11 @@ namespace Perspex.Direct2D1
out dpix, out dpix,
out dpiy) == 0) out dpiy) == 0)
{ {
return dpix / 96.0; return new Size2F(dpix, dpiy);
} }
} }
return 1; return new Size2F(1, 1);
} }
private Size2 GetWindowSize() private Size2 GetWindowSize()

Loading…
Cancel
Save