diff --git a/bower.json b/bower.json index 5e783bd9..f051d996 100644 --- a/bower.json +++ b/bower.json @@ -14,7 +14,7 @@ "test" ], "devDependencies": { - "straps": "~1.4.2", + "straps": "~1.4.3", "acorn": "git://github.com/paperjs/acorn#0.3.2", "esprima": "~1.0.3", "stats.js": "r11" diff --git a/src/basic/Point.js b/src/basic/Point.js index 67523eee..9abf966a 100644 --- a/src/basic/Point.js +++ b/src/basic/Point.js @@ -491,7 +491,6 @@ var Point = Base.extend(/** @lends Point# */{ this.y * scale ); } - return this; }, /** @@ -533,28 +532,16 @@ var Point = Base.extend(/** @lends Point# */{ * @type Number */ getAngle: function(/* point */) { - // Hide parameters from Bootstrap so it injects bean too return this.getAngleInRadians.apply(this, arguments) * 180 / Math.PI; }, setAngle: function(angle) { - // We store a reference to _angle internally so we still preserve it - // when the vector's length is set to zero, and then anything else. - // Note that we cannot rely on it if x and y are something else than 0, - // since updating x / y does not automatically change _angle! - angle = this._angle = angle * Math.PI / 180; - if (!this.isZero()) { - var length = this.getLength(); - // Use #set() instead of direct assignment of x/y, so LinkedPoint - // does not report changes twice. - this.set( - Math.cos(angle) * length, - Math.sin(angle) * length - ); - } - return this; + this.setAngleInRadians.call(this, angle * Math.PI / 180); }, + getAngleInDegrees: '#getAngle', + setAngleInDegrees: '#setAngle', + /** * Returns the smaller angle between two vectors in radians. The angle is * unsigned, no information about rotational direction is given. @@ -572,8 +559,7 @@ var Point = Base.extend(/** @lends Point# */{ * @type Number */ getAngleInRadians: function(/* point */) { - // Hide parameters from Bootstrap so it injects bean too - if (arguments[0] === undefined) { + if (!arguments.length) { return this.isZero() // Return the preseved angle in case the vector has no // length, and update the internal _angle in case the @@ -592,8 +578,21 @@ var Point = Base.extend(/** @lends Point# */{ } }, - getAngleInDegrees: function(/* point */) { - return this.getAngle(arguments[0]); + setAngleInRadians: function(angle) { + // We store a reference to _angle internally so we still preserve it + // when the vector's length is set to zero, and then anything else. + // Note that we cannot rely on it if x and y are something else than 0, + // since updating x / y does not automatically change _angle! + this._angle = angle; + if (!this.isZero()) { + var length = this.getLength(); + // Use #set() instead of direct assignment of x/y, so LinkedPoint + // does not report changes twice. + this.set( + Math.cos(angle) * length, + Math.sin(angle) * length + ); + } }, /** diff --git a/src/basic/Rectangle.js b/src/basic/Rectangle.js index 1555e569..64d01ee4 100644 --- a/src/basic/Rectangle.js +++ b/src/basic/Rectangle.js @@ -237,8 +237,8 @@ var Rectangle = Base.extend(/** @lends Rectangle# */{ * @type Point * @bean */ - getPoint: function(/* dontLink */) { - var ctor = arguments[0] ? Point : LinkedPoint; + getPoint: function(_dontLink) { + var ctor = _dontLink ? Point : LinkedPoint; return new ctor(this.x, this.y, this, 'setPoint'); }, @@ -255,8 +255,8 @@ var Rectangle = Base.extend(/** @lends Rectangle# */{ * @type Size * @bean */ - getSize: function(/* dontLink */) { - var ctor = arguments[0] ? Size : LinkedSize; + getSize: function(_dontLink) { + var ctor = _dontLink ? Size : LinkedSize; return new ctor(this.width, this.height, this, 'setSize'); }, @@ -401,8 +401,8 @@ var Rectangle = Base.extend(/** @lends Rectangle# */{ * @type Point * @bean */ - getCenter: function(/* dontLink */) { - var ctor = arguments[0] ? Point : LinkedPoint; + getCenter: function(_dontLink) { + var ctor = _dontLink ? Point : LinkedPoint; return new ctor(this.getCenterX(), this.getCenterY(), this, 'setCenter'); }, @@ -812,8 +812,8 @@ var Rectangle = Base.extend(/** @lends Rectangle# */{ setY = 'set' + y, get = 'get' + part, set = 'set' + part; - this[get] = function(/* dontLink */) { - var ctor = arguments[0] ? Point : LinkedPoint; + this[get] = function(_dontLink) { + var ctor = _dontLink ? Point : LinkedPoint; return new ctor(this[getX](), this[getY](), this, set); }; this[set] = function(/* point */) { diff --git a/src/item/Item.js b/src/item/Item.js index f1dbfbf3..60dd9630 100644 --- a/src/item/Item.js +++ b/src/item/Item.js @@ -762,11 +762,11 @@ var Item = Base.extend(Callback, /** @lends Item# */{ * // Move the circle 100 points to the right * circle.position.x += 100; */ - getPosition: function(/* dontLink */) { + getPosition: function(_dontLink) { // Cache position value. - // Pass true for dontLink in getCenter(), so receive back a normal point + // Pass true for _dontLink in getCenter(), so receive back a normal point var position = this._position, - ctor = arguments[0] ? Point : LinkedPoint; + ctor = _dontLink ? Point : LinkedPoint; // Do not cache LinkedPoints directly, since we would not be able to // use them to calculate the difference in #setPosition, as when it is // modified, it would hold new values already and only then cause the @@ -784,7 +784,7 @@ var Item = Base.extend(Callback, /** @lends Item# */{ setPosition: function(/* point */) { // Calculate the distance to the current position, by which to - // translate the item. Pass true for dontLink, as we do not need a + // translate the item. Pass true for _dontLink, as we do not need a // LinkedPoint to simply calculate this distance. this.translate(Point.read(arguments).subtract(this.getPosition(true))); }, @@ -802,10 +802,10 @@ var Item = Base.extend(Callback, /** @lends Item# */{ * * @example {@paperscript} */ - getPivot: function(/* dontLink */) { + getPivot: function(_dontLink) { var pivot = this._pivot; if (pivot) { - var ctor = arguments[0] ? Point : LinkedPoint; + var ctor = _dontLink ? Point : LinkedPoint; pivot = new ctor(pivot.x, pivot.y, this, 'setAnchor'); } return pivot; @@ -2790,7 +2790,7 @@ var Item = Base.extend(Callback, /** @lends Item# */{ // color styles (only gradients so far) and pivot point: var pivot = this._pivot, style = this._style, - // pass true for dontMerge so we don't recursively transform + // pass true for _dontMerge so we don't recursively transform // styles on groups' children. fillColor = style.getFillColor(true), strokeColor = style.getStrokeColor(true); diff --git a/src/item/Raster.js b/src/item/Raster.js index 66c131bd..96840cd3 100644 --- a/src/item/Raster.js +++ b/src/item/Raster.js @@ -244,13 +244,13 @@ var Raster = Item.extend(/** @lends Raster# */{ * @type Context * @bean */ - getContext: function(/* modify */) { + getContext: function(modify) { if (!this._context) this._context = this.getCanvas().getContext('2d'); // Support a hidden parameter that indicates if the context will be used // to modify the Raster object. We can notify such changes ahead since // they are only used afterwards for redrawing. - if (arguments[0]) { + if (modify) { // Also set _image to null since the Raster stops representing it. // NOTE: This should theoretically be in our own _changed() handler // for ChangeFlag.PIXELS, but since it's only happening in one place diff --git a/src/path/CompoundPath.js b/src/path/CompoundPath.js index 658887a6..09e5e373 100644 --- a/src/path/CompoundPath.js +++ b/src/path/CompoundPath.js @@ -228,11 +228,11 @@ var CompoundPath = PathItem.extend(/** @lends CompoundPath# */{ return area; }, - getPathData: function(/* precision */) { + getPathData: function(precision) { var children = this._children, paths = []; for (var i = 0, l = children.length; i < l; i++) - paths.push(children[i].getPathData(arguments[0])); + paths.push(children[i].getPathData(precision)); return paths.join(' '); }, diff --git a/src/path/CurveLocation.js b/src/path/CurveLocation.js index f04845c5..6e34295f 100644 --- a/src/path/CurveLocation.js +++ b/src/path/CurveLocation.js @@ -61,13 +61,13 @@ var CurveLocation = Base.extend(/** @lends CurveLocation# */{ * @type Segment * @bean */ - getSegment: function(/* preferFirst */) { + getSegment: function(_preferFirst) { if (!this._segment) { var curve = this.getCurve(), parameter = this.getParameter(); if (parameter === 1) { this._segment = curve._segment2; - } else if (parameter === 0 || arguments[0]) { + } else if (parameter === 0 || _preferFirst) { this._segment = curve._segment1; } else if (parameter == null) { return null; @@ -82,14 +82,21 @@ var CurveLocation = Base.extend(/** @lends CurveLocation# */{ return this._segment; }, + setSegment: function(segment) { + // NOTE: We only include this setter so the above getter can declare + // the _preferFirst parameter without having to hide it. + // See Strap.js beans conventions. + this._segment = segment; + }, + /** * The curve by which the location is defined. * * @type Curve * @bean */ - getCurve: function(/* uncached */) { - if (!this._curve || arguments[0]) { + getCurve: function(_uncached) { + if (!this._curve || _uncached) { // If we're asked to get the curve uncached, access current curve // objects through segment1 / segment2. Since path splitting or // dividing might have happened in the meantime, try segment1's @@ -102,6 +109,11 @@ var CurveLocation = Base.extend(/** @lends CurveLocation# */{ return this._curve; }, + setCurve: function(curve) { + // See #setSegment() + this._curve = curve; + }, + /** * The curve location on the intersecting curve, if this location is the * result of a call to {@link PathItem#getIntersections(path)} / @@ -179,14 +191,19 @@ var CurveLocation = Base.extend(/** @lends CurveLocation# */{ * @type Number * @bean */ - getParameter: function(/* uncached */) { - if ((this._parameter == null || arguments[0]) && this._point) { - var curve = this.getCurve(arguments[0] && this._point); + getParameter: function(_uncached) { + if ((this._parameter == null || _uncached) && this._point) { + var curve = this.getCurve(_uncached && this._point); this._parameter = curve && curve.getParameterOf(this._point); } return this._parameter; }, + setParameter: function(parameter) { + // See #setSegment() + this._parameter = parameter; + }, + /** * The point which is defined by the {@link #curve} and * {@link #parameter}. @@ -194,14 +211,19 @@ var CurveLocation = Base.extend(/** @lends CurveLocation# */{ * @type Point * @bean */ - getPoint: function(/* uncached */) { - if ((!this._point || arguments[0]) && this._parameter != null) { + getPoint: function(_uncached) { + if ((!this._point || _uncached) && this._parameter != null) { var curve = this.getCurve(); this._point = curve && curve.getPointAt(this._parameter, true); } return this._point; }, + setPoint: function(point) { + // See #setSegment() + this._point = point; + }, + /** * The tangential vector to the {@link #curve} at the given location. * diff --git a/src/path/Path.js b/src/path/Path.js index 9c8c0c01..e4d004d3 100644 --- a/src/path/Path.js +++ b/src/path/Path.js @@ -245,9 +245,8 @@ var Path = PathItem.extend(/** @lends Path# */{ * @type String * @bean */ - getPathData: function(/* precision */) { + getPathData: function(precision) { var segments = this._segments, - precision = arguments[0], f = Formatter.instance, parts = []; @@ -690,7 +689,7 @@ var Path = PathItem.extend(/** @lends Path# */{ * // Select the path, so we can see its segments: * path.selected = true; */ - removeSegments: function(from, to/*, includeCurves */) { + removeSegments: function(from, to, _includeCurves) { from = from || 0; to = Base.pick(to, this._segments.length); var segments = this._segments, @@ -724,7 +723,7 @@ var Path = PathItem.extend(/** @lends Path# */{ // Return the removed curves as well, if we're asked to include // them, but exclude the first curve, since that's shared with the // previous segment and does not connect the returned segments. - if (arguments[2]) + if (_includeCurves) removed._curves = curves.slice(1); // Adjust segments for the curves before and after the removed ones this._adjustCurves(index, index); diff --git a/src/path/Segment.js b/src/path/Segment.js index 42d1bd4b..75780c29 100644 --- a/src/path/Segment.js +++ b/src/path/Segment.js @@ -310,26 +310,24 @@ var Segment = Base.extend(/** @lends Segment# */{ * // Select the third segment point: * path.segments[2].selected = true; */ - isSelected: function(/* point */) { - var point = arguments[0], // Hidden, only used in SegmentPoint - state = this._selectionState; - return !point ? !!(state & /*#=*/ SelectionState.SEGMENT) - : point === this._point ? !!(state & /*#=*/ SelectionState.POINT) - : point === this._handleIn ? !!(state & /*#=*/ SelectionState.HANDLE_IN) - : point === this._handleOut ? !!(state & /*#=*/ SelectionState.HANDLE_OUT) + isSelected: function(_point) { + var state = this._selectionState; + return !_point ? !!(state & /*#=*/ SelectionState.SEGMENT) + : _point === this._point ? !!(state & /*#=*/ SelectionState.POINT) + : _point === this._handleIn ? !!(state & /*#=*/ SelectionState.HANDLE_IN) + : _point === this._handleOut ? !!(state & /*#=*/ SelectionState.HANDLE_OUT) : false; }, - setSelected: function(selected /*, point */) { - var point = arguments[1]; // Hidden, only used in SegmentPoint - path = this._path, + setSelected: function(selected, _point) { + var path = this._path, selected = !!selected, // convert to boolean state = this._selectionState, oldState = state, - flag = !point ? /*#=*/ SelectionState.SEGMENT - : point === this._point ? /*#=*/ SelectionState.POINT - : point === this._handleIn ? /*#=*/ SelectionState.HANDLE_IN - : point === this._handleOut ? /*#=*/ SelectionState.HANDLE_OUT + flag = !_point ? /*#=*/ SelectionState.SEGMENT + : _point === this._point ? /*#=*/ SelectionState.POINT + : _point === this._handleIn ? /*#=*/ SelectionState.HANDLE_IN + : _point === this._handleOut ? /*#=*/ SelectionState.HANDLE_OUT : 0; if (selected) { state |= flag; diff --git a/src/project/Symbol.js b/src/project/Symbol.js index 3b300816..52bb6961 100644 --- a/src/project/Symbol.js +++ b/src/project/Symbol.js @@ -115,7 +115,7 @@ var Symbol = Base.extend(/** @lends Symbol# */{ return this._definition; }, - setDefinition: function(item /*, dontCenter */) { + setDefinition: function(item, _dontCenter) { // Make sure we're not steatling another symbol's definition if (item._parentSymbol) item = item.clone(); @@ -127,7 +127,7 @@ var Symbol = Base.extend(/** @lends Symbol# */{ item.remove(); item.setSelected(false); // Move position to 0, 0, so it's centered when placed. - if (!arguments[1]) + if (!_dontCenter) item.setPosition(new Point()); item._parentSymbol = this; this._changed(/*#=*/ Change.GEOMETRY); diff --git a/src/style/Style.js b/src/style/Style.js index 5a4d4b56..c633aac3 100644 --- a/src/style/Style.js +++ b/src/style/Style.js @@ -168,13 +168,13 @@ var Style = Base.extend(new function() { } }; - fields[get] = function(/* dontMerge */) { + fields[get] = function(_dontMerge) { var value, children = this._item && this._item._children; // If this item has children, walk through all of them and see if // they all have the same style. - // If true is passed for dontMerge, don't merge children styles - if (!children || children.length === 0 || arguments[0] + // If true is passed for _dontMerge, don't merge children styles + if (!children || children.length === 0 || _dontMerge || this._item instanceof CompoundPath) { var value = this._values[key]; if (value === undefined) { diff --git a/src/ui/View.js b/src/ui/View.js index 1fe44e7e..781afe1b 100644 --- a/src/ui/View.js +++ b/src/ui/View.js @@ -334,8 +334,8 @@ var View = Base.extend(Callback, /** @lends View# */{ * @type Size * @bean */ - getSize: function(/* dontLink */) { - return this.getBounds().getSize(arguments[0]); + getSize: function() { + return this.getBounds().getSize(); }, /** @@ -344,8 +344,8 @@ var View = Base.extend(Callback, /** @lends View# */{ * @type Point * @bean */ - getCenter: function(/* dontLink */) { - return this.getBounds().getCenter(arguments[0]); + getCenter: function() { + return this.getBounds().getCenter(); }, setCenter: function(center) {