plotboilerplate 1.12.10 → 1.16.0

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.
Files changed (213) hide show
  1. package/README.md +5 -1
  2. package/changelog.md +50 -0
  3. package/dist/index.esm.js +999 -510
  4. package/dist/index.esm.js.map +1 -1
  5. package/dist/index.esm.min.js +1 -1
  6. package/dist/index.esm.min.js.map +1 -1
  7. package/dist/plotboilerplate.browser.min.js +1 -1
  8. package/dist/plotboilerplate.browser.min.js.map +1 -1
  9. package/dist/plotboilerplate.js +1013 -509
  10. package/dist/plotboilerplate.min.js +1 -1
  11. package/package.json +1 -1
  12. package/src/cjs/BezierPath.d.ts +45 -2
  13. package/src/cjs/BezierPath.js +114 -18
  14. package/src/cjs/BezierPath.js.map +1 -1
  15. package/src/cjs/Circle.d.ts +25 -10
  16. package/src/cjs/Circle.js +38 -33
  17. package/src/cjs/Circle.js.map +1 -1
  18. package/src/cjs/CircleSector.d.ts +27 -13
  19. package/src/cjs/CircleSector.js +38 -23
  20. package/src/cjs/CircleSector.js.map +1 -1
  21. package/src/cjs/CubicBezierCurve.d.ts +17 -1
  22. package/src/cjs/CubicBezierCurve.js +78 -79
  23. package/src/cjs/CubicBezierCurve.js.map +1 -1
  24. package/src/cjs/KeyHandler.d.ts +10 -3
  25. package/src/cjs/KeyHandler.js +28 -23
  26. package/src/cjs/KeyHandler.js.map +1 -1
  27. package/src/cjs/Line.d.ts +2 -1
  28. package/src/cjs/Line.js +19 -18
  29. package/src/cjs/Line.js.map +1 -1
  30. package/src/cjs/MouseHandler.js +43 -53
  31. package/src/cjs/MouseHandler.js.map +1 -1
  32. package/src/cjs/PBImage.d.ts +16 -1
  33. package/src/cjs/PBImage.js +13 -3
  34. package/src/cjs/PBImage.js.map +1 -1
  35. package/src/cjs/PBText.d.ts +130 -0
  36. package/src/cjs/PBText.js +76 -0
  37. package/src/cjs/PBText.js.map +1 -0
  38. package/src/cjs/PlotBoilerplate.d.ts +2 -1
  39. package/src/cjs/PlotBoilerplate.js +44 -16
  40. package/src/cjs/PlotBoilerplate.js.map +1 -1
  41. package/src/cjs/Polygon.d.ts +37 -1
  42. package/src/cjs/Polygon.js +131 -54
  43. package/src/cjs/Polygon.js.map +1 -1
  44. package/src/cjs/Triangle.d.ts +16 -1
  45. package/src/cjs/Triangle.js +50 -54
  46. package/src/cjs/Triangle.js.map +1 -1
  47. package/src/cjs/VEllipse.d.ts +16 -1
  48. package/src/cjs/VEllipse.js +25 -12
  49. package/src/cjs/VEllipse.js.map +1 -1
  50. package/src/cjs/VEllipseSector.d.ts +15 -1
  51. package/src/cjs/VEllipseSector.js +11 -1
  52. package/src/cjs/VEllipseSector.js.map +1 -1
  53. package/src/cjs/Vector.d.ts +3 -1
  54. package/src/cjs/Vector.js +32 -36
  55. package/src/cjs/Vector.js.map +1 -1
  56. package/src/cjs/VertTuple.d.ts +15 -1
  57. package/src/cjs/VertTuple.js +14 -19
  58. package/src/cjs/VertTuple.js.map +1 -1
  59. package/src/cjs/Vertex.d.ts +66 -4
  60. package/src/cjs/Vertex.js +99 -17
  61. package/src/cjs/Vertex.js.map +1 -1
  62. package/src/cjs/VertexListeners.d.ts +12 -8
  63. package/src/cjs/VertexListeners.js +18 -25
  64. package/src/cjs/VertexListeners.js.map +1 -1
  65. package/src/cjs/draw.d.ts +30 -2
  66. package/src/cjs/draw.js +51 -6
  67. package/src/cjs/draw.js.map +1 -1
  68. package/src/cjs/drawgl.d.ts +29 -2
  69. package/src/cjs/drawgl.js +21 -4
  70. package/src/cjs/drawgl.js.map +1 -1
  71. package/src/cjs/drawutilssvg.d.ts +25 -7
  72. package/src/cjs/drawutilssvg.js +62 -14
  73. package/src/cjs/drawutilssvg.js.map +1 -1
  74. package/src/cjs/entry.js +1 -0
  75. package/src/cjs/index.d.ts +1 -0
  76. package/src/cjs/index.js +1 -0
  77. package/src/cjs/index.js.map +1 -1
  78. package/src/cjs/interfaces/DrawLib.d.ts +27 -6
  79. package/src/cjs/interfaces/DrawLib.js +3 -0
  80. package/src/cjs/interfaces/DrawLib.js.map +1 -1
  81. package/src/cjs/interfaces/core.d.ts +9 -1
  82. package/src/cjs/interfaces/core.js +1 -0
  83. package/src/cjs/interfaces/core.js.map +1 -1
  84. package/src/cjs/utils/creategui.js +1 -1
  85. package/src/cjs/utils/findInVertexArray.d.ts +19 -0
  86. package/src/cjs/utils/findInVertexArray.js +29 -0
  87. package/src/cjs/utils/findInVertexArray.js.map +1 -0
  88. package/src/cjs/utils/helpers/BezierPathInteractionHelper.d.ts +15 -0
  89. package/src/cjs/utils/helpers/BezierPathInteractionHelper.js +55 -28
  90. package/src/cjs/utils/helpers/BezierPathInteractionHelper.js.map +1 -1
  91. package/src/cjs/utils/io/DndFileHandler.d.ts +63 -0
  92. package/src/cjs/utils/io/DndFileHandler.js +112 -0
  93. package/src/cjs/utils/io/DndFileHandler.js.map +1 -0
  94. package/src/cjs/utils/io/FileDrop.d.ts +98 -0
  95. package/src/cjs/utils/io/FileDrop.js +142 -0
  96. package/src/cjs/utils/io/FileDrop.js.map +1 -0
  97. package/src/esm/BezierPath.d.ts +45 -2
  98. package/src/esm/BezierPath.js +114 -18
  99. package/src/esm/BezierPath.js.map +1 -1
  100. package/src/esm/Circle.d.ts +25 -10
  101. package/src/esm/Circle.js +38 -33
  102. package/src/esm/Circle.js.map +1 -1
  103. package/src/esm/CircleSector.d.ts +27 -13
  104. package/src/esm/CircleSector.js +38 -23
  105. package/src/esm/CircleSector.js.map +1 -1
  106. package/src/esm/CubicBezierCurve.d.ts +17 -1
  107. package/src/esm/CubicBezierCurve.js +78 -79
  108. package/src/esm/CubicBezierCurve.js.map +1 -1
  109. package/src/esm/KeyHandler.d.ts +10 -3
  110. package/src/esm/KeyHandler.js +28 -23
  111. package/src/esm/KeyHandler.js.map +1 -1
  112. package/src/esm/Line.d.ts +2 -1
  113. package/src/esm/Line.js +19 -18
  114. package/src/esm/Line.js.map +1 -1
  115. package/src/esm/MouseHandler.js +43 -53
  116. package/src/esm/MouseHandler.js.map +1 -1
  117. package/src/esm/PBImage.d.ts +16 -1
  118. package/src/esm/PBImage.js +13 -3
  119. package/src/esm/PBImage.js.map +1 -1
  120. package/src/esm/PBText.d.ts +130 -0
  121. package/src/esm/PBText.js +71 -0
  122. package/src/esm/PBText.js.map +1 -0
  123. package/src/esm/PlotBoilerplate.d.ts +2 -1
  124. package/src/esm/PlotBoilerplate.js +44 -16
  125. package/src/esm/PlotBoilerplate.js.map +1 -1
  126. package/src/esm/Polygon.d.ts +37 -1
  127. package/src/esm/Polygon.js +131 -54
  128. package/src/esm/Polygon.js.map +1 -1
  129. package/src/esm/Triangle.d.ts +16 -1
  130. package/src/esm/Triangle.js +50 -54
  131. package/src/esm/Triangle.js.map +1 -1
  132. package/src/esm/VEllipse.d.ts +16 -1
  133. package/src/esm/VEllipse.js +25 -12
  134. package/src/esm/VEllipse.js.map +1 -1
  135. package/src/esm/VEllipseSector.d.ts +15 -1
  136. package/src/esm/VEllipseSector.js +11 -1
  137. package/src/esm/VEllipseSector.js.map +1 -1
  138. package/src/esm/Vector.d.ts +3 -1
  139. package/src/esm/Vector.js +32 -36
  140. package/src/esm/Vector.js.map +1 -1
  141. package/src/esm/VertTuple.d.ts +15 -1
  142. package/src/esm/VertTuple.js +14 -19
  143. package/src/esm/VertTuple.js.map +1 -1
  144. package/src/esm/Vertex.d.ts +66 -4
  145. package/src/esm/Vertex.js +99 -17
  146. package/src/esm/Vertex.js.map +1 -1
  147. package/src/esm/VertexListeners.d.ts +12 -8
  148. package/src/esm/VertexListeners.js +18 -25
  149. package/src/esm/VertexListeners.js.map +1 -1
  150. package/src/esm/draw.d.ts +30 -2
  151. package/src/esm/draw.js +51 -6
  152. package/src/esm/draw.js.map +1 -1
  153. package/src/esm/drawgl.d.ts +29 -2
  154. package/src/esm/drawgl.js +21 -4
  155. package/src/esm/drawgl.js.map +1 -1
  156. package/src/esm/drawutilssvg.d.ts +25 -7
  157. package/src/esm/drawutilssvg.js +62 -14
  158. package/src/esm/drawutilssvg.js.map +1 -1
  159. package/src/esm/entry.js +1 -0
  160. package/src/esm/index.d.ts +1 -0
  161. package/src/esm/index.js +1 -0
  162. package/src/esm/index.js.map +1 -1
  163. package/src/esm/interfaces/DrawLib.d.ts +27 -6
  164. package/src/esm/interfaces/DrawLib.js +3 -0
  165. package/src/esm/interfaces/DrawLib.js.map +1 -1
  166. package/src/esm/interfaces/core.d.ts +9 -1
  167. package/src/esm/interfaces/core.js +1 -0
  168. package/src/esm/interfaces/core.js.map +1 -1
  169. package/src/esm/utils/findInVertexArray.d.ts +19 -0
  170. package/src/esm/utils/findInVertexArray.js +25 -0
  171. package/src/esm/utils/findInVertexArray.js.map +1 -0
  172. package/src/esm/utils/helpers/BezierPathInteractionHelper.d.ts +15 -0
  173. package/src/esm/utils/helpers/BezierPathInteractionHelper.js +54 -28
  174. package/src/esm/utils/helpers/BezierPathInteractionHelper.js.map +1 -1
  175. package/src/esm/utils/io/DndFileHandler.d.ts +63 -0
  176. package/src/esm/utils/io/DndFileHandler.js +106 -0
  177. package/src/esm/utils/io/DndFileHandler.js.map +1 -0
  178. package/src/esm/utils/io/FileDrop.d.ts +98 -0
  179. package/src/esm/utils/io/FileDrop.js +136 -0
  180. package/src/esm/utils/io/FileDrop.js.map +1 -0
  181. package/src/ts/BezierPath.ts +133 -16
  182. package/src/ts/Circle.ts +213 -200
  183. package/src/ts/CircleSector.ts +171 -141
  184. package/src/ts/CubicBezierCurve.ts +777 -810
  185. package/src/ts/KeyHandler.ts +221 -212
  186. package/src/ts/Line.ts +77 -80
  187. package/src/ts/MouseHandler.ts +356 -368
  188. package/src/ts/PBImage.ts +81 -68
  189. package/src/ts/PBText.ts +166 -0
  190. package/src/ts/PlotBoilerplate.ts +48 -20
  191. package/src/ts/Polygon.ts +519 -451
  192. package/src/ts/Triangle.ts +484 -489
  193. package/src/ts/VEllipse.ts +36 -11
  194. package/src/ts/VEllipseSector.ts +20 -1
  195. package/src/ts/Vector.ts +164 -160
  196. package/src/ts/VertTuple.ts +333 -338
  197. package/src/ts/Vertex.ts +117 -16
  198. package/src/ts/VertexListeners.ts +248 -266
  199. package/src/ts/draw.ts +71 -8
  200. package/src/ts/drawgl.ts +48 -8
  201. package/src/ts/drawutilssvg.ts +94 -17
  202. package/src/ts/index.ts +1 -0
  203. package/src/ts/interfaces/DrawLib.ts +30 -4
  204. package/src/ts/interfaces/core.ts +9 -0
  205. package/src/ts/utils/findInVertexArray.ts +28 -0
  206. package/src/ts/utils/helpers/BezierPathInteractionHelper.ts +61 -30
  207. package/src/ts/utils/io/FileDrop.ts +178 -0
  208. package/dist/plotboilerplate.browser.min.js.LICENSE.txt +0 -8
  209. package/src/ts/utils/algorithms/clearPolygonDuplicateVertices.ts~ +0 -5
  210. package/src/ts/utils/algorithms/findPolygonSelfIntersections.ts~ +0 -45
  211. package/src/ts/utils/algorithms/sh-tmp.ts~ +0 -59
  212. package/src/ts/utils/algorithms/splitPolygonToNonIntersecting.ts~ +0 -113
  213. package/src/ts/utils/algorithms/sutherlandHodgman.ts~ +0 -88
