diff options
Diffstat (limited to 'src/mask.js')
-rw-r--r-- | src/mask.js | 33 |
1 files changed, 31 insertions, 2 deletions
diff --git a/src/mask.js b/src/mask.js index ddd7565..6ebccdc 100644 --- a/src/mask.js +++ b/src/mask.js @@ -1,18 +1,47 @@ SVG.Mask = function() { this.constructor.call(this, SVG.create('mask')) + + /* keep references to masked elements */ + this.targets = [] } // Inherit from SVG.Container SVG.Mask.prototype = new SVG.Container // +SVG.extend(SVG.Mask, { + // Unmask all masked elements and remove itself + remove: function() { + /* unmask all targets */ + for (var i = this.targets.length - 1; i >= 0; i--) + if (this.targets[i]) + this.targets[i].unmask() + delete this.targets + + /* remove mask from parent */ + this.parent.removeElement(this) + + return this + } +}) + +// SVG.extend(SVG.Element, { // Distribute mask to svg element maskWith: function(element) { /* use given mask or create a new one */ - this.mask = element instanceof SVG.Mask ? element : this.parent.mask().add(element) + this.masker = element instanceof SVG.Mask ? element : this.parent.mask().add(element) + + /* store reverence on self in mask */ + this.masker.targets.push(this) - return this.attr('mask', 'url(#' + this.mask.attr('id') + ')') + /* apply mask */ + return this.attr('mask', 'url(#' + this.masker.attr('id') + ')') + } + // Unmask element +, unmask: function() { + delete this.masker + return this.attr('mask', null) } }) |