add mame cheat sheet. implemented in html :/

This commit is contained in:
Kelvin Sherlock 2021-01-17 00:47:05 -05:00
parent 28b1074da2
commit 2046eed6f4
7 changed files with 376 additions and 0 deletions

View File

@ -78,6 +78,12 @@
B63C1BA6250192D800511A71 /* cecm.plist in Resources */ = {isa = PBXBuildFile; fileRef = B63C1B9C250192D800511A71 /* cecm.plist */; }; B63C1BA6250192D800511A71 /* cecm.plist in Resources */ = {isa = PBXBuildFile; fileRef = B63C1B9C250192D800511A71 /* cecm.plist */; };
B63C1BA8250192E600511A71 /* zijini.plist in Resources */ = {isa = PBXBuildFile; fileRef = B63C1BA7250192E600511A71 /* zijini.plist */; }; B63C1BA8250192E600511A71 /* zijini.plist in Resources */ = {isa = PBXBuildFile; fileRef = B63C1BA7250192E600511A71 /* zijini.plist */; };
B63C1BA9250192E600511A71 /* zijini.plist in Resources */ = {isa = PBXBuildFile; fileRef = B63C1BA7250192E600511A71 /* zijini.plist */; }; B63C1BA9250192E600511A71 /* zijini.plist in Resources */ = {isa = PBXBuildFile; fileRef = B63C1BA7250192E600511A71 /* zijini.plist */; };
B63C1F0B25B143C50016A611 /* CheatSheet.xib in Resources */ = {isa = PBXBuildFile; fileRef = B63C1F0925B143C50016A611 /* CheatSheet.xib */; };
B63C1F0C25B143C50016A611 /* CheatSheet.xib in Resources */ = {isa = PBXBuildFile; fileRef = B63C1F0925B143C50016A611 /* CheatSheet.xib */; };
B63C1F0F25B1447C0016A611 /* CheatSheetWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = B63C1F0E25B1447C0016A611 /* CheatSheetWindowController.m */; };
B63C1F1025B1447C0016A611 /* CheatSheetWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = B63C1F0E25B1447C0016A611 /* CheatSheetWindowController.m */; };
B63C1F1225B147E10016A611 /* CheatSheet.html in Resources */ = {isa = PBXBuildFile; fileRef = B63C1F1125B147E10016A611 /* CheatSheet.html */; };
B63C1F1325B147E10016A611 /* CheatSheet.html in Resources */ = {isa = PBXBuildFile; fileRef = B63C1F1125B147E10016A611 /* CheatSheet.html */; };
B64979C224EF6703008ABD20 /* MediaViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B64979C124EF6703008ABD20 /* MediaViewController.m */; }; B64979C224EF6703008ABD20 /* MediaViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B64979C124EF6703008ABD20 /* MediaViewController.m */; };
B64AF1EE250EC35B00A09B9B /* DiskImages.xib in Resources */ = {isa = PBXBuildFile; fileRef = B64AF1EC250EC35B00A09B9B /* DiskImages.xib */; }; B64AF1EE250EC35B00A09B9B /* DiskImages.xib in Resources */ = {isa = PBXBuildFile; fileRef = B64AF1EC250EC35B00A09B9B /* DiskImages.xib */; };
B64AF1EF250EC35B00A09B9B /* DiskImages.xib in Resources */ = {isa = PBXBuildFile; fileRef = B64AF1EC250EC35B00A09B9B /* DiskImages.xib */; }; B64AF1EF250EC35B00A09B9B /* DiskImages.xib in Resources */ = {isa = PBXBuildFile; fileRef = B64AF1EC250EC35B00A09B9B /* DiskImages.xib */; };
@ -303,6 +309,10 @@
B63C1B9B250192D800511A71 /* cec2000.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = cec2000.plist; sourceTree = "<group>"; }; B63C1B9B250192D800511A71 /* cec2000.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = cec2000.plist; sourceTree = "<group>"; };
B63C1B9C250192D800511A71 /* cecm.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = cecm.plist; sourceTree = "<group>"; }; B63C1B9C250192D800511A71 /* cecm.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = cecm.plist; sourceTree = "<group>"; };
B63C1BA7250192E600511A71 /* zijini.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = zijini.plist; sourceTree = "<group>"; }; B63C1BA7250192E600511A71 /* zijini.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = zijini.plist; sourceTree = "<group>"; };
B63C1F0A25B143C50016A611 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/CheatSheet.xib; sourceTree = "<group>"; };
B63C1F0D25B1447C0016A611 /* CheatSheetWindowController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CheatSheetWindowController.h; sourceTree = "<group>"; };
B63C1F0E25B1447C0016A611 /* CheatSheetWindowController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CheatSheetWindowController.m; sourceTree = "<group>"; };
B63C1F1125B147E10016A611 /* CheatSheet.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = CheatSheet.html; sourceTree = "<group>"; };
B64979C024EF6703008ABD20 /* MediaViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MediaViewController.h; sourceTree = "<group>"; }; B64979C024EF6703008ABD20 /* MediaViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MediaViewController.h; sourceTree = "<group>"; };
B64979C124EF6703008ABD20 /* MediaViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MediaViewController.m; sourceTree = "<group>"; }; B64979C124EF6703008ABD20 /* MediaViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MediaViewController.m; sourceTree = "<group>"; };
B64AF1ED250EC35B00A09B9B /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/DiskImages.xib; sourceTree = "<group>"; }; B64AF1ED250EC35B00A09B9B /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/DiskImages.xib; sourceTree = "<group>"; };
@ -447,6 +457,7 @@
B61099FA24F5F370005CB652 /* uniap2en.plist */, B61099FA24F5F370005CB652 /* uniap2en.plist */,
B61099EE24F5F36E005CB652 /* uniap2pt.plist */, B61099EE24F5F36E005CB652 /* uniap2pt.plist */,
B6109A0224F5F371005CB652 /* uniap2ti.plist */, B6109A0224F5F371005CB652 /* uniap2ti.plist */,
B63C1F1125B147E10016A611 /* CheatSheet.html */,
); );
path = Resources; path = Resources;
sourceTree = "<group>"; sourceTree = "<group>";
@ -552,6 +563,8 @@
B6004DEE24FB05D600D38596 /* LogWindowController.m */, B6004DEE24FB05D600D38596 /* LogWindowController.m */,
B66236A724FD9A34006CABD7 /* PreferencesWindowController.h */, B66236A724FD9A34006CABD7 /* PreferencesWindowController.h */,
B66236A824FD9A34006CABD7 /* PreferencesWindowController.m */, B66236A824FD9A34006CABD7 /* PreferencesWindowController.m */,
B63C1F0D25B1447C0016A611 /* CheatSheetWindowController.h */,
B63C1F0E25B1447C0016A611 /* CheatSheetWindowController.m */,
); );
name = "Window Controllers"; name = "Window Controllers";
sourceTree = "<group>"; sourceTree = "<group>";
@ -569,6 +582,7 @@
B6D6DE3724FAC8B500661A5F /* Preferences.xib */, B6D6DE3724FAC8B500661A5F /* Preferences.xib */,
B61099E324F5F230005CB652 /* SlotView.xib */, B61099E324F5F230005CB652 /* SlotView.xib */,
B64AF1EC250EC35B00A09B9B /* DiskImages.xib */, B64AF1EC250EC35B00A09B9B /* DiskImages.xib */,
B63C1F0925B143C50016A611 /* CheatSheet.xib */,
); );
name = Nibs; name = Nibs;
sourceTree = "<group>"; sourceTree = "<group>";
@ -740,6 +754,7 @@
B6DDECCE2505A86E0093587A /* eject-16x16@3x.png in Resources */, B6DDECCE2505A86E0093587A /* eject-16x16@3x.png in Resources */,
B64AF1EE250EC35B00A09B9B /* DiskImages.xib in Resources */, B64AF1EE250EC35B00A09B9B /* DiskImages.xib in Resources */,
B6109A3B24F5F377005CB652 /* apple2gsr1.plist in Resources */, B6109A3B24F5F377005CB652 /* apple2gsr1.plist in Resources */,
B63C1F1225B147E10016A611 /* CheatSheet.html in Resources */,
B63C1B9625008A2700511A71 /* DownloadWindow.xib in Resources */, B63C1B9625008A2700511A71 /* DownloadWindow.xib in Resources */,
B6D6DE3B24FACF4F00661A5F /* Defaults.plist in Resources */, B6D6DE3B24FACF4F00661A5F /* Defaults.plist in Resources */,
B6109A2224F5F377005CB652 /* models.plist in Resources */, B6109A2224F5F377005CB652 /* models.plist in Resources */,
@ -759,6 +774,7 @@
B6D6DE3924FAC8B500661A5F /* Preferences.xib in Resources */, B6D6DE3924FAC8B500661A5F /* Preferences.xib in Resources */,
B6109A2924F5F377005CB652 /* apple2gs.plist in Resources */, B6109A2924F5F377005CB652 /* apple2gs.plist in Resources */,
B6109A1F24F5F377005CB652 /* apple2jp.plist in Resources */, B6109A1F24F5F377005CB652 /* apple2jp.plist in Resources */,
B63C1F0B25B143C50016A611 /* CheatSheet.xib in Resources */,
B6109A3024F5F377005CB652 /* apple2.plist in Resources */, B6109A3024F5F377005CB652 /* apple2.plist in Resources */,
B6109A2D24F5F377005CB652 /* prav8m.plist in Resources */, B6109A2D24F5F377005CB652 /* prav8m.plist in Resources */,
); );
@ -787,6 +803,7 @@
B6E4B5C724FDE2670094A35C /* am100.plist in Resources */, B6E4B5C724FDE2670094A35C /* am100.plist in Resources */,
B6E4B5C824FDE2670094A35C /* laser2c.plist in Resources */, B6E4B5C824FDE2670094A35C /* laser2c.plist in Resources */,
B6DDECC125057A550093587A /* drag-handle-4x10.png in Resources */, B6DDECC125057A550093587A /* drag-handle-4x10.png in Resources */,
B63C1F0C25B143C50016A611 /* CheatSheet.xib in Resources */,
B6E4B5C924FDE2670094A35C /* laser128.plist in Resources */, B6E4B5C924FDE2670094A35C /* laser128.plist in Resources */,
B6E4B5CA24FDE2670094A35C /* apple2ep.plist in Resources */, B6E4B5CA24FDE2670094A35C /* apple2ep.plist in Resources */,
B6DDECCD2505A86E0093587A /* eject-16x16@2x.png in Resources */, B6DDECCD2505A86E0093587A /* eject-16x16@2x.png in Resources */,
@ -831,6 +848,7 @@
B6E4B5EA24FDE2670094A35C /* apple3.plist in Resources */, B6E4B5EA24FDE2670094A35C /* apple3.plist in Resources */,
B6E4B5EB24FDE2670094A35C /* apple2ee.plist in Resources */, B6E4B5EB24FDE2670094A35C /* apple2ee.plist in Resources */,
B6E4B5EC24FDE2670094A35C /* dodo.plist in Resources */, B6E4B5EC24FDE2670094A35C /* dodo.plist in Resources */,
B63C1F1325B147E10016A611 /* CheatSheet.html in Resources */,
B6E4B5ED24FDE2670094A35C /* Preferences.xib in Resources */, B6E4B5ED24FDE2670094A35C /* Preferences.xib in Resources */,
B6DDECD72505A86E0093587A /* eject-16x16.png in Resources */, B6DDECD72505A86E0093587A /* eject-16x16.png in Resources */,
B6E4B5EF24FDE2670094A35C /* apple2gs.plist in Resources */, B6E4B5EF24FDE2670094A35C /* apple2gs.plist in Resources */,
@ -869,6 +887,7 @@
B6BA258024E99BE9005FB8FF /* AppDelegate.m in Sources */, B6BA258024E99BE9005FB8FF /* AppDelegate.m in Sources */,
B6004DF024FB05D600D38596 /* LogWindowController.m in Sources */, B6004DF024FB05D600D38596 /* LogWindowController.m in Sources */,
B66236A924FD9A34006CABD7 /* PreferencesWindowController.m in Sources */, B66236A924FD9A34006CABD7 /* PreferencesWindowController.m in Sources */,
B63C1F0F25B1447C0016A611 /* CheatSheetWindowController.m in Sources */,
B64AF1F2250ECB2E00A09B9B /* DiskImagesWindowController.m in Sources */, B64AF1F2250ECB2E00A09B9B /* DiskImagesWindowController.m in Sources */,
B64AF1F6250ED5E400A09B9B /* TableCellView.m in Sources */, B64AF1F6250ED5E400A09B9B /* TableCellView.m in Sources */,
B63C1B9425008A2700511A71 /* DownloadWindowController.m in Sources */, B63C1B9425008A2700511A71 /* DownloadWindowController.m in Sources */,
@ -883,6 +902,7 @@
B608E1802502FE0C00D53465 /* TransparentScroller.m in Sources */, B608E1802502FE0C00D53465 /* TransparentScroller.m in Sources */,
B64AF1FB250EF6A500A09B9B /* Transformers.m in Sources */, B64AF1FB250EF6A500A09B9B /* Transformers.m in Sources */,
B6E4B5B024FDE2670094A35C /* main.m in Sources */, B6E4B5B024FDE2670094A35C /* main.m in Sources */,
B63C1F1025B1447C0016A611 /* CheatSheetWindowController.m in Sources */,
B63C1B8C24FF4BF700511A71 /* Ample.m in Sources */, B63C1B8C24FF4BF700511A71 /* Ample.m in Sources */,
B64AF1F3250ECB2E00A09B9B /* DiskImagesWindowController.m in Sources */, B64AF1F3250ECB2E00A09B9B /* DiskImagesWindowController.m in Sources */,
B6B9EA672506A5550080E70D /* EjectButton.m in Sources */, B6B9EA672506A5550080E70D /* EjectButton.m in Sources */,
@ -918,6 +938,14 @@
name = MediaView.xib; name = MediaView.xib;
sourceTree = "<group>"; sourceTree = "<group>";
}; };
B63C1F0925B143C50016A611 /* CheatSheet.xib */ = {
isa = PBXVariantGroup;
children = (
B63C1F0A25B143C50016A611 /* Base */,
);
name = CheatSheet.xib;
sourceTree = "<group>";
};
B64AF1EC250EC35B00A09B9B /* DiskImages.xib */ = { B64AF1EC250EC35B00A09B9B /* DiskImages.xib */ = {
isa = PBXVariantGroup; isa = PBXVariantGroup;
children = ( children = (

View File

@ -11,6 +11,7 @@
#import "PreferencesWindowController.h" #import "PreferencesWindowController.h"
#import "DownloadWindowController.h" #import "DownloadWindowController.h"
#import "DiskImagesWindowController.h" #import "DiskImagesWindowController.h"
#import "CheatSheetWindowController.h"
#import "Transformers.h" #import "Transformers.h"
#import "LogWindowController.h" #import "LogWindowController.h"
@ -25,6 +26,7 @@
NSWindowController *_launcher; NSWindowController *_launcher;
NSWindowController *_downloader; NSWindowController *_downloader;
NSWindowController *_diskImages; NSWindowController *_diskImages;
NSWindowController *_cheatSheet;
} }
@ -179,6 +181,14 @@
} }
[_diskImages showWindow: sender]; [_diskImages showWindow: sender];
} }
- (IBAction)displayCheatSheet:(id)sender {
if (!_cheatSheet) {
_cheatSheet = [CheatSheetWindowController new];
}
[_cheatSheet showWindow: sender];
}
- (IBAction)displaySupportDirectory:(id)sender { - (IBAction)displaySupportDirectory:(id)sender {
NSURL *url = SupportDirectory(); NSURL *url = SupportDirectory();
NSWorkspace *ws = [NSWorkspace sharedWorkspace]; NSWorkspace *ws = [NSWorkspace sharedWorkspace];

View File

@ -0,0 +1,46 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="15705" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="15705"/>
<plugIn identifier="com.apple.WebKit2IBPlugin" version="15705"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner" customClass="CheatSheetWindowController">
<connections>
<outlet property="_webView" destination="Yc9-xA-jWX" id="rsd-1e-HPk"/>
<outlet property="webView" destination="Yc9-xA-jWX" id="EE3-gk-f71"/>
<outlet property="window" destination="QvC-M9-y7g" id="U2v-sN-OzH"/>
</connections>
</customObject>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<window title="Keyboard Cheat Sheet" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" animationBehavior="default" id="QvC-M9-y7g">
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES"/>
<rect key="contentRect" x="196" y="240" width="640" height="640"/>
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1417"/>
<view key="contentView" wantsLayer="YES" id="EiT-Mj-1SZ">
<rect key="frame" x="0.0" y="0.0" width="640" height="640"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<wkWebView hidden="YES" wantsLayer="YES" fixedFrame="YES" allowsLinkPreview="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Yc9-xA-jWX">
<rect key="frame" x="0.0" y="0.0" width="640" height="640"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<wkWebViewConfiguration key="configuration">
<audiovisualMediaTypes key="mediaTypesRequiringUserActionForPlayback" none="YES"/>
<wkPreferences key="preferences" javaScriptCanOpenWindowsAutomatically="NO"/>
</wkWebViewConfiguration>
<connections>
<outlet property="navigationDelegate" destination="-2" id="1WW-1B-FdZ"/>
</connections>
</wkWebView>
</subviews>
</view>
<connections>
<outlet property="delegate" destination="-2" id="u4H-aq-RE2"/>
</connections>
<point key="canvasLocation" x="42" y="198"/>
</window>
</objects>
</document>

View File

@ -436,6 +436,12 @@
<action selector="showHelp:" target="-1" id="y7X-2Q-9no"/> <action selector="showHelp:" target="-1" id="y7X-2Q-9no"/>
</connections> </connections>
</menuItem> </menuItem>
<menuItem title="MAME Keyboard Cheat Sheet" id="vcW-Dz-2Nx">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="displayCheatSheet:" target="Voe-Tx-rLC" id="HvD-mQ-4pe"/>
</connections>
</menuItem>
<menuItem title="MAME Apple II Wiki" id="GLh-Cc-5uU"> <menuItem title="MAME Apple II Wiki" id="GLh-Cc-5uU">
<modifierMask key="keyEquivalentModifierMask"/> <modifierMask key="keyEquivalentModifierMask"/>
<connections> <connections>

View File

@ -0,0 +1,17 @@
//
// CheatSheetWindowController.h
// Ample
//
// Created by Kelvin Sherlock on 1/14/2021.
// Copyright © 2021 Kelvin Sherlock. All rights reserved.
//
#import <Cocoa/Cocoa.h>
NS_ASSUME_NONNULL_BEGIN
@interface CheatSheetWindowController : NSWindowController
@end
NS_ASSUME_NONNULL_END

View File

@ -0,0 +1,47 @@
//
// CheatSheetWindowController.m
// Ample
//
// Created by Kelvin Sherlock on 1/14/2021.
// Copyright © 2021 Kelvin Sherlock. All rights reserved.
//
#import "CheatSheetWindowController.h"
#import <WebKit/WebKit.h>
@interface CheatSheetWindowController ()
@property (weak) IBOutlet WKWebView *webView;
@end
@interface CheatSheetWindowController (NavigationDelegate) <WKNavigationDelegate>
@end
@implementation CheatSheetWindowController
-(NSString *)windowNibName {
return @"CheatSheet";
}
- (void)windowDidLoad {
[super windowDidLoad];
[_webView setHidden: YES];
NSBundle *bundle = [NSBundle mainBundle];
NSURL *url = [bundle URLForResource: @"CheatSheet" withExtension: @"html"];
[[[_webView configuration] preferences] setValue: @YES forKey: @"developerExtrasEnabled"];
[_webView loadFileURL: url allowingReadAccessToURL: url];
}
-(void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation {
// delay to prevent flash in dark mode.
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0/8 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[webView setHidden: NO];
});
}
@end

View File

@ -0,0 +1,222 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Keyboard Cheat Sheet</title>
<style type="text/css">
:root {
color-scheme: light dark;
font-family: -apple-system, 'HelveticaNeue' ;
font: -apple-system-body;
}
body {
user-select: none;
background-color: rgb(236, 236, 236);
color: rgb(38, 38, 38);
}
h1, h2 {
text-align: center;
font-size: 150%;
}
table {
width: 100%;
}
kbd {
display: inline-block;
border-radius: 3px;
padding-left: .5em;
padding-right: .5em;
padding-top: 4px;
padding-bottom: 2px;
margin-bottom: 5px;
margin-right: 5px;
margin-left: 4px;
border: solid 1px black;
box-shadow: 1px 1px 2px 0px rgba(0,0,0,0.75), inset 1px 1px 2px 0px white;
text-shadow: 0px 1px 0px rgb(255, 255, 255);
background-color: rgb(225, 225, 225);
}
@media (prefers-color-scheme: dark) {
body {
background-color: rgb(50, 50, 50);
color: rgb(225, 225, 225);
}
kbd {
border: solid 1px black;
text-shadow: 0px 1px 0px black;
box-shadow: 1px 1px 2px 0px rgba(0,0,0,0.75);
background-color: rgb(101, 101, 101);
}
}
</style>
<script type="text/javascript">
function macbook(onoff) {
var nodes = document.querySelectorAll("[data-macbook]");
nodes.forEach( (e) => {
var m = (e.dataset.macbook == "true");
e.hidden = m ^ onoff;
});
}
window.addEventListener('load', (event)=> {
macbook(false);
var e = document.getElementById('macbook');
if (e) {
e.checked = false;
e.addEventListener('click', (event) => {
macbook(e.checked);
});
}
})
</script>
</head>
<body>
<div>
MacBook: <input type="checkbox" id="macbook" />
</div>
<h1>Full UI Mode</h1>
<table>
<colgroup>
<col style="width: 14em;" />
<col />
</colgroup>
<tbody>
<tr>
<td>
<span data-macbook=false><kbd>Delete</kbd></span>
<span data-macbook=true><kbd>Fn</kbd>+<kbd>Delete</kbd></span>
</td>
<td>Toggle partial UI mode</td>
</tr>
<tr>
<td><kbd>Option</kbd>+<kbd>Enter</kbd></td>
<td>Toggle full screen mode</td>
</tr>
<tr>
<td><kbd>F12</kbd></td>
<td>Reset Key</td>
</tr>
</tbody>
</table>
<h1>Partial UI Mode</h1>
<table>
<colgroup>
<col style="width: 14em;" />
<col />
</colgroup>
<tbody>
<tr>
<td>
<span data-macbook=false><kbd>Delete</kbd></span>
<span data-macbook=true><kbd>Fn</kbd>+<kbd>Delete</kbd></span>
</td>
<td>Toggle full UI mode</td>
</tr>
<tr>
<td><kbd>Option</kbd>+<kbd>Enter</kbd></td>
<td>Toggle full screen mode</td>
</tr>
<tr>
<td><kbd>Tab</kbd></td>
<td>Config menu</td>
</tr>
<tr>
<td><kbd>Esc</kbd></td>
<td>Quit</td>
</tr>
<tr>
<td><kbd>P</kbd></td>
<td>Pause</td>
</tr>
<tr>
<td><kbd>~</kbd></td>
<td>Debugger break (when active)</td>
</tr>
<tr>
<td>
<span data-macbook=false><kbd>Page Down</kbd></span>
<span data-macbook=true><kbd>Fn</kbd>+<kbd>Down Arrow</kbd></span>
</td>
<td>Fast forward (while pressed)</td>
</tr>
<tr>
<td><kbd>F3</kbd></td>
<td>Soft reset</td>
</tr>
<tr>
<td><kbd>Shift</kbd>+<kbd>F3</kbd></td>
<td>Hard reset</td>
</tr>
<tr>
<td><kbd>F5</kbd></td>
<td>Toggle debugger</td>
</tr>
<tr>
<td><kbd>Shift</kbd>+<kbd>F5</kbd></td>
<td>Toggle graphic filters</td>
</tr>
<tr>
<td><kbd>F7</kbd></td>
<td>Load state</td>
</tr>
<tr>
<td><kbd>Shift</kbd>+<kbd>F7</kbd></td>
<td>Save state</td>
</tr>
<tr>
<td><kbd>F10</kbd></td>
<td>Toggle throttle</td>
</tr>
<tr>
<td><kbd>F11</kbd></td>
<td>Show FPS</td>
</tr>
<tr>
<td><kbd>Shift</kbd>+<kbd>F11</kbd></td>
<td>Show profiler</td>
</tr>
<tr>
<td><kbd>F12</kbd></td>
<td>Save snapshot</td>
</tr>
<tr>
<td><kbd>Shift</kbd>+<kbd>F12</kbd></td>
<td>Record MNG video</td>
</tr>
<tr>
<td><kbd>Control</kbd>+<kbd>Shift</kbd>+<kbd>F12</kbd></td>
<td>Record AVI video</td>
</tr>
<tr>
<td><kbd>Option</kbd>+<kbd>Shift</kbd>+<kbd>F12</kbd></td>
<td>Record rendered AVI video</td>
</tr>
</tbody>
</table>
<h2>Note</h2>
<ul class="note">
<li><kbd>F</kbd> keys may require <kbd>Fn</kbd> key depending on keyboard and system settings.</li>
<li><kbd>Shift</kbd>, <kbd>Control</kbd>, and <kbd>Option</kbd> assume left-key unless otherwise specified.</li>
</ul>
</body>
</html>