import { useState, useRef, useEffect, useCallback } from "react"; import { AddCircle, MinusCirlce } from "iconsax-react"; import { useEditorStore } from "../store/editorStore"; const ZoomControls = () => { const { zoom, setZoom, zoomIn, zoomOut } = useEditorStore(); const sliderRef = useRef(null); const [isDragging, setIsDragging] = useState(false); const MIN_ZOOM = 0.5; const MAX_ZOOM = 2; const SLIDER_WIDTH = 80; const sliderPosition = ((zoom - MIN_ZOOM) / (MAX_ZOOM - MIN_ZOOM)) * SLIDER_WIDTH; const updateZoomFromPosition = useCallback((clientX: number) => { if (!sliderRef.current) return; const trackElement = sliderRef.current.querySelector('.slider-track') as HTMLElement; if (!trackElement) return; const rect = trackElement.getBoundingClientRect(); const x = clientX - rect.left; const clampedX = Math.max(0, Math.min(SLIDER_WIDTH, x)); // وقتی به راست می‌کشیم (clampedX بیشتر)، zoom باید بیشتر شود const newZoom = MIN_ZOOM + (clampedX / SLIDER_WIDTH) * (MAX_ZOOM - MIN_ZOOM); setZoom(newZoom); }, [setZoom]); const handleSliderMouseDown = (e: React.MouseEvent) => { setIsDragging(true); updateZoomFromPosition(e.clientX); }; const handleMouseMove = useCallback((e: MouseEvent) => { if (isDragging) { updateZoomFromPosition(e.clientX); } }, [isDragging, updateZoomFromPosition]); const handleMouseUp = useCallback(() => { setIsDragging(false); }, []); useEffect(() => { if (isDragging) { window.addEventListener("mousemove", handleMouseMove); window.addEventListener("mouseup", handleMouseUp); return () => { window.removeEventListener("mousemove", handleMouseMove); window.removeEventListener("mouseup", handleMouseUp); }; } }, [isDragging, handleMouseMove, handleMouseUp]); return (
{/* */}
1/1
); }; export default ZoomControls;