diff options
author | Pushkar Joshi | 2012-04-27 10:03:58 -0700 |
---|---|---|
committer | Pushkar Joshi | 2012-04-27 10:03:58 -0700 |
commit | 40a4d9dbc12e802e2d0a7c3acd69bc7e394d4529 (patch) | |
tree | 6b44ad4243062d5aec653434a96b4d661b674606 /js/tools | |
parent | d2ff4810064dd902519310fc61e2144ee025ab16 (diff) | |
download | ninja-40a4d9dbc12e802e2d0a7c3acd69bc7e394d4529.tar.gz |
Fix for 1525 Pen: "Uncaught RangeError: Maximum call stack size exceeded".
(check if the second mouse click actually selects the existing first anchor point)
Diffstat (limited to 'js/tools')
-rwxr-xr-x | js/tools/PenTool.js | 38 |
1 files changed, 30 insertions, 8 deletions
diff --git a/js/tools/PenTool.js b/js/tools/PenTool.js index 8ecc9f79..8cc32536 100755 --- a/js/tools/PenTool.js +++ b/js/tools/PenTool.js | |||
@@ -273,14 +273,36 @@ exports.PenTool = Montage.create(ShapeTool, { | |||
273 | var swMousePos = hitRec.calculateStageWorldPoint(); | 273 | var swMousePos = hitRec.calculateStageWorldPoint(); |
274 | swMousePos[0]+= snapManager.getStageWidth()*0.5; swMousePos[1]+= snapManager.getStageHeight()*0.5; | 274 | swMousePos[0]+= snapManager.getStageWidth()*0.5; swMousePos[1]+= snapManager.getStageHeight()*0.5; |
275 | 275 | ||
276 | this._selectedSubpath.addAnchor(new AnchorPoint()); | 276 | //check if the mouse click location is close to the existing anchor |
277 | var newAnchor = this._selectedSubpath.getAnchor(this._selectedSubpath.getSelectedAnchorIndex()); | 277 | var indexAndCode = this._selectedSubpath.pickAnchor(swMousePos[0], swMousePos[1], swMousePos[2], this._PICK_POINT_RADIUS); |
278 | newAnchor.setPos(swMousePos[0], swMousePos[1], swMousePos[2]); | 278 | if (indexAndCode[0]>=0){ |
279 | newAnchor.setPrevPos(swMousePos[0], swMousePos[1], swMousePos[2]); | 279 | //the anchor point was hit, so we do not add another anchor |
280 | newAnchor.setNextPos(swMousePos[0], swMousePos[1], swMousePos[2]); | 280 | switch(indexAndCode[1]){ |
281 | //set the mode so that dragging will update the next and previous locations | 281 | case this._selectedSubpath.SEL_ANCHOR: |
282 | this._editMode = this.EDIT_PREV_NEXT; | 282 | this._editMode = this.EDIT_ANCHOR; |
283 | } | 283 | break; |
284 | case this._selectedSubpath.SEL_PREV: | ||
285 | this._editMode = this.EDIT_PREV; | ||
286 | break; | ||
287 | case this._selectedSubpath.SEL_NEXT: | ||
288 | this._editMode = this.EDIT_NEXT; | ||
289 | break; | ||
290 | default: | ||
291 | this._editMode = this.EDIT_ANCHOR; | ||
292 | console.log("WARNING picked anchor point with incorrect mode"); | ||
293 | break; | ||
294 | } | ||
295 | |||
296 | } else { | ||
297 | this._selectedSubpath.addAnchor(new AnchorPoint()); | ||
298 | var newAnchor = this._selectedSubpath.getAnchor(this._selectedSubpath.getSelectedAnchorIndex()); | ||
299 | newAnchor.setPos(swMousePos[0], swMousePos[1], swMousePos[2]); | ||
300 | newAnchor.setPrevPos(swMousePos[0], swMousePos[1], swMousePos[2]); | ||
301 | newAnchor.setNextPos(swMousePos[0], swMousePos[1], swMousePos[2]); | ||
302 | //set the mode so that dragging will update the next and previous locations | ||
303 | this._editMode = this.EDIT_PREV_NEXT; | ||
304 | } | ||
305 | } //if we have not yet created a canvas for this path | ||
284 | 306 | ||
285 | //the selected subpath has a canvas, so test within that canvas' space | 307 | //the selected subpath has a canvas, so test within that canvas' space |
286 | else | 308 | else |