1+ /*eslint no-unused-vars: 0*/
2+
3+ import FabricCanvasTool from './fabrictool'
4+
5+ const fabric = require ( 'fabric' ) . fabric ;
6+
7+ class Arrow extends FabricCanvasTool {
8+
9+ configureCanvas ( props ) {
10+ let canvas = this . _canvas ;
11+ canvas . isDrawingMode = canvas . selection = false ;
12+ canvas . forEachObject ( ( o ) => o . selectable = o . evented = false ) ;
13+ this . _width = props . lineWidth ;
14+ this . _color = props . lineColor ;
15+ }
16+
17+ doMouseDown ( o ) {
18+ this . isDown = true ;
19+ let canvas = this . _canvas ;
20+ var pointer = canvas . getPointer ( o . e ) ;
21+ var points = [ pointer . x , pointer . y , pointer . x , pointer . y ] ;
22+ this . line = new fabric . Line ( points , {
23+ strokeWidth : this . _width ,
24+ fill : this . _color ,
25+ stroke : this . _color ,
26+ originX : 'center' ,
27+ originY : 'center' ,
28+ selectable : false ,
29+ evented : false
30+ } ) ;
31+
32+ this . head = new fabric . Triangle ( {
33+ fill : this . _color ,
34+ left : pointer . x ,
35+ top : pointer . y ,
36+ originX : 'center' ,
37+ originY : 'center' ,
38+ height : 3 * this . _width ,
39+ width : 3 * this . _width ,
40+ selectable : false ,
41+ evented : false ,
42+ angle : 90
43+ } ) ;
44+
45+ canvas . add ( this . line ) ;
46+ canvas . add ( this . head ) ;
47+ }
48+
49+ doMouseMove ( o ) {
50+ if ( ! this . isDown ) return ;
51+ let canvas = this . _canvas ;
52+ var pointer = canvas . getPointer ( o . e ) ;
53+ this . line . set ( { x2 : pointer . x , y2 : pointer . y } ) ;
54+ this . line . setCoords ( ) ;
55+
56+ let x_delta = pointer . x - this . line . x1 ;
57+ let y_delta = pointer . y - this . line . y1 ;
58+
59+ this . head . set ( {
60+ left : pointer . x ,
61+ top : pointer . y ,
62+ angle : 90 + Math . atan2 ( y_delta , x_delta ) * 180 / Math . PI
63+ } ) ;
64+
65+ canvas . renderAll ( ) ;
66+ }
67+
68+ doMouseUp ( o ) {
69+ this . isDown = false ;
70+ let canvas = this . _canvas ;
71+
72+ canvas . remove ( this . line ) ;
73+ canvas . remove ( this . head ) ;
74+ let arrow = new fabric . Group ( [ this . line , this . head ] ) ;
75+ canvas . add ( arrow ) ;
76+ }
77+
78+ doMouseOut ( o ) {
79+ this . isDown = false ;
80+ }
81+ }
82+
83+ export default Arrow ;
0 commit comments