mirror of https://github.com/electron/electron
49 lines
2.2 KiB
Diff
49 lines
2.2 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Cezary Kulakowski <cezary@openfin.co>
|
|
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 332904acd679c544c7c482a09527ab4d6106f3ff..e65fcbc6be98d15f5daca87cfc32671628f1e9ab 100644
|
|
--- a/ui/views/win/hwnd_message_handler.cc
|
|
+++ b/ui/views/win/hwnd_message_handler.cc
|
|
@@ -3669,14 +3669,29 @@ 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);
|
|
+ }
|
|
|
|
std::optional<gfx::Size> max_size_param;
|
|
if (!max_window_size.IsEmpty())
|
|
max_size_param = max_window_size;
|
|
|
|
- gfx::SizeRectToAspectRatioWithExcludedMargin(
|
|
+ gfx::SizeRectToAspectRatio(
|
|
GetWindowResizeEdge(param), aspect_ratio_.value(), min_window_size,
|
|
- max_size_param, excluded_margin_, *window_rect);
|
|
+ max_size_param, window_rect);
|
|
}
|
|
|
|
POINT HWNDMessageHandler::GetCursorPos() const {
|