UNPKG

6.16 kBJavaScriptView Raw
1import { __extends } from "tslib";
2import { Dictionary } from "./utils/Dictionary";
3import { TargetedEventDispatcher } from "./utils/EventDispatcher";
4import { MultiDisposer, CounterDisposer } from "./utils/Disposer";
5import * as $utils from "./utils/Utils";
6import * as $object from "./utils/Object";
7/**
8 * An [[EventDispatcher]] for [[Sprite]].
9 *
10 * @important
11 */
12var SpriteEventDispatcher = /** @class */ (function (_super) {
13 __extends(SpriteEventDispatcher, _super);
14 function SpriteEventDispatcher() {
15 var _this = _super !== null && _super.apply(this, arguments) || this;
16 /**
17 * [_interactionEvents description]
18 *
19 * @todo Description
20 */
21 _this._interactionEvents = new Dictionary();
22 return _this;
23 }
24 /**
25 * [_dispatchSpriteEvent description]
26 *
27 * @todo Description
28 */
29 SpriteEventDispatcher.prototype._dispatchSpriteEvent = function (ev) {
30 if (this.target.disabled || this.target.isTemplate) {
31 return;
32 }
33 // TODO remove this <any> later
34 if (this.target.events.isEnabled(ev.type)) {
35 var imev = $object.merge(ev, {
36 target: this.target
37 });
38 this.target.events.dispatchImmediately(imev.type, imev);
39 }
40 };
41 /**
42 * [_dispatchSpritePointEvent description]
43 *
44 * @todo Description
45 */
46 SpriteEventDispatcher.prototype._dispatchSpritePointEvent = function (ev) {
47 if (this.target.disabled || this.target.isTemplate) {
48 return;
49 }
50 // TODO remove this <any> later
51 if (this.target.events.isEnabled(ev.type)) {
52 var imev = $object.merge(ev, {
53 target: this.target,
54 spritePoint: ev.point ? $utils.documentPointToSprite(ev.point, this.target) : undefined,
55 svgPoint: this.target.getSvgPoint(ev.point)
56 });
57 this.target.events.dispatchImmediately(imev.type, imev);
58 }
59 };
60 /**
61 * [_addInteractionObjectEvent description]
62 *
63 * @todo Description
64 */
65 SpriteEventDispatcher.prototype._addInteractionObjectEvent = function (type, callback, context, shouldClone) {
66 var _this = this;
67 var key = shouldClone + "-" + type;
68 var counter = this._interactionEvents.insertKeyIfEmpty(key, function () {
69 var disposer = _this.target.interactions.events.on(type, callback, context, shouldClone);
70 return new CounterDisposer(function () {
71 _this._interactionEvents.removeKey(key);
72 disposer.dispose();
73 });
74 });
75 return counter.increment();
76 };
77 /**
78 * [_on description]
79 *
80 * @todo Description
81 */
82 SpriteEventDispatcher.prototype._on = function (once, type, callback, context, shouldClone, dispatch) {
83 var info = _super.prototype._on.call(this, once, type, callback, context, shouldClone, dispatch);
84 var disposers = [info.disposer];
85 /**
86 * Catching Sprite-related events, converting them to [[SpriteEvent]] and
87 * triggering them on sprite
88 */
89 switch (type) {
90 case "hit":
91 case "track":
92 case "doublehit":
93 case "wheel":
94 case "wheelup":
95 case "wheeldown":
96 case "wheelleft":
97 case "wheelright":
98 disposers.push(this._addInteractionObjectEvent(type, this._dispatchSpritePointEvent, this, shouldClone));
99 break;
100 case "rightclick":
101 case "down":
102 //case "hold":
103 case "up":
104 case "drag":
105 case "dragged":
106 case "dragstart":
107 case "dragstop":
108 case "over":
109 case "out":
110 case "swipe":
111 case "swipeleft":
112 case "swiperight":
113 case "resize":
114 //case "rotate":
115 case "focus":
116 case "blur":
117 case "toggled":
118 disposers.push(this._addInteractionObjectEvent(type, this._dispatchSpriteEvent, this, shouldClone));
119 break;
120 }
121 /**
122 * Set functional properties based on events. For example if we add a
123 * "drag" event handler, we want to make the Sprite draggable, even if we
124 * don't explicitly set "draggable"
125 */
126 switch (type) {
127 case "hit":
128 case "doublehit":
129 case "rightclick":
130 case "down":
131 case "up":
132 this.target.clickable = true;
133 break;
134 case "toggled":
135 this.target.togglable = true;
136 break;
137 case "drag":
138 case "dragstart":
139 case "dragstop":
140 this.target.draggable = true;
141 break;
142 case "track":
143 this.target.trackable = true;
144 break;
145 case "resize":
146 this.target.resizable = true;
147 break;
148 case "swipe":
149 case "swipeleft":
150 case "swiperight":
151 this.target.swipeable = true;
152 break;
153 case "wheel":
154 case "wheelup":
155 case "wheeldown":
156 case "wheelleft":
157 case "wheelright":
158 this.target.wheelable = true;
159 break;
160 case "over":
161 this.target.hoverable = true;
162 case "out":
163 this.target.hoverable = true;
164 break;
165 case "focus":
166 case "blur":
167 this.target.focusable = true;
168 break;
169 }
170 info.disposer = new MultiDisposer(disposers);
171 return info;
172 };
173 return SpriteEventDispatcher;
174}(TargetedEventDispatcher));
175export { SpriteEventDispatcher };
176//# sourceMappingURL=SpriteEvents.js.map
\No newline at end of file