mirror of
https://github.com/Stirling-Tools/Stirling-PDF.git
synced 2025-09-18 09:29:24 +00:00
Fix anticlockwise rotation animation
This commit is contained in:
parent
eee9d3b022
commit
a1d0ceef14
@ -1,13 +1,14 @@
|
|||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import { useToolOperation, ToolType } from '../shared/useToolOperation';
|
import { useToolOperation, ToolType } from '../shared/useToolOperation';
|
||||||
import { createStandardErrorHandler } from '../../../utils/toolErrorHandler';
|
import { createStandardErrorHandler } from '../../../utils/toolErrorHandler';
|
||||||
import { RotateParameters, defaultParameters } from './useRotateParameters';
|
import { RotateParameters, defaultParameters, normalizeAngle } from './useRotateParameters';
|
||||||
|
|
||||||
// Static configuration that can be used by both the hook and automation executor
|
// Static configuration that can be used by both the hook and automation executor
|
||||||
export const buildRotateFormData = (parameters: RotateParameters, file: File): FormData => {
|
export const buildRotateFormData = (parameters: RotateParameters, file: File): FormData => {
|
||||||
const formData = new FormData();
|
const formData = new FormData();
|
||||||
formData.append("fileInput", file);
|
formData.append("fileInput", file);
|
||||||
formData.append("angle", parameters.angle.toString());
|
// Normalize angle for backend (0, 90, 180, 270)
|
||||||
|
formData.append("angle", normalizeAngle(parameters.angle).toString());
|
||||||
return formData;
|
return formData;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -2,6 +2,12 @@ import { BaseParameters } from '../../../types/parameters';
|
|||||||
import { useBaseParameters, BaseParametersHook } from '../shared/useBaseParameters';
|
import { useBaseParameters, BaseParametersHook } from '../shared/useBaseParameters';
|
||||||
import { useMemo, useCallback } from 'react';
|
import { useMemo, useCallback } from 'react';
|
||||||
|
|
||||||
|
// Normalize angle to valid backend values (0, 90, 180, 270)
|
||||||
|
export const normalizeAngle = (angle: number): number => {
|
||||||
|
const normalized = angle % 360;
|
||||||
|
return normalized < 0 ? normalized + 360 : normalized;
|
||||||
|
};
|
||||||
|
|
||||||
export interface RotateParameters extends BaseParameters {
|
export interface RotateParameters extends BaseParameters {
|
||||||
angle: number; // Current rotation angle (0, 90, 180, 270)
|
angle: number; // Current rotation angle (0, 90, 180, 270)
|
||||||
}
|
}
|
||||||
@ -27,38 +33,29 @@ export const useRotateParameters = (): RotateParametersHook => {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
// Normalize angle to valid backend values (0, 90, 180, 270)
|
|
||||||
const normalizeAngle = useCallback((angle: number): number => {
|
|
||||||
const normalized = angle % 360;
|
|
||||||
return normalized < 0 ? normalized + 360 : normalized;
|
|
||||||
}, []);
|
|
||||||
|
|
||||||
// Rotate clockwise by 90 degrees
|
// Rotate clockwise by 90 degrees
|
||||||
const rotateClockwise = useCallback(() => {
|
const rotateClockwise = useCallback(() => {
|
||||||
baseHook.updateParameter('angle', normalizeAngle(baseHook.parameters.angle + 90));
|
baseHook.updateParameter('angle', baseHook.parameters.angle + 90);
|
||||||
}, [baseHook, normalizeAngle]);
|
}, [baseHook]);
|
||||||
|
|
||||||
// Rotate anticlockwise by 90 degrees
|
// Rotate anticlockwise by 90 degrees
|
||||||
const rotateAnticlockwise = useCallback(() => {
|
const rotateAnticlockwise = useCallback(() => {
|
||||||
baseHook.updateParameter('angle', normalizeAngle(baseHook.parameters.angle - 90));
|
baseHook.updateParameter('angle', baseHook.parameters.angle - 90);
|
||||||
}, [baseHook, normalizeAngle]);
|
}, [baseHook]);
|
||||||
|
|
||||||
// Check if rotation will actually change the document
|
// Check if rotation will actually change the document
|
||||||
const hasRotation = useMemo(() => {
|
const hasRotation = useMemo(() => {
|
||||||
return baseHook.parameters.angle !== 0;
|
const normalized = normalizeAngle(baseHook.parameters.angle);
|
||||||
}, [baseHook.parameters.angle]);
|
return normalized !== 0;
|
||||||
|
}, [baseHook.parameters.angle, normalizeAngle]);
|
||||||
|
|
||||||
// Override updateParameter to normalize angles
|
// Override updateParameter - no longer normalize angles here
|
||||||
const updateParameter = useCallback(<K extends keyof RotateParameters>(
|
const updateParameter = useCallback(<K extends keyof RotateParameters>(
|
||||||
parameter: K,
|
parameter: K,
|
||||||
value: RotateParameters[K]
|
value: RotateParameters[K]
|
||||||
) => {
|
) => {
|
||||||
if (parameter === 'angle') {
|
|
||||||
baseHook.updateParameter(parameter, normalizeAngle(value as number) as RotateParameters[K]);
|
|
||||||
} else {
|
|
||||||
baseHook.updateParameter(parameter, value);
|
baseHook.updateParameter(parameter, value);
|
||||||
}
|
}, [baseHook]);
|
||||||
}, [baseHook, normalizeAngle]);
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
...baseHook,
|
...baseHook,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user