@@ -19,6 +19,7 @@ @interface StartupWinController : NSWindowController <NSWindowDelegate>
1919 IBOutlet NSTabViewItem *tabConfig;
2020 IBOutlet NSTabViewItem *tabMessages;
2121 IBOutlet NSPopUpButton *videoMode3DPUButton;
22+ IBOutlet NSPopUpButton *displayPUButton;
2223
2324 IBOutlet NSButton *singlePlayerButton;
2425 IBOutlet NSButton *joinMultiButton;
@@ -35,7 +36,7 @@ - (int)modalRun;
3536- (void )closeQuietly ;
3637- (void )populateVideoModes : (BOOL )firstTime ;
3738
38- - (IBAction )fullscreenClicked : (id )sender ;
39+ - (IBAction )fullscreenOrDisplayClicked : (id )sender ;
3940
4041- (IBAction )multiPlayerModeClicked : (id )sender ;
4142
@@ -91,64 +92,74 @@ - (void)closeQuietly
9192
9293- (void )populateVideoModes : (BOOL )firstTime
9394{
94- int i, mode3d = -1 ;
95- int idx3d = -1 ;
96- int xdim = 0 , ydim = 0 , bpp = 0 , fullscreen = 0 ;
97- int cd[] = {
98- #if USE_POLYMOST && USE_OPENGL
99- 32 , 24 , 16 , 15 ,
100- #endif
101- 8 , 0
102- };
95+ int i, mode3d = -1 , idx3d = -1 ;
96+ int xdim = 0 , ydim = 0 , bitspp = 0 , display = 0 , fullsc = 0 ;
97+ int cd[] = { 32 , 24 , 16 , 15 , 8 , 0 };
10398 NSMenu *menu3d = nil ;
10499 NSMenuItem *menuitem = nil ;
105100
106101 if (firstTime) {
107102 getvalidmodes ();
108103 xdim = settings->xdim3d ;
109104 ydim = settings->ydim3d ;
110- bpp = settings->bpp3d ;
111- fullscreen = settings->fullscreen ;
105+ bitspp = settings->bpp3d ;
106+ fullsc = settings->fullscreen & 255 ;
107+ display = min (displaycnt, max (0 , (settings->fullscreen >> 8 )));
108+
109+ NSMenu *menu = [displayPUButton menu ];
110+ [menu removeAllItems ];
111+ for (int i = 0 ; i < displaycnt; i++) {
112+ menuitem = [menu addItemWithTitle: [NSString stringWithFormat: @" Display %d \u2013 %s " ,
113+ i, getdisplayname (i)]
114+ action: nil
115+ keyEquivalent: @" " ];
116+ [menuitem setTag: i];
117+ }
118+ if (displaycnt < 2 ) [displayPUButton setHidden: YES ];
112119 } else {
113- fullscreen = ([fullscreenButton state ] == NSControlStateValueOn );
114- mode3d = (int )[[videoMode3DPUButton selectedItem ] tag ];
120+ fullsc = ([fullscreenButton state ] == NSControlStateValueOn );
121+ if (fullsc) display = max (0 , (int )[displayPUButton selectedTag ]);
122+ mode3d = (int )[videoMode3DPUButton selectedTag ];
115123 if (mode3d >= 0 ) {
116124 xdim = validmode[mode3d].xdim ;
117125 ydim = validmode[mode3d].ydim ;
118- bpp = validmode[mode3d].bpp ;
126+ bitspp = validmode[mode3d].bpp ;
119127 }
120128 }
121129
122130 // Find an ideal match.
123- mode3d = checkvideomode (&xdim, &ydim, bpp, fullscreen, 1 );
124- if (mode3d < 0 ) {
125- for (i=0 ; cd[i]; ) { if (cd[i] >= bpp) i++; else break ; }
126- for ( ; cd[i]; i++) {
127- mode3d = checkvideomode (&xdim, &ydim, cd[i], fullscreen, 1 );
128- if (mode3d < 0 ) continue ;
129- break ;
130- }
131+ mode3d = checkvideomode (&xdim, &ydim, bitspp, SETGAMEMODE_FULLSCREEN (display, fullsc), 1 );
132+ for (i=0 ; mode3d < 0 && cd[i]; i++) {
133+ mode3d = checkvideomode (&xdim, &ydim, cd[i], SETGAMEMODE_FULLSCREEN (display, fullsc), 1 );
131134 }
135+ if (mode3d < 0 ) mode3d = 0 ;
136+ fullsc = validmode[mode3d].fs ;
137+ display = validmode[mode3d].display ;
132138
133- // Repopulate the lists.
139+ // Repopulate the mode lists.
134140 menu3d = [videoMode3DPUButton menu ];
135141 [menu3d removeAllItems ];
136142
137143 for (i = 0 ; i < validmodecnt; i++) {
138- if (validmode[i].fs != fullscreen) continue ;
144+ if (validmode[i].fs != fullsc) continue ;
145+ if (validmode[i].display != display) continue ;
139146
140- if (i == mode3d) idx3d = i;
141- menuitem = [menu3d addItemWithTitle: [NSString stringWithFormat: @" %d %C %d %d -bpp" ,
142- validmode[i].xdim, 0xd7 , validmode[i].ydim, validmode[i].bpp]
147+ if (i == mode3d || idx3d < 0 ) idx3d = i;
148+ menuitem = [menu3d addItemWithTitle: [NSString stringWithFormat: @" %d \u00d7 %d %d -bpp" ,
149+ validmode[i].xdim, validmode[i].ydim,
150+ validmode[i].bpp]
143151 action: nil
144152 keyEquivalent: @" " ];
145153 [menuitem setTag: i];
146154 }
147-
148155 if (idx3d >= 0 ) [videoMode3DPUButton selectItemWithTag: idx3d];
156+
157+ [displayPUButton selectItemWithTag: validmode[mode3d].display];
158+ [displayPUButton setEnabled: validmode[mode3d].fs ? YES : NO ];
159+ [fullscreenButton setState: validmode[mode3d].fs ? NSControlStateValueOn : NSControlStateValueOff ];
149160}
150161
151- - (IBAction )fullscreenClicked : (id )sender
162+ - (IBAction )fullscreenOrDisplayClicked : (id )sender
152163{
153164 [self populateVideoModes: NO ];
154165}
@@ -177,12 +188,12 @@ - (IBAction)start:(id)sender
177188{
178189 int mode = -1 ;
179190
180- mode = (int )[[ videoMode3DPUButton selectedItem ] tag ];
191+ mode = (int )[videoMode3DPUButton selectedTag ];
181192 if (mode >= 0 ) {
182193 settings->xdim3d = validmode[mode].xdim ;
183194 settings->ydim3d = validmode[mode].ydim ;
184195 settings->bpp3d = validmode[mode].bpp ;
185- settings->fullscreen = validmode[mode].fs ;
196+ settings->fullscreen = SETGAMEMODE_FULLSCREEN ( validmode[mode].display , validmode[mode]. fs ) ;
186197 }
187198
188199 settings->numplayers = 0 ;
@@ -210,9 +221,9 @@ - (void)setupConfigMode
210221 [alwaysShowButton setEnabled: YES ];
211222
212223 [videoMode3DPUButton setEnabled: YES ];
213- [self populateVideoModes: YES ];
214224 [fullscreenButton setEnabled: YES ];
215- [fullscreenButton setState: (settings->fullscreen ? NSControlStateValueOn : NSControlStateValueOff )];
225+ [displayPUButton setEnabled: YES ];
226+ [self populateVideoModes: YES ];
216227
217228 if (!settings->netoverride ) {
218229 [singlePlayerButton setEnabled: YES ];
0 commit comments