fn on_nccalcsize()

in native/desktop-win32/src/win32/event_loop.rs [275:297]


fn on_nccalcsize(event_loop: &EventLoop, window: &Window, wparam: WPARAM, lparam: LPARAM) -> Option<LRESULT> {
    // Documentation (https://learn.microsoft.com/en-us/windows/win32/winmsg/wm-nccalcsize):
    //   "If wParam is FALSE, the application does not need to indicate the valid part of the client area."
    if wparam.0 != windows::Win32::Foundation::TRUE.0 as usize {
        return None;
    }
    let calcsize_params = unsafe { (lparam.0 as *mut NCCALCSIZE_PARAMS).as_mut() }?;
    let top = calcsize_params.rgrc[0].top;
    let result = unsafe { DefWindowProcW(window.hwnd(), WM_NCCALCSIZE, wparam, lparam) };
    if window.has_custom_title_bar() && result.0 == 0 {
        // the top inset should be 0 otherwise Windows will draw full native title bar
        calcsize_params.rgrc[0].top = top;
    }
    let origin = PhysicalPoint::new(calcsize_params.rgrc[0].left, calcsize_params.rgrc[0].top);
    let size = PhysicalSize::new(
        calcsize_params.rgrc[0].right - calcsize_params.rgrc[0].left,
        calcsize_params.rgrc[0].bottom - calcsize_params.rgrc[0].top,
    );
    let scale = window.get_scale();
    let event = NCCalcSizeEvent { origin, size, scale };
    event_loop.handle_event(window, event.into());
    Some(result)
}