X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fviewmodel%2FOverviewDimensions.java;h=b34c85d352b4bdc5d053f2b116e31ba5c60d5138;hb=7f4da0a2b0c10f158a03dbfce8878e67e90c4a68;hp=4af4175df085927bda609eabe26ab8c9f406c613;hpb=7e66b58086ec1368feaa6c32e6478d66734c152a;p=jalview.git diff --git a/src/jalview/viewmodel/OverviewDimensions.java b/src/jalview/viewmodel/OverviewDimensions.java index 4af4175..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) @@ -162,22 +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 - // subtract 1 because the width includes endRes - int endRes = xAsRes + vpwidth - 1; + int visXAsRes = hiddenCols.findColumnPosition(xAsRes); // check in case we went off the edge of the alignment - int visAlignWidth = hiddenCols.findColumnPosition(alwidth); - if (endRes > visAlignWidth - 1) + int visAlignWidth = hiddenCols.findColumnPosition(alwidth - 1); + if (visXAsRes + vpwidth - 1 > visAlignWidth) { // went past the end of the alignment, adjust backwards - endRes = visAlignWidth - 1; - // recalc xAsRes backwards from endRes - // add 1 because width includes xAsRes - xAsRes = hiddenCols.adjustForHiddenColumns(endRes - vpwidth + 1); + + // 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; + } } // @@ -198,23 +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 - 1; - // check in case we went off the edge of the alignment int visAlignHeight = hiddenSeqs.findIndexWithoutHiddenSeqs(alheight); - if (hiddenSeqs.findIndexWithoutHiddenSeqs(endSeq) > visAlignHeight - 1) + int visYAsRes = hiddenSeqs.findIndexWithoutHiddenSeqs(yAsSeq); + if (visYAsRes + vpheight - 1 > visAlignHeight) { // went past the end of the alignment, adjust backwards - endSeq = visAlignHeight - 1; - // recalc yAsSeq backwards from endSeq - yAsSeq = endSeq - vpheight + 1; + 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; + } /** @@ -252,8 +258,6 @@ public class OverviewDimensions boxWidth = Math .round((float) (endRes - startRes + 1) * width / alwidth); // boxHeight is the height in sequences translated to pixels - // since the box includes both the start and end sequences, add 1 to the - // difference boxHeight = Math.round((float) (endSeq - startSeq + 1) * sequencesHeight / alheight); @@ -271,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;