Browse code

(uxnemu) add fullscreen mode and improve argument handling

Leonora Tindall authored on 25/10/2023 01:22:05 • neauoire committed on 25/10/2023 15:23:27
Showing 2 changed files
... ...
@@ -90,6 +90,8 @@ uxnemu orca.rom | shim
90 90
 
91 91
 - `-2x` Force medium scale
92 92
 - `-3x` Force large scale
93
+- `-f`  Force fullscreen mode
94
+- `--`  Force next argument to be read as ROM name. (This is useful if your ROM file is named `-v`, `-2x`, and so forth.)
93 95
 
94 96
 ## GUI Emulator Controls
95 97
 
... ...
@@ -98,6 +100,7 @@ uxnemu orca.rom | shim
98 100
 - `F3` capture screen
99 101
 - `F4` reboot
100 102
 - `F5` soft reboot
103
+- `F11` toggle fullscreen
101 104
 
102 105
 ### GUI Buttons
103 106
 
... ...
@@ -56,6 +56,7 @@ static SDL_Thread *stdin_thread;
56 56
 /* devices */
57 57
 
58 58
 static int window_created = 0;
59
+static int fullscreen = 0;
59 60
 static Uint32 stdin_event, audio0_event, zoom = 1;
60 61
 static Uint64 exec_deadline, deadline_interval, ms_interval;
61 62
 
... ...
@@ -187,6 +188,18 @@ set_zoom(Uint8 z, int win)
187 188
 	}
188 189
 }
189 190
 
191
+static void
192
+set_fullscreen(int new_fullscreen, int win)
193
+{
194
+	fullscreen = new_fullscreen;
195
+	Uint32 flags = 0; /* windowed mode; SDL2 has no constant for this */
196
+	if(fullscreen) {
197
+		flags = SDL_WINDOW_FULLSCREEN_DESKTOP;
198
+	}
199
+		if(win)
200
+			SDL_SetWindowFullscreen(emu_window, flags);
201
+}
202
+
190 203
 /* emulator primitives */
191 204
 
192 205
 int
... ...
@@ -390,6 +403,8 @@ handle_events(Uxn *u)
390 403
 				emu_restart(u, boot_rom, 0);
391 404
 			else if(event.key.keysym.sym == SDLK_F5)
392 405
 				emu_restart(u, boot_rom, 1);
406
+			else if(event.key.keysym.sym == SDLK_F11)
407
+				set_fullscreen(!fullscreen, 1);
393 408
 			ksym = event.key.keysym.sym;
394 409
 			if(SDL_PeepEvents(&event, 1, SDL_PEEKEVENT, SDL_KEYUP, SDL_KEYUP) == 1 && ksym == event.key.keysym.sym)
395 410
 				return 1;
... ...
@@ -455,7 +470,10 @@ emu_run(Uxn *u, char *rom)
455 470
 	Uint64 frame_interval = SDL_GetPerformanceFrequency() / 60;
456 471
 	Uint8 *vector_addr = &u->dev[0x20];
457 472
 	window_created = 1;
458
-	emu_window = SDL_CreateWindow(rom, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, (uxn_screen.width + PAD2) * zoom, (uxn_screen.height + PAD2) * zoom, SDL_WINDOW_SHOWN | SDL_WINDOW_ALLOW_HIGHDPI);
473
+	Uint32 window_flags = SDL_WINDOW_SHOWN | SDL_WINDOW_ALLOW_HIGHDPI;
474
+	if (fullscreen)
475
+		window_flags = window_flags | SDL_WINDOW_FULLSCREEN_DESKTOP;
476
+	emu_window = SDL_CreateWindow(rom, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, (uxn_screen.width + PAD2) * zoom, (uxn_screen.height + PAD2) * zoom, window_flags);
459 477
 	if(emu_window == NULL)
460 478
 		return system_error("sdl_window", SDL_GetError());
461 479
 	emu_renderer = SDL_CreateRenderer(emu_window, -1, SDL_RENDERER_ACCELERATED);
... ...
@@ -508,7 +526,7 @@ main(int argc, char **argv)
508 526
 	Uxn u = {0};
509 527
 	int i = 1;
510 528
 	if(i == argc)
511
-		return system_error("usage", "uxnemu [-v][-2x][-3x] file.rom [args...]");
529
+		return system_error("usage", "uxnemu [-v] | uxnemu [-f | -2x | -3x | --] file.rom [args...]");
512 530
 	/* Connect Varvara */
513 531
 	system_connect(0x0, SYSTEM_VERSION, SYSTEM_DEIMASK, SYSTEM_DEOMASK);
514 532
 	system_connect(0x1, CONSOLE_VERSION, CONSOLE_DEIMASK, CONSOLE_DEOMASK);
... ...
@@ -522,11 +540,20 @@ main(int argc, char **argv)
522 540
 	system_connect(0xa, FILE_VERSION, FILE_DEIMASK, FILE_DEOMASK);
523 541
 	system_connect(0xb, FILE_VERSION, FILE_DEIMASK, FILE_DEOMASK);
524 542
 	system_connect(0xc, DATETIME_VERSION, DATETIME_DEIMASK, DATETIME_DEOMASK);
525
-	/* Read flags */
526
-	if(argv[i][0] == '-' && argv[i][1] == 'v')
527
-		return system_version("Uxnemu - Graphical Varvara Emulator", "2 Sep 2023");
528
-	if(strcmp(argv[i], "-2x") == 0 || strcmp(argv[i], "-3x") == 0)
529
-		set_zoom(argv[i++][1] - '0', 0);
543
+	/* Read flag. Right now, there can be only one. */
544
+	if(argv[i][0] == '-') {
545
+		if(argv[i][1] == 'v')
546
+			return system_version("Uxnemu - Graphical Varvara Emulator", "2 Sep 2023");
547
+		if(argv[i][1] == '-')
548
+			i++;
549
+		if(strcmp(argv[i], "-2x") == 0 || strcmp(argv[i], "-3x") == 0)
550
+			set_zoom(argv[i++][1] - '0', 0);
551
+		if(strcmp(argv[i], "-f") == 0) {
552
+			i++;
553
+			set_fullscreen(1, 0);
554
+		}
555
+	}
556
+	/* Start system. */
530 557
 	if(!emu_init())
531 558
 		return system_error("Init", "Failed to initialize varvara.");
532 559
 	if(!system_init(&u, (Uint8 *)calloc(0x10000 * RAM_PAGES, sizeof(Uint8)), argv[i++]))