UNPKG

fabric

Version:

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

2 lines 3.01 kB
import{_defineProperty as e}from"../../../_virtual/_@oxc-project_runtime@0.122.0/helpers/defineProperty.min.mjs";import{Point as t}from"../../Point.min.mjs";import{invertTransform as n}from"../../util/misc/matrix.min.mjs";import{DraggableTextDelegate as r}from"./DraggableTextDelegate.min.mjs";import{ITextKeyBehavior as i}from"./ITextKeyBehavior.min.mjs";const a=e=>!!e.button;var o=class extends i{constructor(...t){super(...t),e(this,`draggableTextDelegate`,void 0)}initBehavior(){this.on(`mousedown`,this._mouseDownHandler),this.on(`mouseup`,this.mouseUpHandler),this.on(`mousedblclick`,this.doubleClickHandler),this.on(`mousetripleclick`,this.tripleClickHandler),this.draggableTextDelegate=new r(this),super.initBehavior()}shouldStartDragging(){return this.draggableTextDelegate.isActive()}onDragStart(e){return this.draggableTextDelegate.onDragStart(e)}canDrop(e){return this.draggableTextDelegate.canDrop(e)}doubleClickHandler(e){this.isEditing&&(this.selectWord(this.getSelectionStartFromPointer(e.e)),this.renderCursorOrSelection())}tripleClickHandler(e){this.isEditing&&(this.selectLine(this.getSelectionStartFromPointer(e.e)),this.renderCursorOrSelection())}_mouseDownHandler({e,alreadySelected:t}){this.canvas&&this.editable&&!a(e)&&!this.getActiveControl()&&(this.draggableTextDelegate.start(e)||(this.canvas.textEditingManager.register(this),t&&(this.inCompositionMode=!1,this.setCursorByClick(e)),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.selectionStart===this.selectionEnd&&this.abortCursorAnimation(),this.renderCursorOrSelection()),this.selected||(this.selected=t||this.isEditing)))}mouseUpHandler({e,transform:t}){let n=this.draggableTextDelegate.end(e);if(this.canvas){this.canvas.textEditingManager.unregister(this);let e=this.canvas._activeObject;if(e&&e!==this)return}!this.editable||this.group&&!this.group.interactive||t&&t.actionPerformed||a(e)||n||this.selected&&!this.getActiveControl()&&(this.enterEditing(e),this.selectionStart===this.selectionEnd?this.initDelayedCursor(!0):this.renderCursorOrSelection())}setCursorByClick(e){let t=this.getSelectionStartFromPointer(e),n=this.selectionStart,r=this.selectionEnd;e.shiftKey?this.setSelectionStartEndWithShift(n,r,t):(this.selectionStart=t,this.selectionEnd=t),this.isEditing&&(this._fireSelectionChanged(),this._updateTextarea())}getSelectionStartFromPointer(e){let r=this.canvas.getScenePoint(e).transform(n(this.calcTransformMatrix())).add(new t(-this._getLeftOffset(),-this._getTopOffset())),i=0,a=0,o=0;for(let e=0;e<this._textLines.length&&i<=r.y;e++)i+=this.getHeightOfLine(e),o=e,e>0&&(a+=this._textLines[e-1].length+this.missingNewlineOffset(e-1));let s=Math.abs(this._getLineLeftOffset(o)),c=this._textLines[o].length,l=this.__charBounds[o];for(let e=0;e<c;e++){let t=s+l[e].kernedWidth;if(r.x<=t){Math.abs(r.x-t)<=Math.abs(r.x-s)&&a++;break}s=t,a++}return Math.min(this.flipX?c-a:a,this._text.length)}};export{o as ITextClickBehavior}; //# sourceMappingURL=ITextClickBehavior.min.mjs.map