From 709388fa7986dfd9a582cc5e7b21ef0202851645 Mon Sep 17 00:00:00 2001 From: webadderall <131426131+webadderall@users.noreply.github.com> Date: Tue, 15 Sep 2026 17:09:46 +1000 Subject: [PATCH] Respect device speed bounds in clip controls --- src/components/video-editor/SettingsPanel.tsx | 29 +++++++++++-------- .../videoPlayback/playbackRate.test.ts | 14 +++++++++ .../videoPlayback/playbackRate.ts | 9 ++++++ src/i18n/locales/it/settings.json | 2 +- 4 files changed, 41 insertions(+), 13 deletions(-) diff --git a/src/components/video-editor/SettingsPanel.tsx b/src/components/video-editor/SettingsPanel.tsx index 54df9f1a..ca0cddd9 100644 --- a/src/components/video-editor/SettingsPanel.tsx +++ b/src/components/video-editor/SettingsPanel.tsx @@ -91,7 +91,7 @@ import { } from "./types"; import { fromCursorSwaySliderValue, toCursorSwaySliderValue } from "./videoPlayback/cursorSway"; import { isZeroPadding } from "./videoPlayback/layoutUtils"; -import { supportsPreviewPlaybackRate } from "./videoPlayback/playbackRate"; +import { getPreviewPlaybackRateRange } from "./videoPlayback/playbackRate"; import { cursorSetAssets, getCursorStyleSizeMultiplier, @@ -1089,12 +1089,7 @@ export function SettingsPanel({ const { preference: themePreference, setPreference: setThemePreference } = useTheme(); const isBackgroundPanel = panelMode === "background"; const initialEditorPreferences = useMemo(() => loadEditorPreferences(), []); - const maxClipSpeed = useMemo(() => { - for (let speed = 30; speed >= 1; speed -= 0.25) { - if (supportsPreviewPlaybackRate(speed)) return speed; - } - return 1; - }, []); + const clipSpeedRange = useMemo(getPreviewPlaybackRateRange, []); const [builtInWallpapers, setBuiltInWallpapers] = useState(BUILT_IN_WALLPAPERS); const [wallpaperPreviewPaths, setWallpaperPreviewPaths] = useState([]); @@ -2441,6 +2436,12 @@ export function SettingsPanel({ className="data-[state=checked]:bg-[#2563EB] scale-75" /> + {selectedClipSpeed != null && + (selectedClipSpeed < clipSpeedRange.min || selectedClipSpeed > clipSpeedRange.max) && ( +

+ {selectedClipSpeed}× — {tSettings("speed.unsupported", "Not supported for preview on this device")} +

+ )}