fabric
Version:
Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.
3 lines (2 loc) • 3.02 kB
JavaScript
import{defineProperty as t}from"../../../_virtual/_rollupPluginBabelHelpers.min.mjs";import{Point as e}from"../../Point.min.mjs";import{invertTransform as i}from"../../util/misc/matrix.min.mjs";import{DraggableTextDelegate as s}from"./DraggableTextDelegate.min.mjs";import{ITextKeyBehavior as r}from"./ITextKeyBehavior.min.mjs";const n=t=>!!t.button;class o extends r{constructor(){super(...arguments),t(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 s(this),super.initBehavior()}shouldStartDragging(){return this.draggableTextDelegate.isActive()}onDragStart(t){return this.draggableTextDelegate.onDragStart(t)}canDrop(t){return this.draggableTextDelegate.canDrop(t)}doubleClickHandler(t){this.isEditing&&(this.selectWord(this.getSelectionStartFromPointer(t.e)),this.renderCursorOrSelection())}tripleClickHandler(t){this.isEditing&&(this.selectLine(this.getSelectionStartFromPointer(t.e)),this.renderCursorOrSelection())}_mouseDownHandler(t){let{e:e,alreadySelected:i}=t;this.canvas&&this.editable&&!n(e)&&!this.getActiveControl()&&(this.draggableTextDelegate.start(e)||(this.canvas.textEditingManager.register(this),i&&(this.inCompositionMode=!1,this.setCursorByClick(e)),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.selectionStart===this.selectionEnd&&this.abortCursorAnimation(),this.renderCursorOrSelection()),this.selected||(this.selected=i||this.isEditing)))}mouseUpHandler(t){let{e:e,transform:i}=t;const s=this.draggableTextDelegate.end(e);if(this.canvas){this.canvas.textEditingManager.unregister(this);const t=this.canvas._activeObject;if(t&&t!==this)return}!this.editable||this.group&&!this.group.interactive||i&&i.actionPerformed||n(e)||s||this.selected&&!this.getActiveControl()&&(this.enterEditing(e),this.selectionStart===this.selectionEnd?this.initDelayedCursor(!0):this.renderCursorOrSelection())}setCursorByClick(t){const e=this.getSelectionStartFromPointer(t),i=this.selectionStart,s=this.selectionEnd;t.shiftKey?this.setSelectionStartEndWithShift(i,s,e):(this.selectionStart=e,this.selectionEnd=e),this.isEditing&&(this._fireSelectionChanged(),this._updateTextarea())}getSelectionStartFromPointer(t){const s=this.canvas.getScenePoint(t).transform(i(this.calcTransformMatrix())).add(new e(-this._getLeftOffset(),-this._getTopOffset()));let r=0,n=0,o=0;for(let t=0;t<this._textLines.length&&r<=s.y;t++)r+=this.getHeightOfLine(t),o=t,t>0&&(n+=this._textLines[t-1].length+this.missingNewlineOffset(t-1));let a=Math.abs(this._getLineLeftOffset(o));const h=this._textLines[o].length,l=this.__charBounds[o];for(let t=0;t<h;t++){const e=a+l[t].kernedWidth;if(s.x<=e){Math.abs(s.x-e)<=Math.abs(s.x-a)&&n++;break}a=e,n++}return Math.min(this.flipX?h-n:n,this._text.length)}}export{o as ITextClickBehavior};
//# sourceMappingURL=ITextClickBehavior.min.mjs.map