@@ -16,300 +16,282 @@ import { Vertex } from "./Vertex";
16
16
  import { XMouseParams, XMouseEvent } from "./MouseHandler";
17
17
 
18
18
  export interface VertEventParams extends XMouseParams {
19
- vertex : Vertex;
19
+ vertex: Vertex;
20
20
  }
21
21
 
22
22
  export interface VertEvent {
23
- params : VertEventParams;
23
+ params: VertEventParams;
24
24
  }
25
25
 
26
- export type VertListener = (e:VertEvent) => void;
27
-
26
+ export type VertListener = (e: VertEvent) => void;
28
27
 
29
28
  /**
30
- * @classdesc An event listeners wrapper. This is just a set of three listener
29
+ * @classdesc An event listeners wrapper. This is just a set of three listener
31
30
  * queues (drag, dragStart, dragEnd) and their respective firing
32
31
  * functions.
33
32
  *
34
33
  */
35
34
  export class VertexListeners {
35
+ private click: Array<VertListener>;
36
+ private drag: Array<VertListener>;
37
+ private dragStart: Array<VertListener>;
38
+ private dragEnd: Array<VertListener>;
36
39
 
37
- private click:Array<VertListener>;
38
- private drag:Array<VertListener>;
39
- private dragStart:Array<VertListener>;
40
- private dragEnd:Array<VertListener>;
41
-
42
- private vertex:Vertex;
43
-
44
-
45
- /**
46
- * The constructor.
47
- *
48
- * @constructor
49
- * @name VertexListeners
50
- * @param {Vertex} vertex - The vertex to use these listeners on (just a backward reference).
51
- **/
52
- constructor( vertex:Vertex ) {
53
- this.click = [];
54
- this.drag = [];
55
- this.dragStart = [];
56
- this.dragEnd = [];
57
- this.vertex = vertex;
58
- };
59
-
60
-
61
- /**
62
- * Add a click listener.
63
- *
64
- * @method addClickListener
65
- * @param {VertexListeners~dragListener} listener - The click listener to add (a callback).
66
- * @return {VertexListeners} this (for chaining)
67
- * @instance
68
- * @memberof VertexListeners
69
- **/
70
- addClickListener( listener:VertListener ) : VertexListeners {
71
- VertexListeners._addListener( this.click, listener );
72
- return this;
73
- };
74
- /**
75
- * The click listener is a function with a single drag event param.
76
- * @callback VertexListeners~clickListener
77
- * @param {Event} e - The (extended) click event.
78
- */
79
-
40
+ private vertex: Vertex;
80
41
 
81
- /**
82
- * Remove a drag listener.
83
- *
84
- * @method removeDragListener
85
- * @param {VertexListeners~dragListener} listener - The drag listener to remove (a callback).
86
- * @return {VertexListeners} this (for chaining)
87
- * @instance
88
- * @memberof VertexListeners
89
- **/
90
- removeClickListener( listener:VertListener ) : VertexListeners {
91
- this.click = VertexListeners._removeListener( this.click, listener );
92
- return this;
93
- };
94
- /**
95
- * The click listener is a function with a single drag event param.
96
- * @callback VertexListeners~clickListener
97
- * @param {Event} e - The (extended) click event.
98
- */
99
-
42
+ /**
43
+ * The constructor.
44
+ *
45
+ * @constructor
46
+ * @name VertexListeners
47
+ * @param {Vertex} vertex - The vertex to use these listeners on (just a backward reference).
48
+ **/
49
+ constructor(vertex: Vertex) {
50
+ this.click = [];
51
+ this.drag = [];
52
+ this.dragStart = [];
53
+ this.dragEnd = [];
54
+ this.vertex = vertex;
55
+ }
100
56
 
101
- /**
102
- * Add a drag listener.
103
- *
104
- * @method addDragListener
105
- * @param {VertexListeners~dragListener} listener - The drag listener to add (a callback).
106
- * @return {VertexListeners} this (for chaining)
107
- * @instance
108
- * @memberof VertexListeners
109
- **/
110
- addDragListener( listener:VertListener ) : VertexListeners {
111
- VertexListeners._addListener( this.drag, listener );
112
- return this;
113
- };
114
- /**
115
- * The drag listener is a function with a single drag event param.
116
- * @callback VertexListeners~dragListener
117
- * @param {Event} e - The (extended) drag event.
118
- */
119
-
57
+ /**
58
+ * Add a click listener.
59
+ *
60
+ * @method addClickListener
61
+ * @param {VertexListeners~dragListener} listener - The click listener to add (a callback).
62
+ * @return {VertexListeners} this (for chaining)
63
+ * @instance
64
+ * @memberof VertexListeners
65
+ **/
66
+ addClickListener(listener: VertListener): VertexListeners {
67
+ VertexListeners._addListener(this.click, listener);
68
+ return this;
69
+ }
70
+ /**
71
+ * The click listener is a function with a single drag event param.
72
+ * @callback VertexListeners~clickListener
73
+ * @param {Event} e - The (extended) click event.
74
+ */
120
75
 
121
- /**
122
- * Remove a drag listener.
123
- *
124
- * @method removeDragListener
125
- * @param {VertexListeners~dragListener} listener - The drag listener to remove (a callback).
126
- * @return {VertexListeners} this (for chaining)
127
- * @instance
128
- * @memberof VertexListeners
129
- **/
130
- removeDragListener( listener:VertListener ) : VertexListeners {
131
- this.drag = VertexListeners._removeListener( this.drag, listener );
132
- return this;
133
- };
134
-
135
-
136
- /**
137
- * Add a dragStart listener.
138
- *
139
- * @method addDragListener
140
- * @param {VertexListeners~dragStartListener} listener - The drag-start listener to add (a callback).
141
- * @return {VertexListeners} this (for chaining)
142
- * @instance
143
- * @memberof VertexListeners
144
- **/
145
- addDragStartListener( listener:VertListener) : VertexListeners {
146
- VertexListeners._addListener( this.dragStart, listener );
147
- return this;
148
- };
149
- /**
150
- * The drag-start listener is a function with a single drag event param.
151
- * @callback VertexListeners~dragStartListener
152
- * @param {Event} e - The (extended) drag event.
153
- */
76
+ /**
77
+ * Remove a drag listener.
78
+ *
79
+ * @method removeDragListener
80
+ * @param {VertexListeners~dragListener} listener - The drag listener to remove (a callback).
81
+ * @return {VertexListeners} this (for chaining)
82
+ * @instance
83
+ * @memberof VertexListeners
84
+ **/
85
+ removeClickListener(listener: VertListener): VertexListeners {
86
+ this.click = VertexListeners._removeListener(this.click, listener);
87
+ return this;
88
+ }
89
+ /**
90
+ * The click listener is a function with a single drag event param.
91
+ * @callback VertexListeners~clickListener
92
+ * @param {Event} e - The (extended) click event.
93
+ */
154
94
 
95
+ /**
96
+ * Add a drag listener.
97
+ *
98
+ * @method addDragListener
99
+ * @param {VertexListeners~dragListener} listener - The drag listener to add (a callback).
100
+ * @return {VertexListeners} this (for chaining)
101
+ * @instance
102
+ * @memberof VertexListeners
103
+ **/
104
+ addDragListener(listener: VertListener): VertexListeners {
105
+ VertexListeners._addListener(this.drag, listener);
106
+ return this;
107
+ }
108
+ /**
109
+ * The drag listener is a function with a single drag event param.
110
+ * @callback VertexListeners~dragListener
111
+ * @param {Event} e - The (extended) drag event.
112
+ */
155
113
 
156
- /**
157
- * Remove a dragStart listener.
158
- *
159
- * @method addDragStartListener
160
- * @param {VertexListeners~dragListener} listener - The drag listener to remove (a callback).
161
- * @return {VertexListeners} this (for chaining)
162
- * @instance
163
- * @memberof VertexListeners
164
- **/
165
- removeDragStartListener( listener:VertListener ) : VertexListeners {
166
- this.dragStart= VertexListeners._removeListener( this.dragStart, listener );
167
- return this;
168
- };
169
-
170
-
171
- /**
172
- * Add a dragEnd listener.
173
- *
174
- * @method addDragListener
175
- * @param {VertexListeners~dragEndListener} listener - The drag-end listener to add (a callback).
176
- * @return {VertexListeners} this (for chaining)
177
- * @instance
178
- * @memberof VertexListeners
179
- **/
180
- addDragEndListener( listener:(e:VertEvent)=>void ) : VertexListeners {
181
- // this.dragEnd.push( listener );
182
- VertexListeners._addListener( this.dragEnd, listener );
183
- return this;
184
- };
185
- /**
186
- * The drag-end listener is a function with a single drag event param.
187
- * @callback VertexListeners~dragEndListener
188
- * @param {Event} e - The (extended) drag event.
189
- */
114
+ /**
115
+ * Remove a drag listener.
116
+ *
117
+ * @method removeDragListener
118
+ * @param {VertexListeners~dragListener} listener - The drag listener to remove (a callback).
119
+ * @return {VertexListeners} this (for chaining)
120
+ * @instance
121
+ * @memberof VertexListeners
122
+ **/
123
+ removeDragListener(listener: VertListener): VertexListeners {
124
+ this.drag = VertexListeners._removeListener(this.drag, listener);
125
+ return this;
126
+ }
190
127
 
128
+ /**
129
+ * Add a dragStart listener.
130
+ *
131
+ * @method addDragListener
132
+ * @param {VertexListeners~dragStartListener} listener - The drag-start listener to add (a callback).
133
+ * @return {VertexListeners} this (for chaining)
134
+ * @instance
135
+ * @memberof VertexListeners
136
+ **/
137
+ addDragStartListener(listener: VertListener): VertexListeners {
138
+ VertexListeners._addListener(this.dragStart, listener);
139
+ return this;
140
+ }
141
+ /**
142
+ * The drag-start listener is a function with a single drag event param.
143
+ * @callback VertexListeners~dragStartListener
144
+ * @param {Event} e - The (extended) drag event.
145
+ */
191
146
 
192
- /**
193
- * Remove a drag listener.
194
- *
195
- * @method removeDragEndListener
196
- * @param {VertexListeners~clickListener} listener - The drag listener to remove (a callback).
197
- * @return {VertexListeners} this (for chaining)
198
- * @instance
199
- * @memberof VertexListeners
200
- **/
201
- removeDragEndListener( listener:(e:VertEvent)=>void ) : VertexListeners {
202
- // this.drag.push( listener );
203
- this.dragEnd = VertexListeners._removeListener( this.dragEnd, listener );
204
- return this;
205
- };
147
+ /**
148
+ * Remove a dragStart listener.
149
+ *
150
+ * @method addDragStartListener
151
+ * @param {VertexListeners~dragListener} listener - The drag listener to remove (a callback).
152
+ * @return {VertexListeners} this (for chaining)
153
+ * @instance
154
+ * @memberof VertexListeners
155
+ **/
156
+ removeDragStartListener(listener: VertListener): VertexListeners {
157
+ this.dragStart = VertexListeners._removeListener(this.dragStart, listener);
158
+ return this;
159
+ }
206
160
 
207
-
208
-
209
- /**
210
- * Fire a click event with the given event instance to all
211
- * installed click listeners.
212
- *
213
- * @method fireClickEvent
214
- * @param {VertEvent|XMouseEvent} e - The click event itself to be fired to all installed drag listeners.
215
- * @return {void}
216
- * @instance
217
- * @memberof VertexListeners
218
- **/
219
- fireClickEvent( e:VertEvent|XMouseEvent ) {
220
- VertexListeners._fireEvent(this,this.click,e);
221
- };
161
+ /**
162
+ * Add a dragEnd listener.
163
+ *
164
+ * @method addDragListener
165
+ * @param {VertexListeners~dragEndListener} listener - The drag-end listener to add (a callback).
166
+ * @return {VertexListeners} this (for chaining)
167
+ * @instance
168
+ * @memberof VertexListeners
169
+ **/
170
+ addDragEndListener(listener: (e: VertEvent) => void): VertexListeners {
171
+ // this.dragEnd.push( listener );
172
+ VertexListeners._addListener(this.dragEnd, listener);
173
+ return this;
174
+ }
175
+ /**
176
+ * The drag-end listener is a function with a single drag event param.
177
+ * @callback VertexListeners~dragEndListener
178
+ * @param {Event} e - The (extended) drag event.
179
+ */
222
180
 
223
-
224
- /**
225
- * Fire a drag event with the given event instance to all
226
- * installed drag listeners.
227
- *
228
- * @method fireDragEvent
229
- * @param {VertEvent|XMouseEvent} e - The drag event itself to be fired to all installed drag listeners.
230
- * @return {void}
231
- * @instance
232
- * @memberof VertexListeners
233
- **/
234
- fireDragEvent( e:VertEvent|XMouseEvent ) {
235
- VertexListeners._fireEvent(this,this.drag,e);
236
- };
181
+ /**
182
+ * Remove a drag listener.
183
+ *
184
+ * @method removeDragEndListener
185
+ * @param {VertexListeners~clickListener} listener - The drag listener to remove (a callback).
186
+ * @return {VertexListeners} this (for chaining)
187
+ * @instance
188
+ * @memberof VertexListeners
189
+ **/
190
+ removeDragEndListener(listener: (e: VertEvent) => void): VertexListeners {
191
+ // this.drag.push( listener );
192
+ this.dragEnd = VertexListeners._removeListener(this.dragEnd, listener);
193
+ return this;
194
+ }
237
195
 
196
+ /**
197
+ * Fire a click event with the given event instance to all
198
+ * installed click listeners.
199
+ *
200
+ * @method fireClickEvent
201
+ * @param {VertEvent|XMouseEvent} e - The click event itself to be fired to all installed drag listeners.
202
+ * @return {void}
203
+ * @instance
204
+ * @memberof VertexListeners
205
+ **/
206
+ fireClickEvent(e: VertEvent | XMouseEvent) {
207
+ VertexListeners._fireEvent(this, this.click, e);
208
+ }
238
209
 
239
-
240
- /**
241
- * Fire a dragStart event with the given event instance to all
242
- * installed drag-start listeners.
243
- *
244
- * @method fireDragStartEvent
245
- * @param {VertEvent|XMouseEvent} e - The drag-start event itself to be fired to all installed dragStart listeners.
246
- * @return {void}
247
- * @instance
248
- * @memberof VertexListeners
249
- **/
250
- fireDragStartEvent( e:VertEvent|XMouseEvent ) {
251
- VertexListeners._fireEvent(this,this.dragStart,e);
252
- };
210
+ /**
211
+ * Fire a drag event with the given event instance to all
212
+ * installed drag listeners.
213
+ *
214
+ * @method fireDragEvent
215
+ * @param {VertEvent|XMouseEvent} e - The drag event itself to be fired to all installed drag listeners.
216
+ * @return {void}
217
+ * @instance
218
+ * @memberof VertexListeners
219
+ **/
220
+ fireDragEvent(e: VertEvent | XMouseEvent) {
221
+ VertexListeners._fireEvent(this, this.drag, e);
222
+ }
253
223
 
224
+ /**
225
+ * Fire a dragStart event with the given event instance to all
226
+ * installed drag-start listeners.
227
+ *
228
+ * @method fireDragStartEvent
229
+ * @param {VertEvent|XMouseEvent} e - The drag-start event itself to be fired to all installed dragStart listeners.
230
+ * @return {void}
231
+ * @instance
232
+ * @memberof VertexListeners
233
+ **/
234
+ fireDragStartEvent(e: VertEvent | XMouseEvent) {
235
+ VertexListeners._fireEvent(this, this.dragStart, e);
236
+ }
254
237
 
255
-
256
- /**
257
- * Fire a dragEnd event with the given event instance to all
258
- * installed drag-end listeners.
259
- *
260
- * @method fireDragEndEvent
261
- * @param {VertEvent|XMouseEvent} e - The drag-end event itself to be fired to all installed dragEnd listeners.
262
- * @return {void}
263
- * @instance
264
- * @memberof VertexListeners
265
- **/
266
- fireDragEndEvent( e:VertEvent|XMouseEvent ) {
267
- VertexListeners._fireEvent(this,this.dragEnd,e);
268
- };
238
+ /**
239
+ * Fire a dragEnd event with the given event instance to all
240
+ * installed drag-end listeners.
241
+ *
242
+ * @method fireDragEndEvent
243
+ * @param {VertEvent|XMouseEvent} e - The drag-end event itself to be fired to all installed dragEnd listeners.
244
+ * @return {void}
245
+ * @instance
246
+ * @memberof VertexListeners
247
+ **/
248
+ fireDragEndEvent(e: VertEvent | XMouseEvent) {
249
+ VertexListeners._fireEvent(this, this.dragEnd, e);
250
+ }
269
251
 
252
+ /**
253
+ * Removes all listeners from this listeners object.
254
+ */
255
+ removeAllListeners() {
256
+ this.click = [];
257
+ this.drag = [];
258
+ this.dragStart = [];
259
+ this.dragEnd = [];
260
+ }
270
261
 
271
-
272
- /**
273
- * @private
274
- **/
275
- private static _fireEvent( _self:VertexListeners,
276
- listeners:Array<(e:VertEvent)=>void>,
277
- e:VertEvent|XMouseEvent
278
- ) : void {
279
- const ve : VertEvent = (e as unknown) as VertEvent;
280
- if( typeof ve.params == 'undefined' )
281
- ve.params = ({ vertex : _self.vertex } as unknown) as VertEventParams;
282
- else
283
- ve.params.vertex = _self.vertex;
284
- for( var i in listeners ) {
285
- listeners[i]( ve );
286
- }
287
- };
262
+ /**
263
+ * @private
264
+ **/
265
+ private static _fireEvent(_self: VertexListeners, listeners: Array<(e: VertEvent) => void>, e: VertEvent | XMouseEvent): void {
266
+ const ve: VertEvent = e as unknown as VertEvent;
267
+ if (typeof ve.params == "undefined") ve.params = { vertex: _self.vertex } as unknown as VertEventParams;
268
+ else ve.params.vertex = _self.vertex;
269
+ for (var i in listeners) {
270
+ listeners[i](ve);
271
+ }
272
+ }
288
273
 
289
- /**
290
- * @private
291
- */
292
- private static _addListener( listeners:Array<(e:VertEvent)=>void>,
293
- newListener:(e:VertEvent)=>void
294
- ) : boolean {
295
- for( var i in listeners ) {
296
- if( listeners[i] == newListener )
297
- return false;
298
- }
299
- listeners.push( newListener );
300
- return true;
301
- };
274
+ /**
275
+ * @private
276
+ */
277
+ private static _addListener(listeners: Array<(e: VertEvent) => void>, newListener: (e: VertEvent) => void): boolean {
278
+ for (var i in listeners) {
279
+ if (listeners[i] == newListener) return false;
280
+ }
281
+ listeners.push(newListener);
282
+ return true;
283
+ }
302
284
 
303
- /**
304
- * @private
305
- */
306
- private static _removeListener( listeners:Array<(e:VertEvent)=>void>,
307
- oldListener:(e:VertEvent)=>void
308
- ) : Array<(e:VertEvent)=>void> {
309
- for( var i = 0; i < listeners.length; i++ ) {
310
- if( listeners[i] == oldListener )
311
- return listeners.splice( i, 1 );
312
- }
313
- return listeners;
314
- };
285
+ /**
286
+ * @private
287
+ */
288
+ private static _removeListener(
289
+ listeners: Array<(e: VertEvent) => void>,
290
+ oldListener: (e: VertEvent) => void
291
+ ): Array<(e: VertEvent) => void> {
292
+ for (var i = 0; i < listeners.length; i++) {
293
+ if (listeners[i] == oldListener) return listeners.splice(i, 1);
294
+ }
295
+ return listeners;
296
+ }
315
297
  }
