From fc13ef1e806116bb7ece5bb06604fa4f5714a6ed Mon Sep 17 00:00:00 2001 From: Nivesh Rajbhandari Date: Thu, 19 Jul 2012 10:55:22 -0700 Subject: Squashed commit of the following: commit 0285afe3d4bd458a51f11241f13ea6ffdb0283ed Merge: 2f9f5e3 16d06ba Author: Nivesh Rajbhandari Date: Thu Jul 19 10:54:25 2012 -0700 Merge branch 'refs/heads/ninja-mqg734-master' into StageToolDrawingOptimizations commit 2f9f5e369eb96f6c81b5e4bcbe09b418825e2864 Author: Nivesh Rajbhandari Date: Wed Jul 18 17:15:19 2012 -0700 Fixed selection bounds not drawing in nested tags. Signed-off-by: Nivesh Rajbhandari commit b0a3507f9d27579ad511c69314a09136d7f7c6a0 Author: Nivesh Rajbhandari Date: Wed Jul 18 11:07:44 2012 -0700 Layout info needs to redraw if stage is updated. Signed-off-by: Nivesh Rajbhandari commit 63c5e0bf52c33706ba597cb69f7794e287bd0f06 Author: Nivesh Rajbhandari Date: Tue Jul 17 15:40:54 2012 -0700 Per feedback from QE, we are still going to draw tool feedback on each mouse move so the selection bounds are not out of sync with the elements. Signed-off-by: Nivesh Rajbhandari commit 0599a742092b985c4002977e501e3b457173f1d9 Author: Nivesh Rajbhandari Date: Tue Jul 17 15:28:25 2012 -0700 Fixed grid not drawing correctly when switching documents and when adding/removing elements. Signed-off-by: Nivesh Rajbhandari commit fd9410606ee6358910d65b2cb5f71812fd44a7c4 Author: Nivesh Rajbhandari Date: Tue Jul 17 11:36:09 2012 -0700 Updated drawing feedback to handle matrix 2d values entered via CSS Panel. Signed-off-by: Nivesh Rajbhandari commit 559c16c7ac8c9f40b94a011a6f932d4f97df66a7 Author: Nivesh Rajbhandari Date: Mon Jul 16 17:14:28 2012 -0700 IKNinja-751 - Selection boundary doesn't follow the transform applied in the CSS Panel. Signed-off-by: Nivesh Rajbhandari commit e2da5340159db5cd6f75bf6c9b7eb9cbf959e5cd Merge: 7cc5de3 5146f22 Author: Nivesh Rajbhandari Date: Mon Jul 16 15:36:28 2012 -0700 Merge branch 'refs/heads/ninja-mqg734-master' into StageToolDrawingOptimizations commit 7cc5de39e41b4220f53c91b15b0cf0ed53e0b0f6 Author: Nivesh Rajbhandari Date: Mon Jul 16 14:52:06 2012 -0700 Check if ownerDocument.defaultValue is null. Signed-off-by: Nivesh Rajbhandari commit 5ae97995a28a4b06fb7f8703eb8090ea16d88acd Merge: d17974d 0ede302 Author: Nivesh Rajbhandari Date: Mon Jul 16 09:27:22 2012 -0700 Merge branch 'refs/heads/ninja-mqg734-master' into StageToolDrawingOptimizations commit d17974d77273bb635311cb6466f4427cf4d9e5d4 Author: Nivesh Rajbhandari Date: Mon Jul 16 08:45:05 2012 -0700 Pass in selectedElements array directly to drawUtils when drawing selection bounds instead of creating a duplicate array. Signed-off-by: Nivesh Rajbhandari commit 0b1ea3144cb3e2c1d272f60da32423d0604ace3b Author: Nivesh Rajbhandari Date: Fri Jul 13 14:03:40 2012 -0700 Fixed line tool not drawing the width and height info. Signed-off-by: Nivesh Rajbhandari commit b9c70e8d9ae324aa21fa5490edc71d8503bcefbc Author: Nivesh Rajbhandari Date: Fri Jul 13 12:42:25 2012 -0700 Used cached offsetWidth and offsetHeight. Signed-off-by: Nivesh Rajbhandari commit 9e17ac7124745ba745014efe149b31dee4fe658f Author: Nivesh Rajbhandari Date: Thu Jul 12 16:25:41 2012 -0700 Converting tabs to spaces … again! Signed-off-by: Nivesh Rajbhandari commit 351726c951bb73c28f0e15ea1ab32e85cc735688 Author: Nivesh Rajbhandari Date: Thu Jul 12 16:14:31 2012 -0700 Tabs should be 4 spaces. Signed-off-by: Nivesh Rajbhandari commit 250c419aa2dbcb10f012817ee7039aca77cb2518 Merge: 3f8d61a 2880e1d Author: Nivesh Rajbhandari Date: Thu Jul 12 16:08:31 2012 -0700 Merge branch 'refs/heads/ninja-mqg734-master' into StageToolDrawingOptimizations commit 3f8d61a676da3992947ed9a2ed0e449780fcfbe0 Author: Nivesh Rajbhandari Date: Thu Jul 12 15:53:44 2012 -0700 Rotate tool was not working immediately after switching selection and selection bounds were not drawing after resizing canvases. Signed-off-by: Nivesh Rajbhandari commit e2e1f81e3b6917e1032e1b99b79c266937f3bb25 Author: Nivesh Rajbhandari Date: Thu Jul 12 12:15:59 2012 -0700 Single draw cycle for stage updates and tool drawings. Signed-off-by: Nivesh Rajbhandari commit 95a90b4c95ee3163c97bea317144366674e49ade Author: Nivesh Rajbhandari Date: Mon Jun 18 11:46:38 2012 -0700 Single draw cycle for the stage and layout. Signed-off-by: Nivesh Rajbhandari commit 21966b1515d80d2161a14e5a19bc66f3f49a92ce Author: Nivesh Rajbhandari Date: Fri Jun 15 13:33:14 2012 -0700 Cache element offsets, including offsetParent. Signed-off-by: Nivesh Rajbhandari commit 80c563c8ba06149691c6c1e754dd9a5e43bc7d4b Author: Nivesh Rajbhandari Date: Mon Jul 9 17:30:00 2012 -0700 Open materials editor popup next to PI button. Signed-off-by: Nivesh Rajbhandari Signed-off-by: Nivesh Rajbhandari --- js/helper-classes/3D/view-utils.js | 99 +++++++++++++++++++++++++++++--------- 1 file changed, 76 insertions(+), 23 deletions(-) (limited to 'js/helper-classes/3D/view-utils.js') diff --git a/js/helper-classes/3D/view-utils.js b/js/helper-classes/3D/view-utils.js index 25e40bac..3b9c44b2 100755 --- a/js/helper-classes/3D/view-utils.js +++ b/js/helper-classes/3D/view-utils.js @@ -239,6 +239,27 @@ exports.ViewUtils = Montage.create(Component, { } }, + getOffsetParent: { + value: function( elt ) { + var parent = elt.elementModel.getProperty("offsetParent"); + if(parent === "none") { + return null; + } + else if(parent) { + return parent; + } else { + parent = elt.offsetParent; + if(parent) { + elt.elementModel.setProperty("offsetParent", parent); + return parent; + } else { + elt.elementModel.setProperty("offsetParent", "none"); + return null; + } + } + } + }, + getEyePoint: { value:function() { // this function should use the center of projection - it is currently hard wired to (0,0). @@ -360,7 +381,7 @@ exports.ViewUtils = Montage.create(Component, { // transform the point up the tree var child = elt; - var parent = elt.offsetParent; + var parent = this.getOffsetParent(elt); while ( parent ) { // go to screen space of the current child @@ -388,7 +409,7 @@ exports.ViewUtils = Montage.create(Component, { } child = parent; - parent = parent.offsetParent; + parent = this.getOffsetParent(parent); } return pt; @@ -413,7 +434,7 @@ exports.ViewUtils = Montage.create(Component, { if (child === this._stageElement) break; if (child === this._rootElement) break; - child = child.offsetParent; + child = this.getOffsetParent(child); if (child === this._rootElement) break; } @@ -449,7 +470,7 @@ exports.ViewUtils = Montage.create(Component, { if (pt.length == 2) pt[2] = 0; // transform the bounds up the tree - var parent = child.offsetParent; + var parent = this.getOffsetParent(child); // TODO - Should have a different way to check for new template mode if ( parent || (child === this.application.ninja.currentDocument.model.documentRoot) ) { @@ -498,7 +519,7 @@ exports.ViewUtils = Montage.create(Component, { pt[3] = 1; // transform the bounds up the tree - var parent = child.offsetParent; + var parent = this.getOffsetParent(child); if ( parent ) { this.setViewportObj( child ); @@ -701,11 +722,25 @@ exports.ViewUtils = Montage.create(Component, { // optional argument localSpace, if true, puts the top left at (0,0). if (arguments.length < 2) localSpace = false; - var bounds; - var left = elt.offsetLeft, - top = elt.offsetTop, - w = elt.offsetWidth, + var bounds, left, top, w, h; + if(elt.elementModel.getProperty("offsetCache")) { + left = elt.elementModel.getProperty("offsetLeft"); + top = elt.elementModel.getProperty("offsetTop"); + w = elt.elementModel.getProperty("offsetWidth"); + h = elt.elementModel.getProperty("offsetHeight"); + } else { + left = elt.offsetLeft; + top = elt.offsetTop; + w = elt.offsetWidth; h = elt.offsetHeight; + elt.elementModel.setProperty("offsetLeft", left); + elt.elementModel.setProperty("offsetTop", top); + elt.elementModel.setProperty("offsetWidth", w); + elt.elementModel.setProperty("offsetHeight", h); + elt.elementModel.setProperty("offsetCache", true); + } + + // if (elt instanceof SVGSVGElement) { if(elt.nodeName.toLowerCase() === "svg") { @@ -745,21 +780,39 @@ exports.ViewUtils = Montage.create(Component, { getElementOffset: { value: function( elt ) { - var xOff = elt.offsetLeft, yOff = elt.offsetTop; - // if (elt.__ninjaXOff) xOff = elt.__ninjaXOff; - // if (elt.__ninjaYOff) yOff = elt.__ninjaYOff; - var offset = [xOff, yOff]; - if(elt.offsetParent && (elt.offsetParent !== this._stageElement)) - { - var pS = elt.ownerDocument.defaultView.getComputedStyle(elt.offsetParent); - - var border = parseInt(pS.getPropertyValue("border")); + var xOff, yOff, offset, parent, border, pS, bl, bt; - if(border) - { - var bl = parseInt(pS.getPropertyValue("border-left-width")), + if(elt.elementModel.getProperty("offsetCache")) { + xOff = elt.elementModel.getProperty("offsetLeft"); + yOff = elt.elementModel.getProperty("offsetTop"); + } else { + xOff = elt.offsetLeft; + yOff = elt.offsetTop; + elt.elementModel.setProperty("offsetLeft", xOff); + elt.elementModel.setProperty("offsetTop", yOff); + elt.elementModel.setProperty("offsetCache", true); + } + offset = [xOff, yOff]; + parent = this.getOffsetParent(elt); + if(parent && (parent !== this._stageElement)) + { + if(parent.elementModel.getProperty("border")) { + border = parent.elementModel.getProperty("border"); + bl = parent.elementModel.getProperty("border-left-width"); + bt = parent.elementModel.getProperty("border-top-width"); + } else { + if(elt.ownerDocument.defaultView) { + pS = elt.ownerDocument.defaultView.getComputedStyle(parent, null); + border = parseInt(pS.getPropertyValue("border")); + bl = parseInt(pS.getPropertyValue("border-left-width")); bt = parseInt(pS.getPropertyValue("border-top-width")); + parent.elementModel.setProperty("border", border); + parent.elementModel.setProperty("border-left-width", bl); + parent.elementModel.setProperty("border-top-width", bt); + } + } + if(border) { offset[0] += bl; offset[1] += bt; } @@ -1072,7 +1125,7 @@ exports.ViewUtils = Montage.create(Component, { if (elt === this._stageElement) break; if (elt === this._rootElement) break; - elt = elt.offsetParent; + elt = this.getOffsetParent(elt); if (elt === this._rootElement) break; } @@ -1125,7 +1178,7 @@ exports.ViewUtils = Montage.create(Component, { //mat = offMat.multiply( mat ); glmat4.multiply( offMat, mat, mat ); - elt = elt.offsetParent; + elt = this.getOffsetParent(elt); } return mat; -- cgit v1.2.3