|
|
@@ -18,8 +18,7 @@ namespace Avalonia.Win32
|
|
|
{
|
|
|
private readonly IntPtr _handle;
|
|
|
private IntPtr _pBitmap;
|
|
|
- UnmanagedMethods.BITMAPINFOHEADER _bmpInfo;
|
|
|
-
|
|
|
+ private UnmanagedMethods.BITMAPINFOHEADER _bmpInfo;
|
|
|
|
|
|
public WindowFramebuffer(IntPtr handle, int width, int height)
|
|
|
{
|
|
|
@@ -38,7 +37,38 @@ namespace Avalonia.Win32
|
|
|
_pBitmap = Marshal.AllocHGlobal(width * height * 4);
|
|
|
}
|
|
|
|
|
|
+ ~WindowFramebuffer()
|
|
|
+ {
|
|
|
+ Deallocate();
|
|
|
+ }
|
|
|
+
|
|
|
+ public IntPtr Address => _pBitmap;
|
|
|
+ public int RowBytes => Width * 4;
|
|
|
+ public PixelFormat Format => PixelFormat.Bgra8888;
|
|
|
+
|
|
|
+ public Size Dpi
|
|
|
+ {
|
|
|
+ get
|
|
|
+ {
|
|
|
+ if (UnmanagedMethods.ShCoreAvailable)
|
|
|
+ {
|
|
|
+ uint dpix, dpiy;
|
|
|
+
|
|
|
+ var monitor = UnmanagedMethods.MonitorFromWindow(_handle,
|
|
|
+ UnmanagedMethods.MONITOR.MONITOR_DEFAULTTONEAREST);
|
|
|
|
|
|
+ if (UnmanagedMethods.GetDpiForMonitor(
|
|
|
+ monitor,
|
|
|
+ UnmanagedMethods.MONITOR_DPI_TYPE.MDT_EFFECTIVE_DPI,
|
|
|
+ out dpix,
|
|
|
+ out dpiy) == 0)
|
|
|
+ {
|
|
|
+ return new Size(dpix, dpiy);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return new Size(96, 96);
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
public int Width => _bmpInfo.biWidth;
|
|
|
|
|
|
@@ -73,11 +103,9 @@ namespace Avalonia.Win32
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-
|
|
|
public void Dispose()
|
|
|
{
|
|
|
- //It's not an *actual* dispose. This call meand "We are done drawing"
|
|
|
+ //It's not an *actual* dispose. This call means "We are done drawing"
|
|
|
DrawToWindow(_handle);
|
|
|
}
|
|
|
|
|
|
@@ -89,38 +117,5 @@ namespace Avalonia.Win32
|
|
|
_pBitmap = IntPtr.Zero;
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- ~WindowFramebuffer()
|
|
|
- {
|
|
|
- Deallocate();
|
|
|
- }
|
|
|
-
|
|
|
- public IntPtr Address => _pBitmap;
|
|
|
- public int RowBytes => Width * 4;
|
|
|
- public PixelFormat Format => PixelFormat.Bgra8888;
|
|
|
-
|
|
|
- public Size Dpi
|
|
|
- {
|
|
|
- get
|
|
|
- {
|
|
|
- if (UnmanagedMethods.ShCoreAvailable)
|
|
|
- {
|
|
|
- uint dpix, dpiy;
|
|
|
-
|
|
|
- var monitor = UnmanagedMethods.MonitorFromWindow(_handle,
|
|
|
- UnmanagedMethods.MONITOR.MONITOR_DEFAULTTONEAREST);
|
|
|
-
|
|
|
- if (UnmanagedMethods.GetDpiForMonitor(
|
|
|
- monitor,
|
|
|
- UnmanagedMethods.MONITOR_DPI_TYPE.MDT_EFFECTIVE_DPI,
|
|
|
- out dpix,
|
|
|
- out dpiy) == 0)
|
|
|
- {
|
|
|
- return new Size(dpix, dpiy);
|
|
|
- }
|
|
|
- }
|
|
|
- return new Size(96, 96);
|
|
|
- }
|
|
|
- }
|
|
|
}
|
|
|
}
|