Skip to content

Commit 8e556a1

Browse files
authored
Use Ctrl+Shift for shortcuts (#187)
This avoids accidentally triggering them after pressing Ctrl+Enter to start the game. There are also fewer conflicts, so we can choose more intuitive keys. Also, add a shortcut for focus mode. Also, disable focus mode when spectating and make card orientation UI more intuitive.
1 parent c73b3b6 commit 8e556a1

File tree

6 files changed

+49
-33
lines changed

6 files changed

+49
-33
lines changed

src/components/BoardLayoutDialog.js

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,10 @@ function BoardLayoutDialog(props) {
5050
setCardOrientation,
5151
} = useContext(SettingsContext);
5252

53-
const menuItems = (...items) =>
54-
items.map((item) => (
55-
<MenuItem key={item} value={item}>
56-
{item}
53+
const menuItems = (items) =>
54+
Object.entries(items).map(([key, name]) => (
55+
<MenuItem key={key} value={key}>
56+
{name}
5757
</MenuItem>
5858
));
5959

@@ -71,7 +71,7 @@ function BoardLayoutDialog(props) {
7171
value={layoutOrientation}
7272
onChange={(e) => setLayoutOrientation(e.target.value)}
7373
>
74-
{menuItems("portrait", "landscape")}
74+
{menuItems({ portrait: "portrait", landscape: "landscape" })}
7575
</Select>
7676
</FormControl>
7777
<FormControl className={classes.formControl}>
@@ -80,7 +80,10 @@ function BoardLayoutDialog(props) {
8080
value={cardOrientation}
8181
onChange={(e) => setCardOrientation(e.target.value)}
8282
>
83-
{menuItems("vertical", "horizontal")}
83+
{
84+
// Stored values are named backwards of what most people expect.
85+
menuItems({ horizontal: "vertical", vertical: "horizontal" })
86+
}
8487
</Select>
8588
</FormControl>
8689
</div>

src/components/Game.js

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { animated, to, useTransition } from "@react-spring/web";
99
import ResponsiveSetCard from "../components/ResponsiveSetCard";
1010
import { SettingsContext } from "../context";
1111
import useDimensions from "../hooks/useDimensions";
12-
import useKeydown, { getModifierState } from "../hooks/useKeydown";
12+
import useKeydown, { getKeyState } from "../hooks/useKeydown";
1313

1414
const useStyles = makeStyles({
1515
staticCard: {
@@ -174,13 +174,10 @@ function Game({
174174
? keyboardLayout.horizontalLayout
175175
: keyboardLayout.verticalLayout;
176176
useKeydown((event) => {
177-
const mod = getModifierState(event);
178-
if (mod !== "" && mod !== "Shift") {
177+
const { key, modifier } = getKeyState(event);
178+
if (modifier !== "" && modifier !== "Shift") {
179179
return;
180180
}
181-
// Ignore CapsLock: make key case depend only on Shift.
182-
const key =
183-
mod === "Shift" ? event.key.toUpperCase() : event.key.toLowerCase();
184181
if (key === "escape" || key === " ") {
185182
event.preventDefault();
186183
onClear();

src/components/Navbar.js

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import { version } from "../config";
1717
import { SettingsContext, UserContext } from "../context";
1818
import firebase from "../firebase";
1919
import useFirebaseRef from "../hooks/useFirebaseRef";
20-
import useKeydown, { getModifierState } from "../hooks/useKeydown";
20+
import useKeydown, { getKeyState } from "../hooks/useKeydown";
2121
import AccountOptionsDialog from "./AccountOptionsDialog";
2222
import BoardLayoutDialog from "./BoardLayoutDialog";
2323
import ColorChoiceDialog from "./ColorChoiceDialog";
@@ -120,19 +120,23 @@ function Navbar() {
120120
}
121121

122122
useKeydown((event) => {
123-
if (getModifierState(event) === "Control") {
124-
if (event.key === "s") {
123+
const { key, modifier } = getKeyState(event);
124+
if (modifier === "Control|Shift") {
125+
if (key === "S") {
125126
event.preventDefault();
126127
handleChangeVolume();
127-
} else if (event.key === "e") {
128+
} else if (key === "F") {
129+
event.preventDefault();
130+
handleChangeFocusMode();
131+
} else if (key === "H") {
128132
event.preventDefault();
129133
handleChangeTheme();
130-
} else if (event.key === "o") {
134+
} else if (key === "B") {
131135
event.preventDefault();
132136
settings.setLayoutOrientation((layoutOrientation) =>
133137
layoutOrientation === "portrait" ? "landscape" : "portrait"
134138
);
135-
} else if (event.key === "i") {
139+
} else if (key === "C") {
136140
event.preventDefault();
137141
settings.setCardOrientation((cardOrientation) =>
138142
cardOrientation === "vertical" ? "horizontal" : "vertical"

src/hooks/useKeydown.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,14 @@ export function getModifierState(event) {
99
return res.slice(1);
1010
}
1111

12+
export function getKeyState(event) {
13+
return {
14+
// Ignore CapsLock: make key case depend only on Shift.
15+
key: event.shiftKey ? event.key.toUpperCase() : event.key.toLowerCase(),
16+
modifier: getModifierState(event),
17+
};
18+
}
19+
1220
function useKeydown(handler) {
1321
useEffect(() => {
1422
const patchedHandler = (event) =>

src/pages/GamePage.js

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ import {
3636
removeCard,
3737
} from "../game";
3838
import useFirebaseRef from "../hooks/useFirebaseRef";
39-
import useKeydown, { getModifierState } from "../hooks/useKeydown";
39+
import useKeydown, { getKeyState } from "../hooks/useKeydown";
4040
import { formatANoun, sleep } from "../util";
4141
import LoadingPage from "./LoadingPage";
4242
import NotFoundPage from "./NotFoundPage";
@@ -167,16 +167,19 @@ function GamePage({ match }) {
167167
}, [finished.gameId, gameId]);
168168

169169
useKeydown((event) => {
170-
if (getModifierState(event) === "Control") {
171-
if (event.key === "Enter") {
170+
const { key, modifier } = getKeyState(event);
171+
if (modifier === "Control") {
172+
if (key === "enter") {
172173
event.preventDefault();
173174
handlePlayAgain();
174-
} else if (event.key === "q") {
175-
event.preventDefault();
176-
setRedirect("/");
177-
} else if (event.key === "p") {
175+
}
176+
} else if (modifier === "Control|Shift") {
177+
if (key === "P") {
178178
event.preventDefault();
179179
togglePause();
180+
} else if (key === "Q") {
181+
event.preventDefault();
182+
setRedirect("/");
180183
}
181184
}
182185
});
@@ -412,7 +415,7 @@ function GamePage({ match }) {
412415
<Grid container spacing={2}>
413416
<Box clone order={{ xs: 3, sm: 1 }}>
414417
<Grid item xs={12} sm={4} md={3} className={classes.sideColumn}>
415-
{(focusMode !== "on" || gameEnded) && (
418+
{(focusMode !== "on" || spectating || gameEnded) && (
416419
<Paper style={{ display: "flex", height: "100%", padding: 8 }}>
417420
<Chat
418421
title="Game Chat"
@@ -492,7 +495,7 @@ function GamePage({ match }) {
492495
</Box>
493496
<Box clone order={{ xs: 2, sm: 3 }}>
494497
<Grid item xs={12} md={3} className={classes.sideColumn}>
495-
{(focusMode !== "on" || gameEnded) && (
498+
{(focusMode !== "on" || spectating || gameEnded) && (
496499
<Box order={{ xs: 2, md: 1 }} style={{ maxHeight: "100%" }}>
497500
<GameSidebar
498501
game={game}

src/pages/HelpPage.js

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -194,12 +194,13 @@ function HelpPage() {
194194
["New private game", "Shift+Enter"],
195195
["Start game", "Ctrl+Enter"],
196196
["Play again", "Ctrl+Enter"],
197-
["Mute or unmute sound", "Ctrl+S"],
198-
["Change theme", "Ctrl+E"],
199-
["Change board orientation", "Ctrl+O"],
200-
["Change cards orientation", "Ctrl+I"],
201-
["Pause or resume game", "Ctrl+P"],
202-
["Quit game", "Ctrl+Q"],
197+
["Mute or unmute sound", "Ctrl+Shift+S"],
198+
["Enable or disable focus mode", "Ctrl+Shift+F"],
199+
["Change theme", "Ctrl+Shift+H"],
200+
["Change board orientation", "Ctrl+Shift+B"],
201+
["Change cards orientation", "Ctrl+Shift+C"],
202+
["Pause or resume game", "Ctrl+Shift+P"],
203+
["Quit game", "Ctrl+Shift+Q"],
203204
["Unselect cards", "Space or Escape"],
204205
])}
205206

0 commit comments

Comments
 (0)