fix: ensure canvas renders when dialog opens

Fixed canvas visualization not painting sometimes by:
- Adding `open` prop check before rendering
- Adding `open` to useEffect dependencies
- Adding dimension validation for dynamic canvas sizes
- Ensures canvas properly renders when dialog becomes visible

Affected dialogs: DynamicsParameterDialog, TimeBasedParameterDialog,
AdvancedParameterDialog

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-11-17 20:53:59 +01:00
parent 2fc1620495
commit 39624ca9cf
3 changed files with 13 additions and 5 deletions

View File

@@ -91,6 +91,8 @@ export function AdvancedParameterDialog({
// Draw visual feedback
React.useEffect(() => {
if (!open) return;
const canvas = canvasRef.current;
if (!canvas) return;
@@ -210,7 +212,7 @@ export function AdvancedParameterDialog({
ctx.moveTo(0, height / 2);
ctx.lineTo(width, height / 2);
ctx.stroke();
}, [parameters, effectType]);
}, [parameters, effectType, open]);
const handleApply = () => {
onApply({ ...parameters, type: effectType } as AdvancedParameters);

View File

@@ -139,7 +139,7 @@ export function DynamicsParameterDialog({
// Draw transfer curve (input level vs output level)
React.useEffect(() => {
if (!canvasRef.current) return;
if (!open || !canvasRef.current) return;
const canvas = canvasRef.current;
const ctx = canvas.getContext('2d');
@@ -149,6 +149,9 @@ export function DynamicsParameterDialog({
const rect = canvas.getBoundingClientRect();
const dpr = window.devicePixelRatio || 1;
// Ensure canvas has dimensions before drawing
if (rect.width === 0 || rect.height === 0) return;
// Set actual size in memory (scaled to account for extra pixel density)
canvas.width = rect.width * dpr;
canvas.height = rect.height * dpr;
@@ -296,7 +299,7 @@ export function DynamicsParameterDialog({
ctx.fillText(db.toString(), x, height - 20);
}
}, [parameters, effectType]);
}, [parameters, effectType, open]);
const handleApply = () => {
onApply(parameters);

View File

@@ -125,7 +125,7 @@ export function TimeBasedParameterDialog({
// Draw visualization
React.useEffect(() => {
if (!canvasRef.current) return;
if (!open || !canvasRef.current) return;
const canvas = canvasRef.current;
const ctx = canvas.getContext('2d');
@@ -135,6 +135,9 @@ export function TimeBasedParameterDialog({
const rect = canvas.getBoundingClientRect();
const dpr = window.devicePixelRatio || 1;
// Ensure canvas has dimensions before drawing
if (rect.width === 0 || rect.height === 0) return;
// Set actual size in memory
canvas.width = rect.width * dpr;
canvas.height = rect.height * dpr;
@@ -255,7 +258,7 @@ export function TimeBasedParameterDialog({
ctx.setLineDash([]);
}
}, [parameters, effectType]);
}, [parameters, effectType, open]);
const handleApply = () => {
onApply(parameters);