fabric 5.3.0 → 6.0.0-beta1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.babelrc +11 -0
- package/.babelrcAlt +19 -0
- package/.browserslistrc +5 -0
- package/.eslintrc.js +43 -0
- package/.eslintrc.json +38 -46
- package/.eslintrc_tests +12 -0
- package/.gitattributes +2 -0
- package/.prettierignore +16 -0
- package/.prettierrc +4 -0
- package/CHANGELOG.md +491 -189
- package/CONTRIBUTING.md +226 -58
- package/README.md +188 -239
- package/bower.json +1 -3
- package/dist/fabric.d.ts +1021 -0
- package/dist/index.cjs +28027 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.min.js +1 -0
- package/dist/index.mjs +27964 -0
- package/dist/index.mjs.map +1 -0
- package/dist/index.node.cjs +28092 -0
- package/dist/index.node.cjs.map +1 -0
- package/dist/index.node.d.ts +15 -0
- package/dist/index.node.mjs +28035 -0
- package/dist/index.node.mjs.map +1 -0
- package/dist/src/Collection.d.ts +126 -0
- package/dist/src/CommonMethods.d.ts +32 -0
- package/dist/src/EventTypeDefs.d.ts +226 -0
- package/dist/src/Intersection.d.ts +100 -0
- package/dist/src/Observable.d.ts +54 -0
- package/dist/src/Pattern.d.ts +104 -0
- package/dist/src/Point.d.ts +232 -0
- package/dist/src/Shadow.d.ts +87 -0
- package/dist/src/brushes/BaseBrush.d.ts +105 -0
- package/dist/src/brushes/CircleBrush.d.ts +49 -0
- package/dist/src/brushes/PatternBrush.d.ts +23 -0
- package/dist/src/brushes/PencilBrush.d.ts +92 -0
- package/dist/src/brushes/SprayBrush.d.ts +79 -0
- package/dist/src/cache.d.ts +46 -0
- package/dist/src/canvas/Canvas.d.ts +567 -0
- package/dist/src/canvas/SelectableCanvas.d.ts +723 -0
- package/dist/src/canvas/StaticCanvas.d.ts +751 -0
- package/dist/src/canvas/TextEditingManager.d.ts +17 -0
- package/dist/src/canvas/canvas_gestures.mixin.d.ts +2 -0
- package/dist/src/color/Color.d.ts +174 -0
- package/dist/src/color/color_map.d.ts +155 -0
- package/dist/src/color/constants.d.ts +22 -0
- package/dist/src/color/util.d.ts +12 -0
- package/dist/src/config.d.ts +115 -0
- package/dist/src/constants.d.ts +14 -0
- package/dist/src/controls/Control.d.ts +228 -0
- package/dist/src/controls/changeWidth.d.ts +13 -0
- package/dist/src/controls/controls.render.d.ts +29 -0
- package/dist/src/controls/default_controls.d.ts +50 -0
- package/dist/src/controls/drag.d.ts +12 -0
- package/dist/src/controls/polyControl.d.ts +5 -0
- package/dist/src/controls/rotate.d.ts +12 -0
- package/dist/src/controls/scale.d.ts +47 -0
- package/dist/src/controls/scaleSkew.d.ts +39 -0
- package/dist/src/controls/skew.d.ts +33 -0
- package/dist/src/controls/util.d.ts +41 -0
- package/dist/src/controls/wrapWithFireEvent.d.ts +8 -0
- package/dist/src/controls/wrapWithFixedAnchor.d.ts +9 -0
- package/dist/src/env/browser.d.ts +3 -0
- package/dist/src/env/index.d.ts +7 -0
- package/dist/src/env/node.d.ts +3 -0
- package/dist/src/env/types.d.ts +15 -0
- package/dist/src/filters/BaseFilter.d.ts +156 -0
- package/dist/src/filters/BlendColor.d.ts +80 -0
- package/dist/src/filters/BlendImage.d.ts +90 -0
- package/dist/src/filters/Blur.d.ts +50 -0
- package/dist/src/filters/Boilerplate.d.ts +46 -0
- package/dist/src/filters/Brightness.d.ts +46 -0
- package/dist/src/filters/Canvas2dFilterBackend.d.ts +27 -0
- package/dist/src/filters/ColorMatrix.d.ts +62 -0
- package/dist/src/filters/ColorMatrixFilters.d.ts +1169 -0
- package/dist/src/filters/Composed.d.ts +47 -0
- package/dist/src/filters/Contrast.d.ts +44 -0
- package/dist/src/filters/Convolute.d.ts +82 -0
- package/dist/src/filters/FilterBackend.d.ts +14 -0
- package/dist/src/filters/Gamma.d.ts +53 -0
- package/dist/src/filters/Grayscale.d.ts +45 -0
- package/dist/src/filters/HueRotation.d.ts +24 -0
- package/dist/src/filters/Invert.d.ts +54 -0
- package/dist/src/filters/Noise.d.ts +53 -0
- package/dist/src/filters/Pixelate.d.ts +43 -0
- package/dist/src/filters/RemoveColor.d.ts +62 -0
- package/dist/src/filters/Resize.d.ts +134 -0
- package/dist/src/filters/Saturation.d.ts +47 -0
- package/dist/src/filters/Vibrance.d.ts +47 -0
- package/dist/src/filters/WebGLFilterBackend.d.ts +126 -0
- package/dist/src/filters/WebGLProbe.d.ts +28 -0
- package/dist/src/filters/typedefs.d.ts +49 -0
- package/dist/src/gradient/Gradient.d.ts +149 -0
- package/dist/src/gradient/constants.d.ts +15 -0
- package/dist/src/gradient/parser/index.d.ts +4 -0
- package/dist/src/gradient/parser/misc.d.ts +4 -0
- package/dist/src/gradient/parser/parseColorStops.d.ts +6 -0
- package/dist/src/gradient/parser/parseCoords.d.ts +17 -0
- package/dist/src/gradient/typedefs.d.ts +93 -0
- package/dist/src/mixins/eraser_brush.mixin.d.ts +2 -0
- package/dist/src/mixins/stateful.mixin.d.ts +18 -0
- package/dist/src/parkinglot/canvas_animation.mixin.d.ts +2 -0
- package/dist/src/parkinglot/straighten.d.ts +2 -0
- package/dist/src/parser/applyViewboxTransform.d.ts +5 -0
- package/dist/src/parser/attributes.d.ts +6 -0
- package/dist/src/parser/constants.d.ts +54 -0
- package/dist/src/parser/doesSomeParentMatch.d.ts +2 -0
- package/dist/src/parser/elementById.d.ts +6 -0
- package/dist/src/parser/elementMatchesRule.d.ts +5 -0
- package/dist/src/parser/elements_parser.d.ts +3 -0
- package/dist/src/parser/getCSSRules.d.ts +7 -0
- package/dist/src/parser/getGlobalStylesForElement.d.ts +5 -0
- package/dist/src/parser/getGradientDefs.d.ts +7 -0
- package/dist/src/parser/getMultipleNodes.d.ts +2 -0
- package/dist/src/parser/getSvgRegex.d.ts +2 -0
- package/dist/src/parser/hasAncestorWithNodeName.d.ts +2 -0
- package/dist/src/parser/loadSVGFromString.d.ts +12 -0
- package/dist/src/parser/loadSVGFromURL.d.ts +13 -0
- package/dist/src/parser/normalizeAttr.d.ts +2 -0
- package/dist/src/parser/normalizeValue.d.ts +2 -0
- package/dist/src/parser/parseAttributes.d.ts +9 -0
- package/dist/src/parser/parseElements.d.ts +11 -0
- package/dist/src/parser/parseFontDeclaration.d.ts +10 -0
- package/dist/src/parser/parsePointsAttribute.d.ts +12 -0
- package/dist/src/parser/parseSVGDocument.d.ts +15 -0
- package/dist/src/parser/parseStyleAttribute.d.ts +9 -0
- package/dist/src/parser/parseStyleObject.d.ts +2 -0
- package/dist/src/parser/parseStyleString.d.ts +2 -0
- package/dist/src/parser/parseTransformAttribute.d.ts +10 -0
- package/dist/src/parser/parseUseDirectives.d.ts +2 -0
- package/dist/src/parser/percent.d.ts +9 -0
- package/dist/src/parser/recursivelyParseGradientsXlink.d.ts +2 -0
- package/dist/src/parser/rotateMatrix.d.ts +2 -0
- package/dist/src/parser/scaleMatrix.d.ts +2 -0
- package/dist/src/parser/selectorMatches.d.ts +2 -0
- package/dist/src/parser/setStrokeFillOpacity.d.ts +6 -0
- package/dist/src/parser/skewMatrix.d.ts +2 -0
- package/dist/src/parser/translateMatrix.d.ts +2 -0
- package/dist/src/shapes/ActiveSelection.d.ts +66 -0
- package/dist/src/shapes/Circle.d.ts +80 -0
- package/dist/src/shapes/Ellipse.d.ts +74 -0
- package/dist/src/shapes/Group.d.ts +381 -0
- package/dist/src/shapes/IText/DraggableTextDelegate.d.ts +78 -0
- package/dist/src/shapes/IText/IText.d.ts +322 -0
- package/dist/src/shapes/IText/ITextBehavior.d.ts +285 -0
- package/dist/src/shapes/IText/ITextClickBehavior.d.ts +81 -0
- package/dist/src/shapes/IText/ITextKeyBehavior.d.ts +193 -0
- package/dist/src/shapes/IText/constants.d.ts +13 -0
- package/dist/src/shapes/Image.d.ts +283 -0
- package/dist/src/shapes/Line.d.ts +117 -0
- package/dist/src/shapes/Object/AnimatableObject.d.ts +33 -0
- package/dist/src/shapes/Object/FabricObject.d.ts +9 -0
- package/dist/src/shapes/Object/FabricObjectSVGExportMixin.d.ts +74 -0
- package/dist/src/shapes/Object/InteractiveObject.d.ts +282 -0
- package/dist/src/shapes/Object/Object.d.ts +906 -0
- package/dist/src/shapes/Object/ObjectGeometry.d.ts +343 -0
- package/dist/src/shapes/Object/ObjectOrigin.d.ts +178 -0
- package/dist/src/shapes/Object/StackedObject.d.ts +62 -0
- package/dist/src/shapes/Object/defaultValues.d.ts +77 -0
- package/dist/src/shapes/Path.d.ts +123 -0
- package/dist/src/shapes/Polygon.d.ts +7 -0
- package/dist/src/shapes/Polyline.d.ts +130 -0
- package/dist/src/shapes/Rect.d.ts +62 -0
- package/dist/src/shapes/Text/StyledText.d.ts +118 -0
- package/dist/src/shapes/Text/Text.d.ts +656 -0
- package/dist/src/shapes/Text/TextSVGExportMixin.d.ts +32 -0
- package/dist/src/shapes/Textbox.d.ts +170 -0
- package/dist/src/shapes/Triangle.d.ts +17 -0
- package/dist/src/typedefs.d.ts +93 -0
- package/dist/src/util/animation/AnimationBase.d.ts +54 -0
- package/dist/src/util/animation/AnimationFrameProvider.d.ts +8 -0
- package/dist/src/util/animation/AnimationRegistry.d.ts +29 -0
- package/dist/src/util/animation/ArrayAnimation.d.ts +10 -0
- package/dist/src/util/animation/ColorAnimation.d.ts +11 -0
- package/dist/src/util/animation/ValueAnimation.d.ts +10 -0
- package/dist/src/util/animation/animate.d.ts +37 -0
- package/dist/src/util/animation/easing.d.ts +130 -0
- package/dist/src/util/animation/types.d.ts +87 -0
- package/dist/src/util/applyMixins.d.ts +8 -0
- package/dist/src/util/class_registry.d.ts +14 -0
- package/dist/src/util/dom_event.d.ts +5 -0
- package/dist/src/util/dom_misc.d.ts +40 -0
- package/dist/src/util/dom_request.d.ts +14 -0
- package/dist/src/util/dom_style.d.ts +7 -0
- package/dist/src/util/fireEvent.d.ts +3 -0
- package/dist/src/util/internals/cloneDeep.d.ts +2 -0
- package/dist/src/util/internals/getRandomInt.d.ts +8 -0
- package/dist/src/util/internals/ifNaN.d.ts +8 -0
- package/dist/src/util/internals/index.d.ts +4 -0
- package/dist/src/util/internals/removeFromArray.d.ts +9 -0
- package/dist/src/util/internals/uid.d.ts +2 -0
- package/dist/src/util/lang_class.d.ts +12 -0
- package/dist/src/util/lang_string.d.ts +22 -0
- package/dist/src/util/misc/boundingBoxFromPoints.d.ts +9 -0
- package/dist/src/util/misc/capValue.d.ts +2 -0
- package/dist/src/util/misc/cos.d.ts +10 -0
- package/dist/src/util/misc/dom.d.ts +28 -0
- package/dist/src/util/misc/findScaleTo.d.ts +29 -0
- package/dist/src/util/misc/groupSVGElements.d.ts +9 -0
- package/dist/src/util/misc/isTransparent.d.ts +11 -0
- package/dist/src/util/misc/matrix.d.ts +92 -0
- package/dist/src/util/misc/mergeClipPaths.d.ts +23 -0
- package/dist/src/util/misc/objectEnlive.d.ts +56 -0
- package/dist/src/util/misc/objectTransforms.d.ts +68 -0
- package/dist/src/util/misc/pick.d.ts +8 -0
- package/dist/src/util/misc/planeChange.d.ts +84 -0
- package/dist/src/util/misc/projectStroke/StrokeLineCapProjections.d.ts +51 -0
- package/dist/src/util/misc/projectStroke/StrokeLineJoinProjections.d.ts +81 -0
- package/dist/src/util/misc/projectStroke/StrokeProjectionsBase.d.ts +25 -0
- package/dist/src/util/misc/projectStroke/index.d.ts +11 -0
- package/dist/src/util/misc/projectStroke/types.d.ts +23 -0
- package/dist/src/util/misc/radiansDegreesConversion.d.ts +14 -0
- package/dist/src/util/misc/resolveOrigin.d.ts +9 -0
- package/dist/src/util/misc/rotatePoint.d.ts +12 -0
- package/dist/src/util/misc/sin.d.ts +10 -0
- package/dist/src/util/misc/svgParsing.d.ts +53 -0
- package/dist/src/util/misc/textStyles.d.ts +32 -0
- package/dist/src/util/misc/toFixed.d.ts +8 -0
- package/dist/src/util/misc/vectors.d.ts +57 -0
- package/dist/src/util/path.d.ts +108 -0
- package/dist/src/util/transform_matrix_removal.d.ts +14 -0
- package/dist/src/util/types.d.ts +19 -0
- package/fabric.ts +427 -0
- package/index.node.ts +43 -0
- package/index.ts +1 -0
- package/package.json +90 -39
- package/publish.js +0 -26
- package/rollup.config.mjs +79 -0
- package/rollup.test.config.js +24 -0
- package/scripts/build.mjs +50 -0
- package/scripts/buildLock.mjs +115 -0
- package/scripts/buildReporter.mjs +15 -0
- package/scripts/buildStats.mjs +139 -0
- package/scripts/dirname.mjs +14 -0
- package/scripts/index.mjs +679 -0
- package/scripts/transform_files.mjs +504 -0
- package/src/Collection.ts +311 -0
- package/src/CommonMethods.ts +63 -0
- package/src/EventTypeDefs.ts +294 -0
- package/src/Intersection.ts +273 -0
- package/src/Observable.ts +175 -0
- package/src/Pattern.ts +211 -0
- package/src/Point.ts +388 -0
- package/src/Shadow.ts +215 -0
- package/src/brushes/{base_brush.class.js → BaseBrush.ts} +65 -42
- package/src/brushes/CircleBrush.ts +145 -0
- package/src/brushes/PatternBrush.ts +70 -0
- package/src/brushes/PencilBrush.ts +300 -0
- package/src/brushes/SprayBrush.ts +219 -0
- package/src/cache.ts +89 -0
- package/src/canvas/Canvas.ts +1672 -0
- package/src/canvas/SelectableCanvas.ts +1636 -0
- package/src/canvas/StaticCanvas.ts +1709 -0
- package/src/canvas/TextEditingManager.ts +48 -0
- package/src/canvas/canvas_gestures.mixin.ts +207 -0
- package/src/color/Color.ts +404 -0
- package/src/color/color_map.ts +154 -0
- package/src/color/constants.ts +26 -0
- package/src/color/util.ts +32 -0
- package/src/config.ts +159 -0
- package/src/constants.ts +19 -0
- package/src/controls/Control.ts +377 -0
- package/src/controls/changeWidth.ts +52 -0
- package/src/controls/controls.render.ts +138 -0
- package/src/controls/default_controls.ts +132 -0
- package/src/controls/drag.ts +31 -0
- package/src/controls/polyControl.ts +135 -0
- package/src/controls/rotate.ts +87 -0
- package/src/controls/scale.ts +277 -0
- package/src/controls/scaleSkew.ts +92 -0
- package/src/controls/skew.ts +242 -0
- package/src/controls/util.ts +154 -0
- package/src/controls/wrapWithFireEvent.ts +25 -0
- package/src/controls/wrapWithFixedAnchor.ts +20 -0
- package/src/env/browser.ts +28 -0
- package/src/env/index.ts +19 -0
- package/src/env/node.ts +52 -0
- package/src/env/types.ts +15 -0
- package/src/filters/{base_filter.class.js → BaseFilter.ts} +201 -149
- package/src/filters/BlendColor.ts +258 -0
- package/src/filters/BlendImage.ts +254 -0
- package/src/filters/Blur.ts +202 -0
- package/src/filters/Boilerplate.ts +91 -0
- package/src/filters/Brightness.ts +93 -0
- package/src/filters/Canvas2dFilterBackend.ts +65 -0
- package/src/filters/ColorMatrix.ts +156 -0
- package/src/filters/ColorMatrixFilters.ts +106 -0
- package/src/filters/Composed.ts +85 -0
- package/src/filters/Contrast.ts +94 -0
- package/src/filters/Convolute.ts +341 -0
- package/src/filters/FilterBackend.ts +32 -0
- package/src/filters/Gamma.ts +127 -0
- package/src/filters/Grayscale.ts +137 -0
- package/src/filters/HueRotation.ts +66 -0
- package/src/filters/Invert.ts +117 -0
- package/src/filters/Noise.ts +109 -0
- package/src/filters/Pixelate.ts +114 -0
- package/src/filters/RemoveColor.ts +148 -0
- package/src/filters/Resize.ts +540 -0
- package/src/filters/Saturation.ts +100 -0
- package/src/filters/Vibrance.ts +103 -0
- package/src/filters/WebGLFilterBackend.ts +430 -0
- package/src/filters/WebGLProbe.ts +62 -0
- package/src/filters/typedefs.ts +65 -0
- package/src/gradient/Gradient.ts +401 -0
- package/src/gradient/constants.ts +12 -0
- package/src/gradient/parser/index.ts +3 -0
- package/src/gradient/parser/misc.ts +13 -0
- package/src/gradient/parser/parseColorStops.ts +55 -0
- package/src/gradient/parser/parseCoords.ts +73 -0
- package/src/gradient/typedefs.ts +104 -0
- package/src/mixins/{eraser_brush.mixin.js → eraser_brush.mixin.ts} +350 -239
- package/src/mixins/stateful.mixin.ts +104 -0
- package/src/parkinglot/canvas_animation.mixin.ts +121 -0
- package/src/parkinglot/straighten.ts +58 -0
- package/src/parser/applyViewboxTransform.ts +162 -0
- package/src/parser/attributes.ts +25 -0
- package/src/parser/constants.ts +118 -0
- package/src/parser/doesSomeParentMatch.ts +19 -0
- package/src/parser/elementById.ts +23 -0
- package/src/parser/elementMatchesRule.ts +19 -0
- package/src/parser/elements_parser.ts +191 -0
- package/src/parser/getCSSRules.ts +62 -0
- package/src/parser/getGlobalStylesForElement.ts +19 -0
- package/src/parser/getGradientDefs.ts +32 -0
- package/src/parser/getMultipleNodes.ts +15 -0
- package/src/parser/getSvgRegex.ts +5 -0
- package/src/parser/hasAncestorWithNodeName.ts +14 -0
- package/src/parser/loadSVGFromString.ts +26 -0
- package/src/parser/loadSVGFromURL.ts +40 -0
- package/src/parser/normalizeAttr.ts +10 -0
- package/src/parser/normalizeValue.ts +63 -0
- package/src/parser/parseAttributes.ts +90 -0
- package/src/parser/parseElements.ts +28 -0
- package/src/parser/parseFontDeclaration.ts +44 -0
- package/src/parser/parsePointsAttribute.ts +36 -0
- package/src/parser/parseSVGDocument.ts +106 -0
- package/src/parser/parseStyleAttribute.ts +27 -0
- package/src/parser/parseStyleObject.ts +15 -0
- package/src/parser/parseStyleString.ts +16 -0
- package/src/parser/parseTransformAttribute.ts +155 -0
- package/src/parser/parseUseDirectives.ts +79 -0
- package/src/parser/percent.ts +27 -0
- package/src/parser/recursivelyParseGradientsXlink.ts +42 -0
- package/src/parser/rotateMatrix.ts +21 -0
- package/src/parser/scaleMatrix.ts +9 -0
- package/src/parser/selectorMatches.ts +25 -0
- package/src/parser/setStrokeFillOpacity.ts +40 -0
- package/src/parser/skewMatrix.ts +6 -0
- package/src/parser/translateMatrix.ts +8 -0
- package/src/shapes/ActiveSelection.ts +157 -0
- package/src/shapes/Circle.ts +205 -0
- package/src/shapes/Ellipse.ts +154 -0
- package/src/shapes/Group.ts +1053 -0
- package/src/shapes/IText/DraggableTextDelegate.ts +394 -0
- package/src/shapes/IText/IText.ts +666 -0
- package/src/shapes/IText/ITextBehavior.ts +1055 -0
- package/src/shapes/IText/ITextClickBehavior.ts +321 -0
- package/src/shapes/IText/ITextKeyBehavior.ts +683 -0
- package/src/shapes/IText/constants.ts +47 -0
- package/src/shapes/Image.ts +789 -0
- package/src/shapes/Line.ts +329 -0
- package/src/shapes/Object/AnimatableObject.ts +106 -0
- package/src/shapes/Object/FabricObject.ts +19 -0
- package/src/shapes/Object/FabricObjectSVGExportMixin.ts +277 -0
- package/src/shapes/Object/InteractiveObject.ts +645 -0
- package/src/shapes/Object/Object.ts +1896 -0
- package/src/shapes/Object/ObjectGeometry.ts +830 -0
- package/src/shapes/Object/ObjectOrigin.ts +354 -0
- package/src/shapes/Object/StackedObject.ts +191 -0
- package/src/shapes/Object/defaultValues.ts +112 -0
- package/src/shapes/Path.ts +395 -0
- package/src/shapes/Polygon.ts +19 -0
- package/src/shapes/Polyline.ts +333 -0
- package/src/shapes/Rect.ts +199 -0
- package/src/shapes/Text/StyledText.ts +319 -0
- package/src/shapes/Text/Text.ts +1948 -0
- package/src/shapes/Text/TextSVGExportMixin.ts +288 -0
- package/src/shapes/Textbox.ts +471 -0
- package/src/shapes/Triangle.ts +45 -0
- package/src/typedefs.ts +119 -0
- package/src/util/animation/AnimationBase.ts +166 -0
- package/src/util/animation/AnimationFrameProvider.ts +28 -0
- package/src/util/animation/AnimationRegistry.ts +58 -0
- package/src/util/animation/ArrayAnimation.ts +27 -0
- package/src/util/animation/ColorAnimation.ts +74 -0
- package/src/util/animation/ValueAnimation.ts +29 -0
- package/src/util/animation/animate.ts +74 -0
- package/src/util/animation/easing.ts +327 -0
- package/src/util/animation/types.ts +136 -0
- package/src/util/applyMixins.ts +22 -0
- package/src/util/class_registry.ts +54 -0
- package/src/util/dom_event.ts +28 -0
- package/src/util/dom_misc.ts +138 -0
- package/src/util/dom_request.ts +64 -0
- package/src/util/dom_style.ts +20 -0
- package/src/util/fireEvent.ts +15 -0
- package/src/util/internals/cloneDeep.ts +2 -0
- package/src/util/internals/getRandomInt.ts +8 -0
- package/src/util/internals/ifNaN.ts +9 -0
- package/src/util/internals/index.ts +3 -0
- package/src/util/internals/removeFromArray.ts +14 -0
- package/src/util/internals/uid.ts +3 -0
- package/src/util/lang_class.ts +90 -0
- package/src/util/lang_string.ts +79 -0
- package/src/util/misc/boundingBoxFromPoints.ts +37 -0
- package/src/util/misc/capValue.ts +2 -0
- package/src/util/misc/cos.ts +24 -0
- package/src/util/misc/dom.ts +50 -0
- package/src/util/misc/findScaleTo.ts +44 -0
- package/src/util/misc/groupSVGElements.ts +15 -0
- package/src/util/misc/isTransparent.ts +51 -0
- package/src/util/misc/matrix.ts +207 -0
- package/src/util/misc/mergeClipPaths.ts +40 -0
- package/src/util/misc/objectEnlive.ts +189 -0
- package/src/util/misc/objectTransforms.ts +129 -0
- package/src/util/misc/pick.ts +17 -0
- package/src/util/misc/planeChange.ts +136 -0
- package/src/util/misc/projectStroke/StrokeLineCapProjections.ts +112 -0
- package/src/util/misc/projectStroke/StrokeLineJoinProjections.ts +231 -0
- package/src/util/misc/projectStroke/StrokeProjectionsBase.ts +75 -0
- package/src/util/misc/projectStroke/index.ts +53 -0
- package/src/util/misc/projectStroke/types.ts +24 -0
- package/src/util/misc/radiansDegreesConversion.ts +18 -0
- package/src/util/misc/resolveOrigin.ts +22 -0
- package/src/util/misc/rotatePoint.ts +15 -0
- package/src/util/misc/sin.ts +26 -0
- package/src/util/misc/svgParsing.ts +181 -0
- package/src/util/misc/textStyles.ts +133 -0
- package/src/util/misc/toFixed.ts +8 -0
- package/src/util/misc/vectors.ts +82 -0
- package/src/util/path.ts +941 -0
- package/src/util/transform_matrix_removal.ts +60 -0
- package/src/util/types.ts +78 -0
- package/tsconfig.json +106 -0
- package/HEADER.js +0 -203
- package/build.js +0 -287
- package/dist/fabric.js +0 -31187
- package/dist/fabric.min.js +0 -1
- package/old-travis-reference.yml +0 -97
- package/src/brushes/circle_brush.class.js +0 -144
- package/src/brushes/pattern_brush.class.js +0 -61
- package/src/brushes/pencil_brush.class.js +0 -310
- package/src/brushes/spray_brush.class.js +0 -219
- package/src/canvas.class.js +0 -1312
- package/src/color.class.js +0 -636
- package/src/control.class.js +0 -339
- package/src/controls.actions.js +0 -740
- package/src/controls.render.js +0 -99
- package/src/elements_parser.js +0 -152
- package/src/filters/2d_backend.class.js +0 -65
- package/src/filters/blendcolor_filter.class.js +0 -251
- package/src/filters/blendimage_filter.class.js +0 -247
- package/src/filters/blur_filter.class.js +0 -217
- package/src/filters/brightness_filter.class.js +0 -113
- package/src/filters/colormatrix_filter.class.js +0 -159
- package/src/filters/composed_filter.class.js +0 -72
- package/src/filters/contrast_filter.class.js +0 -113
- package/src/filters/convolute_filter.class.js +0 -352
- package/src/filters/filter_boilerplate.js +0 -111
- package/src/filters/filter_generator.js +0 -85
- package/src/filters/gamma_filter.class.js +0 -136
- package/src/filters/grayscale_filter.class.js +0 -154
- package/src/filters/hue_rotation.class.js +0 -107
- package/src/filters/invert_filter.class.js +0 -111
- package/src/filters/noise_filter.class.js +0 -134
- package/src/filters/pixelate_filter.class.js +0 -137
- package/src/filters/removecolor_filter.class.js +0 -173
- package/src/filters/resize_filter.class.js +0 -490
- package/src/filters/saturate_filter.class.js +0 -119
- package/src/filters/vibrance_filter.class.js +0 -122
- package/src/filters/webgl_backend.class.js +0 -396
- package/src/globalFabric.js +0 -4
- package/src/gradient.class.js +0 -490
- package/src/intersection.class.js +0 -172
- package/src/log.js +0 -11
- package/src/mixins/animation.mixin.js +0 -231
- package/src/mixins/canvas_dataurl_exporter.mixin.js +0 -97
- package/src/mixins/canvas_events.mixin.js +0 -974
- package/src/mixins/canvas_gestures.mixin.js +0 -149
- package/src/mixins/canvas_grouping.mixin.js +0 -177
- package/src/mixins/canvas_serialization.mixin.js +0 -228
- package/src/mixins/collection.mixin.js +0 -170
- package/src/mixins/default_controls.js +0 -114
- package/src/mixins/itext.svg_export.js +0 -241
- package/src/mixins/itext_behavior.mixin.js +0 -940
- package/src/mixins/itext_click_behavior.mixin.js +0 -278
- package/src/mixins/itext_key_behavior.mixin.js +0 -694
- package/src/mixins/object.svg_export.js +0 -258
- package/src/mixins/object_geometry.mixin.js +0 -683
- package/src/mixins/object_interactivity.mixin.js +0 -314
- package/src/mixins/object_origin.mixin.js +0 -255
- package/src/mixins/object_stacking.mixin.js +0 -80
- package/src/mixins/object_straightening.mixin.js +0 -80
- package/src/mixins/observable.mixin.js +0 -141
- package/src/mixins/shared_methods.mixin.js +0 -94
- package/src/mixins/stateful.mixin.js +0 -107
- package/src/mixins/text_style.mixin.js +0 -324
- package/src/parser.js +0 -1090
- package/src/pattern.class.js +0 -189
- package/src/point.class.js +0 -337
- package/src/shadow.class.js +0 -195
- package/src/shapes/active_selection.class.js +0 -155
- package/src/shapes/circle.class.js +0 -210
- package/src/shapes/ellipse.class.js +0 -181
- package/src/shapes/group.class.js +0 -593
- package/src/shapes/image.class.js +0 -764
- package/src/shapes/itext.class.js +0 -526
- package/src/shapes/line.class.js +0 -324
- package/src/shapes/object.class.js +0 -2008
- package/src/shapes/path.class.js +0 -384
- package/src/shapes/polygon.class.js +0 -81
- package/src/shapes/polyline.class.js +0 -268
- package/src/shapes/rect.class.js +0 -187
- package/src/shapes/text.class.js +0 -1696
- package/src/shapes/textbox.class.js +0 -461
- package/src/shapes/triangle.class.js +0 -93
- package/src/static_canvas.class.js +0 -1881
- package/src/util/anim_ease.js +0 -398
- package/src/util/animate.js +0 -254
- package/src/util/animate_color.js +0 -74
- package/src/util/dom_event.js +0 -50
- package/src/util/dom_misc.js +0 -300
- package/src/util/dom_request.js +0 -54
- package/src/util/dom_style.js +0 -70
- package/src/util/lang_array.js +0 -94
- package/src/util/lang_class.js +0 -115
- package/src/util/lang_object.js +0 -75
- package/src/util/lang_string.js +0 -110
- package/src/util/misc.js +0 -1330
- package/src/util/named_accessors.mixin.js +0 -428
- package/src/util/path.js +0 -829
|
@@ -1,974 +0,0 @@
|
|
|
1
|
-
(function() {
|
|
2
|
-
|
|
3
|
-
var addListener = fabric.util.addListener,
|
|
4
|
-
removeListener = fabric.util.removeListener,
|
|
5
|
-
RIGHT_CLICK = 3, MIDDLE_CLICK = 2, LEFT_CLICK = 1,
|
|
6
|
-
addEventOptions = { passive: false };
|
|
7
|
-
|
|
8
|
-
function checkClick(e, value) {
|
|
9
|
-
return e.button && (e.button === value - 1);
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
fabric.util.object.extend(fabric.Canvas.prototype, /** @lends fabric.Canvas.prototype */ {
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Contains the id of the touch event that owns the fabric transform
|
|
16
|
-
* @type Number
|
|
17
|
-
* @private
|
|
18
|
-
*/
|
|
19
|
-
mainTouchId: null,
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Adds mouse listeners to canvas
|
|
23
|
-
* @private
|
|
24
|
-
*/
|
|
25
|
-
_initEventListeners: function () {
|
|
26
|
-
// in case we initialized the class twice. This should not happen normally
|
|
27
|
-
// but in some kind of applications where the canvas element may be changed
|
|
28
|
-
// this is a workaround to having double listeners.
|
|
29
|
-
this.removeListeners();
|
|
30
|
-
this._bindEvents();
|
|
31
|
-
this.addOrRemove(addListener, 'add');
|
|
32
|
-
},
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* return an event prefix pointer or mouse.
|
|
36
|
-
* @private
|
|
37
|
-
*/
|
|
38
|
-
_getEventPrefix: function () {
|
|
39
|
-
return this.enablePointerEvents ? 'pointer' : 'mouse';
|
|
40
|
-
},
|
|
41
|
-
|
|
42
|
-
addOrRemove: function(functor, eventjsFunctor) {
|
|
43
|
-
var canvasElement = this.upperCanvasEl,
|
|
44
|
-
eventTypePrefix = this._getEventPrefix();
|
|
45
|
-
functor(fabric.window, 'resize', this._onResize);
|
|
46
|
-
functor(canvasElement, eventTypePrefix + 'down', this._onMouseDown);
|
|
47
|
-
functor(canvasElement, eventTypePrefix + 'move', this._onMouseMove, addEventOptions);
|
|
48
|
-
functor(canvasElement, eventTypePrefix + 'out', this._onMouseOut);
|
|
49
|
-
functor(canvasElement, eventTypePrefix + 'enter', this._onMouseEnter);
|
|
50
|
-
functor(canvasElement, 'wheel', this._onMouseWheel);
|
|
51
|
-
functor(canvasElement, 'contextmenu', this._onContextMenu);
|
|
52
|
-
functor(canvasElement, 'dblclick', this._onDoubleClick);
|
|
53
|
-
functor(canvasElement, 'dragover', this._onDragOver);
|
|
54
|
-
functor(canvasElement, 'dragenter', this._onDragEnter);
|
|
55
|
-
functor(canvasElement, 'dragleave', this._onDragLeave);
|
|
56
|
-
functor(canvasElement, 'drop', this._onDrop);
|
|
57
|
-
if (!this.enablePointerEvents) {
|
|
58
|
-
functor(canvasElement, 'touchstart', this._onTouchStart, addEventOptions);
|
|
59
|
-
}
|
|
60
|
-
if (typeof eventjs !== 'undefined' && eventjsFunctor in eventjs) {
|
|
61
|
-
eventjs[eventjsFunctor](canvasElement, 'gesture', this._onGesture);
|
|
62
|
-
eventjs[eventjsFunctor](canvasElement, 'drag', this._onDrag);
|
|
63
|
-
eventjs[eventjsFunctor](canvasElement, 'orientation', this._onOrientationChange);
|
|
64
|
-
eventjs[eventjsFunctor](canvasElement, 'shake', this._onShake);
|
|
65
|
-
eventjs[eventjsFunctor](canvasElement, 'longpress', this._onLongPress);
|
|
66
|
-
}
|
|
67
|
-
},
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
* Removes all event listeners
|
|
71
|
-
*/
|
|
72
|
-
removeListeners: function() {
|
|
73
|
-
this.addOrRemove(removeListener, 'remove');
|
|
74
|
-
// if you dispose on a mouseDown, before mouse up, you need to clean document to...
|
|
75
|
-
var eventTypePrefix = this._getEventPrefix();
|
|
76
|
-
removeListener(fabric.document, eventTypePrefix + 'up', this._onMouseUp);
|
|
77
|
-
removeListener(fabric.document, 'touchend', this._onTouchEnd, addEventOptions);
|
|
78
|
-
removeListener(fabric.document, eventTypePrefix + 'move', this._onMouseMove, addEventOptions);
|
|
79
|
-
removeListener(fabric.document, 'touchmove', this._onMouseMove, addEventOptions);
|
|
80
|
-
},
|
|
81
|
-
|
|
82
|
-
/**
|
|
83
|
-
* @private
|
|
84
|
-
*/
|
|
85
|
-
_bindEvents: function() {
|
|
86
|
-
if (this.eventsBound) {
|
|
87
|
-
// for any reason we pass here twice we do not want to bind events twice.
|
|
88
|
-
return;
|
|
89
|
-
}
|
|
90
|
-
this._onMouseDown = this._onMouseDown.bind(this);
|
|
91
|
-
this._onTouchStart = this._onTouchStart.bind(this);
|
|
92
|
-
this._onMouseMove = this._onMouseMove.bind(this);
|
|
93
|
-
this._onMouseUp = this._onMouseUp.bind(this);
|
|
94
|
-
this._onTouchEnd = this._onTouchEnd.bind(this);
|
|
95
|
-
this._onResize = this._onResize.bind(this);
|
|
96
|
-
this._onGesture = this._onGesture.bind(this);
|
|
97
|
-
this._onDrag = this._onDrag.bind(this);
|
|
98
|
-
this._onShake = this._onShake.bind(this);
|
|
99
|
-
this._onLongPress = this._onLongPress.bind(this);
|
|
100
|
-
this._onOrientationChange = this._onOrientationChange.bind(this);
|
|
101
|
-
this._onMouseWheel = this._onMouseWheel.bind(this);
|
|
102
|
-
this._onMouseOut = this._onMouseOut.bind(this);
|
|
103
|
-
this._onMouseEnter = this._onMouseEnter.bind(this);
|
|
104
|
-
this._onContextMenu = this._onContextMenu.bind(this);
|
|
105
|
-
this._onDoubleClick = this._onDoubleClick.bind(this);
|
|
106
|
-
this._onDragOver = this._onDragOver.bind(this);
|
|
107
|
-
this._onDragEnter = this._simpleEventHandler.bind(this, 'dragenter');
|
|
108
|
-
this._onDragLeave = this._simpleEventHandler.bind(this, 'dragleave');
|
|
109
|
-
this._onDrop = this._onDrop.bind(this);
|
|
110
|
-
this.eventsBound = true;
|
|
111
|
-
},
|
|
112
|
-
|
|
113
|
-
/**
|
|
114
|
-
* @private
|
|
115
|
-
* @param {Event} [e] Event object fired on Event.js gesture
|
|
116
|
-
* @param {Event} [self] Inner Event object
|
|
117
|
-
*/
|
|
118
|
-
_onGesture: function(e, self) {
|
|
119
|
-
this.__onTransformGesture && this.__onTransformGesture(e, self);
|
|
120
|
-
},
|
|
121
|
-
|
|
122
|
-
/**
|
|
123
|
-
* @private
|
|
124
|
-
* @param {Event} [e] Event object fired on Event.js drag
|
|
125
|
-
* @param {Event} [self] Inner Event object
|
|
126
|
-
*/
|
|
127
|
-
_onDrag: function(e, self) {
|
|
128
|
-
this.__onDrag && this.__onDrag(e, self);
|
|
129
|
-
},
|
|
130
|
-
|
|
131
|
-
/**
|
|
132
|
-
* @private
|
|
133
|
-
* @param {Event} [e] Event object fired on wheel event
|
|
134
|
-
*/
|
|
135
|
-
_onMouseWheel: function(e) {
|
|
136
|
-
this.__onMouseWheel(e);
|
|
137
|
-
},
|
|
138
|
-
|
|
139
|
-
/**
|
|
140
|
-
* @private
|
|
141
|
-
* @param {Event} e Event object fired on mousedown
|
|
142
|
-
*/
|
|
143
|
-
_onMouseOut: function(e) {
|
|
144
|
-
var target = this._hoveredTarget;
|
|
145
|
-
this.fire('mouse:out', { target: target, e: e });
|
|
146
|
-
this._hoveredTarget = null;
|
|
147
|
-
target && target.fire('mouseout', { e: e });
|
|
148
|
-
|
|
149
|
-
var _this = this;
|
|
150
|
-
this._hoveredTargets.forEach(function(_target){
|
|
151
|
-
_this.fire('mouse:out', { target: target, e: e });
|
|
152
|
-
_target && target.fire('mouseout', { e: e });
|
|
153
|
-
});
|
|
154
|
-
this._hoveredTargets = [];
|
|
155
|
-
},
|
|
156
|
-
|
|
157
|
-
/**
|
|
158
|
-
* @private
|
|
159
|
-
* @param {Event} e Event object fired on mouseenter
|
|
160
|
-
*/
|
|
161
|
-
_onMouseEnter: function(e) {
|
|
162
|
-
// This find target and consequent 'mouse:over' is used to
|
|
163
|
-
// clear old instances on hovered target.
|
|
164
|
-
// calling findTarget has the side effect of killing target.__corner.
|
|
165
|
-
// as a short term fix we are not firing this if we are currently transforming.
|
|
166
|
-
// as a long term fix we need to separate the action of finding a target with the
|
|
167
|
-
// side effects we added to it.
|
|
168
|
-
if (!this._currentTransform && !this.findTarget(e)) {
|
|
169
|
-
this.fire('mouse:over', { target: null, e: e });
|
|
170
|
-
this._hoveredTarget = null;
|
|
171
|
-
this._hoveredTargets = [];
|
|
172
|
-
}
|
|
173
|
-
},
|
|
174
|
-
|
|
175
|
-
/**
|
|
176
|
-
* @private
|
|
177
|
-
* @param {Event} [e] Event object fired on Event.js orientation change
|
|
178
|
-
* @param {Event} [self] Inner Event object
|
|
179
|
-
*/
|
|
180
|
-
_onOrientationChange: function(e, self) {
|
|
181
|
-
this.__onOrientationChange && this.__onOrientationChange(e, self);
|
|
182
|
-
},
|
|
183
|
-
|
|
184
|
-
/**
|
|
185
|
-
* @private
|
|
186
|
-
* @param {Event} [e] Event object fired on Event.js shake
|
|
187
|
-
* @param {Event} [self] Inner Event object
|
|
188
|
-
*/
|
|
189
|
-
_onShake: function(e, self) {
|
|
190
|
-
this.__onShake && this.__onShake(e, self);
|
|
191
|
-
},
|
|
192
|
-
|
|
193
|
-
/**
|
|
194
|
-
* @private
|
|
195
|
-
* @param {Event} [e] Event object fired on Event.js shake
|
|
196
|
-
* @param {Event} [self] Inner Event object
|
|
197
|
-
*/
|
|
198
|
-
_onLongPress: function(e, self) {
|
|
199
|
-
this.__onLongPress && this.__onLongPress(e, self);
|
|
200
|
-
},
|
|
201
|
-
|
|
202
|
-
/**
|
|
203
|
-
* prevent default to allow drop event to be fired
|
|
204
|
-
* @private
|
|
205
|
-
* @param {Event} [e] Event object fired on Event.js shake
|
|
206
|
-
*/
|
|
207
|
-
_onDragOver: function(e) {
|
|
208
|
-
e.preventDefault();
|
|
209
|
-
var target = this._simpleEventHandler('dragover', e);
|
|
210
|
-
this._fireEnterLeaveEvents(target, e);
|
|
211
|
-
},
|
|
212
|
-
|
|
213
|
-
/**
|
|
214
|
-
* `drop:before` is a an event that allow you to schedule logic
|
|
215
|
-
* before the `drop` event. Prefer `drop` event always, but if you need
|
|
216
|
-
* to run some drop-disabling logic on an event, since there is no way
|
|
217
|
-
* to handle event handlers ordering, use `drop:before`
|
|
218
|
-
* @param {Event} e
|
|
219
|
-
*/
|
|
220
|
-
_onDrop: function (e) {
|
|
221
|
-
this._simpleEventHandler('drop:before', e);
|
|
222
|
-
return this._simpleEventHandler('drop', e);
|
|
223
|
-
},
|
|
224
|
-
|
|
225
|
-
/**
|
|
226
|
-
* @private
|
|
227
|
-
* @param {Event} e Event object fired on mousedown
|
|
228
|
-
*/
|
|
229
|
-
_onContextMenu: function (e) {
|
|
230
|
-
if (this.stopContextMenu) {
|
|
231
|
-
e.stopPropagation();
|
|
232
|
-
e.preventDefault();
|
|
233
|
-
}
|
|
234
|
-
return false;
|
|
235
|
-
},
|
|
236
|
-
|
|
237
|
-
/**
|
|
238
|
-
* @private
|
|
239
|
-
* @param {Event} e Event object fired on mousedown
|
|
240
|
-
*/
|
|
241
|
-
_onDoubleClick: function (e) {
|
|
242
|
-
this._cacheTransformEventData(e);
|
|
243
|
-
this._handleEvent(e, 'dblclick');
|
|
244
|
-
this._resetTransformEventData(e);
|
|
245
|
-
},
|
|
246
|
-
|
|
247
|
-
/**
|
|
248
|
-
* Return a the id of an event.
|
|
249
|
-
* returns either the pointerId or the identifier or 0 for the mouse event
|
|
250
|
-
* @private
|
|
251
|
-
* @param {Event} evt Event object
|
|
252
|
-
*/
|
|
253
|
-
getPointerId: function(evt) {
|
|
254
|
-
var changedTouches = evt.changedTouches;
|
|
255
|
-
|
|
256
|
-
if (changedTouches) {
|
|
257
|
-
return changedTouches[0] && changedTouches[0].identifier;
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
if (this.enablePointerEvents) {
|
|
261
|
-
return evt.pointerId;
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
return -1;
|
|
265
|
-
},
|
|
266
|
-
|
|
267
|
-
/**
|
|
268
|
-
* Determines if an event has the id of the event that is considered main
|
|
269
|
-
* @private
|
|
270
|
-
* @param {evt} event Event object
|
|
271
|
-
*/
|
|
272
|
-
_isMainEvent: function(evt) {
|
|
273
|
-
if (evt.isPrimary === true) {
|
|
274
|
-
return true;
|
|
275
|
-
}
|
|
276
|
-
if (evt.isPrimary === false) {
|
|
277
|
-
return false;
|
|
278
|
-
}
|
|
279
|
-
if (evt.type === 'touchend' && evt.touches.length === 0) {
|
|
280
|
-
return true;
|
|
281
|
-
}
|
|
282
|
-
if (evt.changedTouches) {
|
|
283
|
-
return evt.changedTouches[0].identifier === this.mainTouchId;
|
|
284
|
-
}
|
|
285
|
-
return true;
|
|
286
|
-
},
|
|
287
|
-
|
|
288
|
-
/**
|
|
289
|
-
* @private
|
|
290
|
-
* @param {Event} e Event object fired on mousedown
|
|
291
|
-
*/
|
|
292
|
-
_onTouchStart: function(e) {
|
|
293
|
-
e.preventDefault();
|
|
294
|
-
if (this.mainTouchId === null) {
|
|
295
|
-
this.mainTouchId = this.getPointerId(e);
|
|
296
|
-
}
|
|
297
|
-
this.__onMouseDown(e);
|
|
298
|
-
this._resetTransformEventData();
|
|
299
|
-
var canvasElement = this.upperCanvasEl,
|
|
300
|
-
eventTypePrefix = this._getEventPrefix();
|
|
301
|
-
addListener(fabric.document, 'touchend', this._onTouchEnd, addEventOptions);
|
|
302
|
-
addListener(fabric.document, 'touchmove', this._onMouseMove, addEventOptions);
|
|
303
|
-
// Unbind mousedown to prevent double triggers from touch devices
|
|
304
|
-
removeListener(canvasElement, eventTypePrefix + 'down', this._onMouseDown);
|
|
305
|
-
},
|
|
306
|
-
|
|
307
|
-
/**
|
|
308
|
-
* @private
|
|
309
|
-
* @param {Event} e Event object fired on mousedown
|
|
310
|
-
*/
|
|
311
|
-
_onMouseDown: function (e) {
|
|
312
|
-
this.__onMouseDown(e);
|
|
313
|
-
this._resetTransformEventData();
|
|
314
|
-
var canvasElement = this.upperCanvasEl,
|
|
315
|
-
eventTypePrefix = this._getEventPrefix();
|
|
316
|
-
removeListener(canvasElement, eventTypePrefix + 'move', this._onMouseMove, addEventOptions);
|
|
317
|
-
addListener(fabric.document, eventTypePrefix + 'up', this._onMouseUp);
|
|
318
|
-
addListener(fabric.document, eventTypePrefix + 'move', this._onMouseMove, addEventOptions);
|
|
319
|
-
},
|
|
320
|
-
|
|
321
|
-
/**
|
|
322
|
-
* @private
|
|
323
|
-
* @param {Event} e Event object fired on mousedown
|
|
324
|
-
*/
|
|
325
|
-
_onTouchEnd: function(e) {
|
|
326
|
-
if (e.touches.length > 0) {
|
|
327
|
-
// if there are still touches stop here
|
|
328
|
-
return;
|
|
329
|
-
}
|
|
330
|
-
this.__onMouseUp(e);
|
|
331
|
-
this._resetTransformEventData();
|
|
332
|
-
this.mainTouchId = null;
|
|
333
|
-
var eventTypePrefix = this._getEventPrefix();
|
|
334
|
-
removeListener(fabric.document, 'touchend', this._onTouchEnd, addEventOptions);
|
|
335
|
-
removeListener(fabric.document, 'touchmove', this._onMouseMove, addEventOptions);
|
|
336
|
-
var _this = this;
|
|
337
|
-
if (this._willAddMouseDown) {
|
|
338
|
-
clearTimeout(this._willAddMouseDown);
|
|
339
|
-
}
|
|
340
|
-
this._willAddMouseDown = setTimeout(function() {
|
|
341
|
-
// Wait 400ms before rebinding mousedown to prevent double triggers
|
|
342
|
-
// from touch devices
|
|
343
|
-
addListener(_this.upperCanvasEl, eventTypePrefix + 'down', _this._onMouseDown);
|
|
344
|
-
_this._willAddMouseDown = 0;
|
|
345
|
-
}, 400);
|
|
346
|
-
},
|
|
347
|
-
|
|
348
|
-
/**
|
|
349
|
-
* @private
|
|
350
|
-
* @param {Event} e Event object fired on mouseup
|
|
351
|
-
*/
|
|
352
|
-
_onMouseUp: function (e) {
|
|
353
|
-
this.__onMouseUp(e);
|
|
354
|
-
this._resetTransformEventData();
|
|
355
|
-
var canvasElement = this.upperCanvasEl,
|
|
356
|
-
eventTypePrefix = this._getEventPrefix();
|
|
357
|
-
if (this._isMainEvent(e)) {
|
|
358
|
-
removeListener(fabric.document, eventTypePrefix + 'up', this._onMouseUp);
|
|
359
|
-
removeListener(fabric.document, eventTypePrefix + 'move', this._onMouseMove, addEventOptions);
|
|
360
|
-
addListener(canvasElement, eventTypePrefix + 'move', this._onMouseMove, addEventOptions);
|
|
361
|
-
}
|
|
362
|
-
},
|
|
363
|
-
|
|
364
|
-
/**
|
|
365
|
-
* @private
|
|
366
|
-
* @param {Event} e Event object fired on mousemove
|
|
367
|
-
*/
|
|
368
|
-
_onMouseMove: function (e) {
|
|
369
|
-
!this.allowTouchScrolling && e.preventDefault && e.preventDefault();
|
|
370
|
-
this.__onMouseMove(e);
|
|
371
|
-
},
|
|
372
|
-
|
|
373
|
-
/**
|
|
374
|
-
* @private
|
|
375
|
-
*/
|
|
376
|
-
_onResize: function () {
|
|
377
|
-
this.calcOffset();
|
|
378
|
-
},
|
|
379
|
-
|
|
380
|
-
/**
|
|
381
|
-
* Decides whether the canvas should be redrawn in mouseup and mousedown events.
|
|
382
|
-
* @private
|
|
383
|
-
* @param {Object} target
|
|
384
|
-
*/
|
|
385
|
-
_shouldRender: function(target) {
|
|
386
|
-
var activeObject = this._activeObject;
|
|
387
|
-
|
|
388
|
-
if (
|
|
389
|
-
!!activeObject !== !!target ||
|
|
390
|
-
(activeObject && target && (activeObject !== target))
|
|
391
|
-
) {
|
|
392
|
-
// this covers: switch of target, from target to no target, selection of target
|
|
393
|
-
// multiSelection with key and mouse
|
|
394
|
-
return true;
|
|
395
|
-
}
|
|
396
|
-
else if (activeObject && activeObject.isEditing) {
|
|
397
|
-
// if we mouse up/down over a editing textbox a cursor change,
|
|
398
|
-
// there is no need to re render
|
|
399
|
-
return false;
|
|
400
|
-
}
|
|
401
|
-
return false;
|
|
402
|
-
},
|
|
403
|
-
|
|
404
|
-
/**
|
|
405
|
-
* Method that defines the actions when mouse is released on canvas.
|
|
406
|
-
* The method resets the currentTransform parameters, store the image corner
|
|
407
|
-
* position in the image object and render the canvas on top.
|
|
408
|
-
* @private
|
|
409
|
-
* @param {Event} e Event object fired on mouseup
|
|
410
|
-
*/
|
|
411
|
-
__onMouseUp: function (e) {
|
|
412
|
-
var target, transform = this._currentTransform,
|
|
413
|
-
groupSelector = this._groupSelector, shouldRender = false,
|
|
414
|
-
isClick = (!groupSelector || (groupSelector.left === 0 && groupSelector.top === 0));
|
|
415
|
-
this._cacheTransformEventData(e);
|
|
416
|
-
target = this._target;
|
|
417
|
-
this._handleEvent(e, 'up:before');
|
|
418
|
-
// if right/middle click just fire events and return
|
|
419
|
-
// target undefined will make the _handleEvent search the target
|
|
420
|
-
if (checkClick(e, RIGHT_CLICK)) {
|
|
421
|
-
if (this.fireRightClick) {
|
|
422
|
-
this._handleEvent(e, 'up', RIGHT_CLICK, isClick);
|
|
423
|
-
}
|
|
424
|
-
return;
|
|
425
|
-
}
|
|
426
|
-
|
|
427
|
-
if (checkClick(e, MIDDLE_CLICK)) {
|
|
428
|
-
if (this.fireMiddleClick) {
|
|
429
|
-
this._handleEvent(e, 'up', MIDDLE_CLICK, isClick);
|
|
430
|
-
}
|
|
431
|
-
this._resetTransformEventData();
|
|
432
|
-
return;
|
|
433
|
-
}
|
|
434
|
-
|
|
435
|
-
if (this.isDrawingMode && this._isCurrentlyDrawing) {
|
|
436
|
-
this._onMouseUpInDrawingMode(e);
|
|
437
|
-
return;
|
|
438
|
-
}
|
|
439
|
-
|
|
440
|
-
if (!this._isMainEvent(e)) {
|
|
441
|
-
return;
|
|
442
|
-
}
|
|
443
|
-
if (transform) {
|
|
444
|
-
this._finalizeCurrentTransform(e);
|
|
445
|
-
shouldRender = transform.actionPerformed;
|
|
446
|
-
}
|
|
447
|
-
if (!isClick) {
|
|
448
|
-
var targetWasActive = target === this._activeObject;
|
|
449
|
-
this._maybeGroupObjects(e);
|
|
450
|
-
if (!shouldRender) {
|
|
451
|
-
shouldRender = (
|
|
452
|
-
this._shouldRender(target) ||
|
|
453
|
-
(!targetWasActive && target === this._activeObject)
|
|
454
|
-
);
|
|
455
|
-
}
|
|
456
|
-
}
|
|
457
|
-
var corner, pointer;
|
|
458
|
-
if (target) {
|
|
459
|
-
corner = target._findTargetCorner(
|
|
460
|
-
this.getPointer(e, true),
|
|
461
|
-
fabric.util.isTouchEvent(e)
|
|
462
|
-
);
|
|
463
|
-
if (target.selectable && target !== this._activeObject && target.activeOn === 'up') {
|
|
464
|
-
this.setActiveObject(target, e);
|
|
465
|
-
shouldRender = true;
|
|
466
|
-
}
|
|
467
|
-
else {
|
|
468
|
-
var control = target.controls[corner],
|
|
469
|
-
mouseUpHandler = control && control.getMouseUpHandler(e, target, control);
|
|
470
|
-
if (mouseUpHandler) {
|
|
471
|
-
pointer = this.getPointer(e);
|
|
472
|
-
mouseUpHandler(e, transform, pointer.x, pointer.y);
|
|
473
|
-
}
|
|
474
|
-
}
|
|
475
|
-
target.isMoving = false;
|
|
476
|
-
}
|
|
477
|
-
// if we are ending up a transform on a different control or a new object
|
|
478
|
-
// fire the original mouse up from the corner that started the transform
|
|
479
|
-
if (transform && (transform.target !== target || transform.corner !== corner)) {
|
|
480
|
-
var originalControl = transform.target && transform.target.controls[transform.corner],
|
|
481
|
-
originalMouseUpHandler = originalControl && originalControl.getMouseUpHandler(e, target, control);
|
|
482
|
-
pointer = pointer || this.getPointer(e);
|
|
483
|
-
originalMouseUpHandler && originalMouseUpHandler(e, transform, pointer.x, pointer.y);
|
|
484
|
-
}
|
|
485
|
-
this._setCursorFromEvent(e, target);
|
|
486
|
-
this._handleEvent(e, 'up', LEFT_CLICK, isClick);
|
|
487
|
-
this._groupSelector = null;
|
|
488
|
-
this._currentTransform = null;
|
|
489
|
-
// reset the target information about which corner is selected
|
|
490
|
-
target && (target.__corner = 0);
|
|
491
|
-
if (shouldRender) {
|
|
492
|
-
this.requestRenderAll();
|
|
493
|
-
}
|
|
494
|
-
else if (!isClick) {
|
|
495
|
-
this.renderTop();
|
|
496
|
-
}
|
|
497
|
-
},
|
|
498
|
-
|
|
499
|
-
/**
|
|
500
|
-
* @private
|
|
501
|
-
* Handle event firing for target and subtargets
|
|
502
|
-
* @param {Event} e event from mouse
|
|
503
|
-
* @param {String} eventType event to fire (up, down or move)
|
|
504
|
-
* @return {Fabric.Object} target return the the target found, for internal reasons.
|
|
505
|
-
*/
|
|
506
|
-
_simpleEventHandler: function(eventType, e) {
|
|
507
|
-
var target = this.findTarget(e),
|
|
508
|
-
targets = this.targets,
|
|
509
|
-
options = {
|
|
510
|
-
e: e,
|
|
511
|
-
target: target,
|
|
512
|
-
subTargets: targets,
|
|
513
|
-
};
|
|
514
|
-
this.fire(eventType, options);
|
|
515
|
-
target && target.fire(eventType, options);
|
|
516
|
-
if (!targets) {
|
|
517
|
-
return target;
|
|
518
|
-
}
|
|
519
|
-
for (var i = 0; i < targets.length; i++) {
|
|
520
|
-
targets[i].fire(eventType, options);
|
|
521
|
-
}
|
|
522
|
-
return target;
|
|
523
|
-
},
|
|
524
|
-
|
|
525
|
-
/**
|
|
526
|
-
* @private
|
|
527
|
-
* Handle event firing for target and subtargets
|
|
528
|
-
* @param {Event} e event from mouse
|
|
529
|
-
* @param {String} eventType event to fire (up, down or move)
|
|
530
|
-
* @param {fabric.Object} targetObj receiving event
|
|
531
|
-
* @param {Number} [button] button used in the event 1 = left, 2 = middle, 3 = right
|
|
532
|
-
* @param {Boolean} isClick for left button only, indicates that the mouse up happened without move.
|
|
533
|
-
*/
|
|
534
|
-
_handleEvent: function(e, eventType, button, isClick) {
|
|
535
|
-
var target = this._target,
|
|
536
|
-
targets = this.targets || [],
|
|
537
|
-
options = {
|
|
538
|
-
e: e,
|
|
539
|
-
target: target,
|
|
540
|
-
subTargets: targets,
|
|
541
|
-
button: button || LEFT_CLICK,
|
|
542
|
-
isClick: isClick || false,
|
|
543
|
-
pointer: this._pointer,
|
|
544
|
-
absolutePointer: this._absolutePointer,
|
|
545
|
-
transform: this._currentTransform
|
|
546
|
-
};
|
|
547
|
-
if (eventType === 'up') {
|
|
548
|
-
options.currentTarget = this.findTarget(e);
|
|
549
|
-
options.currentSubTargets = this.targets;
|
|
550
|
-
}
|
|
551
|
-
this.fire('mouse:' + eventType, options);
|
|
552
|
-
target && target.fire('mouse' + eventType, options);
|
|
553
|
-
for (var i = 0; i < targets.length; i++) {
|
|
554
|
-
targets[i].fire('mouse' + eventType, options);
|
|
555
|
-
}
|
|
556
|
-
},
|
|
557
|
-
|
|
558
|
-
/**
|
|
559
|
-
* @private
|
|
560
|
-
* @param {Event} e send the mouse event that generate the finalize down, so it can be used in the event
|
|
561
|
-
*/
|
|
562
|
-
_finalizeCurrentTransform: function(e) {
|
|
563
|
-
|
|
564
|
-
var transform = this._currentTransform,
|
|
565
|
-
target = transform.target,
|
|
566
|
-
options = {
|
|
567
|
-
e: e,
|
|
568
|
-
target: target,
|
|
569
|
-
transform: transform,
|
|
570
|
-
action: transform.action,
|
|
571
|
-
};
|
|
572
|
-
|
|
573
|
-
if (target._scaling) {
|
|
574
|
-
target._scaling = false;
|
|
575
|
-
}
|
|
576
|
-
|
|
577
|
-
target.setCoords();
|
|
578
|
-
|
|
579
|
-
if (transform.actionPerformed || (this.stateful && target.hasStateChanged())) {
|
|
580
|
-
this._fire('modified', options);
|
|
581
|
-
}
|
|
582
|
-
},
|
|
583
|
-
|
|
584
|
-
/**
|
|
585
|
-
* @private
|
|
586
|
-
* @param {Event} e Event object fired on mousedown
|
|
587
|
-
*/
|
|
588
|
-
_onMouseDownInDrawingMode: function(e) {
|
|
589
|
-
this._isCurrentlyDrawing = true;
|
|
590
|
-
if (this.getActiveObject()) {
|
|
591
|
-
this.discardActiveObject(e).requestRenderAll();
|
|
592
|
-
}
|
|
593
|
-
var pointer = this.getPointer(e);
|
|
594
|
-
this.freeDrawingBrush.onMouseDown(pointer, { e: e, pointer: pointer });
|
|
595
|
-
this._handleEvent(e, 'down');
|
|
596
|
-
},
|
|
597
|
-
|
|
598
|
-
/**
|
|
599
|
-
* @private
|
|
600
|
-
* @param {Event} e Event object fired on mousemove
|
|
601
|
-
*/
|
|
602
|
-
_onMouseMoveInDrawingMode: function(e) {
|
|
603
|
-
if (this._isCurrentlyDrawing) {
|
|
604
|
-
var pointer = this.getPointer(e);
|
|
605
|
-
this.freeDrawingBrush.onMouseMove(pointer, { e: e, pointer: pointer });
|
|
606
|
-
}
|
|
607
|
-
this.setCursor(this.freeDrawingCursor);
|
|
608
|
-
this._handleEvent(e, 'move');
|
|
609
|
-
},
|
|
610
|
-
|
|
611
|
-
/**
|
|
612
|
-
* @private
|
|
613
|
-
* @param {Event} e Event object fired on mouseup
|
|
614
|
-
*/
|
|
615
|
-
_onMouseUpInDrawingMode: function(e) {
|
|
616
|
-
var pointer = this.getPointer(e);
|
|
617
|
-
this._isCurrentlyDrawing = this.freeDrawingBrush.onMouseUp({ e: e, pointer: pointer });
|
|
618
|
-
this._handleEvent(e, 'up');
|
|
619
|
-
},
|
|
620
|
-
|
|
621
|
-
/**
|
|
622
|
-
* Method that defines the actions when mouse is clicked on canvas.
|
|
623
|
-
* The method inits the currentTransform parameters and renders all the
|
|
624
|
-
* canvas so the current image can be placed on the top canvas and the rest
|
|
625
|
-
* in on the container one.
|
|
626
|
-
* @private
|
|
627
|
-
* @param {Event} e Event object fired on mousedown
|
|
628
|
-
*/
|
|
629
|
-
__onMouseDown: function (e) {
|
|
630
|
-
this._cacheTransformEventData(e);
|
|
631
|
-
this._handleEvent(e, 'down:before');
|
|
632
|
-
var target = this._target;
|
|
633
|
-
// if right click just fire events
|
|
634
|
-
if (checkClick(e, RIGHT_CLICK)) {
|
|
635
|
-
if (this.fireRightClick) {
|
|
636
|
-
this._handleEvent(e, 'down', RIGHT_CLICK);
|
|
637
|
-
}
|
|
638
|
-
return;
|
|
639
|
-
}
|
|
640
|
-
|
|
641
|
-
if (checkClick(e, MIDDLE_CLICK)) {
|
|
642
|
-
if (this.fireMiddleClick) {
|
|
643
|
-
this._handleEvent(e, 'down', MIDDLE_CLICK);
|
|
644
|
-
}
|
|
645
|
-
return;
|
|
646
|
-
}
|
|
647
|
-
|
|
648
|
-
if (this.isDrawingMode) {
|
|
649
|
-
this._onMouseDownInDrawingMode(e);
|
|
650
|
-
return;
|
|
651
|
-
}
|
|
652
|
-
|
|
653
|
-
if (!this._isMainEvent(e)) {
|
|
654
|
-
return;
|
|
655
|
-
}
|
|
656
|
-
|
|
657
|
-
// ignore if some object is being transformed at this moment
|
|
658
|
-
if (this._currentTransform) {
|
|
659
|
-
return;
|
|
660
|
-
}
|
|
661
|
-
|
|
662
|
-
var pointer = this._pointer;
|
|
663
|
-
// save pointer for check in __onMouseUp event
|
|
664
|
-
this._previousPointer = pointer;
|
|
665
|
-
var shouldRender = this._shouldRender(target),
|
|
666
|
-
shouldGroup = this._shouldGroup(e, target);
|
|
667
|
-
if (this._shouldClearSelection(e, target)) {
|
|
668
|
-
this.discardActiveObject(e);
|
|
669
|
-
}
|
|
670
|
-
else if (shouldGroup) {
|
|
671
|
-
this._handleGrouping(e, target);
|
|
672
|
-
target = this._activeObject;
|
|
673
|
-
}
|
|
674
|
-
|
|
675
|
-
if (this.selection && (!target ||
|
|
676
|
-
(!target.selectable && !target.isEditing && target !== this._activeObject))) {
|
|
677
|
-
this._groupSelector = {
|
|
678
|
-
ex: this._absolutePointer.x,
|
|
679
|
-
ey: this._absolutePointer.y,
|
|
680
|
-
top: 0,
|
|
681
|
-
left: 0
|
|
682
|
-
};
|
|
683
|
-
}
|
|
684
|
-
|
|
685
|
-
if (target) {
|
|
686
|
-
var alreadySelected = target === this._activeObject;
|
|
687
|
-
if (target.selectable && target.activeOn === 'down') {
|
|
688
|
-
this.setActiveObject(target, e);
|
|
689
|
-
}
|
|
690
|
-
var corner = target._findTargetCorner(
|
|
691
|
-
this.getPointer(e, true),
|
|
692
|
-
fabric.util.isTouchEvent(e)
|
|
693
|
-
);
|
|
694
|
-
target.__corner = corner;
|
|
695
|
-
if (target === this._activeObject && (corner || !shouldGroup)) {
|
|
696
|
-
this._setupCurrentTransform(e, target, alreadySelected);
|
|
697
|
-
var control = target.controls[corner],
|
|
698
|
-
pointer = this.getPointer(e),
|
|
699
|
-
mouseDownHandler = control && control.getMouseDownHandler(e, target, control);
|
|
700
|
-
if (mouseDownHandler) {
|
|
701
|
-
mouseDownHandler(e, this._currentTransform, pointer.x, pointer.y);
|
|
702
|
-
}
|
|
703
|
-
}
|
|
704
|
-
}
|
|
705
|
-
this._handleEvent(e, 'down');
|
|
706
|
-
// we must renderAll so that we update the visuals
|
|
707
|
-
(shouldRender || shouldGroup) && this.requestRenderAll();
|
|
708
|
-
},
|
|
709
|
-
|
|
710
|
-
/**
|
|
711
|
-
* reset cache form common information needed during event processing
|
|
712
|
-
* @private
|
|
713
|
-
*/
|
|
714
|
-
_resetTransformEventData: function() {
|
|
715
|
-
this._target = null;
|
|
716
|
-
this._pointer = null;
|
|
717
|
-
this._absolutePointer = null;
|
|
718
|
-
},
|
|
719
|
-
|
|
720
|
-
/**
|
|
721
|
-
* Cache common information needed during event processing
|
|
722
|
-
* @private
|
|
723
|
-
* @param {Event} e Event object fired on event
|
|
724
|
-
*/
|
|
725
|
-
_cacheTransformEventData: function(e) {
|
|
726
|
-
// reset in order to avoid stale caching
|
|
727
|
-
this._resetTransformEventData();
|
|
728
|
-
this._pointer = this.getPointer(e, true);
|
|
729
|
-
this._absolutePointer = this.restorePointerVpt(this._pointer);
|
|
730
|
-
this._target = this._currentTransform ? this._currentTransform.target : this.findTarget(e) || null;
|
|
731
|
-
},
|
|
732
|
-
|
|
733
|
-
/**
|
|
734
|
-
* @private
|
|
735
|
-
*/
|
|
736
|
-
_beforeTransform: function(e) {
|
|
737
|
-
var t = this._currentTransform;
|
|
738
|
-
this.stateful && t.target.saveState();
|
|
739
|
-
this.fire('before:transform', {
|
|
740
|
-
e: e,
|
|
741
|
-
transform: t,
|
|
742
|
-
});
|
|
743
|
-
},
|
|
744
|
-
|
|
745
|
-
/**
|
|
746
|
-
* Method that defines the actions when mouse is hovering the canvas.
|
|
747
|
-
* The currentTransform parameter will define whether the user is rotating/scaling/translating
|
|
748
|
-
* an image or neither of them (only hovering). A group selection is also possible and would cancel
|
|
749
|
-
* all any other type of action.
|
|
750
|
-
* In case of an image transformation only the top canvas will be rendered.
|
|
751
|
-
* @private
|
|
752
|
-
* @param {Event} e Event object fired on mousemove
|
|
753
|
-
*/
|
|
754
|
-
__onMouseMove: function (e) {
|
|
755
|
-
this._handleEvent(e, 'move:before');
|
|
756
|
-
this._cacheTransformEventData(e);
|
|
757
|
-
var target, pointer;
|
|
758
|
-
|
|
759
|
-
if (this.isDrawingMode) {
|
|
760
|
-
this._onMouseMoveInDrawingMode(e);
|
|
761
|
-
return;
|
|
762
|
-
}
|
|
763
|
-
|
|
764
|
-
if (!this._isMainEvent(e)) {
|
|
765
|
-
return;
|
|
766
|
-
}
|
|
767
|
-
|
|
768
|
-
var groupSelector = this._groupSelector;
|
|
769
|
-
|
|
770
|
-
// We initially clicked in an empty area, so we draw a box for multiple selection
|
|
771
|
-
if (groupSelector) {
|
|
772
|
-
pointer = this._absolutePointer;
|
|
773
|
-
|
|
774
|
-
groupSelector.left = pointer.x - groupSelector.ex;
|
|
775
|
-
groupSelector.top = pointer.y - groupSelector.ey;
|
|
776
|
-
|
|
777
|
-
this.renderTop();
|
|
778
|
-
}
|
|
779
|
-
else if (!this._currentTransform) {
|
|
780
|
-
target = this.findTarget(e) || null;
|
|
781
|
-
this._setCursorFromEvent(e, target);
|
|
782
|
-
this._fireOverOutEvents(target, e);
|
|
783
|
-
}
|
|
784
|
-
else {
|
|
785
|
-
this._transformObject(e);
|
|
786
|
-
}
|
|
787
|
-
this._handleEvent(e, 'move');
|
|
788
|
-
this._resetTransformEventData();
|
|
789
|
-
},
|
|
790
|
-
|
|
791
|
-
/**
|
|
792
|
-
* Manage the mouseout, mouseover events for the fabric object on the canvas
|
|
793
|
-
* @param {Fabric.Object} target the target where the target from the mousemove event
|
|
794
|
-
* @param {Event} e Event object fired on mousemove
|
|
795
|
-
* @private
|
|
796
|
-
*/
|
|
797
|
-
_fireOverOutEvents: function(target, e) {
|
|
798
|
-
var _hoveredTarget = this._hoveredTarget,
|
|
799
|
-
_hoveredTargets = this._hoveredTargets, targets = this.targets,
|
|
800
|
-
length = Math.max(_hoveredTargets.length, targets.length);
|
|
801
|
-
|
|
802
|
-
this.fireSyntheticInOutEvents(target, e, {
|
|
803
|
-
oldTarget: _hoveredTarget,
|
|
804
|
-
evtOut: 'mouseout',
|
|
805
|
-
canvasEvtOut: 'mouse:out',
|
|
806
|
-
evtIn: 'mouseover',
|
|
807
|
-
canvasEvtIn: 'mouse:over',
|
|
808
|
-
});
|
|
809
|
-
for (var i = 0; i < length; i++){
|
|
810
|
-
this.fireSyntheticInOutEvents(targets[i], e, {
|
|
811
|
-
oldTarget: _hoveredTargets[i],
|
|
812
|
-
evtOut: 'mouseout',
|
|
813
|
-
evtIn: 'mouseover',
|
|
814
|
-
});
|
|
815
|
-
}
|
|
816
|
-
this._hoveredTarget = target;
|
|
817
|
-
this._hoveredTargets = this.targets.concat();
|
|
818
|
-
},
|
|
819
|
-
|
|
820
|
-
/**
|
|
821
|
-
* Manage the dragEnter, dragLeave events for the fabric objects on the canvas
|
|
822
|
-
* @param {Fabric.Object} target the target where the target from the onDrag event
|
|
823
|
-
* @param {Event} e Event object fired on ondrag
|
|
824
|
-
* @private
|
|
825
|
-
*/
|
|
826
|
-
_fireEnterLeaveEvents: function(target, e) {
|
|
827
|
-
var _draggedoverTarget = this._draggedoverTarget,
|
|
828
|
-
_hoveredTargets = this._hoveredTargets, targets = this.targets,
|
|
829
|
-
length = Math.max(_hoveredTargets.length, targets.length);
|
|
830
|
-
|
|
831
|
-
this.fireSyntheticInOutEvents(target, e, {
|
|
832
|
-
oldTarget: _draggedoverTarget,
|
|
833
|
-
evtOut: 'dragleave',
|
|
834
|
-
evtIn: 'dragenter',
|
|
835
|
-
});
|
|
836
|
-
for (var i = 0; i < length; i++) {
|
|
837
|
-
this.fireSyntheticInOutEvents(targets[i], e, {
|
|
838
|
-
oldTarget: _hoveredTargets[i],
|
|
839
|
-
evtOut: 'dragleave',
|
|
840
|
-
evtIn: 'dragenter',
|
|
841
|
-
});
|
|
842
|
-
}
|
|
843
|
-
this._draggedoverTarget = target;
|
|
844
|
-
},
|
|
845
|
-
|
|
846
|
-
/**
|
|
847
|
-
* Manage the synthetic in/out events for the fabric objects on the canvas
|
|
848
|
-
* @param {Fabric.Object} target the target where the target from the supported events
|
|
849
|
-
* @param {Event} e Event object fired
|
|
850
|
-
* @param {Object} config configuration for the function to work
|
|
851
|
-
* @param {String} config.targetName property on the canvas where the old target is stored
|
|
852
|
-
* @param {String} [config.canvasEvtOut] name of the event to fire at canvas level for out
|
|
853
|
-
* @param {String} config.evtOut name of the event to fire for out
|
|
854
|
-
* @param {String} [config.canvasEvtIn] name of the event to fire at canvas level for in
|
|
855
|
-
* @param {String} config.evtIn name of the event to fire for in
|
|
856
|
-
* @private
|
|
857
|
-
*/
|
|
858
|
-
fireSyntheticInOutEvents: function(target, e, config) {
|
|
859
|
-
var inOpt, outOpt, oldTarget = config.oldTarget, outFires, inFires,
|
|
860
|
-
targetChanged = oldTarget !== target, canvasEvtIn = config.canvasEvtIn, canvasEvtOut = config.canvasEvtOut;
|
|
861
|
-
if (targetChanged) {
|
|
862
|
-
inOpt = { e: e, target: target, previousTarget: oldTarget };
|
|
863
|
-
outOpt = { e: e, target: oldTarget, nextTarget: target };
|
|
864
|
-
}
|
|
865
|
-
inFires = target && targetChanged;
|
|
866
|
-
outFires = oldTarget && targetChanged;
|
|
867
|
-
if (outFires) {
|
|
868
|
-
canvasEvtOut && this.fire(canvasEvtOut, outOpt);
|
|
869
|
-
oldTarget.fire(config.evtOut, outOpt);
|
|
870
|
-
}
|
|
871
|
-
if (inFires) {
|
|
872
|
-
canvasEvtIn && this.fire(canvasEvtIn, inOpt);
|
|
873
|
-
target.fire(config.evtIn, inOpt);
|
|
874
|
-
}
|
|
875
|
-
},
|
|
876
|
-
|
|
877
|
-
/**
|
|
878
|
-
* Method that defines actions when an Event Mouse Wheel
|
|
879
|
-
* @param {Event} e Event object fired on mouseup
|
|
880
|
-
*/
|
|
881
|
-
__onMouseWheel: function(e) {
|
|
882
|
-
this._cacheTransformEventData(e);
|
|
883
|
-
this._handleEvent(e, 'wheel');
|
|
884
|
-
this._resetTransformEventData();
|
|
885
|
-
},
|
|
886
|
-
|
|
887
|
-
/**
|
|
888
|
-
* @private
|
|
889
|
-
* @param {Event} e Event fired on mousemove
|
|
890
|
-
*/
|
|
891
|
-
_transformObject: function(e) {
|
|
892
|
-
var pointer = this.getPointer(e),
|
|
893
|
-
transform = this._currentTransform;
|
|
894
|
-
|
|
895
|
-
transform.reset = false;
|
|
896
|
-
transform.shiftKey = e.shiftKey;
|
|
897
|
-
transform.altKey = e[this.centeredKey];
|
|
898
|
-
|
|
899
|
-
this._performTransformAction(e, transform, pointer);
|
|
900
|
-
transform.actionPerformed && this.requestRenderAll();
|
|
901
|
-
},
|
|
902
|
-
|
|
903
|
-
/**
|
|
904
|
-
* @private
|
|
905
|
-
*/
|
|
906
|
-
_performTransformAction: function(e, transform, pointer) {
|
|
907
|
-
var x = pointer.x,
|
|
908
|
-
y = pointer.y,
|
|
909
|
-
action = transform.action,
|
|
910
|
-
actionPerformed = false,
|
|
911
|
-
actionHandler = transform.actionHandler;
|
|
912
|
-
// this object could be created from the function in the control handlers
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
if (actionHandler) {
|
|
916
|
-
actionPerformed = actionHandler(e, transform, x, y);
|
|
917
|
-
}
|
|
918
|
-
if (action === 'drag' && actionPerformed) {
|
|
919
|
-
transform.target.isMoving = true;
|
|
920
|
-
this.setCursor(transform.target.moveCursor || this.moveCursor);
|
|
921
|
-
}
|
|
922
|
-
transform.actionPerformed = transform.actionPerformed || actionPerformed;
|
|
923
|
-
},
|
|
924
|
-
|
|
925
|
-
/**
|
|
926
|
-
* @private
|
|
927
|
-
*/
|
|
928
|
-
_fire: fabric.controlsUtils.fireEvent,
|
|
929
|
-
|
|
930
|
-
/**
|
|
931
|
-
* Sets the cursor depending on where the canvas is being hovered.
|
|
932
|
-
* Note: very buggy in Opera
|
|
933
|
-
* @param {Event} e Event object
|
|
934
|
-
* @param {Object} target Object that the mouse is hovering, if so.
|
|
935
|
-
*/
|
|
936
|
-
_setCursorFromEvent: function (e, target) {
|
|
937
|
-
if (!target) {
|
|
938
|
-
this.setCursor(this.defaultCursor);
|
|
939
|
-
return false;
|
|
940
|
-
}
|
|
941
|
-
var hoverCursor = target.hoverCursor || this.hoverCursor,
|
|
942
|
-
activeSelection = this._activeObject && this._activeObject.type === 'activeSelection' ?
|
|
943
|
-
this._activeObject : null,
|
|
944
|
-
// only show proper corner when group selection is not active
|
|
945
|
-
corner = (!activeSelection || !activeSelection.contains(target))
|
|
946
|
-
// here we call findTargetCorner always with undefined for the touch parameter.
|
|
947
|
-
// we assume that if you are using a cursor you do not need to interact with
|
|
948
|
-
// the bigger touch area.
|
|
949
|
-
&& target._findTargetCorner(this.getPointer(e, true));
|
|
950
|
-
|
|
951
|
-
if (!corner) {
|
|
952
|
-
if (target.subTargetCheck){
|
|
953
|
-
// hoverCursor should come from top-most subTarget,
|
|
954
|
-
// so we walk the array backwards
|
|
955
|
-
this.targets.concat().reverse().map(function(_target){
|
|
956
|
-
hoverCursor = _target.hoverCursor || hoverCursor;
|
|
957
|
-
});
|
|
958
|
-
}
|
|
959
|
-
this.setCursor(hoverCursor);
|
|
960
|
-
}
|
|
961
|
-
else {
|
|
962
|
-
this.setCursor(this.getCornerCursor(corner, target, e));
|
|
963
|
-
}
|
|
964
|
-
},
|
|
965
|
-
|
|
966
|
-
/**
|
|
967
|
-
* @private
|
|
968
|
-
*/
|
|
969
|
-
getCornerCursor: function(corner, target, e) {
|
|
970
|
-
var control = target.controls[corner];
|
|
971
|
-
return control.cursorStyleHandler(e, control, target);
|
|
972
|
-
}
|
|
973
|
-
});
|
|
974
|
-
})();
|