mirror of
https://github.com/arsvendg/Stirling-PDF.git
synced 2026-07-16 19:33:11 +02:00
Make zoom key command behave the same regardless of mouse position (#6508)
# Description of Changes Make zoom key command behave the same regardless of mouse position. Previously only zoomed the editor if the mouse was over the editor.
This commit is contained in:
@@ -75,7 +75,6 @@ const PageEditor = ({ onFunctionsReady }: PageEditorProps) => {
|
|||||||
// Zoom state management
|
// Zoom state management
|
||||||
const [zoomLevel, setZoomLevel] = useState(1.0);
|
const [zoomLevel, setZoomLevel] = useState(1.0);
|
||||||
const containerRef = useRef<HTMLDivElement>(null);
|
const containerRef = useRef<HTMLDivElement>(null);
|
||||||
const [isContainerHovered, setIsContainerHovered] = useState(false);
|
|
||||||
const rootFontSize = useMemo(() => {
|
const rootFontSize = useMemo(() => {
|
||||||
if (typeof window === "undefined") {
|
if (typeof window === "undefined") {
|
||||||
return 16;
|
return 16;
|
||||||
@@ -560,31 +559,32 @@ const PageEditor = ({ onFunctionsReady }: PageEditorProps) => {
|
|||||||
// Handle keyboard zoom shortcuts
|
// Handle keyboard zoom shortcuts
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const handleKeyDown = (event: KeyboardEvent) => {
|
const handleKeyDown = (event: KeyboardEvent) => {
|
||||||
if (!isContainerHovered) return;
|
if (!(event.ctrlKey || event.metaKey)) return;
|
||||||
|
|
||||||
|
const target = event.target as Element | null;
|
||||||
|
const isInTextInput =
|
||||||
|
target?.tagName === "INPUT" ||
|
||||||
|
target?.tagName === "TEXTAREA" ||
|
||||||
|
(target as HTMLElement | null)?.isContentEditable === true;
|
||||||
|
if (isInTextInput) return;
|
||||||
|
|
||||||
// Check if Ctrl (Windows/Linux) or Cmd (Mac) is pressed
|
|
||||||
if (event.ctrlKey || event.metaKey) {
|
|
||||||
if (event.key === "=" || event.key === "+") {
|
if (event.key === "=" || event.key === "+") {
|
||||||
// Ctrl+= or Ctrl++ for zoom in
|
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
zoomIn();
|
zoomIn();
|
||||||
} else if (event.key === "-" || event.key === "_") {
|
} else if (event.key === "-" || event.key === "_") {
|
||||||
// Ctrl+- for zoom out
|
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
zoomOut();
|
zoomOut();
|
||||||
} else if (event.key === "0") {
|
} else if (event.key === "0") {
|
||||||
// Ctrl+0 for reset zoom
|
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
setZoomLevel(1.0);
|
setZoomLevel(1.0);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
document.addEventListener("keydown", handleKeyDown);
|
document.addEventListener("keydown", handleKeyDown);
|
||||||
return () => {
|
return () => {
|
||||||
document.removeEventListener("keydown", handleKeyDown);
|
document.removeEventListener("keydown", handleKeyDown);
|
||||||
};
|
};
|
||||||
}, [isContainerHovered, zoomIn, zoomOut]);
|
}, [zoomIn, zoomOut, setZoomLevel]);
|
||||||
|
|
||||||
// Display all pages - use edited or original document
|
// Display all pages - use edited or original document
|
||||||
const displayedPages = displayDocument?.pages || [];
|
const displayedPages = displayDocument?.pages || [];
|
||||||
@@ -673,8 +673,6 @@ const PageEditor = ({ onFunctionsReady }: PageEditorProps) => {
|
|||||||
<div
|
<div
|
||||||
ref={containerRef}
|
ref={containerRef}
|
||||||
data-scrolling-container="true"
|
data-scrolling-container="true"
|
||||||
onMouseEnter={() => setIsContainerHovered(true)}
|
|
||||||
onMouseLeave={() => setIsContainerHovered(false)}
|
|
||||||
style={{
|
style={{
|
||||||
height: "100%",
|
height: "100%",
|
||||||
overflow: "auto",
|
overflow: "auto",
|
||||||
|
|||||||
@@ -441,6 +441,20 @@ const EmbedPdfViewerContent = ({
|
|||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
printActions.print();
|
printActions.print();
|
||||||
return;
|
return;
|
||||||
|
case "=":
|
||||||
|
case "+":
|
||||||
|
event.preventDefault();
|
||||||
|
zoomActions.zoomIn();
|
||||||
|
return;
|
||||||
|
case "-":
|
||||||
|
case "_":
|
||||||
|
event.preventDefault();
|
||||||
|
zoomActions.zoomOut();
|
||||||
|
return;
|
||||||
|
case "0":
|
||||||
|
event.preventDefault();
|
||||||
|
zoomActions.requestZoom("fit-width");
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -454,21 +468,6 @@ const EmbedPdfViewerContent = ({
|
|||||||
// Modifier key shortcuts (Ctrl/Cmd + key)
|
// Modifier key shortcuts (Ctrl/Cmd + key)
|
||||||
if (mod) {
|
if (mod) {
|
||||||
switch (event.key) {
|
switch (event.key) {
|
||||||
case "=":
|
|
||||||
case "+":
|
|
||||||
event.preventDefault();
|
|
||||||
zoomActions.zoomIn();
|
|
||||||
return;
|
|
||||||
case "-":
|
|
||||||
case "_":
|
|
||||||
event.preventDefault();
|
|
||||||
zoomActions.zoomOut();
|
|
||||||
return;
|
|
||||||
case "0":
|
|
||||||
// Ctrl+0: Reset zoom to fit width
|
|
||||||
event.preventDefault();
|
|
||||||
zoomActions.requestZoom("fit-width");
|
|
||||||
return;
|
|
||||||
case "a":
|
case "a":
|
||||||
case "A":
|
case "A":
|
||||||
// Ctrl+A: Prevent browser from selecting all UI text
|
// Ctrl+A: Prevent browser from selecting all UI text
|
||||||
|
|||||||
Reference in New Issue
Block a user