X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fviewmodel%2FOverviewDimensionsHideHidden.java;h=7eec3438b1351ab1f92d0d6e8e7e7a8b30ba5a72;hb=58fb14c48ecb086be7422f92addf14f930656523;hp=b03f9ac4476aac8484f91b55762130139470cb42;hpb=460c037bef9ec113c2a46010c443d85e73347592;p=jalview.git diff --git a/src/jalview/viewmodel/OverviewDimensionsHideHidden.java b/src/jalview/viewmodel/OverviewDimensionsHideHidden.java index b03f9ac..7eec343 100644 --- a/src/jalview/viewmodel/OverviewDimensionsHideHidden.java +++ b/src/jalview/viewmodel/OverviewDimensionsHideHidden.java @@ -12,6 +12,12 @@ public class OverviewDimensionsHideHidden extends OverviewDimensions { private ViewportRanges ranges; + private int xdiff; // when dragging, difference in alignment units between + // start residue and original mouse click position + + private int ydiff; // when dragging, difference in alignment units between + // start sequence and original mouse click position + public OverviewDimensionsHideHidden(ViewportRanges vpranges, boolean showAnnotationPanel) { @@ -24,94 +30,96 @@ public class OverviewDimensionsHideHidden extends OverviewDimensions public void updateViewportFromMouse(int mousex, int mousey, HiddenSequences hiddenSeqs, HiddenColumns hiddenCols) { - resetAlignmentDims(); + int xAsRes = getLeftXFromCentreX(mousex, hiddenCols); + int yAsSeq = getTopYFromCentreY(mousey, hiddenSeqs); + + updateViewportFromTopLeft(xAsRes, yAsSeq, hiddenSeqs, hiddenCols); + + } + + @Override + public void adjustViewportFromMouse(int mousex, int mousey, + HiddenSequences hiddenSeqs, HiddenColumns hiddenCols) + { + // calculate translation in pixel terms: + // get mouse location in viewport coords, add translation in viewport + // coords, and update viewport as usual + int vpx = Math.round((float) mousex * alwidth / width); + int vpy = Math.round((float) mousey * alheight / sequencesHeight); - int x = mousex; - int y = mousey; + updateViewportFromTopLeft(vpx + xdiff, vpy + ydiff, hiddenSeqs, + hiddenCols); - if (x < 0) + } + + @Override + protected void updateViewportFromTopLeft(int leftx, int topy, + HiddenSequences hiddenSeqs, HiddenColumns hiddenCols) + { + int xAsRes = leftx; + int yAsSeq = topy; + resetAlignmentDims(); + + if (xAsRes < 0) { - x = 0; + xAsRes = 0; } - if (y < 0) + if (yAsSeq < 0) { - y = 0; + yAsSeq = 0; } - // - // Convert x value to residue position - // - - // need to determine where scrollCol should be, given x - // to do this also need to know width of viewport, and some hidden column - // correction - - // convert x to residues - this is an absolute position - int xAsRes = Math.round((float) x * alwidth / width); + // Determine where scrollCol should be, given visXAsRes // get viewport width in residues - int vpwidth = ranges.getEndRes() - ranges.getStartRes() + 1; + int vpwidth = ranges.getViewportWidth(); if (xAsRes + vpwidth > alwidth) { // went past the end of the alignment, adjust backwards // if last position was before the end of the alignment, need to update - if ((scrollCol + vpwidth - 1) < alwidth) + if (ranges.getStartRes() < alwidth) { xAsRes = alwidth - vpwidth; } else { - xAsRes = scrollCol; + xAsRes = ranges.getStartRes(); } } - - // - // Convert y value to sequence position - // - - // convert y to residues - int yAsSeq = Math.round((float) y * alheight / sequencesHeight); + // Determine where scrollRow should be, given visYAsSeq // get viewport height in sequences // add 1 because height includes both endSeq and startSeq - int vpheight = ranges.getEndSeq() - ranges.getStartSeq() + 1; + int vpheight = ranges.getViewportHeight(); if (yAsSeq + vpheight > alheight) { // went past the end of the alignment, adjust backwards - if ((scrollRow + vpheight - 1) < alheight) + if (ranges.getEndSeq() < alheight) { yAsSeq = alheight - vpheight; } else { - yAsSeq = scrollRow; + yAsSeq = ranges.getStartSeq(); } } - // update scroll values - scrollCol = xAsRes; - scrollRow = yAsSeq; - + // update viewport + ranges.setStartRes(xAsRes); + ranges.setStartSeq(yAsSeq); } @Override public void setBoxPosition(HiddenSequences hiddenSeqs, HiddenColumns hiddenCols) { - // work with visible values of startRes and endRes - int startRes = ranges.getStartRes(); - int endRes = ranges.getEndRes(); - - // work with visible values of startSeq and endSeq - int startSeq = ranges.getStartSeq(); - int endSeq = ranges.getEndSeq(); - - setBoxPosition(startRes, endRes, startSeq, endSeq); + setBoxPosition(ranges.getStartRes(), ranges.getStartSeq(), + ranges.getViewportWidth(), ranges.getViewportHeight()); } @Override @@ -134,4 +142,32 @@ public class OverviewDimensionsHideHidden extends OverviewDimensions alwidth = ranges.getVisibleAlignmentWidth(); alheight = ranges.getVisibleAlignmentHeight(); } + + @Override + protected int getLeftXFromCentreX(int mousex, HiddenColumns hidden) + { + int vpx = Math.round((float) mousex * alwidth / width); + return vpx - ranges.getViewportWidth() / 2; + } + + @Override + protected int getTopYFromCentreY(int mousey, HiddenSequences hidden) + { + int vpy = Math.round((float) mousey * alheight / sequencesHeight); + return vpy - ranges.getViewportHeight() / 2; + } + + @Override + public void setDragPoint(int x, int y, HiddenSequences hiddenSeqs, + HiddenColumns hiddenCols) + { + // 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); + + xdiff = ranges.getStartRes() - vpx; + ydiff = ranges.getStartSeq() - vpy; + } + }