From ee35a66ddf81119b89b9a225587e61b260298802 Mon Sep 17 00:00:00 2001 From: Decrabbit <99632363+Decrabbityyy@users.noreply.github.com> Date: Thu, 20 Aug 2026 16:32:03 +0800 Subject: [PATCH 1/2] feat(bindings): add OS-specific keyboard usage view --- src/celemod-ui/locales/de-DE.json | 15 +- src/celemod-ui/locales/en-US.json | 14 + src/celemod-ui/locales/fr-FR.json | 15 +- src/celemod-ui/locales/pt-BR.json | 14 + src/celemod-ui/locales/ru-RU.json | 14 + src/celemod-ui/locales/zh-CN.json | 14 + .../src/components/VirtualKeyboard.scss | 349 ++++++++++++++++++ .../src/components/VirtualKeyboard.tsx | 336 +++++++++++++++++ src/celemod-ui/src/routes/KeyBindings.tsx | 64 +++- 9 files changed, 830 insertions(+), 5 deletions(-) create mode 100644 src/celemod-ui/src/components/VirtualKeyboard.scss create mode 100644 src/celemod-ui/src/components/VirtualKeyboard.tsx diff --git a/src/celemod-ui/locales/de-DE.json b/src/celemod-ui/locales/de-DE.json index 23e25b3..7b939d1 100644 --- a/src/celemod-ui/locales/de-DE.json +++ b/src/celemod-ui/locales/de-DE.json @@ -424,7 +424,7 @@ "搜索功能或 Mod…": "Search actions or mods…", "Celeste 正在运行,目前只能查看按键。退出游戏后即可编辑。": "Celeste is running. Bindings are read-only until the game exits.", "正在读取按键配置…": "Loading bindings…", - "{count} 个功能使用此按键": "Used by {count} actions", + "{count} 个功能使用此按键": "Von {count} Aktionen verwendet", "没有发现相同按键冲突": "No identical binding conflicts found", "没有符合条件的按键": "No bindings match the filters", "点击重新绑定;使用右侧按钮移除": "Click to rebind; use the button on the right to remove", @@ -441,6 +441,19 @@ "显示未启用的 Mod": "Show disabled mods", "隐藏未启用的 Mod": "Hide disabled mods", "清除绑定": "Clear binding", + "键盘占用": "Tastaturbelegung", + "Windows 键盘": "Windows-Tastatur", + "macOS 键盘": "macOS-Tastatur", + "Linux 键盘": "Linux-Tastatur", + "{used}/{total} 个键已使用": "{used}/{total} Tasten verwendet", + "占用状态": "Belegungsstatus", + "未使用": "Nicht verwendet", + "单一占用": "Einmal belegt", + "多处占用": "Mehrfach belegt", + "点击按键查看占用情况,再次点击取消筛选": "Taste anklicken, um die Belegung anzuzeigen und zu filtern; erneut klicken, um den Filter aufzuheben", + "没有功能使用此按键": "Keine Aktion verwendet diese Taste", + "其它已绑定按键": "Weitere belegte Tasten", + "清除按键筛选": "Tastenfilter löschen", "字体缩放": "Schriftskalierung", "同步放大界面文字和控件": "Text und Steuerelemente der Oberfläche gemeinsam skalieren", "页面切换动画": "Seitenübergangsanimationen", diff --git a/src/celemod-ui/locales/en-US.json b/src/celemod-ui/locales/en-US.json index 931b150..0efb622 100644 --- a/src/celemod-ui/locales/en-US.json +++ b/src/celemod-ui/locales/en-US.json @@ -436,6 +436,20 @@ "显示未启用的 Mod": "Show disabled mods", "隐藏未启用的 Mod": "Hide disabled mods", "清除绑定": "Clear binding", + "键盘占用": "Keyboard usage", + "Windows 键盘": "Windows keyboard", + "macOS 键盘": "macOS keyboard", + "Linux 键盘": "Linux keyboard", + "{used}/{total} 个键已使用": "{used}/{total} keys used", + "占用状态": "Usage status", + "未使用": "Unused", + "单一占用": "Used once", + "多处占用": "Used by multiple actions", + "点击按键查看占用情况,再次点击取消筛选": "Click a key to inspect and filter its usage; click again to clear", + "{count} 个功能使用此按键": "Used by {count} actions", + "没有功能使用此按键": "No actions use this key", + "其它已绑定按键": "Other bound keys", + "清除按键筛选": "Clear key filter", "字体缩放": "Font scale", "LPL Collab 2022 / 乐屁乐": "LPL Collab 2022 / 乐屁乐", "中文社区制作的欢乐向梗图合集,历时一年完成": "A collection of humorous meme maps created by the Chinese community, completed over the course of a year.", diff --git a/src/celemod-ui/locales/fr-FR.json b/src/celemod-ui/locales/fr-FR.json index 6cc301a..16b61a1 100644 --- a/src/celemod-ui/locales/fr-FR.json +++ b/src/celemod-ui/locales/fr-FR.json @@ -424,7 +424,7 @@ "搜索功能或 Mod…": "Search actions or mods…", "Celeste 正在运行,目前只能查看按键。退出游戏后即可编辑。": "Celeste is running. Bindings are read-only until the game exits.", "正在读取按键配置…": "Loading bindings…", - "{count} 个功能使用此按键": "Used by {count} actions", + "{count} 个功能使用此按键": "Utilisée par {count} actions", "没有发现相同按键冲突": "No identical binding conflicts found", "没有符合条件的按键": "No bindings match the filters", "点击重新绑定;使用右侧按钮移除": "Click to rebind; use the button on the right to remove", @@ -441,6 +441,19 @@ "显示未启用的 Mod": "Show disabled mods", "隐藏未启用的 Mod": "Hide disabled mods", "清除绑定": "Clear binding", + "键盘占用": "Occupation du clavier", + "Windows 键盘": "Clavier Windows", + "macOS 键盘": "Clavier macOS", + "Linux 键盘": "Clavier Linux", + "{used}/{total} 个键已使用": "{used}/{total} touches utilisées", + "占用状态": "État d’occupation", + "未使用": "Non utilisée", + "单一占用": "Occupation unique", + "多处占用": "Occupation multiple", + "点击按键查看占用情况,再次点击取消筛选": "Cliquez sur une touche pour afficher et filtrer son usage ; recliquez pour effacer le filtre", + "没有功能使用此按键": "Aucune action n’utilise cette touche", + "其它已绑定按键": "Autres touches attribuées", + "清除按键筛选": "Effacer le filtre de touche", "字体缩放": "Échelle de police", "同步放大界面文字和控件": "Agrandir ensemble le texte et les contrôles de l’interface", "页面切换动画": "Animations de transition entre les pages", diff --git a/src/celemod-ui/locales/pt-BR.json b/src/celemod-ui/locales/pt-BR.json index 8663bb4..4545996 100644 --- a/src/celemod-ui/locales/pt-BR.json +++ b/src/celemod-ui/locales/pt-BR.json @@ -430,6 +430,20 @@ "显示未启用的 Mod": "Show disabled mods", "隐藏未启用的 Mod": "Hide disabled mods", "清除绑定": "Clear binding", + "键盘占用": "Uso do teclado", + "Windows 键盘": "Teclado Windows", + "macOS 键盘": "Teclado macOS", + "Linux 键盘": "Teclado Linux", + "{used}/{total} 个键已使用": "{used}/{total} teclas em uso", + "占用状态": "Estado de uso", + "未使用": "Não usada", + "单一占用": "Uso único", + "多处占用": "Uso múltiplo", + "点击按键查看占用情况,再次点击取消筛选": "Clique em uma tecla para ver e filtrar seu uso; clique novamente para limpar", + "{count} 个功能使用此按键": "Usada por {count} ações", + "没有功能使用此按键": "Nenhuma ação usa esta tecla", + "其它已绑定按键": "Outras teclas vinculadas", + "清除按键筛选": "Limpar filtro de tecla", "字体缩放": "Escala da fonte", "LPL Collab 2022 / 乐屁乐": "LPL Collab 2022 / 乐屁乐", "中文社区制作的欢乐向梗图合集,历时一年完成": "Coleção de memes divertidos criados pela comunidade chinesa, concluída ao longo de um ano.", diff --git a/src/celemod-ui/locales/ru-RU.json b/src/celemod-ui/locales/ru-RU.json index db1a703..23f1ef5 100644 --- a/src/celemod-ui/locales/ru-RU.json +++ b/src/celemod-ui/locales/ru-RU.json @@ -430,6 +430,20 @@ "显示未启用的 Mod": "Show disabled mods", "隐藏未启用的 Mod": "Hide disabled mods", "清除绑定": "Clear binding", + "键盘占用": "Использование клавиш", + "Windows 键盘": "Клавиатура Windows", + "macOS 键盘": "Клавиатура macOS", + "Linux 键盘": "Клавиатура Linux", + "{used}/{total} 个键已使用": "Используется клавиш: {used}/{total}", + "占用状态": "Состояние назначений", + "未使用": "Не используется", + "单一占用": "Одно назначение", + "多处占用": "Несколько назначений", + "点击按键查看占用情况,再次点击取消筛选": "Нажмите клавишу, чтобы посмотреть и отфильтровать назначения; нажмите ещё раз, чтобы сбросить фильтр", + "{count} 个功能使用此按键": "Используется действиями: {count}", + "没有功能使用此按键": "Эта клавиша не используется", + "其它已绑定按键": "Другие назначенные клавиши", + "清除按键筛选": "Сбросить фильтр клавиши", "字体缩放": "Масштаб шрифта", "LPL Collab 2022 / 乐屁乐": "LPL Collab 2022 / 乐屁乐", "中文社区制作的欢乐向梗图合集,历时一年完成": "Сборник весёлых мемов, созданный китайским сообществом, завершён за год", diff --git a/src/celemod-ui/locales/zh-CN.json b/src/celemod-ui/locales/zh-CN.json index d8c427c..db29dd1 100644 --- a/src/celemod-ui/locales/zh-CN.json +++ b/src/celemod-ui/locales/zh-CN.json @@ -436,6 +436,20 @@ "显示未启用的 Mod": "显示未启用的 Mod", "隐藏未启用的 Mod": "隐藏未启用的 Mod", "清除绑定": "清除绑定", + "键盘占用": "键盘占用", + "Windows 键盘": "Windows 键盘", + "macOS 键盘": "macOS 键盘", + "Linux 键盘": "Linux 键盘", + "{used}/{total} 个键已使用": "{used}/{total} 个键已使用", + "占用状态": "占用状态", + "未使用": "未使用", + "单一占用": "单一占用", + "多处占用": "多处占用", + "点击按键查看占用情况,再次点击取消筛选": "点击按键查看占用情况,再次点击取消筛选", + "{count} 个功能使用此按键": "{count} 个功能使用此按键", + "没有功能使用此按键": "没有功能使用此按键", + "其它已绑定按键": "其它已绑定按键", + "清除按键筛选": "清除按键筛选", "字体缩放": "字体缩放", "LPL Collab 2022 / 乐屁乐": "LPL Collab 2022 / 乐屁乐", "中文社区制作的欢乐向梗图合集,历时一年完成": "中文社区制作的欢乐向梗图合集,历时一年完成", diff --git a/src/celemod-ui/src/components/VirtualKeyboard.scss b/src/celemod-ui/src/components/VirtualKeyboard.scss new file mode 100644 index 0000000..dcd700d --- /dev/null +++ b/src/celemod-ui/src/components/VirtualKeyboard.scss @@ -0,0 +1,349 @@ +@use "sass:color"; +@use "../styles/theme" as theme; + +.virtual-keyboard-panel { + margin: 8px 0 0 8px; + overflow: hidden; + border: 1px solid color.change(theme.$fg, $alpha: 0.075); + border-radius: 9px; + background: color.change(theme.$bg1, $alpha: 0.5); +} + +.virtual-keyboard-header { + display: flex; + min-height: 34px; + align-items: center; + justify-content: space-between; + padding: 5px 9px; + gap: 12px; + border-bottom: 1px solid color.change(theme.$fg, $alpha: 0.055); + box-sizing: border-box; + + > div { + display: flex; + align-items: center; + min-width: 0; + gap: 7px; + } + strong { + font-size: calc(10px * var(--keybindings-font-scale, 1)); + } +} + +.virtual-keyboard-platform, +.virtual-keyboard-summary { + padding: 2px 6px; + border-radius: 99px; + background: color.change(theme.$fg, $alpha: 0.055); + color: theme.$fg3; + font-size: calc(7px * var(--keybindings-font-scale, 1)); + white-space: nowrap; +} + +.virtual-keyboard-summary { + background: color.change(theme.$primary, $alpha: 0.08); + color: color.adjust(theme.$primary, $lightness: 19%); +} + +.virtual-keyboard-legend { + flex: 0 0 auto; + + span { + display: inline-flex; + align-items: center; + gap: 4px; + color: color.change(theme.$fg, $alpha: 0.48); + font-size: calc(7px * var(--keybindings-font-scale, 1)); + white-space: nowrap; + + &::before { + width: 7px; + height: 7px; + border: 1px solid transparent; + border-radius: 2px; + content: ""; + } + &.unused::before { + border-color: color.change(theme.$fg, $alpha: 0.13); + background: color.change(theme.$fg, $alpha: 0.025); + } + &.used::before { + border-color: color.change(theme.$primary, $alpha: 0.42); + background: color.change(theme.$primary, $alpha: 0.18); + } + &.multiple::before { + border-color: color.change(#ffc66d, $alpha: 0.48); + background: color.change(#ffc66d, $alpha: 0.18); + } + } +} + +.virtual-keyboard-hint { + margin: 0; + padding: 4px 9px 0; + color: color.change(theme.$fg, $alpha: 0.35); + font-size: calc(7px * var(--keybindings-font-scale, 1)); +} + +.virtual-keyboard-scroll { + padding: 7px 8px 9px; + overflow-x: auto; + scrollbar-width: thin; +} + +.virtual-keyboard-board { + --keyboard-gap: 3px; + --keyboard-key-height: 26px; + width: 776px; + margin: 0 auto; +} + +.virtual-keyboard-function-row { + display: flex; + align-items: stretch; + justify-content: space-between; + margin-bottom: 7px; + gap: 8px; +} + +.virtual-keyboard-function-group { + display: flex; + flex: 0 0 auto; + gap: var(--keyboard-gap); + + .virtual-keyboard-key { + width: 31px; + flex: 0 0 31px !important; + } +} + +.virtual-keyboard-body { + display: grid; + grid-template-columns: minmax(0, 15fr) 3fr 4fr; + align-items: stretch; + gap: 10px; +} + +.virtual-keyboard-main, +.virtual-keyboard-navigation { + display: flex; + min-width: 0; + flex-direction: column; + gap: var(--keyboard-gap); +} + +.virtual-keyboard-row { + display: flex; + min-width: 0; + height: var(--keyboard-key-height); + gap: var(--keyboard-gap); +} + +.virtual-keyboard-navigation .virtual-keyboard-row { + .virtual-keyboard-key, + .virtual-keyboard-spacer { + min-width: 0; + flex: 1 1 0 !important; + } +} + +.virtual-keyboard-spacer { + display: block; +} + +.virtual-keyboard-numpad { + display: grid; + grid-template-columns: repeat(4, minmax(0, 1fr)); + grid-template-rows: repeat(5, var(--keyboard-key-height)); + gap: var(--keyboard-gap); + + .virtual-keyboard-key { + width: auto; + min-width: 0; + } +} + +.virtual-keyboard-key { + position: relative; + display: flex; + min-width: 0; + height: var(--keyboard-key-height); + min-height: var(--keyboard-key-height); + align-items: center; + justify-content: center; + padding: 0 3px; + overflow: hidden; + border: 1px solid color.change(theme.$fg, $alpha: 0.11); + border-radius: 4px; + background: color.change(theme.$bg2, $alpha: 0.48); + box-shadow: 0 1px 0 color.change(theme.$fg, $alpha: 0.035); + color: color.change(theme.$fg, $alpha: 0.48); + font-family: ui-monospace, SFMono-Regular, Consolas, monospace; + font-size: calc(6.8px * var(--keybindings-font-scale, 1)); + font-weight: 620; + letter-spacing: -0.02em; + line-height: 1; + text-transform: none; + + > span { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + > small { + position: absolute; + top: 2px; + right: 2px; + display: grid; + min-width: 10px; + height: 10px; + padding: 0 2px; + place-items: center; + border-radius: 99px; + background: color.change(theme.$primary, $alpha: 0.26); + color: color.adjust(theme.$primary, $lightness: 26%); + font-family: inherit; + font-size: calc(5.5px * var(--keybindings-font-scale, 1)); + line-height: 10px; + } + &.used { + border-color: color.change(theme.$primary, $alpha: 0.36); + background: color.change(theme.$primary, $alpha: 0.12); + color: color.change(theme.$fg, $alpha: 0.82); + } + &.multiple { + border-color: color.change(#ffc66d, $alpha: 0.43); + background: color.change(#ffc66d, $alpha: 0.12); + color: #efc575; + > small { + background: color.change(#ffc66d, $alpha: 0.22); + color: #ffd58c; + } + } + &:hover, + &.selected { + z-index: 1; + border-color: color.change(theme.$primary, $alpha: 0.78); + background: color.change(theme.$primary, $alpha: 0.24); + box-shadow: 0 0 0 1px color.change(theme.$primary, $alpha: 0.13); + color: theme.$fg; + } + &:focus-visible { + z-index: 2; + outline: 1px solid color.change(theme.$primary, $alpha: 0.85); + outline-offset: 1px; + } +} + +.virtual-keyboard-extra { + display: flex; + align-items: center; + padding: 0 9px 7px; + gap: 7px; + + > span { + flex: 0 0 auto; + color: color.change(theme.$fg, $alpha: 0.38); + font-size: calc(7px * var(--keybindings-font-scale, 1)); + } + > div { + display: flex; + min-width: 0; + flex-wrap: wrap; + gap: 3px; + } + .virtual-keyboard-key.extra { + width: auto; + min-width: 35px; + padding: 0 7px; + flex: 0 0 auto !important; + } +} + +.virtual-keyboard-detail { + border-top: 1px solid color.change(theme.$fg, $alpha: 0.06); + background: color.change(theme.$bg2, $alpha: 0.2); +} + +.virtual-keyboard-detail-title { + display: flex; + min-height: 30px; + align-items: center; + padding: 4px 8px 4px 10px; + gap: 7px; + box-sizing: border-box; + + > strong { + color: color.adjust(theme.$primary, $lightness: 21%); + font-family: ui-monospace, SFMono-Regular, Consolas, monospace; + font-size: calc(9px * var(--keybindings-font-scale, 1)); + } + > span { + color: theme.$fg3; + font-size: calc(8px * var(--keybindings-font-scale, 1)); + } + > button { + display: grid; + width: 21px; + height: 21px; + min-height: 0; + margin-left: auto; + padding: 0; + place-items: center; + border: 0; + background: transparent; + box-shadow: none; + color: theme.$fg3; + + .icon { + width: 9px; + height: 9px; + } + } +} + +.virtual-keyboard-detail-actions { + display: flex; + max-height: 92px; + padding: 0 9px 8px; + flex-wrap: wrap; + gap: 4px; + overflow-y: auto; + + > div { + display: inline-flex; + min-width: 0; + align-items: center; + padding: 4px 6px; + gap: 5px; + border: 1px solid color.change(theme.$fg, $alpha: 0.065); + border-radius: 5px; + background: color.change(theme.$bg1, $alpha: 0.55); + } + strong { + max-width: 180px; + overflow: hidden; + font-size: calc(8px * var(--keybindings-font-scale, 1)); + text-overflow: ellipsis; + white-space: nowrap; + } + span { + color: theme.$fg3; + font-size: calc(7px * var(--keybindings-font-scale, 1)); + } + code { + color: color.change(theme.$fg, $alpha: 0.5); + font-size: calc(7px * var(--keybindings-font-scale, 1)); + } +} + +@media (max-width: 860px) { + .virtual-keyboard-header { + align-items: flex-start; + flex-direction: column; + gap: 4px; + } + .virtual-keyboard-legend { + align-self: stretch; + } +} diff --git a/src/celemod-ui/src/components/VirtualKeyboard.tsx b/src/celemod-ui/src/components/VirtualKeyboard.tsx new file mode 100644 index 0000000..2d55111 --- /dev/null +++ b/src/celemod-ui/src/components/VirtualKeyboard.tsx @@ -0,0 +1,336 @@ +import { useMemo } from "react"; +import _i18n from "../i18n"; +import { Icon } from "./Icon"; +import "./VirtualKeyboard.scss"; + +export interface VirtualKeyboardBinding { + actionId: string; + label: string; + source: string; + combination: string; + keys: string[]; +} + +interface VirtualKeyboardProps { + bindings: VirtualKeyboardBinding[]; + selectedKey: string; + onSelectKey: (key: string) => void; + formatKey: (key: string) => string; +} + +type KeyboardPlatform = "windows" | "macos" | "linux"; + +interface KeyDefinition { + value: string; + label?: string; + width?: number; + column?: string; + row?: string; +} + +interface UsageAction { + actionId: string; + label: string; + source: string; + combinations: Set; +} + +const detectKeyboardPlatform = (): KeyboardPlatform => { + const platform = `${navigator.platform} ${navigator.userAgent}`.toLowerCase(); + if (platform.includes("mac")) return "macos"; + if (platform.includes("linux")) return "linux"; + return "windows"; +}; + +const key = (value: string, label?: string, width?: number): KeyDefinition => ({ + value, + label, + width, +}); + +const mainRows = (platform: KeyboardPlatform): KeyDefinition[][] => { + const meta = platform === "macos" ? "⌘" : platform === "linux" ? "Super" : "Win"; + const alt = platform === "macos" ? "⌥" : "Alt"; + const control = platform === "macos" ? "⌃" : "Ctrl"; + const backspace = platform === "macos" ? "delete" : "Backspace"; + const enter = platform === "macos" ? "return" : "Enter"; + const caps = platform === "macos" ? "caps lock" : "Caps Lock"; + + return [ + [ + key("OemTilde", "`"), + ...Array.from({ length: 10 }, (_, index) => key(`D${(index + 1) % 10}`, String((index + 1) % 10))), + key("OemMinus", "−"), + key("OemPlus", "="), + key("Back", backspace, 2), + ], + [ + key("Tab", "Tab", 1.5), + ..."QWERTYUIOP".split("").map((value) => key(value)), + key("OemOpenBrackets", "["), + key("OemCloseBrackets", "]"), + key("OemPipe", "\\", 1.5), + ], + [ + key("CapsLock", caps, 1.8), + ..."ASDFGHJKL".split("").map((value) => key(value)), + key("OemSemicolon", ";"), + key("OemQuotes", "'"), + key("Enter", enter, 2.2), + ], + [ + key("LeftShift", "Shift", 2.3), + ..."ZXCVBNM".split("").map((value) => key(value)), + key("OemComma", ","), + key("OemPeriod", "."), + key("OemQuestion", "/"), + key("RightShift", "Shift", 2.7), + ], + platform === "macos" + ? [ + key("LeftControl", control, 1.5), + key("LeftAlt", alt, 1.5), + key("LeftWindows", meta, 1.8), + key("Space", "", 6.4), + key("RightWindows", meta, 1.8), + key("RightAlt", alt, 1.5), + key("RightControl", control, 1.5), + ] + : [ + key("LeftControl", control, 1.4), + key("LeftWindows", meta, 1.4), + key("LeftAlt", alt, 1.4), + key("Space", "", 5.4), + key("RightAlt", alt, 1.4), + key("RightWindows", meta, 1.4), + key("Apps", "Menu", 1.3), + key("RightControl", control, 1.3), + ], + ]; +}; + +const navigationRows = (platform: KeyboardPlatform): (KeyDefinition | null)[][] => [ + [ + key(platform === "macos" ? "Help" : "Insert", platform === "macos" ? "help" : "Insert"), + key("Home"), + key("PageUp", "Page Up"), + ], + [key("Delete"), key("End"), key("PageDown", "Page Down")], + [null, null, null], + [null, key("Up", "↑"), null], + [key("Left", "←"), key("Down", "↓"), key("Right", "→")], +]; + +const numpadKeys = (platform: KeyboardPlatform): KeyDefinition[] => [ + { ...key("NumLock", platform === "macos" ? "clear" : "Num"), column: "1", row: "1" }, + { ...key("Divide", "/"), column: "2", row: "1" }, + { ...key("Multiply", "×"), column: "3", row: "1" }, + { ...key("Subtract", "−"), column: "4", row: "1" }, + { ...key("NumPad7", "7"), column: "1", row: "2" }, + { ...key("NumPad8", "8"), column: "2", row: "2" }, + { ...key("NumPad9", "9"), column: "3", row: "2" }, + { ...key("Add", "+"), column: "4", row: "2 / span 2" }, + { ...key("NumPad4", "4"), column: "1", row: "3" }, + { ...key("NumPad5", "5"), column: "2", row: "3" }, + { ...key("NumPad6", "6"), column: "3", row: "3" }, + { ...key("NumPad1", "1"), column: "1", row: "4" }, + { ...key("NumPad2", "2"), column: "2", row: "4" }, + { ...key("NumPad3", "3"), column: "3", row: "4" }, + { ...key("Enter", "Enter"), column: "4", row: "4 / span 2" }, + { ...key("NumPad0", "0"), column: "1 / span 2", row: "5" }, + { ...key("Decimal", "."), column: "3", row: "5" }, +]; + +const functionGroups = (platform: KeyboardPlatform): KeyDefinition[][] => [ + [key("Escape", "Esc")], + ["F1", "F2", "F3", "F4"].map((value) => key(value)), + ["F5", "F6", "F7", "F8"].map((value) => key(value)), + ["F9", "F10", "F11", "F12"].map((value) => key(value)), + (platform === "macos" ? ["F13", "F14", "F15"] : ["PrintScreen", "Scroll", "Pause"]).map( + (value) => key(value, value === "PrintScreen" ? "Print" : value), + ), +]; + +const platformTitle = (platform: KeyboardPlatform) => + ({ + windows: _i18n.t("Windows 键盘"), + macos: _i18n.t("macOS 键盘"), + linux: _i18n.t("Linux 键盘"), + })[platform]; + +export const VirtualKeyboard = ({ + bindings, + selectedKey, + onSelectKey, + formatKey, +}: VirtualKeyboardProps) => { + const platform = useMemo(detectKeyboardPlatform, []); + const rows = useMemo(() => mainRows(platform), [platform]); + const navRows = useMemo(() => navigationRows(platform), [platform]); + const keypad = useMemo(() => numpadKeys(platform), [platform]); + const functions = useMemo(() => functionGroups(platform), [platform]); + + const usageByKey = useMemo(() => { + const result = new Map>(); + for (const binding of bindings) { + for (const value of new Set(binding.keys)) { + const actions = result.get(value) ?? new Map(); + const action = actions.get(binding.actionId) ?? { + actionId: binding.actionId, + label: binding.label, + source: binding.source, + combinations: new Set(), + }; + action.combinations.add(binding.combination); + actions.set(binding.actionId, action); + result.set(value, actions); + } + } + return result; + }, [bindings]); + + const layoutKeys = useMemo( + () => + new Set( + [ + ...functions.flat(), + ...rows.flat(), + ...navRows.flatMap((row) => row.filter((item): item is KeyDefinition => item !== null)), + ...keypad, + ].map((item) => item.value), + ), + [functions, keypad, navRows, rows], + ); + const usedLayoutKeys = [...layoutKeys].filter((value) => (usageByKey.get(value)?.size ?? 0) > 0).length; + const extraKeys = [...usageByKey.keys()] + .filter((value) => !layoutKeys.has(value)) + .sort((left, right) => left.localeCompare(right)); + const selectedActions = selectedKey ? [...(usageByKey.get(selectedKey)?.values() ?? [])] : []; + + const renderKey = (definition: KeyDefinition, className = "") => { + const count = usageByKey.get(definition.value)?.size ?? 0; + const status = count === 0 ? "unused" : count === 1 ? "used" : "multiple"; + const selected = selectedKey === definition.value; + const label = definition.label ?? formatKey(definition.value); + const accessibleLabel = label || formatKey(definition.value); + const usageLabel = + count === 0 + ? _i18n.t("未使用") + : _i18n.t("{count} 个功能使用此按键", { count }); + return ( + + ); + }; + + return ( +
+
+
+ {_i18n.t("键盘占用")} + {platformTitle(platform)} + + {_i18n.t("{used}/{total} 个键已使用", { + used: usedLayoutKeys, + total: layoutKeys.size, + })} + +
+
+ {_i18n.t("未使用")} + {_i18n.t("单一占用")} + {_i18n.t("多处占用")} +
+
+ +

+ {_i18n.t("点击按键查看占用情况,再次点击取消筛选")} +

+ +
+
+
+ {functions.map((group, index) => ( +
+ {group.map((item) => renderKey(item))} +
+ ))} +
+
+
+ {rows.map((row, index) => ( +
+ {row.map((item) => renderKey(item))} +
+ ))} +
+
+ {navRows.map((row, index) => ( +
+ {row.map((item, itemIndex) => + item ? renderKey(item) : , + )} +
+ ))} +
+
{keypad.map((item) => renderKey(item))}
+
+
+
+ + {extraKeys.length > 0 && ( +
+ {_i18n.t("其它已绑定按键")} +
{extraKeys.map((value) => renderKey(key(value), "extra"))}
+
+ )} + + {selectedKey && ( +
+
+ {formatKey(selectedKey)} + + {selectedActions.length === 0 + ? _i18n.t("没有功能使用此按键") + : _i18n.t("{count} 个功能使用此按键", { count: selectedActions.length })} + + +
+ {selectedActions.length > 0 && ( +
+ {selectedActions.map((action) => ( +
+ {action.label} + {action.source} + {[...action.combinations].join(" / ")} +
+ ))} +
+ )} +
+ )} +
+ ); +}; diff --git a/src/celemod-ui/src/routes/KeyBindings.tsx b/src/celemod-ui/src/routes/KeyBindings.tsx index 2729c0e..012a7af 100644 --- a/src/celemod-ui/src/routes/KeyBindings.tsx +++ b/src/celemod-ui/src/routes/KeyBindings.tsx @@ -8,6 +8,10 @@ import { } from "react"; import _i18n from "../i18n"; import { Icon } from "../components/Icon"; +import { + VirtualKeyboard, + type VirtualKeyboardBinding, +} from "../components/VirtualKeyboard"; import { createPopup, PopupContext } from "../components/Popup"; import { useCurrentLang, useGamePath } from "../states"; import { callRemote } from "../utils"; @@ -117,6 +121,14 @@ const keyName = (value: string) => { return aliases[value] ?? value; }; +const canonicalKeyboardKey = (value: string) => + ({ + Capital: "CapsLock", + Next: "PageDown", + Prior: "PageUp", + Return: "Enter", + })[value] ?? value; + const keyboardCodeToXna = (code: string) => { if (/^Key[A-Z]$/.test(code)) return code.slice(3); if (/^Digit\d$/.test(code)) return `D${code.slice(5)}`; @@ -234,6 +246,7 @@ export const KeyBindings = () => { const [conflictOnly, setConflictOnly] = useState(false); const [inputMode, setInputMode] = useState("keyboard"); const [selectedConflict, setSelectedConflict] = useState(""); + const [selectedKeyboardKey, setSelectedKeyboardKey] = useState(""); const [showDisabled, setShowDisabled] = useState(false); const [saving, setSaving] = useState(""); const requestId = useRef(0); @@ -304,6 +317,20 @@ export const KeyBindings = () => { [consideredEntries], ); + const virtualKeyboardBindings = useMemo( + () => + occurrences + .filter((occurrence) => occurrence.device === "keyboard") + .map((occurrence) => ({ + actionId: occurrence.entryKey, + label: displayLabel(occurrence.entry), + source: occurrence.entry.source, + combination: occurrence.group.map(keyName).join(" + "), + keys: occurrence.group.map(canonicalKeyboardKey), + })), + [occurrences], + ); + const conflictGroups = useMemo(() => { const grouped = new Map(); for (const occurrence of occurrences) { @@ -377,6 +404,15 @@ export const KeyBindings = () => { return consideredEntries.filter((entry) => { if (source !== "*" && entry.source !== source) return false; if (conflictOnly && !conflictsByEntry.has(entryKey(entry))) return false; + if ( + selectedKeyboardKey && + !entry.keyboard.some((group) => + group.some( + (value) => canonicalKeyboardKey(value) === selectedKeyboardKey, + ), + ) + ) + return false; if (!normalizedQuery) return true; return [ entry.source, @@ -385,7 +421,14 @@ export const KeyBindings = () => { entry.description ?? "", ].some((value) => value.toLocaleLowerCase().includes(normalizedQuery)); }); - }, [consideredEntries, conflictOnly, conflictsByEntry, query, source]); + }, [ + consideredEntries, + conflictOnly, + conflictsByEntry, + query, + selectedKeyboardKey, + source, + ]); const saveEntry = useCallback( async ( @@ -755,7 +798,10 @@ export const KeyBindings = () => { + ); + }; + + const renderStick = ( + side: "Left" | "Right", + position: StickPosition, + ) => ( +
+ + {STICK_SEGMENTS.map((segment) => { + const value = `${side}Thumbstick${segment.suffix}`; + const { + accessibleLabel, + count, + selected, + status, + usageLabel, + } = buttonPresentation(value); + const select = () => onSelectButton(selected ? "" : value); + const badgeX = + segment.x < 50 ? segment.x + 8 : segment.x > 50 ? segment.x - 8 : segment.x + 9; + return ( + + { + if (event.key !== "Enter" && event.key !== " ") return; + event.preventDefault(); + select(); + }} + > + {`${accessibleLabel} · ${usageLabel}`} + + + {segment.label} + + {count > 0 && ( + + {count} + + )} + + ); + })} + + {renderButton(`${side}Stick`, "stick")} +
+ ); + + return ( +
+
+
+ {_i18n.t("手柄占用")} +
+ {(["auto", "xbox", "playstation", "switch"] as const).map( + (option) => ( + + ), + )} +
+ + {identity.connected + ? _i18n.t("已连接") + : _i18n.t("未检测到手柄")} + + + {_i18n.t("{used}/{total} 个按钮已使用", { + used: usedButtons, + total: CONTROLLER_BUTTONS.length, + })} + +
+
+ {_i18n.t("未使用")} + {_i18n.t("单一占用")} + {_i18n.t("多处占用")} +
+
+ +

+ {_i18n.t("点击手柄按键查看占用情况,再次点击取消筛选")} +

+ +
+
+ + {controllerPositions[layout].map((position) => + renderButton(position.value, position.kind, position), + )} + {renderStick("Left", controllerStickPositions[layout].Left)} + {renderStick("Right", controllerStickPositions[layout].Right)} +
+
+ + {extraButtons.length > 0 && ( +
+ {_i18n.t("其它已绑定按钮")} +
{extraButtons.map((value) => renderButton(value, "extra"))}
+
+ )} + + {selectedButton && ( +
+
+ {displayLabel(selectedButton)} + + {selectedActions.length === 0 + ? _i18n.t("没有功能使用此按键") + : _i18n.t("{count} 个功能使用此按键", { + count: selectedActions.length, + })} + + +
+ {selectedActions.length > 0 && ( +
+ {selectedActions.map((action) => ( +
+ {action.label} + {action.source} + {[...action.combinations].join(" / ")} +
+ ))} +
+ )} +
+ )} +
+ ); +}; diff --git a/src/celemod-ui/src/resources/controllers/dualsense.png b/src/celemod-ui/src/resources/controllers/dualsense.png new file mode 100644 index 0000000000000000000000000000000000000000..d452d34b98678f7c44403e525e5b60a86b20e090 GIT binary patch literal 69796 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�^zoyCTvhZUoi&^y(NE)m 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

(>!4HA>XF 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/celemod-ui/src/resources/controllers/xbox-series.png b/src/celemod-ui/src/resources/controllers/xbox-series.png new file mode 100644 index 0000000000000000000000000000000000000000..ff29b4555f128718be0257488e80c1436a7fef66 GIT binary patch literal 58624 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ⅇ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 { const [inputMode, setInputMode] = useState("keyboard"); const [selectedConflict, setSelectedConflict] = useState(""); const [selectedKeyboardKey, setSelectedKeyboardKey] = useState(""); + const [selectedControllerButton, setSelectedControllerButton] = useState(""); const [showDisabled, setShowDisabled] = useState(false); const [saving, setSaving] = useState(""); const requestId = useRef(0); @@ -331,6 +336,20 @@ export const KeyBindings = () => { [occurrences], ); + const virtualControllerBindings = useMemo( + () => + occurrences + .filter((occurrence) => occurrence.device === "controller") + .map((occurrence) => ({ + actionId: occurrence.entryKey, + label: displayLabel(occurrence.entry), + source: occurrence.entry.source, + combination: occurrence.group.map(keyName).join(" + "), + buttons: occurrence.group, + })), + [occurrences], + ); + const conflictGroups = useMemo(() => { const grouped = new Map(); for (const occurrence of occurrences) { @@ -413,6 +432,13 @@ export const KeyBindings = () => { ) ) return false; + if ( + selectedControllerButton && + !entry.controller.some((group) => + group.includes(selectedControllerButton), + ) + ) + return false; if (!normalizedQuery) return true; return [ entry.source, @@ -426,6 +452,7 @@ export const KeyBindings = () => { conflictOnly, conflictsByEntry, query, + selectedControllerButton, selectedKeyboardKey, source, ]); @@ -791,7 +818,10 @@ export const KeyBindings = () => {