package/src/ts/draw.ts CHANGED
@@ -37,13 +37,15 @@
37
37
  * @modified 2021-02-22 Added the `path` drawing function to draw SVG path data.
38
38
  * @modified 2021-03-31 Added the `endDrawCycle` function from `DrawLib`.
39
39
  * @modified 2021-05-31 Added the `setConfiguration` function from `DrawLib`.
40
- * @version 1.9.0
40
+ * @modified 2021-11-12 Adding more parameters tot the `text()` function: fontSize, textAlign, fontFamily, lineHeight.
41
+ * @modified 2021-11-19 Added the `color` param to the `label(...)` function.
42
+ * @version 1.10.0
41
43
  **/
42
44
 
43
45
  import { CubicBezierCurve } from "./CubicBezierCurve";
44
46
  import { Polygon } from "./Polygon";
45
47
  import { Vertex } from "./Vertex";
46
- import { DrawLib, SVGPathParams, XYCoords, UID, DrawLibConfiguration } from "./interfaces";
48
+ import { DrawLib, SVGPathParams, XYCoords, UID, DrawLibConfiguration, FontStyle, FontWeight } from "./interfaces";
47
49
  import { drawutilssvg } from "./drawutilssvg";
48
50
 
49
51
  // Todo: rename this class to Drawutils?
