diff --git a/patches/chromium/.patches b/patches/chromium/.patches index a2cad75f83e36..c166685b224bb 100644 --- a/patches/chromium/.patches +++ b/patches/chromium/.patches @@ -103,6 +103,7 @@ web_contents.patch disable_unload_metrics.patch fix_add_check_for_sandbox_then_result.patch extend_apply_webpreferences.patch +fix_aspect_ratio_with_max_size.patch fix_expose_decrementcapturercount_in_web_contents_impl.patch add_setter_for_browsermainloop_result_code.patch revert_roll_clang_llvmorg-13-init-7051-gdad5caa5-2.patch diff --git a/patches/chromium/fix_aspect_ratio_with_max_size.patch b/patches/chromium/fix_aspect_ratio_with_max_size.patch new file mode 100644 index 0000000000000..c138cdd3efe2b --- /dev/null +++ b/patches/chromium/fix_aspect_ratio_with_max_size.patch @@ -0,0 +1,38 @@ +From 6b4aaa777ef1268f9fdfedd915cadcc8bf32ebfe Mon Sep 17 00:00:00 2001 +From: Cezary Kulakowski +Date: Tue, 11 May 2021 11:14:06 +0200 +Subject: fix: fix aspect ratio when max width/height is set + +Add the native frame border size to the minimum and maximum size if +the view reports its size as the client size. It allows to enlarge +window to proper values when aspect ratio and max width/height are +set. It also fixes DCHECK which was triggered when user tried to +enlarge window above dimensions set during creation of the +BrowserWindow. + +diff --git a/ui/views/win/hwnd_message_handler.cc b/ui/views/win/hwnd_message_handler.cc +index 92eb76ff7a54..f916276cc733 100644 +--- a/ui/views/win/hwnd_message_handler.cc ++++ b/ui/views/win/hwnd_message_handler.cc +@@ -3570,6 +3570,21 @@ void HWNDMessageHandler::SizeWindowToAspectRatio(UINT param, + delegate_->GetMinMaxSize(&min_window_size, &max_window_size); + min_window_size = delegate_->DIPToScreenSize(min_window_size); + max_window_size = delegate_->DIPToScreenSize(max_window_size); ++ // Add the native frame border size to the minimum and maximum size if the ++ // view reports its size as the client size. ++ if (delegate_->WidgetSizeIsClientSize()) { ++ RECT client_rect, rect; ++ GetClientRect(hwnd(), &client_rect); ++ GetWindowRect(hwnd(), &rect); ++ CR_DEFLATE_RECT(&rect, &client_rect); ++ min_window_size.Enlarge(rect.right - rect.left, ++ rect.bottom - rect.top); ++ // Either axis may be zero, so enlarge them independently. ++ if (max_window_size.width()) ++ max_window_size.Enlarge(rect.right - rect.left, 0); ++ if (max_window_size.height()) ++ max_window_size.Enlarge(0, rect.bottom - rect.top); ++ } + gfx::SizeRectToAspectRatio(GetWindowResizeEdge(param), aspect_ratio_.value(), + min_window_size, max_window_size, window_rect); + }