diff options
author | Jonathan Duran | 2012-02-09 12:10:37 -0800 |
---|---|---|
committer | Jonathan Duran | 2012-02-09 12:10:37 -0800 |
commit | 2092acf520e3f346f15e42c76c2f616e7d094c97 (patch) | |
tree | 9b6948aa3efc69015ed6988540e66984f34ef79c /js/tools | |
parent | 74832b23c768974f71a32044c5d5481909ece931 (diff) | |
download | ninja-2092acf520e3f346f15e42c76c2f616e7d094c97.tar.gz |
Squashed commit of the following:
commit ce81a3f4387d80f9ac406e73b843fb5dbe9cf432
Merge: e78f431 fba39db
Author: Valerio Virgillito <valerio@motorola.com>
Date: Thu Feb 9 11:57:35 2012 -0800
Merge pull request #26 from pushkarjoshi/pentool
Pentool
commit e78f4312c194d9e8188075cf1fe87e4be22b24e4
Author: Valerio Virgillito <valerio@motorola.com>
Date: Thu Feb 9 11:56:40 2012 -0800
adding oneway to the 3d bindings to fix a bug where the stage was getting selected.
Signed-off-by: Valerio Virgillito <valerio@motorola.com>
commit fba39dbb3bd64eddf6162fbf57232089e446fb06
Author: Pushkar Joshi <pushkar@motorola.com>
Date: Thu Feb 9 10:50:05 2012 -0800
removing shaders
commit fa700027b541ec8f37c55f4fe17da5f78759ebd5
Author: Pushkar Joshi <pushkar@motorola.com>
Date: Wed Feb 8 16:06:37 2012 -0800
fill all paths even if they are open
commit 18243deb66ab14a014756bfb0be1a52648c7771a
Merge: 802e92e 0537f8f
Author: Pushkar Joshi <pushkar@motorola.com>
Date: Wed Feb 8 15:42:40 2012 -0800
Merge branch 'master' into pentool
Conflicts:
js/helper-classes/RDGE/GLWorld.js
js/helper-classes/RDGE/MaterialsLibrary.js
commit 802e92eb70b00849dadacf2c6590d27edbe65d99
Author: Pushkar Joshi <pushkar@motorola.com>
Date: Wed Feb 8 15:39:47 2012 -0800
bug fixes for better anchor point rotation and removing snapping on hover and mouse down
commit 9b6b228524f14bf65ba60aaf3d0993c8ec5bff2d
Author: Pushkar Joshi <pushkar@motorola.com>
Date: Tue Feb 7 15:22:11 2012 -0800
some minor bug fixes and code cleanup
commit 4bbe42e6d01fd0f81d13357a75b40eae9925dda3
Merge: e7aa17a 8950b34
Author: Pushkar Joshi <pushkar@motorola.com>
Date: Tue Feb 7 07:21:27 2012 -0800
Merge branch 'master' into pentool
commit e7aa17a9b472640355e95c54841399f6203050d4
Author: Pushkar Joshi <pushkar@motorola.com>
Date: Tue Feb 7 07:20:28 2012 -0800
don't use colorToHex function because it only works for 3D color (needs a fix to colorToHex)
commit acc500d1f1c76f4e7c93ae1cfea8d925ca95e7b9
Merge: 4d4de64 4222db9
Author: Pushkar Joshi <pushkar@motorola.com>
Date: Thu Feb 2 11:28:45 2012 -0800
Merge branch 'working' of c:/Code/github/emueller/ninja-internal/ into pentool
commit 4d4de64472603426a73b26cc98ba8206190949b8
Merge: 0e87c02 5233508
Author: Pushkar Joshi <pushkar@motorola.com>
Date: Thu Feb 2 11:19:30 2012 -0800
Merge branch 'master' into pentool
commit 4222db97e353fb65fab787ba5927d16d9fa4e1f7
Author: hwc487 <hwc487@motorola.com>
Date: Wed Feb 1 16:18:26 2012 -0800
Removed a console log and set the Plasma material to animating.
commit 30bc466a0ac80f8303e223c19704b90457293cdc
Author: hwc487 <hwc487@motorola.com>
Date: Wed Feb 1 15:57:20 2012 -0800
Fixed plane orientations for view orientations other than front.
commit 11db5a63bda57c630eaf1d8baded9b79ca7ac1f2
Author: hwc487 <hwc487@motorola.com>
Date: Wed Feb 1 15:11:21 2012 -0800
listen for the appMouseUp event in the Pan tool
commit 823945a2bcb42bbf9c6a1cd0ef723b8f415e557f
Author: hwc487 <hwc487@motorola.com>
Date: Wed Feb 1 14:39:46 2012 -0800
factor in the zoom factor when drawing the stage compass.
commit 0e87c02e74e08c7bf156373b0d2459563e17ecd6
Author: Pushkar Joshi <pushkar@motorola.com>
Date: Wed Feb 1 14:38:15 2012 -0800
make GLAnchorPoint functions as part of its prototype
commit 5a288b9d3f8e6690149978d9d0e7bea98cc81312
Author: hwc487 <hwc487@motorola.com>
Date: Wed Feb 1 14:09:24 2012 -0800
Fix for a marquee zoom bug.
commit 715f95cacead0025a57823e4cefa22e618f15df0
Author: hwc487 <hwc487@motorola.com>
Date: Wed Feb 1 14:00:06 2012 -0800
mouse wheel for zoom tool
commit 62d38a080b2918a0284c854e9bf882bfeeea1e0b
Author: Pushkar Joshi <pushkar@motorola.com>
Date: Wed Feb 1 13:21:11 2012 -0800
avoid overriding GlGeomObj translate method
commit 799369e153baf92eb10f26e91a1ab664900da8ed
Merge: b2ce8b8 c0f4374
Author: hwc487 <hwc487@motorola.com>
Date: Wed Feb 1 13:06:17 2012 -0800
Merge branch 'ToolFixes' of github.com:mqg734/ninja-internal into working
commit b2ce8b819cc85a558d862c04965b7e65a6ce8640
Author: hwc487 <hwc487@motorola.com>
Date: Wed Feb 1 13:05:32 2012 -0800
changes to allow minimal rendering ofnon-animated materials.
commit ada488781ff815a827e7f5903f2c55773e3be0f3
Author: Pushkar Joshi <pushkar@motorola.com>
Date: Wed Feb 1 12:16:11 2012 -0800
when selecting anchor points, first check if the selected anchor position is close enough
commit 107f79288ed87a282dd52075640297cc02bdf318
Author: Pushkar Joshi <pushkar@motorola.com>
Date: Wed Feb 1 12:00:44 2012 -0800
performance improvement: add most of the GLSubpath functions to its prototype
commit c00d5d3072e487be200559f692ce4399222d5fa5
Author: Pushkar Joshi <pushkar@motorola.com>
Date: Tue Jan 31 14:25:05 2012 -0800
handle the case of proper redraw when the alt key is held down even after mouse up
commit c006b3e75d5e23da63687a04cd30bf56a3a8a80d
Merge: f0e3fa6 1d8af9f
Author: Pushkar Joshi <pushkar@motorola.com>
Date: Tue Jan 31 12:07:43 2012 -0800
Merge branch 'master' into pentool
commit f0e3fa691b3c042c9fc49a7a0cde8ddf8100c195
Author: Pushkar Joshi <pushkar@motorola.com>
Date: Tue Jan 31 12:05:15 2012 -0800
display the anchor point to be selected on mouse hover
commit aa1b4b78d9e1b9cc15529dbf7196b7ac8a88e260
Merge: 0b8d8b2 6066b9b
Author: hwc487 <hwc487@motorola.com>
Date: Tue Jan 31 10:46:48 2012 -0800
Merge branch 'ToolFixes' of github.com:mqg734/ninja-internal into working
Conflicts:
js/stage/stage.reel/stage.js
commit 0b8d8b2eb595b64ef53440b949f3c5ec891daf8a
Merge: 8e43a46 e4837ed
Author: hwc487 <hwc487@motorola.com>
Date: Tue Jan 31 09:22:56 2012 -0800
Merge branch 'master' of github.com:Motorola-Mobility/ninja-internal into working
commit 8e43a46e3d79323fe06dc7771bc611a2c3c85c5c
Author: hwc487 <hwc487@motorola.com>
Date: Mon Jan 30 16:15:12 2012 -0800
Renderer startup handling of non-animated materials.
Changed zoom from the document bar to keep the location center of the viewable portion of the document fixed.
commit c41d2c2b749b67921f243fb7594ce0cdb1ccce36
Merge: 86a801c f129a23
Author: hwc487 <hwc487@motorola.com>
Date: Mon Jan 30 16:09:00 2012 -0800
Merge branch 'staging' of github.com:Motorola-Mobility/ninja-internal into working
commit 972e0ce4df7b332601ad006ca8b7dd9e189a59ef
Author: Pushkar Joshi <pushkar@motorola.com>
Date: Mon Jan 30 14:38:48 2012 -0800
do the fill before the stroke for the path, so the stroke width renders acc. to user specification
commit da7ad067b146200847b543faf288844221dff928
Author: Pushkar Joshi <pushkar@motorola.com>
Date: Mon Jan 30 14:30:31 2012 -0800
missed a couple of pen tool property files on last checkin
commit 76abbaafb0d90bb1dc9c63a5a5a78ab95bb00420
Author: Pushkar Joshi <pushkar@motorola.com>
Date: Mon Jan 30 13:56:33 2012 -0800
Merge pushkar branch on gerritt with github version
commit 86a801c057fc3b0580d6130be5740c2ee503444f
Author: hwc487 <hwc487@motorola.com>
Date: Fri Jan 27 15:52:36 2012 -0800
updated from old repo
Signed-off-by: Jonathan Duran <jduran@motorola.com>
Diffstat (limited to 'js/tools')
-rw-r--r-- | js/tools/PenTool.js | 554 |
1 files changed, 160 insertions, 394 deletions
diff --git a/js/tools/PenTool.js b/js/tools/PenTool.js index 78344d18..9a69b53d 100644 --- a/js/tools/PenTool.js +++ b/js/tools/PenTool.js | |||
@@ -5,6 +5,7 @@ No rights, expressed or implied, whatsoever to this software are provided by Mot | |||
5 | </copyright> */ | 5 | </copyright> */ |
6 | 6 | ||
7 | var ShapeTool = require("js/tools/ShapeTool").ShapeTool; | 7 | var ShapeTool = require("js/tools/ShapeTool").ShapeTool; |
8 | var ShapesController = require("js/controllers/elements/shapes-controller").ShapesController; | ||
8 | var DrawingToolBase = require("js/tools/drawing-tool-base").DrawingToolBase; | 9 | var DrawingToolBase = require("js/tools/drawing-tool-base").DrawingToolBase; |
9 | var defaultEventManager = require("montage/core/event/event-manager").defaultEventManager; | 10 | var defaultEventManager = require("montage/core/event/event-manager").defaultEventManager; |
10 | var Montage = require("montage/core/core").Montage; | 11 | var Montage = require("montage/core/core").Montage; |
@@ -12,6 +13,10 @@ var NJUtils = require("js/lib/NJUtils").NJUtils; | |||
12 | var ElementMediator = require("js/mediators/element-mediator").ElementMediator; | 13 | var ElementMediator = require("js/mediators/element-mediator").ElementMediator; |
13 | var TagTool = require("js/tools/TagTool").TagTool; | 14 | var TagTool = require("js/tools/TagTool").TagTool; |
14 | var ElementController = require("js/controllers/elements/element-controller").ElementController; | 15 | var ElementController = require("js/controllers/elements/element-controller").ElementController; |
16 | var snapManager = require("js/helper-classes/3D/snap-manager").SnapManager; | ||
17 | |||
18 | //todo remove this global var | ||
19 | var g_DoPenToolMouseMove = true; | ||
15 | 20 | ||
16 | exports.PenTool = Montage.create(ShapeTool, { | 21 | exports.PenTool = Montage.create(ShapeTool, { |
17 | 22 | ||
@@ -32,14 +37,10 @@ exports.PenTool = Montage.create(ShapeTool, { | |||
32 | _currentY: { value: 0, writable: true }, | 37 | _currentY: { value: 0, writable: true }, |
33 | 38 | ||
34 | //the subpaths are what is displayed on the screen currently, with _selectedSubpath being the active one currently being edited | 39 | //the subpaths are what is displayed on the screen currently, with _selectedSubpath being the active one currently being edited |
35 | _subpaths: { value: [], writable: true }, | ||
36 | _selectedSubpath: { value: null, writable: true }, | 40 | _selectedSubpath: { value: null, writable: true }, |
37 | _makeMultipleSubpaths: { value: true, writable: true }, //set this to true if you want to keep making subpaths after closing current subpath | 41 | _makeMultipleSubpaths: { value: true, writable: true }, //set this to true if you want to keep making subpaths after closing current subpath |
38 | 42 | ||
39 | 43 | ||
40 | //whether or not to display the guides for debugging | ||
41 | _showGuides: { value: true, writable: true }, | ||
42 | |||
43 | //whether the user has held down the Alt key | 44 | //whether the user has held down the Alt key |
44 | _isAltDown: { value: false, writable: true }, | 45 | _isAltDown: { value: false, writable: true }, |
45 | 46 | ||
@@ -64,6 +65,9 @@ exports.PenTool = Montage.create(ShapeTool, { | |||
64 | //the plane matrix for the first click...so the entire path is on the same plane | 65 | //the plane matrix for the first click...so the entire path is on the same plane |
65 | _penPlaneMat: { value: null, writable: true }, | 66 | _penPlaneMat: { value: null, writable: true }, |
66 | 67 | ||
68 | //index of the anchor point that the user has hovered over | ||
69 | _hoveredAnchorIndex: {value: null, writable: true}, | ||
70 | |||
67 | //constants used for picking points --- NOTE: these should be user-settable parameters | 71 | //constants used for picking points --- NOTE: these should be user-settable parameters |
68 | _PICK_POINT_RADIUS: { value: 10, writable: false }, | 72 | _PICK_POINT_RADIUS: { value: 10, writable: false }, |
69 | _DISPLAY_ANCHOR_RADIUS: { value: 5, writable: false }, | 73 | _DISPLAY_ANCHOR_RADIUS: { value: 5, writable: false }, |
@@ -85,39 +89,29 @@ exports.PenTool = Montage.create(ShapeTool, { | |||
85 | ENTRY_SELECT_PATH: { value: 2, writable: false}, | 89 | ENTRY_SELECT_PATH: { value: 2, writable: false}, |
86 | _entryEditMode: {value: this.ENTRY_SELECT_NONE, writable: true}, | 90 | _entryEditMode: {value: this.ENTRY_SELECT_NONE, writable: true}, |
87 | 91 | ||
88 | // ******** Logic for selection ******* | ||
89 | // (update if you change functionality!) | ||
90 | // NOTE: this is out of date...needs to be updated | ||
91 | // | ||
92 | // Start by setting edit mode to EDIT_NONE | ||
93 | // | ||
94 | // DOUBLE_CLICK (Left mouse button only): | ||
95 | // | ||
96 | // | ||
97 | // SINGLE_CLICK (Left mouse button only): | ||
98 | // If LeftClick selects an anchor point | ||
99 | // append EDIT_ANCHOR mode | ||
100 | // If LeftClick selects a previous point of selected anchor | ||
101 | // append EDIT_PREV mode | ||
102 | // If LeftClick selects a next point of selected anchor | ||
103 | // append EDIT_NEXT mode | ||
104 | // | ||
105 | |||
106 | // ********* Logic for editing ******* | ||
107 | // (update if you change functionality!) | ||
108 | // NOTE: this is out of date...needs to be updated | ||
109 | // | ||
110 | // Start by computing mouse disp | ||
111 | // | ||
112 | // If EDIT_PREV_NEXT mode | ||
113 | // add disp to next and mirror it to prev | ||
114 | // ELSE | ||
115 | // If EDIT_ANCHOR (or _PREV, _NEXT) | ||
116 | // map displacement to anchor (similarly to prev and next) | ||
117 | // | ||
118 | // | ||
119 | 92 | ||
120 | 93 | ||
94 | _getUnsnappedPosition: { | ||
95 | value: function(x,y){ | ||
96 | var elemSnap = snapManager.elementSnapEnabled(); | ||
97 | var gridSnap = snapManager.gridSnapEnabled(); | ||
98 | var alignSnap = snapManager.snapAlignEnabled(); | ||
99 | |||
100 | snapManager.enableElementSnap(false); | ||
101 | snapManager.enableGridSnap(false); | ||
102 | snapManager.enableSnapAlign(false); | ||
103 | |||
104 | var point = webkitConvertPointFromPageToNode(this.application.ninja.stage.canvas, new WebKitPoint(x,y)); | ||
105 | var unsnappedpos = DrawingToolBase.getHitRecPos(snapManager.snap(point.x, point.y, false)); | ||
106 | |||
107 | snapManager.enableElementSnap(elemSnap); | ||
108 | snapManager.enableGridSnap(gridSnap); | ||
109 | snapManager.enableSnapAlign(alignSnap); | ||
110 | |||
111 | return unsnappedpos; | ||
112 | } | ||
113 | }, | ||
114 | |||
121 | ShowToolProperties: { | 115 | ShowToolProperties: { |
122 | value: function () { | 116 | value: function () { |
123 | this._penView = PenView.create(); | 117 | this._penView = PenView.create(); |
@@ -137,21 +131,18 @@ exports.PenTool = Montage.create(ShapeTool, { | |||
137 | //NOTE: this will work on Webkit only...IE has different codes (left: 1, middle: 4, right: 2) | 131 | //NOTE: this will work on Webkit only...IE has different codes (left: 1, middle: 4, right: 2) |
138 | return; | 132 | return; |
139 | } | 133 | } |
140 | //BEGIN ShapeTool code | ||
141 | if (this._canDraw) { | 134 | if (this._canDraw) { |
142 | this._isDrawing = true; | 135 | this._isDrawing = true; |
143 | } | 136 | } |
144 | 137 | ||
145 | //this._targetedCanvas = stageManagerModule.stageManager.GetObjectFromPoint(event.layerX, event.layerY, this._canOperateOnStage); | ||
146 | 138 | ||
147 | this.startDraw(event); | 139 | this.startDraw(event); |
148 | //END ShapeTool code | ||
149 | 140 | ||
150 | //assume we are not starting a new path as we will set this to true if we create a new GLSubpath() | 141 | //assume we are not starting a new path as we will set this to true if we create a new GLSubpath() |
151 | this._isNewPath = false; | 142 | this._isNewPath = false; |
152 | 143 | ||
153 | //add an anchor point by computing position of mouse down | 144 | //add an anchor point by computing position of mouse down |
154 | var mouseDownPos = this.getMouseDownPos(); | 145 | var mouseDownPos = this._getUnsnappedPosition(event.pageX, event.pageY); //this.getMouseDownPos(); |
155 | if (mouseDownPos) { | 146 | if (mouseDownPos) { |
156 | //if we had closed the selected subpath previously, or if we have not yet started anything, create a subpath | 147 | //if we had closed the selected subpath previously, or if we have not yet started anything, create a subpath |
157 | if (this._selectedSubpath === null) { | 148 | if (this._selectedSubpath === null) { |
@@ -160,19 +151,10 @@ exports.PenTool = Montage.create(ShapeTool, { | |||
160 | if (this._entryEditMode === this.ENTRY_SELECT_PATH){ | 151 | if (this._entryEditMode === this.ENTRY_SELECT_PATH){ |
161 | //this should not happen, as ENTRY_SELECT_PATH implies there was a selected subpath | 152 | //this should not happen, as ENTRY_SELECT_PATH implies there was a selected subpath |
162 | this._entryEditMode = this.ENTRY_SELECT_NONE; | 153 | this._entryEditMode = this.ENTRY_SELECT_NONE; |
163 | } | 154 | console.log("Warning...PenTool handleMouseDown: changing from SELECT_PATH to SELECT_NONE"); |
164 | } else if (this._selectedSubpath.getIsClosed() && this._entryEditMode !== this.ENTRY_SELECT_PATH) { | ||
165 | //since we're not in ENTRY_SELECT_PATH mode, we don't edit the closed path...we start a new path regardless of where we clicked | ||
166 | if (this._makeMultipleSubpaths) { | ||
167 | this._subpaths.push(this._selectedSubpath); | ||
168 | this._penCanvas = null; | ||
169 | this._penPlaneMat = null; | ||
170 | this._snapTarget = null; | ||
171 | this._selectedSubpath = new GLSubpath(); | ||
172 | this._isNewPath = true; | ||
173 | } | 155 | } |
174 | } | 156 | } |
175 | 157 | ||
176 | var prevSelectedAnchorIndex = this._selectedSubpath.getSelectedAnchorIndex(); | 158 | var prevSelectedAnchorIndex = this._selectedSubpath.getSelectedAnchorIndex(); |
177 | // ************* Add/Select Anchor Point ************* | 159 | // ************* Add/Select Anchor Point ************* |
178 | //check if the clicked location is close to an anchor point...if so, make that anchor the selected point and do nothing else | 160 | //check if the clicked location is close to an anchor point...if so, make that anchor the selected point and do nothing else |
@@ -187,6 +169,8 @@ exports.PenTool = Montage.create(ShapeTool, { | |||
187 | //we have picked the endpoint of this path...reverse the path if necessary | 169 | //we have picked the endpoint of this path...reverse the path if necessary |
188 | if (selAnchorIndex ===0){ | 170 | if (selAnchorIndex ===0){ |
189 | //reverse this path | 171 | //reverse this path |
172 | this._selectedSubpath.reversePath(); | ||
173 | selAnchorIndex = this._selectedSubpath.getSelectedAnchorIndex(); | ||
190 | } | 174 | } |
191 | this._isPickedEndPointInSelectPathMode = true; | 175 | this._isPickedEndPointInSelectPathMode = true; |
192 | } | 176 | } |
@@ -219,8 +203,19 @@ exports.PenTool = Montage.create(ShapeTool, { | |||
219 | } | 203 | } |
220 | } | 204 | } |
221 | } | 205 | } |
206 | |||
207 | //the clicked location is not close to the path or any anchor point | ||
222 | if (whichPoint === this._selectedSubpath.SEL_NONE) { | 208 | if (whichPoint === this._selectedSubpath.SEL_NONE) { |
223 | if (this._entryEditMode !== this.ENTRY_SELECT_PATH) { | 209 | if (this._entryEditMode !== this.ENTRY_SELECT_PATH) { |
210 | //since we're not in ENTRY_SELECT_PATH mode, we don't edit the closed path...we start a new path if we clicked far away from selected path | ||
211 | if (this._selectedSubpath.getIsClosed() && this._makeMultipleSubpaths) { | ||
212 | this._penCanvas = null; | ||
213 | this._penPlaneMat = null; | ||