@@ -845,19 +847,77 @@ export class drawutils implements DrawLib<void> {
845
847
  this.ctx.restore();
846
848
  }
847
849
 
848
- text(text: string, x: number, y: number, options?: { color?: string }) {
850
+ /**
851
+ * Draw a text at the given relative position.
852
+ *
853
+ * @method text
854
+ * @param {string} text - The text to draw.
855
+ * @param {number} x - The x-position to draw the text at.
856
+ * @param {number} y - The y-position to draw the text at.
857
+ * @param {string=} options.color - The Color to use.
858
+ * @param {string=} options.fontFamily - The font family to use.
859
+ * @param {number=} options.fontSize - The font size (in pixels) to use.
860
+ * @param {FontStyle=} options.fontStyle - The font style to use.
861
+ * @param {FontWeight=} options.fontWeight - The font weight to use.
862
+ * @param {number=} options.lineHeight - The line height (in pixels) to use.
863
+ * @param {number=} options.rotation - The (optional) rotation in radians.
864
+ * @param {string=} options.textAlign - The text align to use. According to the specifiactions (https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/textAlign) valid values are `"left" || "right" || "center" || "start" || "end"`.
865
+ * @return {void}
866
+ * @instance
867
+ * @memberof drawutils
868
+ */
869
+ text(
870
+ text: string,
871
+ x: number,
872
+ y: number,
873
+ options?: {
874
+ color?: string;
875
+ fontFamily?: string;
876
+ fontSize?: number;
877
+ fontStyle?: FontStyle;
878
+ fontWeight?: FontWeight;
879
+ lineHeight?: number;
880
+ textAlign?: CanvasRenderingContext2D["textAlign"];
881
+ rotation?: number;
882
+ }
883
+ ) {
884
+ // See https://stackoverflow.com/a/23523697
885
+
849
886
  options = options || {};
850
887
  this.ctx.save();
851
- x = this.offset.x + x * this.scale.x;
852
- y = this.offset.y + y * this.scale.y;
888
+ let relX = this.offset.x + x * this.scale.x;
889
+ let relY = this.offset.y + y * this.scale.y;
853
890
  const color: string = options.color || "black";
891
+ if (options.fontSize || options.fontFamily) {
892
+ // Scaling of text only works in uniform mode
893
+ this.ctx.font =
894
+ (options.fontWeight ? options.fontWeight + " " : "") +
895
+ (options.fontStyle ? options.fontStyle + " " : "") +
896
+ (options.fontSize ? options.fontSize * this.scale.x + "px " : " ") +
897
+ (options.fontFamily
898
+ ? options.fontFamily.indexOf(" ") === -1
899
+ ? options.fontFamily
900
+ : `"${options.fontFamily}"`
901
+ : "Arial");
902
+ }
903
+ if (options.textAlign) {
904
+ this.ctx.textAlign = options.textAlign;
905
+ }
906
+
907
+ const rotation = options.rotation ?? 0.0;
908
+ const lineHeight = (options.lineHeight ?? options.fontSize ?? 0) * this.scale.x;
909
+ this.ctx.translate(relX, relY);
910
+ this.ctx.rotate(rotation);
911
+
854
912
  if (this.fillShapes) {
855
913
  this.ctx.fillStyle = color;
856
- this.ctx.fillText(text, x, y);
914
+ this.ctx.fillText(text, 0, lineHeight / 2);
857
915
  } else {
858
916
  this.ctx.strokeStyle = color;
859
- this.ctx.strokeText(text, x, y);
917
+ this.ctx.strokeText(text, 0, lineHeight / 2);
860
918
  }
919
+ // this.ctx.translate(-relX, -relY);
920
+ // this.ctx.rotate(-rotation); // is this necessary before 'restore()'?
861
921
  this.ctx.restore();
862
922
  }
863
923
 
@@ -878,8 +938,11 @@ export class drawutils implements DrawLib<void> {
878
938
  */
879
939
  label(text: string, x: number, y: number, rotation?: number, color?: string) {
880
940
  this.ctx.save();
941
+
942
+ this.ctx.font = "lighter 9pt Arial";
943
+
881
944
  this.ctx.translate(x, y);
882
- if (typeof rotation != "undefined") this.ctx.rotate(rotation);
945
+ if (typeof rotation !== "undefined") this.ctx.rotate(rotation);
883
946
  this.ctx.fillStyle = color || "black";
884
947
  if (this.fillShapes) {
885
948
  this.ctx.fillText(text, 0, 0);