X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fviewmodel%2FOverviewDimensionsShowHidden.java;h=4c36cfa1d06fc22de6ccd219eeddf88051112222;hb=57738a1f3c19b1c3a00bd3ac5108f8cd0af32f99;hp=681d43dc15f4f3aacf16b61a187df6e4ae8a3f53;hpb=1810df9d010000e434975a8a4e68dcbda238f7f1;p=jalview.git diff --git a/src/jalview/viewmodel/OverviewDimensionsShowHidden.java b/src/jalview/viewmodel/OverviewDimensionsShowHidden.java index 681d43d..4c36cfa 100644 --- a/src/jalview/viewmodel/OverviewDimensionsShowHidden.java +++ b/src/jalview/viewmodel/OverviewDimensionsShowHidden.java @@ -72,13 +72,15 @@ public class OverviewDimensionsShowHidden extends OverviewDimensions public void updateViewportFromMouse(int mousex, int mousey, HiddenSequences hiddenSeqs, HiddenColumns hiddenCols) { + resetAlignmentDims(); + // convert mousex and mousey to alignment units as well as // translating to top left corner of viewport - this is an absolute position int xAsRes = getLeftXFromCentreX(mousex, hiddenCols); int yAsSeq = getTopYFromCentreY(mousey, hiddenSeqs); // convert to visible positions - int visXAsRes = hiddenCols.findColumnPosition(xAsRes); + int visXAsRes = hiddenCols.absoluteToVisibleColumn(xAsRes); yAsSeq = hiddenSeqs.adjustForHiddenSeqs( hiddenSeqs.findIndexWithoutHiddenSeqs(yAsSeq)); yAsSeq = Math.max(yAsSeq, 0); // -1 if before first visible sequence @@ -93,29 +95,32 @@ public class OverviewDimensionsShowHidden extends OverviewDimensions public void adjustViewportFromMouse(int mousex, int mousey, HiddenSequences hiddenSeqs, HiddenColumns hiddenCols) { + resetAlignmentDims(); + // calculate translation in pixel terms: // get mouse location in viewport coords, add translation in viewport // coords, // convert back to pixel coords int vpx = Math.round((float) mousex * alwidth / width); - int visXAsRes = hiddenCols.findColumnPosition(vpx) + xdiff; + int visXAsRes = hiddenCols.absoluteToVisibleColumn(vpx) + xdiff; - int vpy = Math.round((float) mousey * alheight / sequencesHeight); + int vpy = Math.round(mousey * heightRatio); int visYAsRes = hiddenSeqs.findIndexWithoutHiddenSeqs(vpy) + ydiff; // update viewport accordingly - updateViewportFromTopLeft(visXAsRes, visYAsRes, - hiddenSeqs, - hiddenCols); + updateViewportFromTopLeft(visXAsRes, visYAsRes, hiddenSeqs, hiddenCols); } + /** + * {@inheritDoc} Callers should have already called resetAlignmentDims to + * refresh alwidth, alheight and width/height ratios + */ @Override protected void updateViewportFromTopLeft(int leftx, int topy, HiddenSequences hiddenSeqs, HiddenColumns hiddenCols) { int visXAsRes = leftx; int visYAsSeq = topy; - resetAlignmentDims(); if (visXAsRes < 0) { @@ -138,7 +143,7 @@ public class OverviewDimensionsShowHidden extends OverviewDimensions int vpwidth = ranges.getViewportWidth(); // check in case we went off the edge of the alignment - int visAlignWidth = hiddenCols.findColumnPosition(alwidth - 1); + int visAlignWidth = hiddenCols.absoluteToVisibleColumn(alwidth - 1); if (visXAsRes + vpwidth - 1 > visAlignWidth) { // went past the end of the alignment, adjust backwards @@ -146,8 +151,8 @@ public class OverviewDimensionsShowHidden extends OverviewDimensions // if last position was before the end of the alignment, need to update if (ranges.getEndRes() < visAlignWidth) { - visXAsRes = hiddenCols.findColumnPosition(hiddenCols - .subtractVisibleColumns(vpwidth - 1, alwidth - 1)); + visXAsRes = hiddenCols.absoluteToVisibleColumn(hiddenCols + .offsetByVisibleColumns(-(vpwidth - 1), alwidth - 1)); } else { @@ -168,8 +173,8 @@ public class OverviewDimensionsShowHidden extends OverviewDimensions // went past the end of the alignment, adjust backwards if (ranges.getEndSeq() < visAlignHeight) { - visYAsSeq = hiddenSeqs.findIndexWithoutHiddenSeqs(hiddenSeqs - .subtractVisibleRows(vpheight - 1, alheight - 1)); + visYAsSeq = hiddenSeqs.findIndexWithoutHiddenSeqs( + hiddenSeqs.subtractVisibleRows(vpheight - 1, alheight - 1)); } else { @@ -178,8 +183,7 @@ public class OverviewDimensionsShowHidden extends OverviewDimensions } // update viewport - ranges.setStartRes(visXAsRes); - ranges.setStartSeq(visYAsSeq); + ranges.setStartResAndSeq(visXAsRes, visYAsSeq); } /** @@ -198,29 +202,28 @@ public class OverviewDimensionsShowHidden extends OverviewDimensions HiddenColumns hiddenCols) { // work with absolute values of startRes and endRes - int startRes = hiddenCols.adjustForHiddenColumns(ranges.getStartRes()); - int endRes = hiddenCols.adjustForHiddenColumns(ranges.getEndRes()); + int startRes = hiddenCols.visibleToAbsoluteColumn(ranges.getStartRes()); + int endRes = hiddenCols.visibleToAbsoluteColumn(ranges.getEndRes()); // work with absolute values of startSeq and endSeq int startSeq = hiddenSeqs.adjustForHiddenSeqs(ranges.getStartSeq()); int endSeq = hiddenSeqs.adjustForHiddenSeqs(ranges.getEndSeq()); - setBoxPosition(startRes, startSeq, endRes - startRes + 1, endSeq - - startSeq + 1); + setBoxPosition(startRes, startSeq, endRes - startRes + 1, + endSeq - startSeq + 1); } @Override public AlignmentColsCollectionI getColumns(AlignmentI al) { - return new AllColsCollection(0, - ranges.getAbsoluteAlignmentWidth() - 1, al); + return new AllColsCollection(0, ranges.getAbsoluteAlignmentWidth() - 1, + al); } @Override public AlignmentRowsCollectionI getRows(AlignmentI al) { - return new AllRowsCollection(0, - ranges.getAbsoluteAlignmentHeight() - 1, + return new AllRowsCollection(0, ranges.getAbsoluteAlignmentHeight() - 1, al); } @@ -229,20 +232,31 @@ public class OverviewDimensionsShowHidden extends OverviewDimensions { alwidth = ranges.getAbsoluteAlignmentWidth(); alheight = ranges.getAbsoluteAlignmentHeight(); + + widthRatio = (float) alwidth / width; + heightRatio = (float) alheight / sequencesHeight; } + /** + * {@inheritDoc} Callers should have already called resetAlignmentDims to + * refresh widthRatio + */ @Override protected int getLeftXFromCentreX(int mousex, HiddenColumns hidden) { int vpx = Math.round((float) mousex * alwidth / width); - return hidden.subtractVisibleColumns(ranges.getViewportWidth() / 2, + return hidden.offsetByVisibleColumns(-ranges.getViewportWidth() / 2, vpx); } + /** + * {@inheritDoc} Callers should have already called resetAlignmentDims to + * refresh heightRatio + */ @Override protected int getTopYFromCentreY(int mousey, HiddenSequences hidden) { - int vpy = Math.round((float) mousey * alheight / sequencesHeight); + int vpy = Math.round(mousey * heightRatio); return hidden.subtractVisibleRows(ranges.getViewportHeight() / 2, vpy); } @@ -250,12 +264,14 @@ public class OverviewDimensionsShowHidden extends OverviewDimensions public void setDragPoint(int x, int y, HiddenSequences hiddenSeqs, HiddenColumns hiddenCols) { + resetAlignmentDims(); + // get alignment position of x and box (can get directly from vpranges) and // calculate difference between the positions - int vpx = Math.round((float) x * alwidth / width); - int vpy = Math.round((float) y * alheight / sequencesHeight); + int vpx = Math.round(x * widthRatio); + int vpy = Math.round(y * heightRatio); - xdiff = ranges.getStartRes() - hiddenCols.findColumnPosition(vpx); + xdiff = ranges.getStartRes() - hiddenCols.absoluteToVisibleColumn(vpx); ydiff = ranges.getStartSeq() - hiddenSeqs.findIndexWithoutHiddenSeqs(vpy); }