mirror of
https://github.com/scratchfoundation/paper.js.git
synced 2025-01-03 19:45:44 -05:00
parent
740c94e367
commit
0ae232e4ab
3 changed files with 41 additions and 3 deletions
|
@ -167,6 +167,12 @@ var Group = Item.extend(/** @lends Group# */{
|
||||||
child.setClipMask(clipped);
|
child.setClipMask(clipped);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_hitTestChildren: function _hitTestChildren(point, options) {
|
||||||
|
var clipItem = this._getClipItem();
|
||||||
|
return (!clipItem || clipItem.contains(point))
|
||||||
|
&& _hitTestChildren.base.call(this, point, options, clipItem);
|
||||||
|
},
|
||||||
|
|
||||||
_draw: function(ctx, param) {
|
_draw: function(ctx, param) {
|
||||||
var clip = param.clip,
|
var clip = param.clip,
|
||||||
clipItem = !clip && this._getClipItem();
|
clipItem = !clip && this._getClipItem();
|
||||||
|
|
|
@ -1836,12 +1836,14 @@ new function() { // // Scope to inject various item event handlers
|
||||||
return res;
|
return res;
|
||||||
},
|
},
|
||||||
|
|
||||||
_hitTestChildren: function(point, options) {
|
_hitTestChildren: function(point, options, _exclude) {
|
||||||
|
// NOTE: _exclude is only used in Group#_hitTestChildren()
|
||||||
var children = this._children;
|
var children = this._children;
|
||||||
if (children) {
|
if (children) {
|
||||||
// Loop backwards, so items that get drawn last are tested first
|
// Loop backwards, so items that get drawn last are tested first
|
||||||
for (var i = children.length - 1; i >= 0; i--) {
|
for (var i = children.length - 1; i >= 0; i--) {
|
||||||
var res = children[i]._hitTest(point, options);
|
var child = children[i];
|
||||||
|
var res = child !== _exclude && child._hitTest(point, options);
|
||||||
if (res)
|
if (res)
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
|
@ -684,7 +684,7 @@ test('hit-testing compound-paths', function() {
|
||||||
var result = paper.project.hitTest(center, {
|
var result = paper.project.hitTest(center, {
|
||||||
fill: true
|
fill: true
|
||||||
});
|
});
|
||||||
return result === null ;
|
return result === null;
|
||||||
}, true);
|
}, true);
|
||||||
// When asking specifically for paths, she should get the top-most path in
|
// When asking specifically for paths, she should get the top-most path in
|
||||||
// the center (the one that cuts out the hole)
|
// the center (the one that cuts out the hole)
|
||||||
|
@ -697,5 +697,35 @@ test('hit-testing compound-paths', function() {
|
||||||
}, true);
|
}, true);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('hit-testing clipped items', function() {
|
||||||
|
var rect = new Path.Rectangle({
|
||||||
|
point: [50, 150],
|
||||||
|
size: [100, 50],
|
||||||
|
fillColor: 'red'
|
||||||
|
});
|
||||||
|
var circle = new Path.Circle({
|
||||||
|
center: [100, 200],
|
||||||
|
radius: 20,
|
||||||
|
fillColor: 'green'
|
||||||
|
});
|
||||||
|
var group = new Group({
|
||||||
|
children: [rect, circle]
|
||||||
|
});
|
||||||
|
group.clipped = true;
|
||||||
|
|
||||||
|
var point1 = new Point(100, 190);
|
||||||
|
var point2 = new Point(100, 210);
|
||||||
|
|
||||||
|
equals(function() {
|
||||||
|
var result = paper.project.hitTest(point1);
|
||||||
|
return result && result.item === circle;
|
||||||
|
}, true);
|
||||||
|
|
||||||
|
equals(function() {
|
||||||
|
var result = paper.project.hitTest(point2);
|
||||||
|
return result === null;
|
||||||
|
}, true);
|
||||||
|
});
|
||||||
|
|
||||||
// TODO: project.hitTest(point, {type: AnItemType});
|
// TODO: project.hitTest(point, {type: AnItemType});
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue