You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-04 12:00:25 +00:00
[macOS] Improve "extended to title" transition to / from fullscreen.
This commit is contained in:
@@ -2671,6 +2671,30 @@ Vector2i DisplayServerMacOS::window_get_safe_title_margins(WindowID p_window) co
|
||||
return Vector2i(max_x * screen_get_max_scale(), 0);
|
||||
}
|
||||
|
||||
void DisplayServerMacOS::window_set_custom_window_buttons(WindowData &p_wd, bool p_enabled) {
|
||||
if (p_wd.window_button_view) {
|
||||
[p_wd.window_button_view removeFromSuperview];
|
||||
p_wd.window_button_view = nil;
|
||||
}
|
||||
if (p_enabled) {
|
||||
float window_buttons_spacing = NSMinX([[p_wd.window_object standardWindowButton:NSWindowMiniaturizeButton] frame]) - NSMinX([[p_wd.window_object standardWindowButton:NSWindowCloseButton] frame]);
|
||||
|
||||
[p_wd.window_object setTitleVisibility:NSWindowTitleHidden];
|
||||
[[p_wd.window_object standardWindowButton:NSWindowZoomButton] setHidden:YES];
|
||||
[[p_wd.window_object standardWindowButton:NSWindowMiniaturizeButton] setHidden:YES];
|
||||
[[p_wd.window_object standardWindowButton:NSWindowCloseButton] setHidden:YES];
|
||||
|
||||
p_wd.window_button_view = [[GodotButtonView alloc] initWithFrame:NSZeroRect];
|
||||
[p_wd.window_button_view initButtons:window_buttons_spacing offset:NSMakePoint(p_wd.wb_offset.x, p_wd.wb_offset.y)];
|
||||
[p_wd.window_view addSubview:p_wd.window_button_view];
|
||||
} else {
|
||||
[p_wd.window_object setTitleVisibility:NSWindowTitleVisible];
|
||||
[[p_wd.window_object standardWindowButton:NSWindowZoomButton] setHidden:NO];
|
||||
[[p_wd.window_object standardWindowButton:NSWindowMiniaturizeButton] setHidden:NO];
|
||||
[[p_wd.window_object standardWindowButton:NSWindowCloseButton] setHidden:NO];
|
||||
}
|
||||
}
|
||||
|
||||
void DisplayServerMacOS::window_set_flag(WindowFlags p_flag, bool p_enabled, WindowID p_window) {
|
||||
_THREAD_SAFE_METHOD_
|
||||
|
||||
@@ -2691,31 +2715,20 @@ void DisplayServerMacOS::window_set_flag(WindowFlags p_flag, bool p_enabled, Win
|
||||
} break;
|
||||
case WINDOW_FLAG_EXTEND_TO_TITLE: {
|
||||
NSRect rect = [wd.window_object frame];
|
||||
if (wd.window_button_view) {
|
||||
[wd.window_button_view removeFromSuperview];
|
||||
wd.window_button_view = nil;
|
||||
}
|
||||
if (p_enabled) {
|
||||
[wd.window_object setTitlebarAppearsTransparent:YES];
|
||||
[wd.window_object setTitleVisibility:NSWindowTitleHidden];
|
||||
[wd.window_object setStyleMask:[wd.window_object styleMask] | NSWindowStyleMaskFullSizeContentView];
|
||||
|
||||
[[wd.window_object standardWindowButton:NSWindowZoomButton] setHidden:YES];
|
||||
[[wd.window_object standardWindowButton:NSWindowMiniaturizeButton] setHidden:YES];
|
||||
[[wd.window_object standardWindowButton:NSWindowCloseButton] setHidden:YES];
|
||||
float window_buttons_spacing = NSMinX([[wd.window_object standardWindowButton:NSWindowMiniaturizeButton] frame]) - NSMinX([[wd.window_object standardWindowButton:NSWindowCloseButton] frame]);
|
||||
|
||||
wd.window_button_view = [[GodotButtonView alloc] initWithFrame:NSZeroRect];
|
||||
[wd.window_button_view initButtons:window_buttons_spacing offset:NSMakePoint(wd.wb_offset.x, wd.wb_offset.y)];
|
||||
[wd.window_view addSubview:wd.window_button_view];
|
||||
if (!wd.fullscreen) {
|
||||
window_set_custom_window_buttons(wd, true);
|
||||
}
|
||||
} else {
|
||||
[wd.window_object setTitlebarAppearsTransparent:NO];
|
||||
[wd.window_object setTitleVisibility:NSWindowTitleVisible];
|
||||
[wd.window_object setStyleMask:[wd.window_object styleMask] & ~NSWindowStyleMaskFullSizeContentView];
|
||||
|
||||
[[wd.window_object standardWindowButton:NSWindowZoomButton] setHidden:NO];
|
||||
[[wd.window_object standardWindowButton:NSWindowMiniaturizeButton] setHidden:NO];
|
||||
[[wd.window_object standardWindowButton:NSWindowCloseButton] setHidden:NO];
|
||||
if (!wd.fullscreen) {
|
||||
window_set_custom_window_buttons(wd, false);
|
||||
}
|
||||
}
|
||||
[wd.window_object setFrame:rect display:YES];
|
||||
} break;
|
||||
|
||||
Reference in New Issue
Block a user