From 17e203e797de1645c3edfd86edc413b365888408 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jo=C3=A3o=20Magalh=C3=A3es?= <joamag@gmail.com>
Date: Sat, 12 Nov 2022 02:48:32 +0000
Subject: [PATCH] feat: true fullscreen support at browser level

---
 CHANGELOG.md                                      | 2 +-
 examples/web/index.ts                             | 1 -
 examples/web/react/app.tsx                        | 2 --
 examples/web/react/components/display/display.tsx | 8 ++++++++
 src/mmu.rs                                        | 4 ++--
 5 files changed, 11 insertions(+), 6 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index b88e2068..c5ded7f6 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,7 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
 
 ### Added
 
-*
+* Support for true fullscreen at a browser level
 
 ### Changed
 
diff --git a/examples/web/index.ts b/examples/web/index.ts
index 2d5409d6..79836e4e 100644
--- a/examples/web/index.ts
+++ b/examples/web/index.ts
@@ -279,7 +279,6 @@ class GameboyEmulator extends EmulatorBase implements Emulator {
             case "neo":
                 this.gameBoy = new GameBoy();
                 break;
-
             default:
                 if (!this.gameBoy) {
                     throw new Error("No engine requested");
diff --git a/examples/web/react/app.tsx b/examples/web/react/app.tsx
index 41589ab6..d0bbb7ca 100644
--- a/examples/web/react/app.tsx
+++ b/examples/web/react/app.tsx
@@ -333,13 +333,11 @@ export const App: FC<AppProps> = ({
                     event.stopPropagation();
                     event.preventDefault();
                     break;
-
                 case "-":
                     setKeyaction("Minus");
                     event.stopPropagation();
                     event.preventDefault();
                     break;
-
                 case "Escape":
                     setKeyaction("Escape");
                     event.stopPropagation();
diff --git a/examples/web/react/components/display/display.tsx b/examples/web/react/components/display/display.tsx
index a71d57ae..00a77946 100644
--- a/examples/web/react/components/display/display.tsx
+++ b/examples/web/react/components/display/display.tsx
@@ -92,6 +92,10 @@ export const Display: FC<DisplayProps> = ({
             resizeRef.current();
             document.getElementsByTagName("body")[0].style.overflow = "hidden";
             window.addEventListener("resize", resizeRef.current);
+
+            // requests the browser to go fullscreen using the
+            // body of the document as the entry HTML element
+            document.body.requestFullscreen();
         } else {
             setWidth(undefined);
             setHeight(undefined);
@@ -99,6 +103,10 @@ export const Display: FC<DisplayProps> = ({
                 .getElementsByTagName("body")[0]
                 .style.removeProperty("overflow");
             window.removeEventListener("resize", resizeRef.current);
+
+            // restores the window mode, returning from the
+            // fullscreen browser
+            document.exitFullscreen();
         }
         return () => {
             window.removeEventListener("resize", resizeRef.current);
diff --git a/src/mmu.rs b/src/mmu.rs
index 78f9e36b..c18e1f7c 100644
--- a/src/mmu.rs
+++ b/src/mmu.rs
@@ -26,8 +26,8 @@ pub struct Mmu {
     rom: Cartridge,
 
     /// Flag that control the access to the boot section in the
-    /// 0x0000-0x00fe memory area, this flag should be unset after
-    /// the bool sequence has been finished.
+    /// 0x0000-0x00FE memory area, this flag should be unset after
+    /// the boot sequence has been finished.
     boot_active: bool,
 
     boot: [u8; BOOT_SIZE],
-- 
GitLab