|
|
@ -17,8 +17,8 @@ namespace Avalonia.Direct2D1 |
|
|
private readonly SharpDX.Direct3D11.Device _d3dDevice; |
|
|
private readonly SharpDX.Direct3D11.Device _d3dDevice; |
|
|
private DeviceContext _deviceContext; |
|
|
private DeviceContext _deviceContext; |
|
|
private SharpDX.DXGI.SwapChain1 _swapChain; |
|
|
private SharpDX.DXGI.SwapChain1 _swapChain; |
|
|
private Size2 _savedSize; |
|
|
private Size2 _size; |
|
|
private Size2F _savedDpi; |
|
|
private Size2F _dpi; |
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
/// <summary>
|
|
|
/// Initializes a new instance of the <see cref="HwndRenderTarget"/> class.
|
|
|
/// Initializes a new instance of the <see cref="HwndRenderTarget"/> class.
|
|
|
@ -48,7 +48,9 @@ namespace Avalonia.Direct2D1 |
|
|
SharpDX.Direct3D11.DeviceCreationFlags.BgraSupport, |
|
|
SharpDX.Direct3D11.DeviceCreationFlags.BgraSupport, |
|
|
featureLevels); |
|
|
featureLevels); |
|
|
|
|
|
|
|
|
CreateSwapChain(); |
|
|
var size = GetWindowSize(); |
|
|
|
|
|
var dpi = GetWindowDpi(); |
|
|
|
|
|
CreateSwapChain(size, dpi); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
/// <summary>
|
|
|
@ -76,11 +78,9 @@ namespace Avalonia.Direct2D1 |
|
|
var size = GetWindowSize(); |
|
|
var size = GetWindowSize(); |
|
|
var dpi = GetWindowDpi(); |
|
|
var dpi = GetWindowDpi(); |
|
|
|
|
|
|
|
|
if (size != _savedSize || dpi != _savedDpi) |
|
|
if (size != _size || _dpi != dpi) |
|
|
{ |
|
|
{ |
|
|
_savedSize = size; |
|
|
CreateSwapChain(size, dpi); |
|
|
_savedDpi = dpi; |
|
|
|
|
|
CreateSwapChain(); |
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
return new DrawingContextImpl(_deviceContext, DirectWriteFactory, _swapChain); |
|
|
return new DrawingContextImpl(_deviceContext, DirectWriteFactory, _swapChain); |
|
|
@ -93,8 +93,11 @@ namespace Avalonia.Direct2D1 |
|
|
_d3dDevice.Dispose(); |
|
|
_d3dDevice.Dispose(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
private void CreateSwapChain() |
|
|
private void CreateSwapChain(Size2 size, Size2F dpi) |
|
|
{ |
|
|
{ |
|
|
|
|
|
_size = size; |
|
|
|
|
|
_dpi = dpi; |
|
|
|
|
|
|
|
|
using (var dxgiDevice = _d3dDevice.QueryInterface<SharpDX.DXGI.Device>()) |
|
|
using (var dxgiDevice = _d3dDevice.QueryInterface<SharpDX.DXGI.Device>()) |
|
|
using (var d2dDevice = new Device(dxgiDevice)) |
|
|
using (var d2dDevice = new Device(dxgiDevice)) |
|
|
using (var dxgiAdaptor = dxgiDevice.Adapter) |
|
|
using (var dxgiAdaptor = dxgiDevice.Adapter) |
|
|
@ -102,6 +105,7 @@ namespace Avalonia.Direct2D1 |
|
|
{ |
|
|
{ |
|
|
_deviceContext?.Dispose(); |
|
|
_deviceContext?.Dispose(); |
|
|
_deviceContext = new DeviceContext(d2dDevice, DeviceContextOptions.None); |
|
|
_deviceContext = new DeviceContext(d2dDevice, DeviceContextOptions.None); |
|
|
|
|
|
_deviceContext.DotsPerInch = dpi; |
|
|
|
|
|
|
|
|
var swapChainDesc = new SharpDX.DXGI.SwapChainDescription1 |
|
|
var swapChainDesc = new SharpDX.DXGI.SwapChainDescription1 |
|
|
{ |
|
|
{ |
|
|
@ -121,8 +125,6 @@ namespace Avalonia.Direct2D1 |
|
|
Flags = 0, |
|
|
Flags = 0, |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
var dpi = Direct2DFactory.DesktopDpi; |
|
|
|
|
|
|
|
|
|
|
|
_swapChain?.Dispose(); |
|
|
_swapChain?.Dispose(); |
|
|
_swapChain = new SharpDX.DXGI.SwapChain1(dxgiFactory, _d3dDevice, _hwnd, ref swapChainDesc); |
|
|
_swapChain = new SharpDX.DXGI.SwapChain1(dxgiFactory, _d3dDevice, _hwnd, ref swapChainDesc); |
|
|
|
|
|
|
|
|
@ -144,7 +146,6 @@ namespace Avalonia.Direct2D1 |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
private Size2F GetWindowDpi() |
|
|
private Size2F GetWindowDpi() |
|
|
{ |
|
|
{ |
|
|
if (UnmanagedMethods.ShCoreAvailable) |
|
|
if (UnmanagedMethods.ShCoreAvailable) |
|
|
|