mirror of
https://github.com/scratchfoundation/paper.js.git
synced 2025-01-05 20:32:00 -05:00
Make Item#removeOn() calls work with new event callback mechanism.
This commit is contained in:
parent
78d1ce1540
commit
3dfb4d3ae5
2 changed files with 25 additions and 46 deletions
|
@ -1935,46 +1935,6 @@ var Item = this.Item = Base.extend(/** @lends Item# */{
|
|||
* }
|
||||
*/
|
||||
|
||||
var sets = {
|
||||
down: {}, drag: {}, up: {}, move: {}
|
||||
};
|
||||
|
||||
function removeAll(set) {
|
||||
for (var id in set) {
|
||||
var item = set[id];
|
||||
item.remove();
|
||||
for (var type in sets) {
|
||||
var other = sets[type];
|
||||
if (other != set && other[item.getId()])
|
||||
delete other[item.getId()];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function installHandler(name) {
|
||||
var handler = 'onMouse' + Base.capitalize(name);
|
||||
// Inject a onMouse handler that performs all the behind the scene magic
|
||||
// and calls the script's handler at the end, if defined.
|
||||
var func = paper.tool[handler];
|
||||
if (!func || !func._installed) {
|
||||
var hash = {};
|
||||
hash[handler] = function(event) {
|
||||
// Always clear the drag set on mouseup
|
||||
if (name === 'up')
|
||||
sets.drag = {};
|
||||
removeAll(sets[name]);
|
||||
sets[name] = {};
|
||||
// Call the script's overridden handler, if defined
|
||||
if (this.base)
|
||||
this.base(event);
|
||||
};
|
||||
paper.tool.inject(hash);
|
||||
// Only install this handler once, and mark it as installed,
|
||||
// to prevent repeated installing.
|
||||
paper.tool[handler]._installed = true;
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: implement Item#removeOnFrame
|
||||
return Base.each(['down', 'drag', 'up', 'move'], function(name) {
|
||||
this['removeOn' + Base.capitalize(name)] = function() {
|
||||
|
@ -1986,12 +1946,10 @@ var Item = this.Item = Base.extend(/** @lends Item# */{
|
|||
removeOn: function(obj) {
|
||||
for (var name in obj) {
|
||||
if (obj[name]) {
|
||||
sets[name][this.getId()] = this;
|
||||
// Since the drag set gets cleared in up, we need to make
|
||||
// sure it's installed too
|
||||
if (name === 'drag')
|
||||
installHandler('up');
|
||||
installHandler(name);
|
||||
var key = 'mouse' + name,
|
||||
sets = Tool._removeSets = Tool._removeSets || {};
|
||||
sets[key] = sets[key] || {};
|
||||
sets[key][this.getId()] = this;
|
||||
}
|
||||
}
|
||||
return this;
|
||||
|
|
|
@ -328,6 +328,27 @@ var Tool = this.Tool = PaperScopeItem.extend(Callback, /** @lends Tool# */{
|
|||
onHandleEvent: function(type, pt, event) {
|
||||
// Update global reference to this scope.
|
||||
paper = this._scope;
|
||||
// Handle removeOn* calls first
|
||||
var sets = Tool._removeSets;
|
||||
if (sets) {
|
||||
// Always clear the drag set on mouseup
|
||||
if (type === 'mouseup')
|
||||
sets.mousedrag = null;
|
||||
var set = sets[type];
|
||||
if (set) {
|
||||
for (var id in set) {
|
||||
var item = set[id];
|
||||
for (var key in sets) {
|
||||
var other = sets[key];
|
||||
if (other && other != set && other[item.getId()])
|
||||
delete other[item.getId()];
|
||||
}
|
||||
item.remove();
|
||||
}
|
||||
sets[type] = null;
|
||||
}
|
||||
}
|
||||
// Now handle event callbacks
|
||||
var called = false;
|
||||
switch (type) {
|
||||
case 'mousedown':
|
||||
|
|
Loading…
Reference in a new issue