fix: fullscreen fillet / recovery is incorrect (#46847)
* fix: fullscreen fillet / recovery is incorrect Signed-off-by: ZOY\zoy-l <zoy-l@outlook.com> Co-authored-by: ZOY\zoy-l <zoy-l@outlook.com> * fix: maintain frameless consistency on windows 11 Co-authored-by: ZOY\zoy-l <zoy-l@outlook.com> * fix: maintain frameless consistency on windows 11 Co-authored-by: ZOY\zoy-l <zoy-l@outlook.com> * chore: modify the comments Co-authored-by: ZOY\zoy-l <zoy-l@outlook.com> --------- Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com> Co-authored-by: ZOY\zoy-l <zoy-l@outlook.com>
This commit is contained in:
parent
d224d03e31
commit
713165e406
2 changed files with 28 additions and 12 deletions
|
@ -374,14 +374,17 @@ NativeWindowViews::NativeWindowViews(const gin_helper::Dictionary& options,
|
|||
frame_style |= WS_MINIMIZEBOX;
|
||||
if (maximizable_)
|
||||
frame_style |= WS_MAXIMIZEBOX;
|
||||
// We should not show a frame for transparent window.
|
||||
if (!thick_frame_)
|
||||
frame_style &= ~(WS_THICKFRAME | WS_CAPTION);
|
||||
::SetWindowLong(GetAcceleratedWidget(), GWL_STYLE, frame_style);
|
||||
|
||||
bool rounded_corner = true;
|
||||
options.Get(options::kRoundedCorners, &rounded_corner);
|
||||
SetRoundedCorners(rounded_corner);
|
||||
// We should not show a frame for transparent window.
|
||||
if (!thick_frame_) {
|
||||
frame_style &= ~(WS_THICKFRAME | WS_CAPTION);
|
||||
rounded_corner_ = false;
|
||||
} else {
|
||||
options.Get(options::kRoundedCorners, &rounded_corner_);
|
||||
}
|
||||
|
||||
::SetWindowLong(GetAcceleratedWidget(), GWL_STYLE, frame_style);
|
||||
SetRoundedCorners(rounded_corner_);
|
||||
}
|
||||
|
||||
LONG ex_style = ::GetWindowLong(GetAcceleratedWidget(), GWL_EXSTYLE);
|
||||
|
@ -646,10 +649,12 @@ void NativeWindowViews::SetEnabledInternal(bool enable) {
|
|||
void NativeWindowViews::Maximize() {
|
||||
#if BUILDFLAG(IS_WIN)
|
||||
if (IsTranslucent()) {
|
||||
// If a window is translucent but not transparent on Windows,
|
||||
// that means it must have a backgroundMaterial set.
|
||||
if (!transparent())
|
||||
// Semi-transparent windows with backgroundMaterial not set to 'none', and
|
||||
// not fully transparent, require manual handling of rounded corners when
|
||||
// maximized.
|
||||
if (rounded_corner_)
|
||||
SetRoundedCorners(false);
|
||||
|
||||
restore_bounds_ = GetBounds();
|
||||
auto display = display::Screen::GetScreen()->GetDisplayNearestWindow(
|
||||
GetNativeWindow());
|
||||
|
@ -678,7 +683,8 @@ void NativeWindowViews::Unmaximize() {
|
|||
NotifyWindowUnmaximize();
|
||||
if (transparent()) {
|
||||
UpdateThickFrame();
|
||||
} else {
|
||||
}
|
||||
if (rounded_corner_) {
|
||||
SetRoundedCorners(true);
|
||||
}
|
||||
return;
|
||||
|
@ -724,7 +730,8 @@ void NativeWindowViews::Restore() {
|
|||
NotifyWindowRestore();
|
||||
if (transparent()) {
|
||||
UpdateThickFrame();
|
||||
} else {
|
||||
}
|
||||
if (rounded_corner_) {
|
||||
SetRoundedCorners(true);
|
||||
}
|
||||
return;
|
||||
|
@ -758,6 +765,12 @@ void NativeWindowViews::SetFullScreen(bool fullscreen) {
|
|||
NotifyWindowLeaveFullScreen();
|
||||
}
|
||||
|
||||
// If round corners are enabled,
|
||||
// they need to be set based on whether the window is fullscreen.
|
||||
if (rounded_corner_) {
|
||||
SetRoundedCorners(!fullscreen);
|
||||
}
|
||||
|
||||
// For window without WS_THICKFRAME style, we can not call SetFullscreen().
|
||||
// This path will be used for transparent windows as well.
|
||||
if (!thick_frame_) {
|
||||
|
|
|
@ -286,6 +286,9 @@ class NativeWindowViews : public NativeWindow,
|
|||
HWND legacy_window_ = nullptr;
|
||||
bool layered_ = false;
|
||||
|
||||
// This value is determined when the window is created.
|
||||
bool rounded_corner_ = true;
|
||||
|
||||
// Set to true if the window is always on top and behind the task bar.
|
||||
bool behind_task_bar_ = false;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue