melonjs 10.8.0 → 10.11.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 (95) hide show
  1. package/LICENSE.md +1 -1
  2. package/README.md +32 -25
  3. package/dist/melonjs.js +1833 -2267
  4. package/dist/melonjs.min.js +4 -4
  5. package/dist/melonjs.module.d.ts +642 -1416
  6. package/dist/melonjs.module.js +1778 -2237
  7. package/package.json +16 -16
  8. package/src/audio/audio.js +0 -1
  9. package/src/camera/camera2d.js +1 -16
  10. package/src/entity/entity.js +1 -4
  11. package/src/game.js +2 -2
  12. package/src/geometries/ellipse.js +18 -27
  13. package/src/geometries/line.js +5 -8
  14. package/src/geometries/path2d.js +10 -20
  15. package/src/geometries/poly.js +28 -45
  16. package/src/geometries/rectangle.js +24 -36
  17. package/src/geometries/roundrect.js +96 -3
  18. package/src/index.js +7 -2
  19. package/src/input/gamepad.js +5 -16
  20. package/src/input/keyboard.js +1 -9
  21. package/src/input/pointer.js +0 -1
  22. package/src/input/pointerevent.js +14 -23
  23. package/src/lang/deprecated.js +9 -6
  24. package/src/level/level.js +0 -9
  25. package/src/level/tiled/TMXGroup.js +0 -4
  26. package/src/level/tiled/TMXLayer.js +0 -8
  27. package/src/level/tiled/TMXObject.js +0 -3
  28. package/src/level/tiled/TMXTile.js +4 -5
  29. package/src/level/tiled/TMXTileMap.js +1 -7
  30. package/src/level/tiled/TMXTileset.js +0 -5
  31. package/src/level/tiled/TMXTilesetGroup.js +1 -4
  32. package/src/level/tiled/TMXUtils.js +1 -4
  33. package/src/level/tiled/renderer/TMXHexagonalRenderer.js +2 -3
  34. package/src/level/tiled/renderer/TMXIsometricRenderer.js +0 -1
  35. package/src/level/tiled/renderer/TMXRenderer.js +1 -7
  36. package/src/loader/loader.js +0 -11
  37. package/src/loader/loadingscreen.js +16 -5
  38. package/src/math/color.js +10 -30
  39. package/src/math/math.js +0 -10
  40. package/src/math/matrix2.js +12 -27
  41. package/src/math/matrix3.js +1 -22
  42. package/src/math/observable_vector2.js +0 -29
  43. package/src/math/observable_vector3.js +0 -29
  44. package/src/math/vector2.js +3 -40
  45. package/src/math/vector3.js +4 -41
  46. package/src/particles/emitter.js +11 -12
  47. package/src/physics/body.js +1 -1
  48. package/src/physics/bounds.js +5 -19
  49. package/src/physics/collision.js +0 -1
  50. package/src/physics/detector.js +0 -4
  51. package/src/physics/quadtree.js +0 -7
  52. package/src/physics/sat.js +3 -3
  53. package/src/physics/world.js +0 -4
  54. package/src/plugin/plugin.js +0 -2
  55. package/src/polyfill/index.js +1 -0
  56. package/src/polyfill/roundrect.js +237 -0
  57. package/src/renderable/GUI.js +5 -10
  58. package/src/renderable/collectable.js +1 -0
  59. package/src/renderable/container.js +26 -54
  60. package/src/renderable/dragndrop.js +0 -9
  61. package/src/renderable/imagelayer.js +3 -7
  62. package/src/renderable/light2d.js +114 -0
  63. package/src/renderable/renderable.js +22 -43
  64. package/src/renderable/sprite.js +13 -25
  65. package/src/renderable/trigger.js +1 -1
  66. package/src/state/stage.js +72 -6
  67. package/src/state/state.js +3 -20
  68. package/src/system/device.js +14 -53
  69. package/src/system/event.js +11 -0
  70. package/src/system/pooling.js +19 -8
  71. package/src/system/save.js +9 -11
  72. package/src/system/timer.js +239 -218
  73. package/src/text/bitmaptextdata.js +1 -4
  74. package/src/text/glyph.js +2 -2
  75. package/src/text/text.js +19 -21
  76. package/src/text/textmetrics.js +0 -2
  77. package/src/tweens/easing.js +1 -1
  78. package/src/tweens/interpolation.js +2 -2
  79. package/src/tweens/tween.js +1 -13
  80. package/src/utils/agent.js +1 -3
  81. package/src/utils/array.js +0 -3
  82. package/src/utils/file.js +0 -2
  83. package/src/utils/function.js +0 -2
  84. package/src/utils/string.js +0 -6
  85. package/src/utils/utils.js +2 -5
  86. package/src/video/canvas/canvas_renderer.js +76 -103
  87. package/src/video/renderer.js +43 -50
  88. package/src/video/{texture.js → texture/atlas.js} +8 -8
  89. package/src/video/{texture_cache.js → texture/cache.js} +4 -5
  90. package/src/video/texture/canvas_texture.js +99 -0
  91. package/src/video/video.js +3 -3
  92. package/src/video/webgl/glshader.js +0 -5
  93. package/src/video/webgl/utils/uniforms.js +4 -7
  94. package/src/video/webgl/webgl_compositor.js +0 -14
  95. package/src/video/webgl/webgl_renderer.js +73 -97
