From e8ecd08d17ec4b9d907d0585925fd73aa7863954 Mon Sep 17 00:00:00 2001 From: haoyuren <13851610112@163.com> Date: Sun, 15 Mar 2026 12:36:13 -0500 Subject: Fix SyncTeX: download synctex.gz via web proxy, normalize paths, smooth zoom - synctex.gz CDN returns 503; use Overleaf web proxy URL with session cookie - Normalize synctex paths (collapse /./ segments) - Pass session cookie to all compile artifact downloads - Smooth editor zoom: continuous delta, debounced remeasure Co-Authored-By: Claude Opus 4.6 --- src/renderer/src/components/Editor.tsx | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) (limited to 'src/renderer') 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 | 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 (
-- cgit v1.2.3