-
+
+
{title}
-
{value.toFixed(4)}
+
{value.toFixed(decimals)}
{t('Precise')}
@@ -52,7 +63,7 @@ function ValueTuner({ style, title, value, setValue, onFinished, resolution = 10
-
+
diff --git a/src/renderer/src/components/ValueTuners.tsx b/src/renderer/src/components/ValueTuners.tsx
index 8d6296d3..f6800ee6 100644
--- a/src/renderer/src/components/ValueTuners.tsx
+++ b/src/renderer/src/components/ValueTuners.tsx
@@ -1,4 +1,4 @@
-import { memo } from 'react';
+import { memo, useCallback } from 'react';
import { useTranslation } from 'react-i18next';
import ValueTuner from './ValueTuner';
@@ -8,7 +8,7 @@ import { TunerType } from '../types';
function ValueTuners({ type, onFinished }: { type: TunerType, onFinished: () => void }) {
const { t } = useTranslation();
- const { wheelSensitivity, setWheelSensitivity, keyboardNormalSeekSpeed, keyboardSeekSpeed2, setKeyboardSeekSpeed2, keyboardSeekSpeed3, setKeyboardSeekSpeed3, setKeyboardNormalSeekSpeed, keyboardSeekAccFactor, setKeyboardSeekAccFactor } = useUserSettings();
+ const { wheelSensitivity, setWheelSensitivity, keyboardNormalSeekSpeed, keyboardSeekSpeed2, setKeyboardSeekSpeed2, keyboardSeekSpeed3, setKeyboardSeekSpeed3, setKeyboardNormalSeekSpeed, keyboardSeekAccFactor, setKeyboardSeekAccFactor, waveformHeight, setWaveformHeight } = useUserSettings();
// NOTE default values are duplicated in src/main/configStore.js
const types = {
@@ -18,14 +18,28 @@ function ValueTuners({ type, onFinished }: { type: TunerType, onFinished: () =>
setValue: setWheelSensitivity,
min: 0,
max: 4,
+ resolution: 1000,
+ decimals: 4,
default: 0.2,
},
+ waveformHeight: {
+ title: t('Waveform height'),
+ value: waveformHeight,
+ setValue: setWaveformHeight,
+ min: 20,
+ max: 1000,
+ resolution: 1000 - 20,
+ decimals: 0,
+ default: 40,
+ },
keyboardNormalSeekSpeed: {
title: t('Timeline keyboard seek interval'),
value: keyboardNormalSeekSpeed,
setValue: setKeyboardNormalSeekSpeed,
min: 0,
max: 120,
+ resolution: 1000,
+ decimals: 4,
default: 1,
},
keyboardSeekSpeed2: {
@@ -34,6 +48,8 @@ function ValueTuners({ type, onFinished }: { type: TunerType, onFinished: () =>
setValue: setKeyboardSeekSpeed2,
min: 0,
max: 600,
+ resolution: 1000,
+ decimals: 4,
default: 10,
},
keyboardSeekSpeed3: {
@@ -42,6 +58,8 @@ function ValueTuners({ type, onFinished }: { type: TunerType, onFinished: () =>
setValue: setKeyboardSeekSpeed3,
min: 0,
max: 3600,
+ resolution: 1000,
+ decimals: 4,
default: 60,
},
keyboardSeekAccFactor: {
@@ -50,14 +68,16 @@ function ValueTuners({ type, onFinished }: { type: TunerType, onFinished: () =>
setValue: setKeyboardSeekAccFactor,
min: 1,
max: 2,
+ resolution: 1000,
+ decimals: 4,
default: 1.03,
},
};
- const { title, value, setValue, min, max, default: defaultValue } = types[type];
+ const { title, value, setValue, min, max, resolution, decimals, default: defaultValue } = types[type];
- const resetToDefault = () => setValue(defaultValue);
+ const resetToDefault = useCallback(() => setValue(defaultValue), [defaultValue, setValue]);
- return
;
+ return
;
}
diff --git a/src/renderer/src/hooks/useUserSettingsRoot.ts b/src/renderer/src/hooks/useUserSettingsRoot.ts
index d9542667..764168dd 100644
--- a/src/renderer/src/hooks/useUserSettingsRoot.ts
+++ b/src/renderer/src/hooks/useUserSettingsRoot.ts
@@ -79,6 +79,8 @@ export default () => {
useEffect(() => safeSetConfig({ autoSaveProjectFile }), [autoSaveProjectFile]);
const [wheelSensitivity, setWheelSensitivity] = useState(safeGetConfigInitial('wheelSensitivity'));
useEffect(() => safeSetConfig({ wheelSensitivity }), [wheelSensitivity]);
+ const [waveformHeight, setWaveformHeight] = useState(safeGetConfigInitial('waveformHeight'));
+ useEffect(() => safeSetConfig({ waveformHeight }), [waveformHeight]);
const [invertTimelineScroll, setInvertTimelineScroll] = useState(safeGetConfigInitial('invertTimelineScroll'));
useEffect(() => safeSetConfig({ invertTimelineScroll }), [invertTimelineScroll]);
const [language, setLanguage] = useState(safeGetConfigInitial('language'));
@@ -220,6 +222,8 @@ export default () => {
setAutoSaveProjectFile,
wheelSensitivity,
setWheelSensitivity,
+ waveformHeight,
+ setWaveformHeight,
invertTimelineScroll,
setInvertTimelineScroll,
language,
diff --git a/src/renderer/src/styles.ts b/src/renderer/src/styles.ts
index 129521a3..14570b84 100644
--- a/src/renderer/src/styles.ts
+++ b/src/renderer/src/styles.ts
@@ -3,4 +3,4 @@ import { controlsBackground, darkModeTransition } from './colors';
export const videoStyle: CSSProperties = { width: '100%', height: '100%', objectFit: 'contain' };
-export const bottomStyle: CSSProperties = { background: controlsBackground, transition: darkModeTransition };
+export const bottomStyle: CSSProperties = { background: controlsBackground, transition: darkModeTransition, flexShrink: 0 };
diff --git a/src/renderer/src/types.ts b/src/renderer/src/types.ts
index 62d91879..91b11714 100644
--- a/src/renderer/src/types.ts
+++ b/src/renderer/src/types.ts
@@ -85,7 +85,7 @@ export type EdlImportType = 'youtube' | EdlFileType;
export type EdlExportType = 'csv' | 'tsv-human' | 'csv-human' | 'csv-frames' | 'srt' | 'llc';
-export type TunerType = 'wheelSensitivity' | 'keyboardNormalSeekSpeed' | 'keyboardSeekSpeed2' | 'keyboardSeekSpeed3' | 'keyboardSeekAccFactor';
+export type TunerType = 'wheelSensitivity' | 'waveformHeight' | 'keyboardNormalSeekSpeed' | 'keyboardSeekSpeed2' | 'keyboardSeekSpeed3' | 'keyboardSeekAccFactor';
export interface WaveformBase {
createdAt: Date,
diff --git a/types.ts b/types.ts
index 79565437..4e17e5d9 100644
--- a/types.ts
+++ b/types.ts
@@ -65,6 +65,7 @@ export interface Config {
playbackVolume: number,
autoSaveProjectFile: boolean,
wheelSensitivity: number,
+ waveformHeight: number,
language: LanguageKey | undefined,
ffmpegExperimental: boolean,
preserveChapters: boolean,
@@ -127,7 +128,7 @@ export interface ApiActionRequest {
export type Html5ifyMode = 'fastest' | 'fast-audio-remux' | 'fast-audio' | 'fast' | 'slow' | 'slow-audio' | 'slowest';
-export type WaveformMode = 'big-waveform' | 'waveform' | 'waveform-tall';
+export type WaveformMode = 'big-waveform' | 'waveform';
// This is the contract with the user, see https://github.com/mifi/lossless-cut/blob/master/expressions.md
export interface ScopeSegment {