fabric
Version:
Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.
1 lines • 9.29 kB
Source Map (JSON)
{"version":3,"file":"croppingHandlers.mjs","sources":["../../extensions/cropping_controls/croppingHandlers.ts"],"sourcesContent":["import type {\n TModificationEvents,\n Transform,\n TransformActionHandler,\n FabricImage,\n ObjectEvents,\n} from 'fabric';\nimport { controlsUtils, Point, util } from 'fabric';\n\nconst { wrapWithFixedAnchor, wrapWithFireEvent } = controlsUtils;\n\n/**\n * Wrap controlsUtils.changeObjectWidth with image constrains\n */\nexport const changeImageWidth: TransformActionHandler = (\n eventData,\n transform,\n x,\n y,\n) => {\n const { target } = transform;\n const { width } = target;\n const image = target as FabricImage;\n const modified = controlsUtils.changeObjectWidth(eventData, transform, x, y);\n const availableWidth = image._element.width - image.cropX;\n if (modified) {\n if (image.width > availableWidth) {\n image.width = availableWidth;\n }\n if (image.width < 1) {\n image.width = 1;\n }\n }\n return width !== image.width;\n};\n\nexport const changeCropWidth = wrapWithFireEvent(\n 'CROPPING' as TModificationEvents,\n wrapWithFixedAnchor(changeImageWidth),\n);\n\n/**\n * Wrap controlsUtils.changeObjectHeight with image constrains\n */\nexport const changeImageHeight: TransformActionHandler = (\n eventData,\n transform,\n x,\n y,\n) => {\n const { target } = transform;\n const { height } = target;\n const image = target as FabricImage;\n const modified = controlsUtils.changeObjectHeight(eventData, transform, x, y);\n const availableHeight = image._element.height - image.cropY;\n if (modified) {\n if (image.height > availableHeight) {\n image.height = availableHeight;\n }\n if (image.height < 1) {\n image.height = 1;\n }\n }\n return height !== image.height;\n};\n\nexport const changeCropHeight = wrapWithFireEvent(\n 'CROPPING' as TModificationEvents,\n wrapWithFixedAnchor(changeImageHeight),\n);\n\nexport const changeImageCropX: TransformActionHandler = (\n eventData,\n transform,\n x,\n y,\n) => {\n const { target } = transform;\n const image = target as FabricImage;\n const { width, cropX } = image;\n const modified = controlsUtils.changeObjectWidth(eventData, transform, x, y);\n let newCropX = cropX + width - image.width;\n image.width = width;\n if (modified) {\n if (newCropX < 0) {\n newCropX = 0;\n }\n image.cropX = newCropX;\n // calculate new width on the base of how much crop we have now\n image.width += cropX - newCropX;\n }\n return newCropX !== cropX;\n};\n\nexport const changeImageCropY: TransformActionHandler = (\n eventData,\n transform,\n x,\n y,\n) => {\n const { target } = transform;\n const image = target as FabricImage;\n const { height, cropY } = image;\n const modified = controlsUtils.changeObjectHeight(eventData, transform, x, y);\n let newCropY = cropY + height - image.height;\n image.height = height;\n if (modified) {\n if (newCropY < 0) {\n newCropY = 0;\n }\n image.cropY = newCropY;\n image.height += cropY - newCropY;\n }\n return newCropY !== cropY;\n};\n\nexport const changeCropX = wrapWithFireEvent(\n 'CROPPING' as TModificationEvents,\n wrapWithFixedAnchor(changeImageCropX),\n);\n\nexport const changeCropY = wrapWithFireEvent(\n 'CROPPING' as TModificationEvents,\n wrapWithFixedAnchor(changeImageCropY),\n);\n\n/**\n * A function to counter the move action and change cropX/cropY of an image\n * Keep the image steady, but moves it inside its own cropping rectangle\n */\nexport const cropPanMoveHandler = ({ transform }: ObjectEvents['moving']) => {\n // this makes the image pan too fast.\n const { target, original } = transform as Transform;\n const fabricImage = target as FabricImage;\n const p = new Point(\n target.left - original.left,\n target.top - original.top,\n ).transform(\n util.invertTransform(\n util.createRotateMatrix({ angle: fabricImage.getTotalAngle() }),\n ),\n );\n let cropX = original.cropX! - p.x / fabricImage.scaleX;\n let cropY = original.cropY! - p.y / fabricImage.scaleY;\n const { width, height, _element } = fabricImage;\n if (cropX < 0) {\n cropX = 0;\n }\n if (cropY < 0) {\n cropY = 0;\n }\n if (cropX + width > _element.width) {\n cropX = _element.width - width;\n }\n if (cropY + height > _element.height) {\n cropY = _element.height - height;\n }\n fabricImage.cropX = cropX;\n fabricImage.cropY = cropY;\n fabricImage.left = original.left;\n fabricImage.top = original.top;\n};\n"],"names":["wrapWithFixedAnchor","wrapWithFireEvent","controlsUtils","changeImageWidth","eventData","transform","x","y","target","width","image","modified","changeObjectWidth","availableWidth","_element","cropX","changeCropWidth","changeImageHeight","height","changeObjectHeight","availableHeight","cropY","changeCropHeight","changeImageCropX","newCropX","changeImageCropY","newCropY","changeCropX","changeCropY","cropPanMoveHandler","_ref","original","fabricImage","p","Point","left","top","util","invertTransform","createRotateMatrix","angle","getTotalAngle","scaleX","scaleY"],"mappings":"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"}