1234567891011121314151617181920212223242526272829303132333435363738 |
- From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
- From: Cezary Kulakowski <[email protected]>
- 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 40a81cb293469cb5ec1bd5ab5195fd8e1b0812dc..4be0e5b0ef187d68f054672bc3d1dc328057c58b 100644
- --- a/ui/views/win/hwnd_message_handler.cc
- +++ b/ui/views/win/hwnd_message_handler.cc
- @@ -3574,6 +3574,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);
- }
|