b5e12ed0634ff8bb800f24592f4651b1dc7ec43d max Thu Apr 25 05:20:52 2019 -0700 changing borders between nucleotides when zooming/highlighting, refs #23349 diff --git src/hg/js/hgTracks.js src/hg/js/hgTracks.js index d300f4e..99173a0 100644 --- src/hg/js/hgTracks.js +++ src/hg/js/hgTracks.js @@ -378,56 +378,57 @@ imgOfs.left + hgTracks.insideX - slop; var rightX = hgTracks.revCmplDisp ? imgOfs.left + imgWidth - hgTracks.insideX + slop : imgOfs.left + imgWidth + slop; return ( (selection.event.pageX >= leftX) && (selection.event.pageX < rightX) && (selection.event.pageY >= (imgOfs.top - slop)) && (selection.event.pageY < (imgOfs.top + imgHeight + slop))); }, pixelsToBases: function (img, selStart, selEnd, winStart, winEnd) { // Convert image coordinates to chromosome coordinates var imgWidth = jQuery(img).width() - hgTracks.insideX; var width = hgTracks.winEnd - hgTracks.winStart; var mult = width / imgWidth; // mult is bp/pixel multiplier + var halfBpWidth = (imgWidth / width) / 2; // how many pixels does one bp take up; var startDelta; // startDelta is how many bp's to the right/left var x1; // The magic number three appear at another place in the code // as LEFTADD. It was originally annotated as "borders or cgi item calc // ?" by Larry. It has to be used when going any time when converting // between pixels and coordinates. selStart -= 3; selEnd -= 3; if (hgTracks.revCmplDisp) { x1 = Math.min(imgWidth, selStart); - startDelta = Math.floor(mult * (imgWidth - x1)); + startDelta = Math.floor(mult * (imgWidth - x1 - halfBpWidth)); } else { x1 = Math.max(hgTracks.insideX, selStart); - startDelta = Math.floor(mult * (x1 - hgTracks.insideX)); + startDelta = Math.floor(mult * (x1 - hgTracks.insideX + halfBpWidth)); } var endDelta; var x2; if (hgTracks.revCmplDisp) { endDelta = startDelta; x2 = Math.min(imgWidth, selEnd); - startDelta = Math.floor(mult * (imgWidth - x2)); + startDelta = Math.floor(mult * (imgWidth - x2 + halfBpWidth)); } else { x2 = Math.max(hgTracks.insideX, selEnd); - endDelta = Math.floor(mult * (x2 - hgTracks.insideX)); + endDelta = Math.floor(mult * (x2 - hgTracks.insideX - halfBpWidth)); } var newStart = hgTracks.winStart + startDelta; var newEnd = hgTracks.winStart + 1 + endDelta; if (newEnd > winEnd) { newEnd = winEnd; } return {chromStart : newStart, chromEnd : newEnd}; }, chromToVirtChrom: function (chrom, chromStart, chromEnd) { // Convert regular chromosome position to virtual chrom coordinates using hgTracks.windows list // Consider the first contiguous set of overlapping regions to define the match (for now). // only works for regions covered by the current hgTracks.windows var virtStart = -1, virtEnd = -1; var s,e;