pts 0.10.9 → 0.10.10

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_module.js","sourceRoot":"","sources":["../../src/_module.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,iBAAiB,CAAC;AAChC,cAAc,OAAO,CAAC;AACtB,cAAc,MAAM,CAAC;AACrB,cAAc,MAAM,CAAC;AACrB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,OAAO,CAAC;AACtB,cAAc,OAAO,CAAC;AACtB,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,MAAM,CAAC;AACrB,cAAc,SAAS,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uheprng.js","sourceRoot":"","sources":["../../src/uheprng.ts"],"names":[],"mappings":"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"}
package/dist/es5.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * pts.js 0.10.9 - Copyright © 2017-2021 William Ngan and contributors.
2
+ * pts.js 0.10.10 - Copyright © 2017-2022 William Ngan and contributors.
3
3
  * Licensed under Apache 2.0 License.
4
4
  * See https://github.com/williamngan/pts for details.
5
5
  */
@@ -2855,14 +2855,43 @@ var _createClass = function () { function defineProperties(target, props) { for
2855
2855
 
2856
2856
  function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
2857
2857
 
2858
+ var __awaiter = undefined && undefined.__awaiter || function (thisArg, _arguments, P, generator) {
2859
+ function adopt(value) {
2860
+ return value instanceof P ? value : new P(function (resolve) {
2861
+ resolve(value);
2862
+ });
2863
+ }
2864
+ return new (P || (P = Promise))(function (resolve, reject) {
2865
+ function fulfilled(value) {
2866
+ try {
2867
+ step(generator.next(value));
2868
+ } catch (e) {
2869
+ reject(e);
2870
+ }
2871
+ }
2872
+ function rejected(value) {
2873
+ try {
2874
+ step(generator["throw"](value));
2875
+ } catch (e) {
2876
+ reject(e);
2877
+ }
2878
+ }
2879
+ function step(result) {
2880
+ result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
2881
+ }
2882
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
2883
+ });
2884
+ };
2858
2885
  Object.defineProperty(exports, "__esModule", { value: true });
2859
2886
  exports.Img = void 0;
2887
+ var Canvas_1 = __webpack_require__(/*! ./Canvas */ "./src/Canvas.ts");
2860
2888
  var Pt_1 = __webpack_require__(/*! ./Pt */ "./src/Pt.ts");
2889
+ var LinearAlgebra_1 = __webpack_require__(/*! ./LinearAlgebra */ "./src/LinearAlgebra.ts");
2861
2890
 
2862
2891
  var Img = function () {
2863
2892
  function Img() {
2864
2893
  var editable = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
2865
- var pixelScale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
2894
+ var space = arguments[1];
2866
2895
  var crossOrigin = arguments[2];
2867
2896
 
2868
2897
  _classCallCheck(this, Img);
@@ -2870,7 +2899,8 @@ var Img = function () {
2870
2899
  this._scale = 1;
2871
2900
  this._loaded = false;
2872
2901
  this._editable = editable;
2873
- this._scale = pixelScale;
2902
+ this._space = space;
2903
+ this._scale = this._space ? this._space.pixelScale : 1;
2874
2904
  this._img = new Image();
2875
2905
  if (crossOrigin) this._img.crossOrigin = "Anonymous";
2876
2906
  }
@@ -2881,6 +2911,9 @@ var Img = function () {
2881
2911
  var _this = this;
2882
2912
 
2883
2913
  return new Promise(function (resolve, reject) {
2914
+ if (_this._editable && !document) {
2915
+ reject("Cannot create html canvas element. document not found.");
2916
+ }
2884
2917
  _this._img.src = src;
2885
2918
  _this._img.onload = function () {
2886
2919
  if (_this._editable) {
@@ -2899,14 +2932,27 @@ var Img = function () {
2899
2932
  }, {
2900
2933
  key: "_drawToScale",
2901
2934
  value: function _drawToScale(canvasScale, img) {
2902
- var cms = typeof canvasScale === 'number' ? [canvasScale, canvasScale] : canvasScale;
2903
2935
  var nw = img.width;
2904
2936
  var nh = img.height;
2905
- this._cv.width = nw * cms[0];
2906
- this._cv.height = nh * cms[1];
2907
- this._ctx = this._cv.getContext('2d');
2937
+ this.initCanvas(nw, nh, canvasScale);
2908
2938
  if (img) this._ctx.drawImage(img, 0, 0, nw, nh, 0, 0, this._cv.width, this._cv.height);
2909
2939
  }
2940
+ }, {
2941
+ key: "initCanvas",
2942
+ value: function initCanvas(width, height) {
2943
+ var canvasScale = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
2944
+
2945
+ if (!this._editable) {
2946
+ console.error('Cannot initiate canvas because this Img is not set to be editable');
2947
+ return;
2948
+ }
2949
+ if (!this._cv) this._cv = document.createElement("canvas");
2950
+ var cms = typeof canvasScale === 'number' ? [canvasScale, canvasScale] : canvasScale;
2951
+ this._cv.width = width * cms[0];
2952
+ this._cv.height = height * cms[1];
2953
+ this._ctx = this._cv.getContext('2d');
2954
+ this._loaded = true;
2955
+ }
2910
2956
  }, {
2911
2957
  key: "bitmap",
2912
2958
  value: function bitmap(size) {
@@ -2914,6 +2960,15 @@ var Img = function () {
2914
2960
  var h = size ? size[1] : this._cv.height;
2915
2961
  return createImageBitmap(this._cv, 0, 0, w, h);
2916
2962
  }
2963
+ }, {
2964
+ key: "pattern",
2965
+ value: function pattern() {
2966
+ var reptition = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'repeat';
2967
+ var dynamic = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
2968
+
2969
+ if (!this._space) throw "Cannot find CanvasSpace ctx to create image pattern";
2970
+ return this._space.ctx.createPattern(dynamic ? this._cv : this._img, reptition);
2971
+ }
2917
2972
  }, {
2918
2973
  key: "sync",
2919
2974
  value: function sync() {
@@ -2984,6 +3039,14 @@ var Img = function () {
2984
3039
  });
2985
3040
  });
2986
3041
  }
3042
+ }, {
3043
+ key: "getForm",
3044
+ value: function getForm() {
3045
+ if (!this._editable) {
3046
+ console.error("Cannot get a CanvasForm because this Img is not editable");
3047
+ }
3048
+ return this._ctx ? new Canvas_1.CanvasForm(this._ctx) : undefined;
3049
+ }
2987
3050
  }, {
2988
3051
  key: "current",
2989
3052
  get: function get() {
@@ -3022,26 +3085,98 @@ var Img = function () {
3022
3085
  }, {
3023
3086
  key: "imageSize",
3024
3087
  get: function get() {
3025
- return new Pt_1.Pt(this._img.width, this._img.height);
3088
+ if (!this._img.width || !this._img.height) {
3089
+ return this.canvasSize.$divide(this._scale);
3090
+ } else {
3091
+ return new Pt_1.Pt(this._img.width, this._img.height);
3092
+ }
3026
3093
  }
3027
3094
  }, {
3028
3095
  key: "canvasSize",
3029
3096
  get: function get() {
3030
3097
  return new Pt_1.Pt(this._cv.width, this._cv.height);
3031
3098
  }
3099
+ }, {
3100
+ key: "scaledMatrix",
3101
+ get: function get() {
3102
+ var s = 1 / this._scale;
3103
+ return new LinearAlgebra_1.Mat().scale2D([s, s]);
3104
+ }
3032
3105
  }], [{
3033
3106
  key: "load",
3034
3107
  value: function load(src) {
3035
3108
  var editable = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
3036
- var pixelScale = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
3109
+ var space = arguments[2];
3037
3110
  var ready = arguments[3];
3038
3111
 
3039
- var img = new Img(editable, pixelScale);
3112
+ var img = new Img(editable, space);
3040
3113
  img.load(src).then(function (res) {
3041
3114
  if (ready) ready(res);
3042
3115
  });
3043
3116
  return img;
3044
3117
  }
3118
+ }, {
3119
+ key: "loadAsync",
3120
+ value: function loadAsync(src) {
3121
+ var editable = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
3122
+ var space = arguments[2];
3123
+
3124
+ return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee() {
3125
+ var img;
3126
+ return regeneratorRuntime.wrap(function _callee$(_context) {
3127
+ while (1) {
3128
+ switch (_context.prev = _context.next) {
3129
+ case 0:
3130
+ _context.next = 2;
3131
+ return new Img(editable, space).load(src);
3132
+
3133
+ case 2:
3134
+ img = _context.sent;
3135
+ return _context.abrupt("return", img);
3136
+
3137
+ case 4:
3138
+ case "end":
3139
+ return _context.stop();
3140
+ }
3141
+ }
3142
+ }, _callee, this);
3143
+ }));
3144
+ }
3145
+ }, {
3146
+ key: "loadPattern",
3147
+ value: function loadPattern(src, space) {
3148
+ var repeat = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'repeat';
3149
+ var editable = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
3150
+
3151
+ return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee2() {
3152
+ var img;
3153
+ return regeneratorRuntime.wrap(function _callee2$(_context2) {
3154
+ while (1) {
3155
+ switch (_context2.prev = _context2.next) {
3156
+ case 0:
3157
+ _context2.next = 2;
3158
+ return Img.loadAsync(src, editable, space);
3159
+
3160
+ case 2:
3161
+ img = _context2.sent;
3162
+ return _context2.abrupt("return", img.pattern(repeat));
3163
+
3164
+ case 4:
3165
+ case "end":
3166
+ return _context2.stop();
3167
+ }
3168
+ }
3169
+ }, _callee2, this);
3170
+ }));
3171
+ }
3172
+ }, {
3173
+ key: "blank",
3174
+ value: function blank(size, space, scale) {
3175
+ var img = new Img(true, space);
3176
+ var s = scale ? scale : space.pixelScale;
3177
+ img.initCanvas(size[0], size[1], s);
3178
+ return img;
3179
+ }
3045
3180
  }, {
3046
3181
  key: "getPixel",
3047
3182
  value: function getPixel(imgData, p) {
@@ -3056,15 +3191,18 @@ var Img = function () {
3056
3191
  key: "fromBlob",
3057
3192
  value: function fromBlob(blob) {
3058
3193
  var editable = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
3059
- var pixelScale = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
3194
+ var space = arguments[2];
3060
3195
 
3061
3196
  var url = URL.createObjectURL(blob);
3062
- return new Img(editable, pixelScale).load(url);
3197
+ return new Img(editable, space).load(url);
3063
3198
  }
3064
3199
  }, {
3065
3200
  key: "imageDataToBlob",
3066
3201
  value: function imageDataToBlob(data) {
3067
- return new Promise(function (resolve) {
3202
+ return new Promise(function (resolve, reject) {
3203
+ if (!document) {
3204
+ reject("Cannot create html canvas element. document not found.");
3205
+ }
3068
3206
  var cv = document.createElement("canvas");
3069
3207
  cv.width = data.width;
3070
3208
  cv.height = data.height;
@@ -3274,9 +3412,60 @@ exports.Vec = Vec;
3274
3412
  var Mat = function () {
3275
3413
  function Mat() {
3276
3414
  _classCallCheck(this, Mat);
3415
+
3416
+ this.reset();
3277
3417
  }
3278
3418
 
3279
- _createClass(Mat, null, [{
3419
+ _createClass(Mat, [{
3420
+ key: "reset",
3421
+ value: function reset() {
3422
+ this._33 = Mat.scale2DMatrix(1, 1);
3423
+ }
3424
+ }, {
3425
+ key: "scale2D",
3426
+ value: function scale2D(val) {
3427
+ var at = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [0, 0];
3428
+
3429
+ var m = Mat.scaleAt2DMatrix(val[0] || 1, val[1] || 1, at);
3430
+ this._33 = Mat.multiply(this._33, m);
3431
+ return this;
3432
+ }
3433
+ }, {
3434
+ key: "rotate2D",
3435
+ value: function rotate2D(ang) {
3436
+ var at = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [0, 0];
3437
+
3438
+ var m = Mat.rotateAt2DMatrix(Math.cos(ang), Math.sin(ang), at);
3439
+ this._33 = Mat.multiply(this._33, m);
3440
+ return this;
3441
+ }
3442
+ }, {
3443
+ key: "translate2D",
3444
+ value: function translate2D(val) {
3445
+ var m = Mat.translate2DMatrix(val[0] || 0, val[1] || 0);
3446
+ this._33 = Mat.multiply(this._33, m);
3447
+ return this;
3448
+ }
3449
+ }, {
3450
+ key: "shear2D",
3451
+ value: function shear2D(val) {
3452
+ var at = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [0, 0];
3453
+
3454
+ var m = Mat.shearAt2DMatrix(Math.tan(val[0] || 0), Math.tan(val[1] || 1), at);
3455
+ this._33 = Mat.multiply(this._33, m);
3456
+ return this;
3457
+ }
3458
+ }, {
3459
+ key: "value",
3460
+ get: function get() {
3461
+ return this._33;
3462
+ }
3463
+ }, {
3464
+ key: "domMatrix",
3465
+ get: function get() {
3466
+ return new DOMMatrix(Mat.toDOMMatrix(this._33));
3467
+ }
3468
+ }], [{
3280
3469
  key: "add",
3281
3470
  value: function add(a, b) {
3282
3471
  if (typeof b != "number") {
@@ -3357,6 +3546,11 @@ var Mat = function () {
3357
3546
 
3358
3547
  return Mat.zip(g, defaultValue, useLongest);
3359
3548
  }
3549
+ }, {
3550
+ key: "toDOMMatrix",
3551
+ value: function toDOMMatrix(m) {
3552
+ return [m[0][0], m[0][1], m[1][0], m[1][1], m[2][0], m[2][1]];
3553
+ }
3360
3554
  }, {
3361
3555
  key: "transform2D",
3362
3556
  value: function transform2D(pt, m) {
@@ -7520,6 +7714,11 @@ var Group = function (_extendableBuiltin4) {
7520
7714
 
7521
7715
  return LinearAlgebra_1.Mat.zip(this, defaultValue, useLongest);
7522
7716
  }
7717
+ }, {
7718
+ key: "toBound",
7719
+ value: function toBound() {
7720
+ return Bound.fromGroup(this);
7721
+ }
7523
7722
  }, {
7524
7723
  key: "toString",
7525
7724
  value: function toString() {
@@ -7839,7 +8038,7 @@ var Space = function () {
7839
8038
 
7840
8039
  this.id = "space";
7841
8040
  this.bound = new Pt_1.Bound();
7842
- this._time = { prev: 0, diff: 0, end: -1 };
8041
+ this._time = { prev: 0, diff: 0, end: -1, min: 0 };
7843
8042
  this.players = {};
7844
8043
  this.playerCount = 0;
7845
8044
  this._animID = -1;
@@ -7856,6 +8055,13 @@ var Space = function () {
7856
8055
  this._refresh = b;
7857
8056
  return this;
7858
8057
  }
8058
+ }, {
8059
+ key: "minFrameTime",
8060
+ value: function minFrameTime() {
8061
+ var ms = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
8062
+
8063
+ this._time.min = ms;
8064
+ }
7859
8065
  }, {
7860
8066
  key: "add",
7861
8067
  value: function add(p) {
@@ -7891,6 +8097,7 @@ var Space = function () {
7891
8097
  this._animID = requestAnimationFrame(this.play.bind(this));
7892
8098
  if (this._pause) return this;
7893
8099
  this._time.diff = time - this._time.prev;
8100
+ if (this._time.diff < this._time.min) return this;
7894
8101
  this._time.prev = time;
7895
8102
  try {
7896
8103
  this.playItems(time);
@@ -8023,6 +8230,7 @@ var MultiTouchSpace = function (_Space) {
8023
8230
  _this._dragged = false;
8024
8231
  _this._hasMouse = false;
8025
8232
  _this._hasTouch = false;
8233
+ _this._hasKeyboard = false;
8026
8234
  return _this;
8027
8235
  }
8028
8236
 
@@ -8030,22 +8238,45 @@ var MultiTouchSpace = function (_Space) {
8030
8238
  key: "bindCanvas",
8031
8239
  value: function bindCanvas(evt, callback) {
8032
8240
  var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
8241
+ var customTarget = arguments[3];
8033
8242
 
8034
- this._canvas.addEventListener(evt, callback, options);
8243
+ var target = customTarget ? customTarget : this._canvas;
8244
+ target.addEventListener(evt, callback, options);
8035
8245
  }
8036
8246
  }, {
8037
8247
  key: "unbindCanvas",
8038
8248
  value: function unbindCanvas(evt, callback) {
8039
8249
  var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
8250
+ var customTarget = arguments[3];
8251
+
8252
+ var target = customTarget ? customTarget : this._canvas;
8253
+ target.removeEventListener(evt, callback, options);
8254
+ }
8255
+ }, {
8256
+ key: "bindDoc",
8257
+ value: function bindDoc(evt, callback) {
8258
+ var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
8259
+
8260
+ if (document) {
8261
+ document.addEventListener(evt, callback, options);
8262
+ }
8263
+ }
8264
+ }, {
8265
+ key: "unbindDoc",
8266
+ value: function unbindDoc(evt, callback) {
8267
+ var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
8040
8268
 
8041
- this._canvas.removeEventListener(evt, callback, options);
8269
+ if (document) {
8270
+ document.removeEventListener(evt, callback, options);
8271
+ }
8042
8272
  }
8043
8273
  }, {
8044
8274
  key: "bindMouse",
8045
8275
  value: function bindMouse() {
8046
- var _bind = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
8276
+ var bind = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
8277
+ var customTarget = arguments[1];
8047
8278
 
8048
- if (_bind) {
8279
+ if (bind) {
8049
8280
  this._mouseDown = this._mouseDown.bind(this);
8050
8281
  this._mouseUp = this._mouseUp.bind(this);
8051
8282
  this._mouseOver = this._mouseOver.bind(this);
@@ -8053,22 +8284,22 @@ var MultiTouchSpace = function (_Space) {
8053
8284
  this._mouseMove = this._mouseMove.bind(this);
8054
8285
  this._mouseClick = this._mouseClick.bind(this);
8055
8286
  this._contextMenu = this._contextMenu.bind(this);
8056
- this.bindCanvas("mousedown", this._mouseDown);
8057
- this.bindCanvas("mouseup", this._mouseUp);
8058
- this.bindCanvas("mouseover", this._mouseOver);
8059
- this.bindCanvas("mouseout", this._mouseOut);
8060
- this.bindCanvas("mousemove", this._mouseMove);
8061
- this.bindCanvas("click", this._mouseClick);
8062
- this.bindCanvas("contextmenu", this._contextMenu);
8287
+ this.bindCanvas("mousedown", this._mouseDown, {}, customTarget);
8288
+ this.bindCanvas("mouseup", this._mouseUp, {}, customTarget);
8289
+ this.bindCanvas("mouseover", this._mouseOver, {}, customTarget);
8290
+ this.bindCanvas("mouseout", this._mouseOut, {}, customTarget);
8291
+ this.bindCanvas("mousemove", this._mouseMove, {}, customTarget);
8292
+ this.bindCanvas("click", this._mouseClick, {}, customTarget);
8293
+ this.bindCanvas("contextmenu", this._contextMenu, {}, customTarget);
8063
8294
  this._hasMouse = true;
8064
8295
  } else {
8065
- this.unbindCanvas("mousedown", this._mouseDown);
8066
- this.unbindCanvas("mouseup", this._mouseUp);
8067
- this.unbindCanvas("mouseover", this._mouseOver);
8068
- this.unbindCanvas("mouseout", this._mouseOut);
8069
- this.unbindCanvas("mousemove", this._mouseMove);
8070
- this.unbindCanvas("click", this._mouseClick);
8071
- this.unbindCanvas("contextmenu", this._contextMenu);
8296
+ this.unbindCanvas("mousedown", this._mouseDown, {}, customTarget);
8297
+ this.unbindCanvas("mouseup", this._mouseUp, {}, customTarget);
8298
+ this.unbindCanvas("mouseover", this._mouseOver, {}, customTarget);
8299
+ this.unbindCanvas("mouseout", this._mouseOut, {}, customTarget);
8300
+ this.unbindCanvas("mousemove", this._mouseMove, {}, customTarget);
8301
+ this.unbindCanvas("click", this._mouseClick, {}, customTarget);
8302
+ this.unbindCanvas("contextmenu", this._contextMenu, {}, customTarget);
8072
8303
  this._hasMouse = false;
8073
8304
  }
8074
8305
  return this;
@@ -8078,22 +8309,41 @@ var MultiTouchSpace = function (_Space) {
8078
8309
  value: function bindTouch() {
8079
8310
  var bind = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
8080
8311
  var passive = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
8312
+ var customTarget = arguments[2];
8081
8313
 
8082
8314
  if (bind) {
8083
- this.bindCanvas("touchstart", this._touchStart.bind(this), { passive: passive });
8084
- this.bindCanvas("touchend", this._mouseUp.bind(this));
8085
- this.bindCanvas("touchmove", this._touchMove.bind(this), { passive: passive });
8086
- this.bindCanvas("touchcancel", this._mouseOut.bind(this));
8315
+ this.bindCanvas("touchstart", this._touchStart.bind(this), { passive: passive }, customTarget);
8316
+ this.bindCanvas("touchend", this._mouseUp.bind(this), {}, customTarget);
8317
+ this.bindCanvas("touchmove", this._touchMove.bind(this), { passive: passive }, customTarget);
8318
+ this.bindCanvas("touchcancel", this._mouseOut.bind(this), {}, customTarget);
8087
8319
  this._hasTouch = true;
8088
8320
  } else {
8089
- this.unbindCanvas("touchstart", this._touchStart.bind(this), { passive: passive });
8090
- this.unbindCanvas("touchend", this._mouseUp.bind(this));
8091
- this.unbindCanvas("touchmove", this._touchMove.bind(this), { passive: passive });
8092
- this.unbindCanvas("touchcancel", this._mouseOut.bind(this));
8321
+ this.unbindCanvas("touchstart", this._touchStart.bind(this), { passive: passive }, customTarget);
8322
+ this.unbindCanvas("touchend", this._mouseUp.bind(this), {}, customTarget);
8323
+ this.unbindCanvas("touchmove", this._touchMove.bind(this), { passive: passive }, customTarget);
8324
+ this.unbindCanvas("touchcancel", this._mouseOut.bind(this), {}, customTarget);
8093
8325
  this._hasTouch = false;
8094
8326
  }
8095
8327
  return this;
8096
8328
  }
8329
+ }, {
8330
+ key: "bindKeyboard",
8331
+ value: function bindKeyboard() {
8332
+ var bind = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
8333
+
8334
+ if (bind) {
8335
+ this._keyDownBind = this._keyDown.bind(this);
8336
+ this._keyUpBind = this._keyUp.bind(this);
8337
+ this.bindDoc("keydown", this._keyDownBind, {});
8338
+ this.bindDoc("keyup", this._keyUpBind, {});
8339
+ this._hasKeyboard = true;
8340
+ } else {
8341
+ this.unbindDoc("keydown", this._keyDownBind, {});
8342
+ this.unbindDoc("keyup", this._keyUpBind, {});
8343
+ this._hasKeyboard = false;
8344
+ }
8345
+ return this;
8346
+ }
8097
8347
  }, {
8098
8348
  key: "touchesToPoints",
8099
8349
  value: function touchesToPoints(evt) {
@@ -8110,6 +8360,7 @@ var MultiTouchSpace = function (_Space) {
8110
8360
  }, {
8111
8361
  key: "_mouseAction",
8112
8362
  value: function _mouseAction(type, evt) {
8363
+ if (!this.isPlaying) return;
8113
8364
  var px = 0,
8114
8365
  py = 0;
8115
8366
  if (evt instanceof MouseEvent) {
@@ -8209,6 +8460,29 @@ var MultiTouchSpace = function (_Space) {
8209
8460
  evt.preventDefault();
8210
8461
  return false;
8211
8462
  }
8463
+ }, {
8464
+ key: "_keyDown",
8465
+ value: function _keyDown(evt) {
8466
+ this._keyboardAction(UI_1.UIPointerActions.keydown, evt);
8467
+ return false;
8468
+ }
8469
+ }, {
8470
+ key: "_keyUp",
8471
+ value: function _keyUp(evt) {
8472
+ this._keyboardAction(UI_1.UIPointerActions.keyup, evt);
8473
+ return false;
8474
+ }
8475
+ }, {
8476
+ key: "_keyboardAction",
8477
+ value: function _keyboardAction(type, evt) {
8478
+ if (!this.isPlaying) return;
8479
+ for (var k in this.players) {
8480
+ if (this.players.hasOwnProperty(k)) {
8481
+ var v = this.players[k];
8482
+ if (v.action) v.action(type, evt.shiftKey ? 1 : 0, evt.altKey ? 1 : 0, evt);
8483
+ }
8484
+ }
8485
+ }
8212
8486
  }, {
8213
8487
  key: "pointer",
8214
8488
  get: function get() {
@@ -8847,7 +9121,11 @@ exports.UIShape = {
8847
9121
  rectangle: "rectangle", circle: "circle", polygon: "polygon", polyline: "polyline", line: "line"
8848
9122
  };
8849
9123
  exports.UIPointerActions = {
8850
- up: "up", down: "down", move: "move", drag: "drag", uidrag: "uidrag", drop: "drop", uidrop: "uidrop", over: "over", out: "out", enter: "enter", leave: "leave", click: "click", contextmenu: "contextmenu", all: "all"
9124
+ up: "up", down: "down", move: "move",
9125
+ drag: "drag", uidrag: "uidrag", drop: "drop", uidrop: "uidrop",
9126
+ over: "over", out: "out", enter: "enter", leave: "leave", click: "click",
9127
+ keydown: 'keydown', keyup: 'keyup',
9128
+ contextmenu: "contextmenu", all: "all"
8851
9129
  };
8852
9130
 
8853
9131
  var UI = function () {
@@ -9418,6 +9696,25 @@ var Util = function () {
9418
9696
  };
9419
9697
  request.send();
9420
9698
  }
9699
+ }, {
9700
+ key: "download",
9701
+ value: function download(space) {
9702
+ var filename = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'pts_canvas_image';
9703
+ var filetype = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "png";
9704
+ var quality = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1;
9705
+
9706
+ var ftype = filetype === 'jpg' ? 'jpeg' : filetype;
9707
+ space.element.toBlob(function (blob) {
9708
+ var link = document.createElement('a');
9709
+ var url = URL.createObjectURL(blob);
9710
+ link.href = url;
9711
+ link.download = filename + "." + filetype;
9712
+ document.body.appendChild(link);
9713
+ link.click();
9714
+ document.body.removeChild(link);
9715
+ URL.revokeObjectURL(url);
9716
+ }, "image/" + ftype, quality);
9717
+ }
9421
9718
  }, {
9422
9719
  key: "performance",
9423
9720
  value: function performance() {