Use meta key + wheel to zoom in/out (#769)

This commit is contained in:
Timur Khazamov 2020-02-16 14:38:53 +01:00 committed by GitHub
parent 360864ef3d
commit eee961d65f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 20 additions and 11 deletions

View File

@ -5,6 +5,7 @@ import { getDefaultAppState } from "../appState";
import { trash, zoomIn, zoomOut } from "../components/icons";
import { ToolButton } from "../components/ToolButton";
import { t } from "../i18n";
import { getNormalizedZoom } from "../scene";
export const actionChangeViewBackgroundColor: Action = {
name: "changeViewBackgroundColor",
@ -56,12 +57,6 @@ export const actionClearCanvas: Action = {
const ZOOM_STEP = 0.1;
function getNormalizedZoom(zoom: number): number {
const normalizedZoom = parseFloat(zoom.toFixed(2));
const clampedZoom = Math.max(0.1, Math.min(normalizedZoom, 2));
return clampedZoom;
}
export const actionZoomIn: Action = {
name: "zoomIn",
perform: (elements, appState) => {

View File

@ -35,6 +35,7 @@ import {
calculateScrollCenter,
loadFromBlob,
getZoomOrigin,
getNormalizedZoom,
} from "./scene";
import { renderScene } from "./renderer";
@ -1983,10 +1984,17 @@ export class App extends React.Component<any, AppState> {
e.preventDefault();
const { deltaX, deltaY } = e;
this.setState({
scrollX: this.state.scrollX - deltaX / this.state.zoom,
scrollY: this.state.scrollY - deltaY / this.state.zoom,
});
if (e[KEYS.META]) {
this.setState(({ zoom }) => ({
zoom: getNormalizedZoom(zoom - deltaY / 100),
}));
return;
}
this.setState(({ zoom, scrollX, scrollY }) => ({
scrollX: scrollX - deltaX / zoom,
scrollY: scrollY - deltaY / zoom,
}));
};
private addElementsFromPaste = (

View File

@ -27,4 +27,4 @@ export {
hasText,
} from "./comparisons";
export { createScene } from "./createScene";
export { getZoomOrigin, getZoomTranslation } from "./zoom";
export { getZoomOrigin, getZoomTranslation, getNormalizedZoom } from "./zoom";

View File

@ -28,3 +28,9 @@ export function getZoomTranslation(canvas: HTMLCanvasElement, zoom: number) {
y: parseFloat(diffMiddleOfTheCanvas.y.toFixed(8)),
};
}
export function getNormalizedZoom(zoom: number): number {
const normalizedZoom = parseFloat(zoom.toFixed(2));
const clampedZoom = Math.max(0.1, Math.min(normalizedZoom, 2));
return clampedZoom;
}