UNPKG

fabric

Version:

Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.

1 lines 4.66 kB
{"version":3,"file":"index.mjs","names":[],"sources":["../../extensions/westures_integration/index.ts"],"sourcesContent":["import wes from 'westures';\nimport { type Canvas, type CanvasEvents, type XY, util } from 'fabric';\n\ntype PinchEventData = {\n centroid: XY;\n event: PointerEvent;\n phase: string;\n type: 'pinch';\n scale: number;\n target: HTMLElement;\n};\n\ntype RotateEventData = {\n centroid: XY;\n event: PointerEvent;\n phase: string;\n type: 'rotate';\n rotation: number;\n target: HTMLElement;\n};\n\ntype TapEventData = {\n centroid: XY;\n event: PointerEvent;\n phase: string;\n type: 'tap';\n target: HTMLElement;\n};\n\n/**\n * Register this handler on canvas.on('pinch', pinchEventHandler);\n * To get an out of the box functionality for the pinch to zoom\n */\nexport function pinchEventHandler(\n this: Canvas,\n { scale, target, scenePoint }: CanvasEvents['pinch'],\n) {\n if (target && this.getActiveObject() === target) {\n // if we are pinching on the active object, let's scale it\n target.scaleX *= scale;\n target.scaleY *= scale;\n } else {\n this.zoomToPoint(scenePoint, this.getZoom() * scale);\n }\n}\n\nexport function rotateEventHandler(\n this: Canvas,\n { rotation, target }: CanvasEvents['rotate'],\n) {\n if (target && this.getActiveObject() === target) {\n target.rotate(target.angle + util.radiansToDegrees(rotation));\n }\n}\n\nexport const tripleTapGesture = (canvas: Canvas) => {\n return new wes.Tap(\n canvas.upperCanvasEl,\n ({ event }: TapEventData) => {\n canvas.fireEventFromPointerEvent(\n event,\n 'mouse:tripleclick',\n 'mousetripleclick',\n undefined,\n );\n event.preventDefault();\n },\n {\n numTaps: 3,\n maxRetain: 400,\n },\n );\n};\n\nexport const doubleTapGesture = (canvas: Canvas) => {\n return new wes.Tap(\n canvas.upperCanvasEl,\n ({ event }: TapEventData) => {\n canvas.fireEventFromPointerEvent(\n event,\n 'mouse:dblclick',\n 'mousedblclick',\n undefined,\n );\n event.preventDefault();\n },\n {\n numTaps: 2,\n maxRetain: 300,\n },\n );\n};\n\nexport const pinchGesture = (canvas: Canvas) => {\n return new wes.Pinch(\n canvas.upperCanvasEl,\n ({ scale, event }: PinchEventData) => {\n canvas.fireEventFromPointerEvent(event, 'pinch', 'pinch', { scale });\n },\n );\n};\n\nexport const rotateGesture = (canvas: Canvas) => {\n return new wes.Rotate(\n canvas.upperCanvasEl,\n ({ rotation, event }: RotateEventData) => {\n canvas.fireEventFromPointerEvent(event, 'rotate', 'rotate', { rotation });\n },\n );\n};\n\n/**\n * Add a serie of gestures recognition on the canvas\n */\nexport const addGestures = (canvas: Canvas) => {\n const canvasRegion = new wes.Region(canvas.upperCanvasEl);\n canvas.addOrRemove(\n (\n el: HTMLElement,\n ...args: Parameters<HTMLElement['removeEventListener']>\n ) => el.removeEventListener(...args),\n );\n canvasRegion.addGesture(rotateGesture(canvas));\n canvasRegion.addGesture(pinchGesture(canvas));\n canvasRegion.addGesture(tripleTapGesture(canvas));\n canvasRegion.addGesture(doubleTapGesture(canvas));\n // add back events, excluding the click one\n canvas.addOrRemove(\n (el: HTMLElement, ...args: Parameters<HTMLElement['addEventListener']>) =>\n el.addEventListener(...args),\n true,\n );\n};\n"],"mappings":";;;;;;;AAiCA,SAAgB,kBAEd,EAAE,OAAO,QAAQ,cACjB;AACA,KAAI,UAAU,KAAK,iBAAiB,KAAK,QAAQ;AAE/C,SAAO,UAAU;AACjB,SAAO,UAAU;OAEjB,MAAK,YAAY,YAAY,KAAK,SAAS,GAAG,MAAM;;AAIxD,SAAgB,mBAEd,EAAE,UAAU,UACZ;AACA,KAAI,UAAU,KAAK,iBAAiB,KAAK,OACvC,QAAO,OAAO,OAAO,QAAQ,KAAK,iBAAiB,SAAS,CAAC;;AAIjE,MAAa,oBAAoB,WAAmB;AAClD,QAAO,IAAI,IAAI,IACb,OAAO,gBACN,EAAE,YAA0B;AAC3B,SAAO,0BACL,OACA,qBACA,oBACA,KAAA,EACD;AACD,QAAM,gBAAgB;IAExB;EACE,SAAS;EACT,WAAW;EACZ,CACF;;AAGH,MAAa,oBAAoB,WAAmB;AAClD,QAAO,IAAI,IAAI,IACb,OAAO,gBACN,EAAE,YAA0B;AAC3B,SAAO,0BACL,OACA,kBACA,iBACA,KAAA,EACD;AACD,QAAM,gBAAgB;IAExB;EACE,SAAS;EACT,WAAW;EACZ,CACF;;AAGH,MAAa,gBAAgB,WAAmB;AAC9C,QAAO,IAAI,IAAI,MACb,OAAO,gBACN,EAAE,OAAO,YAA4B;AACpC,SAAO,0BAA0B,OAAO,SAAS,SAAS,EAAE,OAAO,CAAC;GAEvE;;AAGH,MAAa,iBAAiB,WAAmB;AAC/C,QAAO,IAAI,IAAI,OACb,OAAO,gBACN,EAAE,UAAU,YAA6B;AACxC,SAAO,0BAA0B,OAAO,UAAU,UAAU,EAAE,UAAU,CAAC;GAE5E;;;;;AAMH,MAAa,eAAe,WAAmB;CAC7C,MAAM,eAAe,IAAI,IAAI,OAAO,OAAO,cAAc;AACzD,QAAO,aAEH,IACA,GAAG,SACA,GAAG,oBAAoB,GAAG,KAAK,CACrC;AACD,cAAa,WAAW,cAAc,OAAO,CAAC;AAC9C,cAAa,WAAW,aAAa,OAAO,CAAC;AAC7C,cAAa,WAAW,iBAAiB,OAAO,CAAC;AACjD,cAAa,WAAW,iBAAiB,OAAO,CAAC;AAEjD,QAAO,aACJ,IAAiB,GAAG,SACnB,GAAG,iBAAiB,GAAG,KAAK,EAC9B,KACD"}