#![allow(non_camel_case_types, non_snake_case)]
use crate::co;
use crate::decl::*;
use crate::gdi::privs::*;
use crate::guard::*;
use crate::prelude::*;
#[repr(C)]
pub struct BITMAP {
pub bmType: i32,
pub bmWidth: i32,
pub bmHeight: i32,
pub bmWidthBytes: i32,
pub bmPlanes: u16,
pub bmBitsPixel: u16,
pub bmBits: *mut u8,
}
impl_default!(BITMAP);
#[repr(C, packed(2))]
pub struct BITMAPFILEHEADER {
bfType: u16,
pub bfSize: u32,
bfReserved1: u16,
bfReserved2: u16,
pub bfOffBits: u32,
}
impl Default for BITMAPFILEHEADER {
fn default() -> Self {
let mut obj = unsafe { std::mem::zeroed::<Self>() };
obj.bfType = 0x4d42; obj
}
}
impl BITMAPFILEHEADER {
#[must_use]
pub const fn serialize(&self) -> &[u8] {
unsafe {
std::slice::from_raw_parts(
self as *const _ as _,
std::mem::size_of::<Self>(),
)
}
}
}
#[repr(C)]
pub struct BITMAPINFO {
pub bmiHeader: BITMAPINFOHEADER,
pub bmiColors: [RGBQUAD; 1],
}
impl VariableSized for BITMAPINFO {}
impl Default for BITMAPINFO {
fn default() -> Self {
Self {
bmiHeader: BITMAPINFOHEADER::default(),
bmiColors: [RGBQUAD::default()],
}
}
}
#[repr(C)]
pub struct BITMAPINFOHEADER {
biSize: u32,
pub biWidth: i32,
pub biHeight: i32,
pub biPlanes: u16,
pub biBitCount: u16,
pub biCompression: co::BI,
pub biSizeImage: u32,
pub biXPelsPerMeter: i32,
pub biYPelsPerMeter: i32,
pub biClrUsed: u32,
pub biClrImportant: u32,
}
impl_default_with_size!(BITMAPINFOHEADER, biSize);
impl BITMAPINFOHEADER {
#[must_use]
pub const fn serialize(&self) -> &[u8] {
unsafe {
std::slice::from_raw_parts(
self as *const _ as _,
std::mem::size_of::<Self>(),
)
}
}
}
#[repr(C)]
pub struct LOGBRUSH {
pub lbStyle: co::BSS,
pub lbColor: COLORREF,
pub lbHatch: usize, }
impl_default!(LOGBRUSH);
#[repr(C)]
#[derive(Default, Clone, PartialEq, Eq)]
pub struct LOGFONT {
pub lfHeight: i32,
pub lfWidth: i32,
pub lfEscapement: i32,
pub lfOrientation: i32,
pub lfWeight: co::FW,
pub lfItalic: u8,
pub lfUnderline: u8,
pub lfStrikeOut: u8,
pub lfCharSet: co::CHARSET,
pub lfOutPrecision: co::OUT_PRECIS,
pub lfClipPrecision: co::CLIP,
pub lfQuality: co::QUALITY,
pub lfPitchAndFamily: co::PITCH,
lfFaceName: [u16; LF_FACESIZE],
}
impl LOGFONT {
pub_fn_string_arr_get_set!(lfFaceName, set_lfFaceName);
#[must_use]
pub fn new_face(height: i32, face_name: &str) -> Self {
let mut lf = Self::default();
lf.lfHeight = height;
lf.set_lfFaceName(face_name);
lf
}
}
#[repr(C)]
pub struct LOGPALETTE {
pub palVersion: u16,
pub(in crate::gdi) palNumEntries: u16,
palPalEntry: [PALETTEENTRY; 1],
}
impl VariableSized for LOGPALETTE {}
impl LOGPALETTE {
#[must_use]
pub fn new(
palVersion: u16,
entries: &[PALETTEENTRY],
) -> SysResult<LogpaletteGuard>
{
LogpaletteGuard::new(palVersion, entries)
}
#[must_use]
pub const fn palPalEntry(&self) -> &[PALETTEENTRY] {
unsafe {
std::slice::from_raw_parts(
self.palPalEntry.as_ptr(),
self.palNumEntries as _,
)
}
}
#[must_use]
pub fn palPalEntry_mut(&mut self) -> &mut [PALETTEENTRY] {
unsafe {
std::slice::from_raw_parts_mut(
self.palPalEntry.as_mut_ptr(),
self.palNumEntries as _,
)
}
}
}
#[repr(C)]
pub struct LOGPEN {
pub lopnStyle: co::PS,
pub lopnWidth: POINT,
pub lopnColor: COLORREF,
}
impl_default!(LOGPEN);
#[repr(C)]
pub struct NONCLIENTMETRICS {
cbSize: u32,
pub iBorderWidth: i32,
pub iScrollWidth: i32,
pub iScrollHeight: i32,
pub iCaptionWidth: i32,
pub iCaptionHeight: i32,
pub lfCaptionFont: LOGFONT,
pub iSmCaptionWidth: i32,
pub iSmCaptionHeight: i32,
pub lfSmCaptionFont: LOGFONT,
pub iMenuWidth: i32,
pub iMenuHeight: i32,
pub lfMenuFont: LOGFONT,
pub lfStatusFont: LOGFONT,
pub lfMessageFont: LOGFONT,
pub iPaddedBorderWidth: i32,
}
impl Default for NONCLIENTMETRICS {
fn default() -> Self {
let mut obj = unsafe { std::mem::zeroed::<Self>() };
obj.cbSize = std::mem::size_of::<Self>() as _;
let is_vista = IsWindowsVistaOrGreater()
.unwrap_or_else(|err| panic!("{}", err)); if !is_vista {
obj.cbSize -= std::mem::size_of::<i32>() as u32
}
obj
}
}
#[repr(C)]
#[derive(Default, Clone, Copy, PartialEq, Eq)]
pub struct PALETTEENTRY {
pub peRed: u8,
pub peGreen: u8,
pub peBlue: u8,
pub peFlags: co::PC,
}
#[repr(C)]
#[derive(Default, Clone, Copy, PartialEq, Eq)]
pub struct RGBQUAD {
pub rgbBlue: u8,
pub rgbGreen: u8,
pub rgbRed: u8,
rgbReserved: u8,
}
#[repr(C)]
#[derive(Default, Clone)]
pub struct TEXTMETRIC {
pub tmHeight: i32,
pub tmAscent: i32,
pub tmDescent: i32,
pub tmInternalLeading: i32,
pub tmExternalLeading: i32,
pub tmAveCharWidth: i32,
pub tmMaxCharWidth: i32,
pub tmWeight: i32,
pub tmOverhang: i32,
pub tmDigitizedAspectX: i32,
pub tmDigitizedAspectY: i32,
pub tmFirstChar: u16,
pub tmLastChar: u16,
pub tmDefaultChar: u16,
pub tmBreakChar: u16,
pub tmItalic: u8,
pub tmUnderlined: u8,
pub tmStruckOut: u8,
pub tmPitchAndFamily: u8,
pub tmCharSet: u8,
}