From ff5824b6a555a2e69c85b1f100f0213e32847a9e Mon Sep 17 00:00:00 2001 From: Mads Marquart Date: Fri, 23 Dec 2022 04:20:01 +0100 Subject: [PATCH] Avoid a bit of `unsafe` in Windows backend --- src/win32.rs | 48 +++++++++++++++++++++++++++++++++++++----------- 1 file changed, 37 insertions(+), 11 deletions(-) diff --git a/src/win32.rs b/src/win32.rs index 6496e65..b0ed388 100644 --- a/src/win32.rs +++ b/src/win32.rs @@ -61,17 +61,43 @@ impl Win32Impl { pub(crate) unsafe fn set_buffer(&mut self, buffer: &[u32], width: u16, height: u16) { // Create a new bitmap info struct. - let mut bitmap_info: BitmapInfo = unsafe { mem::zeroed() }; - - bitmap_info.bmi_header.biSize = mem::size_of::() as u32; - bitmap_info.bmi_header.biPlanes = 1; - bitmap_info.bmi_header.biBitCount = 32; - bitmap_info.bmi_header.biCompression = BI_BITFIELDS; - bitmap_info.bmi_header.biWidth = width as i32; - bitmap_info.bmi_header.biHeight = -(height as i32); - bitmap_info.bmi_colors[0].rgbRed = 0xff; - bitmap_info.bmi_colors[1].rgbGreen = 0xff; - bitmap_info.bmi_colors[2].rgbBlue = 0xff; + let bmi_header = BITMAPINFOHEADER { + biSize: mem::size_of::() as u32, + biWidth: width as i32, + biHeight: -(height as i32), + biPlanes: 1, + biBitCount: 32, + biCompression: BI_BITFIELDS, + biSizeImage: 0, + biXPelsPerMeter: 0, + biYPelsPerMeter: 0, + biClrUsed: 0, + biClrImportant: 0, + }; + let zero_quad = RGBQUAD { + rgbBlue: 0, + rgbGreen: 0, + rgbRed: 0, + rgbReserved: 0, + }; + let bmi_colors = [ + RGBQUAD { + rgbRed: 0xff, + ..zero_quad + }, + RGBQUAD { + rgbGreen: 0xff, + ..zero_quad + }, + RGBQUAD { + rgbBlue: 0xff, + ..zero_quad + }, + ]; + let bitmap_info = BitmapInfo { + bmi_header, + bmi_colors, + }; // Stretch the bitmap onto the window. // SAFETY: