mirror of
https://github.com/scratchfoundation/paper.js.git
synced 2025-01-06 04:42:15 -05:00
Implement item-level #equals() method and clean up other equals methods.
This commit is contained in:
parent
83be3cb023
commit
73d2c34088
13 changed files with 71 additions and 16 deletions
|
@ -112,9 +112,9 @@ var Matrix = Base.extend(/** @lends Matrix# */{
|
||||||
* @return {Boolean} {@true if the matrices are equal}
|
* @return {Boolean} {@true if the matrices are equal}
|
||||||
*/
|
*/
|
||||||
equals: function(mx) {
|
equals: function(mx) {
|
||||||
return mx === this || mx && this._a == mx._a && this._b == mx._b
|
return mx === this || mx && this._a === mx._a && this._b === mx._b
|
||||||
&& this._c == mx._c && this._d == mx._d && this._tx == mx._tx
|
&& this._c === mx._c && this._d === mx._d
|
||||||
&& this._ty == mx._ty
|
&& this._tx === mx._tx && this._ty === mx._ty
|
||||||
|| false;
|
|| false;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
@ -205,7 +205,7 @@ var Rectangle = Base.extend(/** @lends Rectangle# */{
|
||||||
rect = Rectangle.read(arguments);
|
rect = Rectangle.read(arguments);
|
||||||
return rect === this
|
return rect === this
|
||||||
|| rect && this.x === rect.x && this.y === rect.y
|
|| rect && this.x === rect.x && this.y === rect.y
|
||||||
&& this.width === rect.width && this.height=== rect.height
|
&& this.width === rect.width && this.height === rect.height
|
||||||
|| false;
|
|| false;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
@ -1233,6 +1233,30 @@ var Item = Base.extend(Callback, /** @lends Item# */{
|
||||||
return this._parent ? this._parent.isInserted() : false;
|
return this._parent ? this._parent.isInserted() : false;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
equals: function(item) {
|
||||||
|
// Note: We do not compare name and selected state.
|
||||||
|
return item === this || item && this._class === item._class
|
||||||
|
&& this._style.equals(item._style)
|
||||||
|
&& this._matrix.equals(item._matrix)
|
||||||
|
&& this._locked === item._locked
|
||||||
|
&& this._visible === item._visible
|
||||||
|
&& this._blendMode === item._blendMode
|
||||||
|
&& this._opacity === item._opacity
|
||||||
|
&& this._clipMask === item._clipMask
|
||||||
|
&& this._guide === item._guide
|
||||||
|
&& this._equals(item)
|
||||||
|
|| false;
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A private helper for #equals(), to be overridden in sub-classes. When it
|
||||||
|
* is called, item is always defined, of the same class as `this` and has
|
||||||
|
* equal general state attributes such as matrix, style, opacity, etc.
|
||||||
|
*/
|
||||||
|
_equals: function(item) {
|
||||||
|
return Base.equals(this._children, item._children);
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Clones the item within the same project and places the copy above the
|
* Clones the item within the same project and places the copy above the
|
||||||
* item.
|
* item.
|
||||||
|
|
|
@ -79,6 +79,10 @@ var PlacedSymbol = Item.extend(/** @lends PlacedSymbol# */{
|
||||||
this.setSymbol(arg0 instanceof Symbol ? arg0 : new Symbol(arg0));
|
this.setSymbol(arg0 instanceof Symbol ? arg0 : new Symbol(arg0));
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_equals: function(item) {
|
||||||
|
return this._symbol === item._symbol;
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The symbol that the placed symbol refers to.
|
* The symbol that the placed symbol refers to.
|
||||||
*
|
*
|
||||||
|
|
|
@ -92,6 +92,10 @@ var Raster = Item.extend(/** @lends Raster# */{
|
||||||
this._size = new Size();
|
this._size = new Size();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_equals: function(item) {
|
||||||
|
return this.getSource() === item.getSource();
|
||||||
|
},
|
||||||
|
|
||||||
clone: function(insert) {
|
clone: function(insert) {
|
||||||
var param = { insert: false },
|
var param = { insert: false },
|
||||||
image = this._image;
|
image = this._image;
|
||||||
|
|
|
@ -31,6 +31,13 @@ var Shape = Item.extend(/** @lends Shape# */{
|
||||||
this._initialize(props, center);
|
this._initialize(props, center);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_equals: function(item) {
|
||||||
|
return this._shape === item._shape
|
||||||
|
&& this._size.equals(item._size)
|
||||||
|
// Radius can be a number or size:
|
||||||
|
&& Base.equals(this._radius, item._radius);
|
||||||
|
},
|
||||||
|
|
||||||
clone: function(insert) {
|
clone: function(insert) {
|
||||||
return this._clone(new Shape(this._shape, this.getPosition(true),
|
return this._clone(new Shape(this._shape, this.getPosition(true),
|
||||||
this._size.clone(),
|
this._size.clone(),
|
||||||
|
|
|
@ -96,6 +96,10 @@ var Path = PathItem.extend(/** @lends Path# */{
|
||||||
this._initialize(!segments && arg);
|
this._initialize(!segments && arg);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_equals: function(item) {
|
||||||
|
return Base.equals(this._segments, item._segments);
|
||||||
|
},
|
||||||
|
|
||||||
clone: function(insert) {
|
clone: function(insert) {
|
||||||
var copy = this._clone(new Path({
|
var copy = this._clone(new Path({
|
||||||
segments: this._segments,
|
segments: this._segments,
|
||||||
|
|
|
@ -478,7 +478,7 @@ var Segment = Base.extend(/** @lends Segment# */{
|
||||||
},
|
},
|
||||||
|
|
||||||
equals: function(segment) {
|
equals: function(segment) {
|
||||||
return segment === this || segment
|
return segment === this || segment && this._class === segment._class
|
||||||
&& this._point.equals(segment._point)
|
&& this._point.equals(segment._point)
|
||||||
&& this._handleIn.equals(segment._handleIn)
|
&& this._handleIn.equals(segment._handleIn)
|
||||||
&& this._handleOut.equals(segment._handleOut)
|
&& this._handleOut.equals(segment._handleOut)
|
||||||
|
|
|
@ -740,7 +740,8 @@ var Color = Base.extend(new function() {
|
||||||
equals: function(color) {
|
equals: function(color) {
|
||||||
if (Base.isPlainValue(color))
|
if (Base.isPlainValue(color))
|
||||||
color = Color.read(arguments);
|
color = Color.read(arguments);
|
||||||
return color === this || color && this._type === color._type
|
return color === this || color && this._class === color._class
|
||||||
|
&& this._type === color._type
|
||||||
&& this._alpha === color._alpha
|
&& this._alpha === color._alpha
|
||||||
&& Base.equals(this._components, color._components)
|
&& Base.equals(this._components, color._components)
|
||||||
|| false;
|
|| false;
|
||||||
|
|
|
@ -180,8 +180,10 @@ var Gradient = Base.extend(/** @lends Gradient# */{
|
||||||
* @return {Boolean} {@true they are equal}
|
* @return {Boolean} {@true they are equal}
|
||||||
*/
|
*/
|
||||||
equals: function(gradient) {
|
equals: function(gradient) {
|
||||||
if (gradient && gradient.constructor == this.constructor
|
if (gradient === this)
|
||||||
&& this._stops.length == gradient._stops.length) {
|
return true;
|
||||||
|
if (gradient && this._class === gradient._class
|
||||||
|
&& this._stops.length === gradient._stops.length) {
|
||||||
for (var i = 0, l = this._stops.length; i < l; i++) {
|
for (var i = 0, l = this._stops.length; i < l; i++) {
|
||||||
if (!this._stops[i].equals(gradient._stops[i]))
|
if (!this._stops[i].equals(gradient._stops[i]))
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -174,7 +174,7 @@ var GradientStop = Base.extend(/** @lends GradientStop# */{
|
||||||
},
|
},
|
||||||
|
|
||||||
equals: function(stop) {
|
equals: function(stop) {
|
||||||
return stop === this || stop instanceof GradientStop
|
return stop === this || stop && this._class === stop._class
|
||||||
&& this._color.equals(stop._color)
|
&& this._color.equals(stop._color)
|
||||||
&& this._rampPoint == stop._rampPoint
|
&& this._rampPoint == stop._rampPoint
|
||||||
|| false;
|
|| false;
|
||||||
|
|
|
@ -235,6 +235,12 @@ var Style = Base.extend(new function() {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
equals: function(style) {
|
||||||
|
return style === this || style && this._class === style._class
|
||||||
|
&& Base.equals(this._values, style._values)
|
||||||
|
|| false;
|
||||||
|
},
|
||||||
|
|
||||||
getLeading: function getLeading() {
|
getLeading: function getLeading() {
|
||||||
// Override leading to return fontSize * 1.2 by default.
|
// Override leading to return fontSize * 1.2 by default.
|
||||||
var leading = getLeading.base.call(this);
|
var leading = getLeading.base.call(this);
|
||||||
|
|
|
@ -44,11 +44,20 @@ var TextItem = Item.extend(/** @lends TextItem# */{
|
||||||
this._initialize(hasProps && arg, !hasProps && Point.read(arguments));
|
this._initialize(hasProps && arg, !hasProps && Point.read(arguments));
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_equals: function(item) {
|
||||||
|
return this._content === item._content;
|
||||||
|
},
|
||||||
|
|
||||||
|
_clone: function _clone(copy) {
|
||||||
|
copy.setContent(this._content);
|
||||||
|
return _clone.base.call(this, copy);
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The text contents of the text item.
|
* The text contents of the text item.
|
||||||
*
|
*
|
||||||
* @name TextItem#content
|
|
||||||
* @type String
|
* @type String
|
||||||
|
* @bean
|
||||||
*
|
*
|
||||||
* @example {@paperscript}
|
* @example {@paperscript}
|
||||||
* // Setting the content of a PointText item:
|
* // Setting the content of a PointText item:
|
||||||
|
@ -75,12 +84,6 @@ var TextItem = Item.extend(/** @lends TextItem# */{
|
||||||
* text.content = 'Your position is: ' + event.point.toString();
|
* text.content = 'Your position is: ' + event.point.toString();
|
||||||
* }
|
* }
|
||||||
*/
|
*/
|
||||||
|
|
||||||
_clone: function _clone(copy) {
|
|
||||||
copy.setContent(this._content);
|
|
||||||
return _clone.base.call(this, copy);
|
|
||||||
},
|
|
||||||
|
|
||||||
getContent: function() {
|
getContent: function() {
|
||||||
return this._content;
|
return this._content;
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in a new issue