X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fviewmodel%2FOverviewDimensions.java;h=b34c85d352b4bdc5d053f2b116e31ba5c60d5138;hb=7f4da0a2b0c10f158a03dbfce8878e67e90c4a68;hp=34b7aff51f4f76065b8d5391fee09cee57cfae83;hpb=cb72ab56f740256004ad15c56514528b34d79b43;p=jalview.git diff --git a/src/jalview/viewmodel/OverviewDimensions.java b/src/jalview/viewmodel/OverviewDimensions.java index 34b7aff..b34c85d 100644 --- a/src/jalview/viewmodel/OverviewDimensions.java +++ b/src/jalview/viewmodel/OverviewDimensions.java @@ -91,7 +91,7 @@ public class OverviewDimensions { // wider width = MAX_WIDTH; - sequencesHeight = (int) (MAX_WIDTH / initialScale); + sequencesHeight = Math.round(MAX_WIDTH / initialScale); if (sequencesHeight < MIN_SEQ_HEIGHT) { sequencesHeight = MIN_SEQ_HEIGHT; @@ -100,7 +100,7 @@ public class OverviewDimensions else { // taller - width = (int) (MAX_WIDTH * initialScale); + width = Math.round(MAX_WIDTH * initialScale); sequencesHeight = MAX_SEQ_HEIGHT; if (width < MIN_WIDTH) @@ -138,19 +138,11 @@ public class OverviewDimensions { x = 0; } - else if (x >= alwidth) - { - x = alwidth - 1; - } if (y < 0) { y = 0; } - else if (y >= alheight) - { - y = alheight - 1; - } // // Convert x value to residue position @@ -170,19 +162,24 @@ public class OverviewDimensions // if x is in a hidden col region, shift to left - but we still need // absolute position // so convert back after getting visible region position - xAsRes = hiddenCols.adjustForHiddenColumns(hiddenCols - .findColumnPosition(xAsRes)); - - // get where end res should be by adding the viewport width on - int endRes = xAsRes + vpwidth; + int visXAsRes = hiddenCols.findColumnPosition(xAsRes); // check in case we went off the edge of the alignment - if (endRes > alwidth) + int visAlignWidth = hiddenCols.findColumnPosition(alwidth - 1); + if (visXAsRes + vpwidth - 1 > visAlignWidth) { // went past the end of the alignment, adjust backwards - endRes = alwidth; - // recalc xAsRes backwards from endRes - xAsRes = endRes - vpwidth; + + // if last position was before the end of the alignment, need to update + if ((scrollCol + vpwidth - 1) < visAlignWidth) + { + visXAsRes = hiddenCols.findColumnPosition(hiddenCols + .findColumnNToLeft(vpwidth - 1, alwidth - 1)); + } + else + { + visXAsRes = scrollCol; + } } // @@ -193,7 +190,8 @@ public class OverviewDimensions int yAsSeq = Math.round((float) y * alheight / sequencesHeight); // get viewport height in sequences - int vpheight = props.getEndSeq() - props.getStartSeq(); + // add 1 because height includes both endSeq and startSeq + int vpheight = props.getEndSeq() - props.getStartSeq() + 1; // get where y should be when accounting for hidden rows // if y is in a hidden row region, shift up - but we still need absolute @@ -202,22 +200,27 @@ public class OverviewDimensions yAsSeq = hiddenSeqs.adjustForHiddenSeqs(hiddenSeqs .findIndexWithoutHiddenSeqs(yAsSeq)); - // get where end seq should be by adding the viewport height on - int endSeq = yAsSeq + vpheight; - // check in case we went off the edge of the alignment - if (endSeq > alheight) + int visAlignHeight = hiddenSeqs.findIndexWithoutHiddenSeqs(alheight); + int visYAsRes = hiddenSeqs.findIndexWithoutHiddenSeqs(yAsSeq); + if (visYAsRes + vpheight - 1 > visAlignHeight) { // went past the end of the alignment, adjust backwards - endSeq = alheight; - // recalc yAsSeq backwards from endSeq - yAsSeq = endSeq - vpheight; + if ((scrollRow + vpheight - 1) < visAlignHeight) + { + visYAsRes = hiddenSeqs.findIndexWithoutHiddenSeqs(hiddenSeqs + .findIndexNAboveRow(vpheight - 1, alheight - 1)); + } + else + { + visYAsRes = scrollRow; + } } - // convert absolute positions back to visible alignment positions for - // viewport scrolling - scrollCol = hiddenCols.findColumnPosition(xAsRes); - scrollRow = hiddenSeqs.findIndexWithoutHiddenSeqs(yAsSeq); + // update scroll values + scrollCol = visXAsRes; + scrollRow = visYAsRes; + } /** @@ -250,10 +253,13 @@ public class OverviewDimensions boxY = Math.round((float) startSeq * sequencesHeight / alheight); // boxWidth is the width in residues translated to pixels + // since the box includes both the start and end residues, add 1 to the + // difference boxWidth = Math .round((float) (endRes - startRes + 1) * width / alwidth); // boxHeight is the height in sequences translated to pixels - boxHeight = Math.round((float) (endSeq - startSeq) * sequencesHeight + boxHeight = Math.round((float) (endSeq - startSeq + 1) + * sequencesHeight / alheight); } @@ -269,7 +275,6 @@ public class OverviewDimensions g.drawRect(boxX + 1, boxY + 1, boxWidth - 2, boxHeight - 2); } - // don't like this, scroll vals are separate from setting code public int getScrollCol() { return scrollCol;