Disable rotation globally

As described on https://github.com/fabricjs/fabric.js/issues/6420#issuecomment-650747872

Fixes rotation marker appearing when selecting, and when ungrouping
This commit is contained in:
Damien Elmes 2023-10-25 09:23:47 +10:00
parent 252addf611
commit 22736238c1
7 changed files with 8 additions and 25 deletions

View file

@ -103,6 +103,8 @@ function initCanvas(onChange: () => void): fabric.Canvas {
// Disable uniform scaling // Disable uniform scaling
canvas.uniformScaling = false; canvas.uniformScaling = false;
canvas.uniScaleKey = "none"; canvas.uniScaleKey = "none";
// disable rotation globally
delete fabric.Object.prototype.controls.mtr;
moveShapeToCanvasBoundaries(canvas); moveShapeToCanvasBoundaries(canvas);
canvas.on("object:modified", (evt) => { canvas.on("object:modified", (evt) => {
if (evt.target instanceof fabric.Polygon) { if (evt.target instanceof fabric.Polygon) {

View file

@ -4,7 +4,7 @@
import { fabric } from "fabric"; import { fabric } from "fabric";
import type { Shape } from "image-occlusion/shapes"; import type { Shape } from "image-occlusion/shapes";
import { addBorder, disableRotation, enableUniformScaling } from "./lib"; import { addBorder, enableUniformScaling } from "./lib";
export const addShape = ( export const addShape = (
canvas: fabric.Canvas, canvas: fabric.Canvas,
@ -12,7 +12,6 @@ export const addShape = (
): void => { ): void => {
const fabricShape = shape.toFabric(canvas); const fabricShape = shape.toFabric(canvas);
addBorder(fabricShape); addBorder(fabricShape);
disableRotation(fabricShape);
if (fabricShape.type === "i-text") { if (fabricShape.type === "i-text") {
enableUniformScaling(canvas, fabricShape); enableUniformScaling(canvas, fabricShape);
} }
@ -28,7 +27,6 @@ export const addShapeGroup = (
const fabricShape = shape.toFabric(canvas); const fabricShape = shape.toFabric(canvas);
addBorder(fabricShape); addBorder(fabricShape);
group.addWithUpdate(fabricShape); group.addWithUpdate(fabricShape);
disableRotation(group);
}); });
canvas.add(group); canvas.add(group);
}; };

View file

@ -60,6 +60,7 @@ export const groupShapes = (canvas: fabric.Canvas): void => {
} }
canvas.getActiveObject().toGroup(); canvas.getActiveObject().toGroup();
redraw(canvas); redraw(canvas);
}; };
@ -120,7 +121,6 @@ const pasteItem = (canvas: fabric.Canvas): void => {
top: clonedObj.top + 10, top: clonedObj.top + 10,
evented: true, evented: true,
}); });
disableRotation(clonedObj);
if (clonedObj.type === "activeSelection") { if (clonedObj.type === "activeSelection") {
// active selection needs a reference to the canvas. // active selection needs a reference to the canvas.
@ -236,12 +236,6 @@ const setShapePosition = (
object.setCoords(); object.setCoords();
}; };
export function disableRotation(obj: fabric.Object): void {
obj.setControlsVisibility({
mtr: false,
});
}
export function enableUniformScaling(canvas: fabric.Canvas, obj: fabric.Object): void { export function enableUniformScaling(canvas: fabric.Canvas, obj: fabric.Object): void {
obj.setControlsVisibility({ mb: false, ml: false, mt: false, mr: false }); obj.setControlsVisibility({ mb: false, ml: false, mt: false, mr: false });
let timer: number; let timer: number;

View file

@ -3,7 +3,7 @@
import { fabric } from "fabric"; import { fabric } from "fabric";
import { BORDER_COLOR, disableRotation, SHAPE_MASK_COLOR, stopDraw } from "./lib"; import { BORDER_COLOR, SHAPE_MASK_COLOR, stopDraw } from "./lib";
import { undoStack } from "./tool-undo-redo"; import { undoStack } from "./tool-undo-redo";
export const drawEllipse = (canvas: fabric.Canvas): void => { export const drawEllipse = (canvas: fabric.Canvas): void => {
@ -38,7 +38,6 @@ export const drawEllipse = (canvas: fabric.Canvas): void => {
strokeUniform: true, strokeUniform: true,
noScaleCache: false, noScaleCache: false,
}); });
disableRotation(ellipse);
canvas.add(ellipse); canvas.add(ellipse);
}); });

View file

@ -4,7 +4,7 @@
import { fabric } from "fabric"; import { fabric } from "fabric";
import type { PanZoom } from "panzoom"; import type { PanZoom } from "panzoom";
import { BORDER_COLOR, disableRotation, SHAPE_MASK_COLOR } from "./lib"; import { BORDER_COLOR, SHAPE_MASK_COLOR } from "./lib";
import { undoStack } from "./tool-undo-redo"; import { undoStack } from "./tool-undo-redo";
let activeLine; let activeLine;
@ -186,7 +186,6 @@ const generatePolygon = (canvas: fabric.Canvas, pointsList): void => {
noScaleCache: false, noScaleCache: false,
}); });
if (polygon.width > 5 && polygon.height > 5) { if (polygon.width > 5 && polygon.height > 5) {
disableRotation(polygon);
canvas.add(polygon); canvas.add(polygon);
canvas.setActiveObject(polygon); canvas.setActiveObject(polygon);
// view undo redo tools // view undo redo tools

View file

@ -3,7 +3,7 @@
import { fabric } from "fabric"; import { fabric } from "fabric";
import { BORDER_COLOR, disableRotation, SHAPE_MASK_COLOR, stopDraw } from "./lib"; import { BORDER_COLOR, SHAPE_MASK_COLOR, stopDraw } from "./lib";
import { undoStack } from "./tool-undo-redo"; import { undoStack } from "./tool-undo-redo";
export const drawRectangle = (canvas: fabric.Canvas): void => { export const drawRectangle = (canvas: fabric.Canvas): void => {
@ -39,7 +39,6 @@ export const drawRectangle = (canvas: fabric.Canvas): void => {
strokeUniform: true, strokeUniform: true,
noScaleCache: false, noScaleCache: false,
}); });
disableRotation(rect);
canvas.add(rect); canvas.add(rect);
}); });

View file

@ -3,14 +3,7 @@
import { fabric } from "fabric"; import { fabric } from "fabric";
import { import { enableUniformScaling, stopDraw, TEXT_BACKGROUND_COLOR, TEXT_FONT_FAMILY, TEXT_PADDING } from "./lib";
disableRotation,
enableUniformScaling,
stopDraw,
TEXT_BACKGROUND_COLOR,
TEXT_FONT_FAMILY,
TEXT_PADDING,
} from "./lib";
import { undoStack } from "./tool-undo-redo"; import { undoStack } from "./tool-undo-redo";
export const drawText = (canvas: fabric.Canvas): void => { export const drawText = (canvas: fabric.Canvas): void => {
@ -35,7 +28,6 @@ export const drawText = (canvas: fabric.Canvas): void => {
backgroundColor: TEXT_BACKGROUND_COLOR, backgroundColor: TEXT_BACKGROUND_COLOR,
padding: TEXT_PADDING, padding: TEXT_PADDING,
}); });
disableRotation(text);
enableUniformScaling(canvas, text); enableUniformScaling(canvas, text);
canvas.add(text); canvas.add(text);
canvas.setActiveObject(text); canvas.setActiveObject(text);