|
|
@@ -13,42 +13,11 @@ namespace Avalonia.Direct2D1
|
|
|
{
|
|
|
public class RenderTarget : IRenderTarget
|
|
|
{
|
|
|
- private readonly IntPtr _hwnd;
|
|
|
- private Size2 _savedSize;
|
|
|
- private Size2F _savedDpi;
|
|
|
-
|
|
|
/// <summary>
|
|
|
/// The render target.
|
|
|
/// </summary>
|
|
|
private readonly SharpDX.Direct2D1.RenderTarget _renderTarget;
|
|
|
|
|
|
- /// <summary>
|
|
|
- /// Initializes a new instance of the <see cref="RenderTarget"/> class.
|
|
|
- /// </summary>
|
|
|
- /// <param name="hwnd">The window handle.</param>
|
|
|
- public RenderTarget(IntPtr hwnd)
|
|
|
- {
|
|
|
- _hwnd = hwnd;
|
|
|
- Direct2DFactory = AvaloniaLocator.Current.GetService<Factory>();
|
|
|
- DirectWriteFactory = AvaloniaLocator.Current.GetService<DwFactory>();
|
|
|
-
|
|
|
- RenderTargetProperties renderTargetProperties = new RenderTargetProperties
|
|
|
- {
|
|
|
- };
|
|
|
-
|
|
|
- HwndRenderTargetProperties hwndProperties = new HwndRenderTargetProperties
|
|
|
- {
|
|
|
- Hwnd = hwnd,
|
|
|
- PixelSize = _savedSize = GetWindowSize(),
|
|
|
- PresentOptions = PresentOptions.Immediately,
|
|
|
- };
|
|
|
-
|
|
|
- _renderTarget = new WindowRenderTarget(
|
|
|
- Direct2DFactory,
|
|
|
- renderTargetProperties,
|
|
|
- hwndProperties);
|
|
|
- }
|
|
|
-
|
|
|
/// <summary>
|
|
|
/// Initializes a new instance of the <see cref="RenderTarget"/> class.
|
|
|
/// </summary>
|
|
|
@@ -82,24 +51,6 @@ namespace Avalonia.Direct2D1
|
|
|
/// <returns>An <see cref="Avalonia.Media.DrawingContext"/>.</returns>
|
|
|
public DrawingContext CreateDrawingContext()
|
|
|
{
|
|
|
- var window = _renderTarget as WindowRenderTarget;
|
|
|
-
|
|
|
- if (window != null)
|
|
|
- {
|
|
|
- var size = GetWindowSize();
|
|
|
- var dpi = GetWindowDpi();
|
|
|
-
|
|
|
- if (size != _savedSize)
|
|
|
- {
|
|
|
- window.Resize(_savedSize = size);
|
|
|
- }
|
|
|
-
|
|
|
- if (dpi != _savedDpi)
|
|
|
- {
|
|
|
- window.DotsPerInch = _savedDpi = dpi;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
return new DrawingContext(new Media.DrawingContext(_renderTarget, DirectWriteFactory));
|
|
|
}
|
|
|
|
|
|
@@ -107,35 +58,5 @@ namespace Avalonia.Direct2D1
|
|
|
{
|
|
|
_renderTarget.Dispose();
|
|
|
}
|
|
|
-
|
|
|
- private Size2F GetWindowDpi()
|
|
|
- {
|
|
|
- if (UnmanagedMethods.ShCoreAvailable)
|
|
|
- {
|
|
|
- uint dpix, dpiy;
|
|
|
-
|
|
|
- var monitor = UnmanagedMethods.MonitorFromWindow(
|
|
|
- _hwnd,
|
|
|
- UnmanagedMethods.MONITOR.MONITOR_DEFAULTTONEAREST);
|
|
|
-
|
|
|
- if (UnmanagedMethods.GetDpiForMonitor(
|
|
|
- monitor,
|
|
|
- UnmanagedMethods.MONITOR_DPI_TYPE.MDT_EFFECTIVE_DPI,
|
|
|
- out dpix,
|
|
|
- out dpiy) == 0)
|
|
|
- {
|
|
|
- return new Size2F(dpix, dpiy);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- return new Size2F(96, 96);
|
|
|
- }
|
|
|
-
|
|
|
- private Size2 GetWindowSize()
|
|
|
- {
|
|
|
- UnmanagedMethods.RECT rc;
|
|
|
- UnmanagedMethods.GetClientRect(_hwnd, out rc);
|
|
|
- return new Size2(rc.right - rc.left, rc.bottom - rc.top);
|
|
|
- }
|
|
|
}
|
|
|
}
|