Skip to content

Commit 4dbc662

Browse files
committed
WindowModes: Switch cocoaGraphicsWindow to use window_mode instead of fullscreen and undecorated
1 parent f4145d1 commit 4dbc662

File tree

1 file changed

+43
-40
lines changed

1 file changed

+43
-40
lines changed

panda/src/cocoadisplay/cocoaGraphicsWindow.mm

Lines changed: 43 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@
9999

100100
if (device == 0) {
101101
CGPoint point;
102-
if (_properties.get_fullscreen()) {
102+
if (_properties.get_window_mode() == WindowProperties::W_fullscreen) {
103103
point = CGPointMake(x, y + 1);
104104
} else {
105105
point = CGPointMake(x + _properties.get_x_origin(),
@@ -147,7 +147,7 @@
147147
CGLLockContext((CGLContextObj) [cocoagsg->_context CGLContextObj]);
148148

149149
// Set the drawable.
150-
if (_properties.get_fullscreen()) {
150+
if (_properties.get_window_mode() == WindowProperties::W_fullscreen) {
151151
// Fullscreen.
152152
CGLSetFullScreenOnDisplay((CGLContextObj) [cocoagsg->_context CGLContextObj], CGDisplayIDToOpenGLDisplayMask(_display));
153153
} else {
@@ -171,7 +171,7 @@
171171
}
172172

173173
// Lock the view for drawing.
174-
if (!_properties.get_fullscreen()) {
174+
if (!_properties.get_window_mode() == WindowProperties::W_fullscreen) {
175175
nassertr_always([_view lockFocusIfCanDraw], false);
176176
}
177177

@@ -203,7 +203,7 @@
203203
end_frame_spam(mode);
204204
nassertv(_gsg != (GraphicsStateGuardian *)NULL);
205205

206-
if (!_properties.get_fullscreen()) {
206+
if (!_properties.get_window_mode() == WindowProperties::W_fullscreen) {
207207
[_view unlockFocus];
208208
}
209209
// Release the context.
@@ -335,15 +335,9 @@
335335
if (!_properties.has_size()) {
336336
_properties.set_size(100, 100);
337337
}
338-
if (!_properties.has_fullscreen()) {
339-
_properties.set_fullscreen(false);
340-
}
341338
if (!_properties.has_foreground()) {
342339
_properties.set_foreground(true);
343340
}
344-
if (!_properties.has_undecorated()) {
345-
_properties.set_undecorated(false);
346-
}
347341
if (!_properties.has_fixed_size()) {
348342
_properties.set_fixed_size(false);
349343
}
@@ -356,6 +350,9 @@
356350
if (!_properties.has_cursor_hidden()) {
357351
_properties.set_cursor_hidden(false);
358352
}
353+
if (!_properties.has_window_mode()) {
354+
_properties.set_window_mode(WindowProperties::W_regular);
355+
}
359356

360357
// Check if we have a parent view.
361358
NSView *parent_nsview = nil;
@@ -423,7 +420,7 @@
423420
if (_parent_window_handle == (WindowHandle *)NULL) {
424421
// Content rectangle
425422
NSRect rect;
426-
if (_properties.get_fullscreen()) {
423+
if (_properties.get_window_mode() == WindowProperties::W_fullscreen) {
427424
rect = container;
428425
} else {
429426
rect = NSMakeRect(x, container.size.height - _properties.get_y_size() - y,
@@ -432,7 +429,8 @@
432429

433430
// Configure the window decorations
434431
NSUInteger windowStyle;
435-
if (_properties.get_undecorated() || _properties.get_fullscreen()) {
432+
if (_properties.get_window_mode() == WindowProperties::W_undecorated ||
433+
_properties.get_window_mode() == WindowProperties::W_fullscreen) {
436434
windowStyle = NSBorderlessWindowMask;
437435
} else if (_properties.get_fixed_size()) {
438436
// Fixed size windows should not show the resize button.
@@ -525,7 +523,7 @@
525523

526524
[_window setShowsResizeIndicator: !_properties.get_fixed_size()];
527525

528-
if (_properties.get_fullscreen()) {
526+
if (_properties.get_window_mode() == WindowProperties::W_fullscreen) {
529527
[_window makeKeyAndOrderFront:nil];
530528
} else if (_properties.get_minimized()) {
531529
[_window makeKeyAndOrderFront:nil];
@@ -536,7 +534,7 @@
536534
[_window orderBack:nil];
537535
}
538536

539-
if (_properties.get_fullscreen()) {
537+
if (_properties.get_window_mode() == WindowProperties::W_fullscreen) {
540538
[_window setLevel: NSMainMenuWindowLevel + 1];
541539
} else {
542540
switch (_properties.get_z_order()) {
@@ -556,7 +554,7 @@
556554
}
557555
}
558556

559-
if (_properties.get_fullscreen()) {
557+
if (_properties.get_window_mode() == WindowProperties::W_fullscreen) {
560558
// Change the display mode.
561559
#if __MAC_OS_X_VERSION_MAX_ALLOWED >= 1060
562560
CGDisplayModeRef mode;
@@ -700,9 +698,9 @@
700698
return;
701699
}
702700

703-
if (properties.has_fullscreen()) {
704-
if (_properties.get_fullscreen() != properties.get_fullscreen()) {
705-
if (properties.get_fullscreen()) {
701+
if (properties.has_window_mode()) {
702+
if (_properties.get_window_mode() != properties.get_window_mode()) {
703+
if (properties.get_window_mode() == WindowProperties::W_fullscreen) {
706704
int width, height;
707705
if (properties.has_size()) {
708706
width = properties.get_x_size();
@@ -742,28 +740,24 @@
742740
_properties.set_size(width, height);
743741
properties.clear_origin();
744742
_properties.set_origin(0, 0);
745-
properties.clear_fullscreen();
746-
_properties.set_fullscreen(true);
747-
743+
_properties.set_window_mode(WindowProperties::W_fullscreen);
744+
// Clear window_mode later
748745
} else {
749746
cocoadisplay_cat.error()
750747
<< "Failed to change display mode.\n";
751748
}
752749

753750
} else {
754751
do_switch_fullscreen(NULL);
755-
_properties.set_fullscreen(false);
756752

757753
// Force properties to be reset to their actual values
758-
properties.set_undecorated(_properties.get_undecorated());
759754
properties.set_z_order(_properties.get_z_order());
760-
properties.clear_fullscreen();
761755
}
762756
}
763757
_context_needs_update = true;
764758
}
765759

766-
if (properties.has_minimized() && !_properties.get_fullscreen() && _window != nil) {
760+
if (properties.has_minimized() && _properties.get_window_mode() != WindowProperties::W_fullscreen && _window != nil) {
767761
_properties.set_minimized(properties.get_minimized());
768762
if (properties.get_minimized()) {
769763
[_window miniaturize:nil];
@@ -777,7 +771,7 @@
777771
int width = properties.get_x_size();
778772
int height = properties.get_y_size();
779773

780-
if (!_properties.get_fullscreen()) {
774+
if (_properties.get_window_mode() != WindowProperties::W_fullscreen) {
781775
if (_window != nil) {
782776
[_window setContentSize:NSMakeSize(width, height)];
783777
}
@@ -817,7 +811,7 @@
817811
}
818812
}
819813

820-
if (properties.has_origin() && !_properties.get_fullscreen()) {
814+
if (properties.has_origin() && _properties.get_window_mode() != WindowProperties::W_fullscreen) {
821815
int x = properties.get_x_origin();
822816
int y = properties.get_y_origin();
823817

@@ -842,7 +836,7 @@
842836
}
843837
_properties.set_origin(x, y);
844838

845-
if (!_properties.get_fullscreen()) {
839+
if (_properties.get_window_mode() != WindowProperties::W_fullscreen) {
846840
// Remember, Mac OS X coordinates are flipped in the vertical axis.
847841
frame.origin.x = x;
848842
frame.origin.y = container.size.height - y - frame.size.height;
@@ -869,13 +863,14 @@
869863
_properties.set_fixed_size(properties.get_fixed_size());
870864
[_window setShowsResizeIndicator:!properties.get_fixed_size()];
871865

872-
if (!_properties.get_fullscreen()) {
866+
if (_properties.get_window_mode() != WindowProperties::W_fullscreen) {
873867
// If our window is decorated, change the style mask to show or hide the
874868
// resize button appropriately. However, if we're specifying the
875869
// 'undecorated' property also, then we'll be setting the style mask
876870
// about 25 LOC further down, so we won't need to bother setting it
877871
// here.
878-
if (!properties.has_undecorated() && !_properties.get_undecorated() &&
872+
if (!properties.has_window_mode() &&
873+
_properties.get_window_mode() != WindowProperties::W_undecorated &&
879874
[_window respondsToSelector:@selector(setStyleMask:)]) {
880875
if (properties.get_fixed_size()) {
881876
[_window setStyleMask:NSTitledWindowMask | NSClosableWindowMask |
@@ -891,11 +886,9 @@
891886
properties.clear_fixed_size();
892887
}
893888

894-
if (properties.has_undecorated() && _window != nil && [_window respondsToSelector:@selector(setStyleMask:)]) {
895-
_properties.set_undecorated(properties.get_undecorated());
896-
897-
if (!_properties.get_fullscreen()) {
898-
if (properties.get_undecorated()) {
889+
if (properties.has_window_mode() && _window != nil && [_window respondsToSelector:@selector(setStyleMask:)]) {
890+
if (_properties.get_window_mode() != WindowProperties::W_fullscreen) {
891+
if (properties.get_window_mode() == WindowProperties::W_undecorated) {
899892
[_window setStyleMask: NSBorderlessWindowMask];
900893
} else if (_properties.get_fixed_size()) {
901894
// Fixed size windows should not show the resize button.
@@ -907,11 +900,9 @@
907900
}
908901
[_window makeFirstResponder:_view];
909902
}
910-
911-
properties.clear_undecorated();
912903
}
913904

914-
if (properties.has_foreground() && !_properties.get_fullscreen() && _window != nil) {
905+
if (properties.has_foreground() && _properties.get_window_mode() != WindowProperties::W_fullscreen && _window != nil) {
915906
_properties.set_foreground(properties.get_foreground());
916907
if (!_properties.get_minimized()) {
917908
if (properties.get_foreground()) {
@@ -988,7 +979,7 @@
988979
if (properties.has_z_order() && _window != nil) {
989980
_properties.set_z_order(properties.get_z_order());
990981

991-
if (!_properties.get_fullscreen()) {
982+
if (_properties.get_window_mode() != WindowProperties::W_fullscreen) {
992983
switch (properties.get_z_order()) {
993984
case WindowProperties::Z_bottom:
994985
[_window setLevel: NSNormalWindowLevel - 1];
@@ -1022,6 +1013,18 @@
10221013
break;
10231014
}
10241015
}
1016+
1017+
if (properties.has_window_mode()) {
1018+
switch (properties.get_window_mode()) {
1019+
case WindowProperties::W_regular:
1020+
case WindowProperties::W_undecorated:
1021+
case WindowProperties::W_fullscreen:
1022+
// Assume these were set
1023+
_properties.set_window_mode(properties.get_window_mode());
1024+
properties.clear_window_mode();
1025+
break;
1026+
}
1027+
}
10251028
}
10261029

10271030
/**
@@ -1665,7 +1668,7 @@
16651668
nx = std::max(0., std::min((double) get_x_size() - 1, nx));
16661669
ny = std::max(0., std::min((double) get_y_size() - 1, ny));
16671670

1668-
if (_properties.get_fullscreen()) {
1671+
if (_properties.get_window_mode() == WindowProperties::W_fullscreen) {
16691672
point = CGPointMake(nx, ny + 1);
16701673
} else {
16711674
point = CGPointMake(nx + _properties.get_x_origin(),

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy