ccf139dca8836989711ff43a63e816ae8eb085e9 tdreszer Wed Aug 3 13:04:07 2011 -0700 For dragScrooling fixed packed sideLabels on 1X and bound scrolling to within chrom. (redmine 4811) diff --git src/hg/js/hgTracks.js src/hg/js/hgTracks.js index d239973..4678464 100644 --- src/hg/js/hgTracks.js +++ src/hg/js/hgTracks.js @@ -1101,36 +1101,36 @@ } else newX = leftLimit; } else if ( newX < rightLimit ) { // scrolled all the way to the right if(atEdge) { // Do not drag straight off edge. Force second drag beyondImage = true; newX = rightLimit - (rightLimit - newX)/decelerator;// slower if( newX < rightLimit - wingSize) // Don't go too far over the edge! newX = rightLimit - wingSize; } else newX = rightLimit; } else if(newX >= rightLimit && newX < leftLimit) beyondImage = false; // could have scrolled back without mouse up + newX = panUpdatePosition(newX,true); var nowPos = newX.toString() + "px"; $(".panImg").css( {'left': nowPos }); $('.tdData').css( {'backgroundPosition': nowPos } ); if (!only1xScrolling) panAdjustHeight(newX); // NOTE: This will dynamically resize image while scrolling. Do we want to? - panUpdatePosition(newX,false); } } } function panMouseUp(e) { // Must be a separate function instead of pan.mouseup event. //if(!e) e = window.event; if(mouseIsDown) { $(document).unbind('mousemove',panner); $(document).unbind('mouseup',panMouseUp); mouseIsDown = false; // Talk to tim about this. if(beyondImage) { if(inPlaceUpdate) { var pos = parsePosition(getPosition()); @@ -1143,46 +1143,54 @@ if(prevX != newX) { //if (!only1xScrolling) // panAdjustHeight(newX); // NOTE: This will resize image after scrolling. Do we want to while scrolling? prevX = newX; } setTimeout('blockUseMap=false;',50); // Necessary incase the selectEnd was over a map item. select takes precedence. } } }); // end of this.each(function(){ function panUpdatePosition(newOffsetX,bounded) { // Updates the 'position/search" display with change due to panning var portalWidthBases = hgTracks.imgBoxPortalEnd - hgTracks.imgBoxPortalStart; var portalScrolledX = (hgTracks.imgBoxPortalOffsetX+hgTracks.imgBoxLeftLabel) + newOffsetX; + var recalculate = false; var newPortalStart = hgTracks.imgBoxPortalStart - Math.round(portalScrolledX*hgTracks.imgBoxBasesPerPixel); // As offset goes down, bases seen goes up! - if( newPortalStart < hgTracks.imgBoxChromStart && bounded) // Stay within bounds - newPortalStart = hgTracks.imgBoxChromStart; + if( newPortalStart < hgTracks.chromStart && bounded) { // Stay within bounds + newPortalStart = hgTracks.chromStart; + recalculate = true; + } var newPortalEnd = newPortalStart + portalWidthBases; - if( newPortalEnd > hgTracks.imgBoxChromEnd && bounded) { - newPortalEnd = hgTracks.imgBoxChromEnd; + if( newPortalEnd > hgTracks.chromEnd && bounded) { + newPortalEnd = hgTracks.chromEnd; newPortalStart = newPortalEnd - portalWidthBases; + recalculate = true; } if(newPortalStart > 0) { // XXXX ? hgTracks.imgBoxPortalStart = newPortalStart; // XXXX ? hgTracks.imgBoxPortalEnd = newPortalEnd; var newPos = hgTracks.chromName + ":" + commify(newPortalStart) + "-" + commify(newPortalEnd); setPosition(newPos, (newPortalEnd - newPortalStart + 1)); } - return true; + if (recalculate && hgTracks.imgBoxBasesPerPixel > 0) { // Need to recalculate X for bounding drag + portalScrolledX = (hgTracks.imgBoxPortalStart - newPortalStart) / hgTracks.imgBoxBasesPerPixel; + newOffsetX = portalScrolledX - (hgTracks.imgBoxPortalOffsetX+hgTracks.imgBoxLeftLabel); + } + return newOffsetX; } function mapTopAndBottom(mapName,left,right) { // Find the top and bottom px given left and right boundaries var span = { top: -10, bottom: -10 }; var items = $("map[name='"+mapName+"']").children(); if($(items).length>0) { $(items).each(function(t) { var loc = this.coords.split(","); var aleft = parseInt(loc[0]); var aright = parseInt(loc[2]); if(aleft < right && aright >= left) { var atop = parseInt(loc[1]); var abottom = parseInt(loc[3]); if( span.top < 0 ) {