summaryrefslogtreecommitdiff
path: root/src/renderer
diff options
context:
space:
mode:
Diffstat (limited to 'src/renderer')
-rw-r--r--src/renderer/src/components/Editor.tsx26
1 files changed, 16 insertions, 10 deletions
diff --git a/src/renderer/src/components/Editor.tsx b/src/renderer/src/components/Editor.tsx
index 8319e93..91b944c 100644
--- a/src/renderer/src/components/Editor.tsx
+++ b/src/renderer/src/components/Editor.tsx
@@ -360,6 +360,8 @@ export default function Editor() {
}, [hoveredThreadId])
// Ctrl+wheel / pinch zoom on editor (capture phase to beat CodeMirror)
+ const fontSizeRef = useRef(13.5)
+ const measureTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null)
useEffect(() => {
const el = editorRef.current
if (!el) return
@@ -367,21 +369,25 @@ export default function Editor() {
if (!(e.ctrlKey || e.metaKey)) return
e.preventDefault()
e.stopPropagation()
- const delta = e.deltaY > 0 ? -1 : 1
- setEditorFontSize((s) => Math.min(28, Math.max(8, +(s + delta * 0.5).toFixed(1))))
+ // Use continuous delta for smooth feel
+ const delta = -e.deltaY * 0.02
+ const newSize = Math.min(28, Math.max(8, +(fontSizeRef.current + delta).toFixed(1)))
+ fontSizeRef.current = newSize
+ // Apply font size immediately to DOM for smooth feel
+ if (viewRef.current) {
+ viewRef.current.dom.style.fontSize = `${newSize}px`
+ }
+ // Debounce the expensive requestMeasure
+ if (measureTimerRef.current) clearTimeout(measureTimerRef.current)
+ measureTimerRef.current = setTimeout(() => {
+ if (viewRef.current) viewRef.current.requestMeasure()
+ setEditorFontSize(fontSizeRef.current)
+ }, 100)
}
el.addEventListener('wheel', handleWheel, { passive: false, capture: true })
return () => el.removeEventListener('wheel', handleWheel, { capture: true })
}, [])
- // Apply font size to editor
- useEffect(() => {
- if (!viewRef.current) return
- const wrapper = viewRef.current.dom
- wrapper.style.fontSize = `${editorFontSize}px`
- viewRef.current.requestMeasure()
- }, [editorFontSize])
-
if (!activeTab) {
return (
<div className="editor-empty">