@erase2d/fabric 1.1.1 → 1.1.3
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/dist/fabric/src/ClippingGroup.js +5 -11
- package/dist/fabric/src/ClippingGroup.js.map +1 -1
- package/dist/fabric/src/ErasingEffect.js +1 -1
- package/dist/fabric/src/ErasingEffect.js.map +1 -1
- package/dist/src/ClippingGroup.d.ts +1 -2
- package/dist/src/ClippingGroup.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { defineProperty as _defineProperty, inherits as _inherits, createClass as _createClass, classCallCheck as _classCallCheck, callSuper as _callSuper, objectSpread2 as _objectSpread2, assertThisInitialized as _assertThisInitialized
|
|
1
|
+
import { defineProperty as _defineProperty, inherits as _inherits, createClass as _createClass, classCallCheck as _classCallCheck, callSuper as _callSuper, objectSpread2 as _objectSpread2, assertThisInitialized as _assertThisInitialized } from '../../_virtual/_rollupPluginBabelHelpers.js';
|
|
2
2
|
import { classRegistry, LayoutManager, FixedLayout, Path, Group } from 'fabric';
|
|
3
3
|
|
|
4
4
|
var ClippingGroup = /*#__PURE__*/function (_Group) {
|
|
@@ -7,6 +7,10 @@ var ClippingGroup = /*#__PURE__*/function (_Group) {
|
|
|
7
7
|
var _this;
|
|
8
8
|
_classCallCheck(this, ClippingGroup);
|
|
9
9
|
_this = _callSuper(this, ClippingGroup, [objects, _objectSpread2({
|
|
10
|
+
originX: 'center',
|
|
11
|
+
originY: 'center',
|
|
12
|
+
left: 0,
|
|
13
|
+
top: 0,
|
|
10
14
|
layoutManager: new LayoutManager(new FixedLayout())
|
|
11
15
|
}, options)]);
|
|
12
16
|
_defineProperty(_assertThisInitialized(_this), "blockErasing", false);
|
|
@@ -32,16 +36,6 @@ var ClippingGroup = /*#__PURE__*/function (_Group) {
|
|
|
32
36
|
object.render(ctx);
|
|
33
37
|
});
|
|
34
38
|
}
|
|
35
|
-
}], [{
|
|
36
|
-
key: "getDefaults",
|
|
37
|
-
value: function getDefaults() {
|
|
38
|
-
return _objectSpread2(_objectSpread2({}, _get(_getPrototypeOf(ClippingGroup), "getDefaults", this).call(this)), {}, {
|
|
39
|
-
originX: 'center',
|
|
40
|
-
originY: 'center',
|
|
41
|
-
left: 0,
|
|
42
|
-
top: 0
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
39
|
}]);
|
|
46
40
|
return ClippingGroup;
|
|
47
41
|
}(Group);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClippingGroup.js","sources":["../../../src/ClippingGroup.ts"],"sourcesContent":["import {\n
|
|
1
|
+
{"version":3,"file":"ClippingGroup.js","sources":["../../../src/ClippingGroup.ts"],"sourcesContent":["import {\n FabricObject,\n FixedLayout,\n Group,\n GroupProps,\n LayoutManager,\n Path,\n classRegistry,\n} from 'fabric';\n\nexport class ClippingGroup extends Group {\n static type = 'clipping';\n\n private blockErasing = false;\n\n constructor(objects: FabricObject[], options: Partial<GroupProps>) {\n super(objects, {\n originX: 'center',\n originY: 'center',\n left: 0,\n top: 0,\n layoutManager: new LayoutManager(new FixedLayout()),\n ...options,\n });\n }\n\n drawObject(ctx: CanvasRenderingContext2D) {\n const paths: Path[] = [];\n const objects: FabricObject[] = [];\n this._objects.forEach((object) =>\n (object instanceof Path ? paths : objects).push(object)\n );\n\n ctx.save();\n ctx.fillStyle = 'black';\n ctx.fillRect(-this.width / 2, -this.height / 2, this.width, this.height);\n ctx.restore();\n\n !this.blockErasing &&\n paths.forEach((path) => {\n path.render(ctx);\n });\n\n objects.forEach((object) => {\n object.globalCompositeOperation = object.inverted\n ? 'destination-out'\n : 'source-in';\n object.render(ctx);\n });\n }\n}\n\nclassRegistry.setClass(ClippingGroup);\n"],"names":["ClippingGroup","_Group","_inherits","objects","options","_this","_classCallCheck","_callSuper","_objectSpread","originX","originY","left","top","layoutManager","LayoutManager","FixedLayout","_defineProperty","_assertThisInitialized","_createClass","key","value","drawObject","ctx","paths","_objects","forEach","object","Path","push","save","fillStyle","fillRect","width","height","restore","blockErasing","path","render","globalCompositeOperation","inverted","Group","classRegistry","setClass"],"mappings":";;;AAUaA,IAAAA,aAAa,0BAAAC,MAAA,EAAA;EAAAC,SAAA,CAAAF,aAAA,EAAAC,MAAA,CAAA,CAAA;AAKxB,EAAA,SAAAD,aAAYG,CAAAA,OAAuB,EAAEC,OAA4B,EAAE;AAAA,IAAA,IAAAC,KAAA,CAAA;AAAAC,IAAAA,eAAA,OAAAN,aAAA,CAAA,CAAA;AACjEK,IAAAA,KAAA,GAAAE,UAAA,CAAA,IAAA,EAAAP,aAAA,EAAMG,CAAAA,OAAO,EAAAK,cAAA,CAAA;AACXC,MAAAA,OAAO,EAAE,QAAQ;AACjBC,MAAAA,OAAO,EAAE,QAAQ;AACjBC,MAAAA,IAAI,EAAE,CAAC;AACPC,MAAAA,GAAG,EAAE,CAAC;AACNC,MAAAA,aAAa,EAAE,IAAIC,aAAa,CAAC,IAAIC,WAAW,EAAE,CAAA;AAAC,KAAA,EAChDX,OAAO,CAAA,CAAA,CAAA,CAAA;AACTY,IAAAA,eAAA,CAAAC,sBAAA,CAAAZ,KAAA,mBAVkB,KAAK,CAAA,CAAA;AAAA,IAAA,OAAAA,KAAA,CAAA;AAW5B,GAAA;AAACa,EAAAA,YAAA,CAAAlB,aAAA,EAAA,CAAA;IAAAmB,GAAA,EAAA,YAAA;AAAAC,IAAAA,KAAA,EAED,SAAAC,UAAWC,CAAAA,GAA6B,EAAE;MACxC,IAAMC,KAAa,GAAG,EAAE,CAAA;MACxB,IAAMpB,OAAuB,GAAG,EAAE,CAAA;AAClC,MAAA,IAAI,CAACqB,QAAQ,CAACC,OAAO,CAAC,UAACC,MAAM,EAAA;AAAA,QAAA,OAC3B,CAACA,MAAM,YAAYC,IAAI,GAAGJ,KAAK,GAAGpB,OAAO,EAAEyB,IAAI,CAACF,MAAM,CAAC,CAAA;AAAA,OACzD,CAAC,CAAA;MAEDJ,GAAG,CAACO,IAAI,EAAE,CAAA;MACVP,GAAG,CAACQ,SAAS,GAAG,OAAO,CAAA;MACvBR,GAAG,CAACS,QAAQ,CAAC,CAAC,IAAI,CAACC,KAAK,GAAG,CAAC,EAAE,CAAC,IAAI,CAACC,MAAM,GAAG,CAAC,EAAE,IAAI,CAACD,KAAK,EAAE,IAAI,CAACC,MAAM,CAAC,CAAA;MACxEX,GAAG,CAACY,OAAO,EAAE,CAAA;MAEb,CAAC,IAAI,CAACC,YAAY,IAChBZ,KAAK,CAACE,OAAO,CAAC,UAACW,IAAI,EAAK;AACtBA,QAAAA,IAAI,CAACC,MAAM,CAACf,GAAG,CAAC,CAAA;AAClB,OAAC,CAAC,CAAA;AAEJnB,MAAAA,OAAO,CAACsB,OAAO,CAAC,UAACC,MAAM,EAAK;QAC1BA,MAAM,CAACY,wBAAwB,GAAGZ,MAAM,CAACa,QAAQ,GAC7C,iBAAiB,GACjB,WAAW,CAAA;AACfb,QAAAA,MAAM,CAACW,MAAM,CAACf,GAAG,CAAC,CAAA;AACpB,OAAC,CAAC,CAAA;AACJ,KAAA;AAAC,GAAA,CAAA,CAAA,CAAA;AAAA,EAAA,OAAAtB,aAAA,CAAA;AAAA,CAAA,CAvCgCwC,KAAK,EAAA;AAwCvCxB,eAAA,CAxCYhB,aAAa,EAAA,MAAA,EACV,UAAU,CAAA,CAAA;AAyC1ByC,aAAa,CAACC,QAAQ,CAAC1C,aAAa,CAAC;;;;"}
|
|
@@ -103,7 +103,7 @@ function draw(ctx, _ref, _ref2) {
|
|
|
103
103
|
}
|
|
104
104
|
if (entry.opacity) {
|
|
105
105
|
var _entry$object$parent;
|
|
106
|
-
entry.object.opacity = opacity;
|
|
106
|
+
entry.object.opacity = entry.opacity;
|
|
107
107
|
(_entry$object$parent = entry.object.parent) === null || _entry$object$parent === void 0 || _entry$object$parent.set('dirty', true);
|
|
108
108
|
} else if (entry.clipPath) {
|
|
109
109
|
entry.clipPath['blockErasing'] = false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ErasingEffect.js","sources":["../../../src/ErasingEffect.ts"],"sourcesContent":["import { Canvas, FabricObject, Group } from 'fabric';\nimport { ClippingGroup } from './ClippingGroup';\n\nfunction walk(objects: FabricObject[]): FabricObject[] {\n return objects.flatMap((object) => {\n if (!object.erasable || object.isNotVisible()) {\n return [];\n } else if (object instanceof Group && object.erasable === 'deep') {\n return walk(object.getObjects());\n } else {\n return [object];\n }\n });\n}\n\nfunction drawCanvas(\n ctx: CanvasRenderingContext2D,\n canvas: Canvas,\n objects: FabricObject[]\n) {\n canvas.clearContext(ctx);\n\n ctx.imageSmoothingEnabled = canvas.imageSmoothingEnabled;\n ctx.imageSmoothingQuality = 'high';\n // @ts-expect-error node-canvas stuff\n ctx.patternQuality = 'best';\n\n canvas._renderBackground(ctx);\n\n ctx.save();\n ctx.transform(...canvas.viewportTransform);\n objects.forEach((object) => object.render(ctx));\n ctx.restore();\n\n const clipPath = canvas.clipPath;\n if (clipPath) {\n // fabric crap\n clipPath._set('canvas', canvas);\n clipPath.shouldCache();\n clipPath._transformDone = true;\n clipPath.renderCache({ forClipping: true });\n canvas.drawClipPathOnCanvas(ctx, clipPath as any);\n }\n\n canvas._renderOverlay(ctx);\n}\n\n/**\n * Prepare the pattern for the erasing brush\n * This pattern will be drawn on the top context after clipping the main context,\n * achieving a visual effect of erasing only erasable objects.\n *\n * This is designed to support erasing a collection with both erasable and non-erasable objects while maintaining object stacking.\\\n * Iterates over collections to allow nested selective erasing.\\\n * Prepares objects before rendering the pattern brush.\\\n * If brush is **NOT** inverted render all non-erasable objects.\\\n * If brush is inverted render all objects, erasable objects without their eraser.\n * This will render the erased parts as if they were not erased in the first place, achieving an undo effect.\n *\n * Caveat:\n * Does not support erasing effects of shadows\n *\n */\nexport function draw(\n ctx: CanvasRenderingContext2D,\n { inverted, opacity }: { inverted: boolean; opacity: number },\n {\n canvas,\n objects = canvas._objectsToRender || canvas._objects,\n background = canvas.backgroundImage,\n overlay = canvas.overlayImage,\n }: {\n canvas: Canvas;\n objects?: FabricObject[];\n background?: FabricObject;\n overlay?: FabricObject;\n }\n) {\n // prepare tree\n const alpha = 1 - opacity;\n const restore = walk([\n ...objects,\n ...([background, overlay] as FabricObject[]).filter((d) => !!d),\n ]).map((object) => {\n if (!inverted) {\n // render only non-erasable objects\n const opacity = object.opacity;\n object.opacity *= alpha;\n object.parent?.set('dirty', true);\n return { object, opacity };\n } else if (object.clipPath instanceof ClippingGroup) {\n // render all objects without eraser\n object.clipPath['blockErasing'] = true;\n object.clipPath.set('dirty', true);\n object.set('dirty', true);\n return { object, clipPath: object.clipPath };\n }\n });\n\n // draw\n drawCanvas(ctx, canvas, objects);\n\n // restore\n restore.forEach((entry) => {\n if (!entry) {\n return;\n }\n if (entry.opacity) {\n entry.object.opacity = opacity;\n entry.object.parent?.set('dirty', true);\n } else if (entry.clipPath) {\n entry.clipPath['blockErasing'] = false;\n entry.clipPath.set('dirty', true);\n entry.object.set('dirty', true);\n }\n });\n}\n"],"names":["walk","objects","flatMap","object","erasable","isNotVisible","Group","getObjects","drawCanvas","ctx","canvas","clearContext","imageSmoothingEnabled","imageSmoothingQuality","patternQuality","_renderBackground","save","transform","apply","_toConsumableArray","viewportTransform","forEach","render","restore","clipPath","_set","shouldCache","_transformDone","renderCache","forClipping","drawClipPathOnCanvas","_renderOverlay","draw","_ref","_ref2","inverted","opacity","_ref2$objects","_objectsToRender","_objects","_ref2$background","background","backgroundImage","_ref2$overlay","overlay","overlayImage","alpha","concat","filter","d","map","_object$parent","parent","set","ClippingGroup","entry","_entry$object$parent"],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ErasingEffect.js","sources":["../../../src/ErasingEffect.ts"],"sourcesContent":["import { Canvas, FabricObject, Group } from 'fabric';\nimport { ClippingGroup } from './ClippingGroup';\n\nfunction walk(objects: FabricObject[]): FabricObject[] {\n return objects.flatMap((object) => {\n if (!object.erasable || object.isNotVisible()) {\n return [];\n } else if (object instanceof Group && object.erasable === 'deep') {\n return walk(object.getObjects());\n } else {\n return [object];\n }\n });\n}\n\nfunction drawCanvas(\n ctx: CanvasRenderingContext2D,\n canvas: Canvas,\n objects: FabricObject[]\n) {\n canvas.clearContext(ctx);\n\n ctx.imageSmoothingEnabled = canvas.imageSmoothingEnabled;\n ctx.imageSmoothingQuality = 'high';\n // @ts-expect-error node-canvas stuff\n ctx.patternQuality = 'best';\n\n canvas._renderBackground(ctx);\n\n ctx.save();\n ctx.transform(...canvas.viewportTransform);\n objects.forEach((object) => object.render(ctx));\n ctx.restore();\n\n const clipPath = canvas.clipPath;\n if (clipPath) {\n // fabric crap\n clipPath._set('canvas', canvas);\n clipPath.shouldCache();\n clipPath._transformDone = true;\n clipPath.renderCache({ forClipping: true });\n canvas.drawClipPathOnCanvas(ctx, clipPath as any);\n }\n\n canvas._renderOverlay(ctx);\n}\n\n/**\n * Prepare the pattern for the erasing brush\n * This pattern will be drawn on the top context after clipping the main context,\n * achieving a visual effect of erasing only erasable objects.\n *\n * This is designed to support erasing a collection with both erasable and non-erasable objects while maintaining object stacking.\\\n * Iterates over collections to allow nested selective erasing.\\\n * Prepares objects before rendering the pattern brush.\\\n * If brush is **NOT** inverted render all non-erasable objects.\\\n * If brush is inverted render all objects, erasable objects without their eraser.\n * This will render the erased parts as if they were not erased in the first place, achieving an undo effect.\n *\n * Caveat:\n * Does not support erasing effects of shadows\n *\n */\nexport function draw(\n ctx: CanvasRenderingContext2D,\n { inverted, opacity }: { inverted: boolean; opacity: number },\n {\n canvas,\n objects = canvas._objectsToRender || canvas._objects,\n background = canvas.backgroundImage,\n overlay = canvas.overlayImage,\n }: {\n canvas: Canvas;\n objects?: FabricObject[];\n background?: FabricObject;\n overlay?: FabricObject;\n }\n) {\n // prepare tree\n const alpha = 1 - opacity;\n const restore = walk([\n ...objects,\n ...([background, overlay] as FabricObject[]).filter((d) => !!d),\n ]).map((object) => {\n if (!inverted) {\n // render only non-erasable objects\n const opacity = object.opacity;\n object.opacity *= alpha;\n object.parent?.set('dirty', true);\n return { object, opacity };\n } else if (object.clipPath instanceof ClippingGroup) {\n // render all objects without eraser\n object.clipPath['blockErasing'] = true;\n object.clipPath.set('dirty', true);\n object.set('dirty', true);\n return { object, clipPath: object.clipPath };\n }\n });\n\n // draw\n drawCanvas(ctx, canvas, objects);\n\n // restore\n restore.forEach((entry) => {\n if (!entry) {\n return;\n }\n if (entry.opacity) {\n entry.object.opacity = entry.opacity;\n entry.object.parent?.set('dirty', true);\n } else if (entry.clipPath) {\n entry.clipPath['blockErasing'] = false;\n entry.clipPath.set('dirty', true);\n entry.object.set('dirty', true);\n }\n });\n}\n"],"names":["walk","objects","flatMap","object","erasable","isNotVisible","Group","getObjects","drawCanvas","ctx","canvas","clearContext","imageSmoothingEnabled","imageSmoothingQuality","patternQuality","_renderBackground","save","transform","apply","_toConsumableArray","viewportTransform","forEach","render","restore","clipPath","_set","shouldCache","_transformDone","renderCache","forClipping","drawClipPathOnCanvas","_renderOverlay","draw","_ref","_ref2","inverted","opacity","_ref2$objects","_objectsToRender","_objects","_ref2$background","background","backgroundImage","_ref2$overlay","overlay","overlayImage","alpha","concat","filter","d","map","_object$parent","parent","set","ClippingGroup","entry","_entry$object$parent"],"mappings":"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"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { FabricObject, Group, GroupProps } from 'fabric';
|
|
2
2
|
export declare class ClippingGroup extends Group {
|
|
3
3
|
static type: string;
|
|
4
|
-
static getDefaults(): Record<string, any>;
|
|
5
4
|
private blockErasing;
|
|
6
5
|
constructor(objects: FabricObject[], options: Partial<GroupProps>);
|
|
7
6
|
drawObject(ctx: CanvasRenderingContext2D): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClippingGroup.d.ts","sourceRoot":"","sources":["../../src/ClippingGroup.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"ClippingGroup.d.ts","sourceRoot":"","sources":["../../src/ClippingGroup.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EAEZ,KAAK,EACL,UAAU,EAIX,MAAM,QAAQ,CAAC;AAEhB,qBAAa,aAAc,SAAQ,KAAK;IACtC,MAAM,CAAC,IAAI,SAAc;IAEzB,OAAO,CAAC,YAAY,CAAS;gBAEjB,OAAO,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC;IAWjE,UAAU,CAAC,GAAG,EAAE,wBAAwB;CAwBzC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@erase2d/fabric",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.3",
|
|
4
4
|
"description": "Fabric.js erase2d bindings",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"scripts": {
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
"fabric"
|
|
28
28
|
],
|
|
29
29
|
"peerDependencies": {
|
|
30
|
-
"fabric": "^6.0.0-
|
|
30
|
+
"fabric": "^6.0.0-rc2"
|
|
31
31
|
},
|
|
32
32
|
"peerDependenciesMeta": {
|
|
33
33
|
"fabric": {
|