@@ -1,10 +1,12 @@
1
1
  import Color from "./../../math/color.js";
2
2
  import Renderer from "./../renderer.js";
3
- import TextureCache from "./../texture_cache.js";
3
+ import TextureCache from "./../texture/cache.js";
4
4
  import Ellipse from "./../../geometries/ellipse.js";
5
+ import RoundRect from "./../../geometries/roundrect.js";
6
+ import Rect from "./../../geometries/rectangle.js";
7
+ import Bounds from "./../../physics/bounds.js";
5
8
  import { createCanvas } from "./../video.js";
6
-
7
-
9
+ import * as event from "./../../system/event.js";
8
10
 
9
11
  /**
10
12
  * @classdesc
@@ -71,8 +73,7 @@ class CanvasRenderer extends Renderer {
71
73
  /**
72
74
  * Reset context state
73
75
  * @name reset
74
- * @memberof CanvasRenderer.prototype
75
- * @function
76
+ * @memberof CanvasRenderer
76
77
  */
77
78
  reset() {
78
79
  super.reset();
@@ -82,8 +83,7 @@ class CanvasRenderer extends Renderer {
82
83
  /**
83
84
  * Reset the canvas transform to identity
84
85
  * @name resetTransform
85
- * @memberof CanvasRenderer.prototype
86
- * @function
86
+ * @memberof CanvasRenderer
87
87
  */
88
88
  resetTransform() {
89
89
  this.backBufferContext2D.setTransform(1, 0, 0, 1, 0, 0);
@@ -102,8 +102,7 @@ class CanvasRenderer extends Renderer {
102
102
  * <img src="images/screen-blendmode.png" width="510"/> <br>
103
103
  * @name setBlendMode
104
104
  * @see https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/globalCompositeOperation
105
- * @memberof CanvasRenderer.prototype
106
- * @function
105
+ * @memberof CanvasRenderer
107
106
  * @param {string} [mode="normal"] blend mode : "normal", "multiply", "lighter, "additive", "screen"
108
107
  * @param {CanvasRenderingContext2D} [context]
109
108
  */
@@ -140,8 +139,7 @@ class CanvasRenderer extends Renderer {
140
139
  /**
141
140
  * prepare the framebuffer for drawing a new frame
142
141
  * @name clear
143
- * @memberof CanvasRenderer.prototype
144
- * @function
142
+ * @memberof CanvasRenderer
145
143
  */
146
144
  clear() {
147
145
  if (this.settings.transparent) {
@@ -152,8 +150,7 @@ class CanvasRenderer extends Renderer {
152
150
  /**
153
151
  * render the main framebuffer on screen
154
152
  * @name flush
155
- * @memberof CanvasRenderer.prototype
156
- * @function
153
+ * @memberof CanvasRenderer
157
154
  */
158
155
  flush() {
159
156
  if (this.settings.doubleBuffering) {
@@ -164,8 +161,7 @@ class CanvasRenderer extends Renderer {
164
161
  /**
165
162
  * Clears the main framebuffer with the given color
166
163
  * @name clearColor
167
- * @memberof CanvasRenderer.prototype
168
- * @function
164
+ * @memberof CanvasRenderer
169
165
  * @param {Color|string} [color="#000000"] CSS color.
170
166
  * @param {boolean} [opaque=false] Allow transparency [default] or clear the surface completely [true]
171
167
  */
@@ -181,8 +177,7 @@ class CanvasRenderer extends Renderer {
181
177
  /**
182
178
  * Erase the pixels in the given rectangular area by setting them to transparent black (rgba(0,0,0,0)).
183
179
  * @name clearRect
184
- * @memberof CanvasRenderer.prototype
185
- * @function
180
+ * @memberof CanvasRenderer
186
181
  * @param {number} x x axis of the coordinate for the rectangle starting point.
187
182
  * @param {number} y y axis of the coordinate for the rectangle starting point.
188
183
  * @param {number} width The rectangle's width.
@@ -195,8 +190,7 @@ class CanvasRenderer extends Renderer {
195
190
  /**
196
191
  * Create a pattern with the specified repetition
197
192
  * @name createPattern
198
- * @memberof CanvasRenderer.prototype
199
- * @function
193
+ * @memberof CanvasRenderer
200
194
  * @param {Image} image Source image
201
195
  * @param {string} repeat Define how the pattern should be repeated
202
196
  * @returns {CanvasPattern}
@@ -214,8 +208,7 @@ class CanvasRenderer extends Renderer {
214
208
  /**
215
209
  * Draw an image onto the main using the canvas api
216
210
  * @name drawImage
217
- * @memberof CanvasRenderer.prototype
218
- * @function
211
+ * @memberof CanvasRenderer
219
212
  * @param {Image} image An element to draw into the context. The specification permits any canvas image source (CanvasImageSource), specifically, a CSSImageValue, an HTMLImageElement, an SVGImageElement, an HTMLVideoElement, an HTMLCanvasElement, an ImageBitmap, or an OffscreenCanvas.
220
213
  * @param {number} sx The X coordinate of the top left corner of the sub-rectangle of the source image to draw into the destination context.
221
214
  * @param {number} sy The Y coordinate of the top left corner of the sub-rectangle of the source image to draw into the destination context.
@@ -278,8 +271,7 @@ class CanvasRenderer extends Renderer {
278
271
  /**
279
272
  * Draw a pattern within the given rectangle.
280
273
  * @name drawPattern
281
- * @memberof CanvasRenderer.prototype
282
- * @function
274
+ * @memberof CanvasRenderer
283
275
  * @param {CanvasPattern} pattern Pattern object
284
276
  * @param {number} x
285
277
  * @param {number} y
@@ -302,8 +294,7 @@ class CanvasRenderer extends Renderer {
302
294
  /**
303
295
  * Stroke an arc at the specified coordinates with given radius, start and end points
304
296
  * @name strokeArc
305
- * @memberof CanvasRenderer.prototype
306
- * @function
297
+ * @memberof CanvasRenderer
307
298
  * @param {number} x arc center point x-axis
308
299
  * @param {number} y arc center point y-axis
309
300
  * @param {number} radius
@@ -329,8 +320,7 @@ class CanvasRenderer extends Renderer {
329
320
  /**
330
321
  * Fill an arc at the specified coordinates with given radius, start and end points
331
322
  * @name fillArc
332
- * @memberof CanvasRenderer.prototype
333
- * @function
323
+ * @memberof CanvasRenderer
334
324
  * @param {number} x arc center point x-axis
335
325
  * @param {number} y arc center point y-axis
336
326
  * @param {number} radius
@@ -345,8 +335,7 @@ class CanvasRenderer extends Renderer {
345
335
  /**
346
336
  * Stroke an ellipse at the specified coordinates with given radius
347
337
  * @name strokeEllipse
348
- * @memberof CanvasRenderer.prototype
349
- * @function
338
+ * @memberof CanvasRenderer
350
339
  * @param {number} x ellipse center point x-axis
351
340
  * @param {number} y ellipse center point y-axis
352
341
  * @param {number} w horizontal radius of the ellipse
@@ -387,8 +376,7 @@ class CanvasRenderer extends Renderer {
387
376
  /**
388
377
  * Fill an ellipse at the specified coordinates with given radius
389
378
  * @name fillEllipse
390
- * @memberof CanvasRenderer.prototype
391
- * @function
379
+ * @memberof CanvasRenderer
392
380
  * @param {number} x ellipse center point x-axis
393
381
  * @param {number} y ellipse center point y-axis
394
382
  * @param {number} w horizontal radius of the ellipse
@@ -401,8 +389,7 @@ class CanvasRenderer extends Renderer {
401
389
  /**
402
390
  * Stroke a line of the given two points
403
391
  * @name strokeLine
404
- * @memberof CanvasRenderer.prototype
405
- * @function
392
+ * @memberof CanvasRenderer
406
393
  * @param {number} startX the start x coordinate
407
394
  * @param {number} startY the start y coordinate
408
395
  * @param {number} endX the end x coordinate
@@ -414,6 +401,8 @@ class CanvasRenderer extends Renderer {
414
401
  return;
415
402
  }
416
403
 
404
+ var context = this.getContext();
405
+
417
406
  context.beginPath();
418
407
  context.moveTo(startX, startY);
419
408
  context.lineTo(endX, endY);
@@ -423,8 +412,7 @@ class CanvasRenderer extends Renderer {
423
412
  /**
424
413
  * Fill a line of the given two points
425
414
  * @name fillLine
426
- * @memberof CanvasRenderer.prototype
427
- * @function
415
+ * @memberof CanvasRenderer
428
416
  * @param {number} startX the start x coordinate
429
417
  * @param {number} startY the start y coordinate
430
418
  * @param {number} endX the end x coordinate
@@ -437,8 +425,7 @@ class CanvasRenderer extends Renderer {
437
425
  /**
438
426
  * Stroke the given me.Polygon on the screen
439
427
  * @name strokePolygon
440
- * @memberof CanvasRenderer.prototype
441
- * @function
428
+ * @memberof CanvasRenderer
442
429
  * @param {Polygon} poly the shape to draw
443
430
  * @param {boolean} [fill=false] also fill the shape with the current color if true
444
431
  */
@@ -466,8 +453,7 @@ class CanvasRenderer extends Renderer {
466
453
  /**
467
454
  * Fill the given me.Polygon on the screen
468
455
  * @name fillPolygon
469
- * @memberof CanvasRenderer.prototype
470
- * @function
456
+ * @memberof CanvasRenderer
471
457
  * @param {Polygon} poly the shape to draw
472
458
  */
473
459
  fillPolygon(poly) {
@@ -477,8 +463,7 @@ class CanvasRenderer extends Renderer {
477
463
  /**
478
464
  * Stroke a rectangle at the specified coordinates
479
465
  * @name strokeRect
480
- * @memberof CanvasRenderer.prototype
481
- * @function
466
+ * @memberof CanvasRenderer
482
467
  * @param {number} x
483
468
  * @param {number} y
484
469
  * @param {number} width
@@ -498,8 +483,7 @@ class CanvasRenderer extends Renderer {
498
483
  /**
499
484
  * Draw a filled rectangle at the specified coordinates
500
485
  * @name fillRect
501
- * @memberof CanvasRenderer.prototype
502
- * @function
486
+ * @memberof CanvasRenderer
503
487
  * @param {number} x
504
488
  * @param {number} y
505
489
  * @param {number} width
@@ -512,8 +496,7 @@ class CanvasRenderer extends Renderer {
512
496
  /**
513
497
  * Stroke a rounded rectangle at the specified coordinates
514
498
  * @name strokeRoundRect
515
- * @memberof CanvasRenderer.prototype
516
- * @function
499
+ * @memberof CanvasRenderer
517
500
  * @param {number} x
518
501
  * @param {number} y
519
502
  * @param {number} width
@@ -529,28 +512,14 @@ class CanvasRenderer extends Renderer {
529
512
  var context = this.getContext();
530
513
 
531
514
  context.beginPath();
532
- if (typeof context.roundRect === "function") {
533
- //https://developer.chrome.com/blog/canvas2d/#round-rect
534
- context.roundRect(x, y, width, height, radius);
535
- } else {
536
- context.moveTo(x + radius, y);
537
- context.lineTo(x + width - radius, y);
538
- context.arcTo(x + width, y, x + width, y + radius, radius);
539
- context.lineTo(x + width, y + height - radius);
540
- context.arcTo(x + width, y + height, x + width - radius, y + height, radius);
541
- context.lineTo(x + radius, y + height);
542
- context.arcTo(x, y + height, x, y + height - radius, radius);
543
- context.lineTo(x, y + radius);
544
- context.arcTo(x, y, x + radius, y, radius);
545
- }
515
+ context.roundRect(x, y, width, height, radius);
546
516
  context[fill === true ? "fill" : "stroke"]();
547
517
  }
548
518
 
549
519
  /**
550
520
  * Draw a rounded filled rectangle at the specified coordinates
551
521
  * @name fillRoundRect
552
- * @memberof CanvasRenderer.prototype
553
- * @function
522
+ * @memberof CanvasRenderer
554
523
  * @param {number} x
555
524
  * @param {number} y
556
525
  * @param {number} width
@@ -565,8 +534,7 @@ class CanvasRenderer extends Renderer {
565
534
  /**
566
535
  * return a reference to the system 2d Context
567
536
  * @name getContext
568
- * @memberof CanvasRenderer.prototype
569
- * @function
537
+ * @memberof CanvasRenderer
570
538
  * @returns {CanvasRenderingContext2D}
571
539
  */
572
540
  getContext() {
@@ -585,8 +553,7 @@ class CanvasRenderer extends Renderer {
585
553
  /**
586
554
  * save the canvas context
587
555
  * @name save
588
- * @memberof CanvasRenderer.prototype
589
- * @function
556
+ * @memberof CanvasRenderer
590
557
  */
591
558
  save() {
592
559
  this.backBufferContext2D.save();
@@ -595,8 +562,7 @@ class CanvasRenderer extends Renderer {
595
562
  /**
596
563
  * restores the canvas context
597
564
  * @name restore
598
- * @memberof CanvasRenderer.prototype
599
- * @function
565
+ * @memberof CanvasRenderer
600
566
  */
601
567
  restore() {
602
568
  this.backBufferContext2D.restore();
@@ -610,8 +576,7 @@ class CanvasRenderer extends Renderer {
610
576
  /**
611
577
  * rotates the canvas context
612
578
  * @name rotate
613
- * @memberof CanvasRenderer.prototype
614
- * @function
579
+ * @memberof CanvasRenderer
615
580
  * @param {number} angle in radians
616
581
  */
617
582
  rotate(angle) {
@@ -621,8 +586,7 @@ class CanvasRenderer extends Renderer {
621
586
  /**
622
587
  * scales the canvas context
623
588
  * @name scale
624
- * @memberof CanvasRenderer.prototype
625
- * @function
589
+ * @memberof CanvasRenderer
626
590
  * @param {number} x
627
591
  * @param {number} y
628
592
  */
@@ -634,8 +598,7 @@ class CanvasRenderer extends Renderer {
634
598
  * Set the current fill & stroke style color.
635
599
  * By default, or upon reset, the value is set to #000000.
636
600
  * @name setColor
637
- * @memberof CanvasRenderer.prototype
638
- * @function
601
+ * @memberof CanvasRenderer
639
602
  * @param {Color|string} color css color value
640
603
  */
641
604
  setColor(color) {
@@ -650,8 +613,7 @@ class CanvasRenderer extends Renderer {
650
613
  /**
651
614
  * Set the global alpha
652
615
  * @name setGlobalAlpha
653
- * @memberof CanvasRenderer.prototype
654
- * @function
616
+ * @memberof CanvasRenderer
655
617
  * @param {number} alpha 0.0 to 1.0 values accepted.
656
618
  */
657
619
  setGlobalAlpha(alpha) {
@@ -661,8 +623,7 @@ class CanvasRenderer extends Renderer {
661
623
  /**
662
624
  * Return the global alpha
663
625
  * @name getGlobalAlpha
664
- * @memberof CanvasRenderer.prototype
665
- * @function
626
+ * @memberof CanvasRenderer
666
627
  * @returns {number} global alpha value
667
628
  */
668
629
  getGlobalAlpha() {
@@ -672,8 +633,7 @@ class CanvasRenderer extends Renderer {
672
633
  /**
673
634
  * Set the line width on the context
674
635
  * @name setLineWidth
675
- * @memberof CanvasRenderer.prototype
676
- * @function
636
+ * @memberof CanvasRenderer
677
637
  * @param {number} width Line width
678
638
  */
679
639
  setLineWidth(width) {
@@ -684,8 +644,7 @@ class CanvasRenderer extends Renderer {
684
644
  * Reset (overrides) the renderer transformation matrix to the
685
645
  * identity one, and then apply the given transformation matrix.
686
646
  * @name setTransform
687
- * @memberof CanvasRenderer.prototype
688
- * @function
647
+ * @memberof CanvasRenderer
689
648
  * @param {Matrix2d} mat2d Matrix to transform by
690
649
  */
691
650
  setTransform(mat2d) {
@@ -696,8 +655,7 @@ class CanvasRenderer extends Renderer {
696
655
  /**
697
656
  * Multiply given matrix into the renderer tranformation matrix
698
657
  * @name transform
699
- * @memberof CanvasRenderer.prototype
700
- * @function
658
+ * @memberof CanvasRenderer
701
659
  * @param {Matrix2d} mat2d Matrix to transform by
702
660
  */
703
661
  transform(mat2d) {
@@ -720,8 +678,7 @@ class CanvasRenderer extends Renderer {
720
678
  /**
721
679
  * Translates the context to the given position
722
680
  * @name translate
723
- * @memberof CanvasRenderer.prototype
724
- * @function
681
+ * @memberof CanvasRenderer
725
682
  * @param {number} x
726
683
  * @param {number} y
727
684
  */
@@ -740,8 +697,7 @@ class CanvasRenderer extends Renderer {
740
697
  * and restore it (with the restore() method) any time in the future.
741
698
  * (<u>this is an experimental feature !</u>)
742
699
  * @name clipRect
743
- * @memberof CanvasRenderer.prototype
744
- * @function
700
+ * @memberof CanvasRenderer
745
701
  * @param {number} x
746
702
  * @param {number} y
747
703
  * @param {number} width
@@ -773,19 +729,27 @@ class CanvasRenderer extends Renderer {
773
729
  * So, if the renderable is larger than the mask, only the intersecting part of the renderable will be visible.
774
730
  * Mask are not preserved through renderer context save and restore.
775
731
  * @name setMask
776
- * @memberof CanvasRenderer.prototype
777
- * @function
778
- * @param {Rect|Polygon|Line|Ellipse} [mask] the shape defining the mask to be applied
732
+ * @memberof CanvasRenderer
733
+ * @param {Rect|RoundRect|Polygon|Line|Ellipse} [mask] the shape defining the mask to be applied
734
+ * @param {boolean} [invert=false] either the given shape should define what is visible (default) or the opposite
779
735
  */
780
- setMask(mask) {
736
+ setMask(mask, invert = false) {
781
737
  var context = this.getContext();
782
- var _x = mask.pos.x, _y = mask.pos.y;
783
738
 
784
- context.save();
739
+ if (this.maskLevel === 0) {
740
+ // only save context on the first mask
741
+ context.save();
742
+ context.beginPath();
743
+ }
785
744
 
786
745
  // https://github.com/melonjs/melonJS/issues/648
787
- if (mask instanceof Ellipse) {
788
- var hw = mask.radiusV.x,
746
+ else if (mask instanceof RoundRect) {
747
+ context.roundRect(mask.top, mask.left, mask.width, mask.height, mask.radius);
748
+ } else if (mask instanceof Rect || mask instanceof Bounds) {
749
+ context.rect(mask.top, mask.left, mask.width, mask.height);
750
+ } else if (mask instanceof Ellipse) {
751
+ const _x = mask.pos.x, _y = mask.pos.y,
752
+ hw = mask.radiusV.x,
789
753
  hh = mask.radiusV.y,
790
754
  lx = _x - hw,
791
755
  rx = _x + hw,
@@ -799,36 +763,45 @@ class CanvasRenderer extends Renderer {
799
763
  ymin = _y - ymagic,
800
764
  ymax = _y + ymagic;
801
765
 
802
- context.beginPath();
803
766
  context.moveTo(_x, ty);
804
767
  context.bezierCurveTo(xmax, ty, rx, ymin, rx, _y);
805
768
  context.bezierCurveTo(rx, ymax, xmax, by, _x, by);
806
769
  context.bezierCurveTo(xmin, by, lx, ymax, lx, _y);
807
770
  context.bezierCurveTo(lx, ymin, xmin, ty, _x, ty);
808
771
  } else {
809
- context.beginPath();
810
- context.moveTo(_x + mask.points[0].x, _y + mask.points[0].y);
772
+ const _x = mask.pos.x, _y = mask.pos.y;
811
773
  var point;
774
+
775
+ context.moveTo(_x + mask.points[0].x, _y + mask.points[0].y);
812
776
  for (var i = 1; i < mask.points.length; i++) {
813
777
  point = mask.points[i];
814
778
  context.lineTo(_x + point.x, _y + point.y);
815
779
  }
816
780
  }
817
781
 
818
- context.clip();
782
+ this.maskLevel++;
783
+
784
+ if (invert === true) {
785
+ context.closePath();
786
+ context.globalCompositeOperation = "destination-atop";
787
+ context.fill();
788
+ } else {
789
+ context.clip();
790
+ }
819
791
  }
820
792
 
821
793
  /**
822
794
  * disable (remove) the rendering mask set through setMask.
823
795
  * @name clearMask
824
796
  * @see CanvasRenderer#setMask
825
- * @memberof CanvasRenderer.prototype
826
- * @function
797
+ * @memberof CanvasRenderer
827
798
  */
828
799
  clearMask() {
829
- this.backBufferContext2D.restore();
800
+ if (this.maskLevel > 0) {
801
+ this.maskLevel = 0;
802
+ this.getContext().restore();
803
+ }
830
804
  }
831
-
832
805
  };
833
806
 
834
807
  export default CanvasRenderer;