int xAsRes = getLeftXFromCentreX(mousex, hiddenCols);
int yAsSeq = getTopYFromCentreY(mousey, hiddenSeqs);
- updateViewportFromTopLeft(xAsRes, yAsSeq, hiddenSeqs, hiddenCols);
+ int visXAsRes = hiddenCols.findColumnPosition(xAsRes);
+ yAsSeq = hiddenSeqs.adjustForHiddenSeqs(
+ hiddenSeqs.findIndexWithoutHiddenSeqs(yAsSeq));
+ int visYAsSeq = hiddenSeqs.findIndexWithoutHiddenSeqs(yAsSeq);
+
+ updateViewportFromTopLeft(visXAsRes, visYAsSeq, hiddenSeqs, hiddenCols);
}
@Override
// coords,
// convert back to pixel coords
int vpx = Math.round((float) mousex * alwidth / width);
- // int visXAsRes = hiddenCols.findColumnPosition(vpx);
+ int visXAsRes = hiddenCols.findColumnPosition(vpx) + fixedX;
int vpy = Math.round((float) mousey * alheight / sequencesHeight);
- // int visYAsRes = hiddenSeqs.findIndexWithoutHiddenSeqs(vpy);
-
- System.out.println("vpx: " + vpx);
- // System.out.println("VisXAsRes: " + visXAsRes);
- System.out.println("transX: " + transX);
- // updateViewportFromTopLeft(vpx + transX, vpy + transY,
- // hiddenSeqs,
- // hiddenCols);
-
- int xAsRes = vpx + transX;
- int yAsSeq = vpy + transY;
-
- resetAlignmentDims();
-
- if (xAsRes < 0)
- {
- xAsRes = 0;
- }
-
- if (yAsSeq < 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);
-
- // get viewport width in residues
- int vpwidth = ranges.getViewportWidth();
-
- // get where x should be when accounting for hidden cols
- // 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
- // int visXAsRes = hiddenCols.findColumnPosition(xAsRes);
- int visXAsRes = xAsRes;
-
- // check in case we went off the edge of the alignment
- int visAlignWidth = hiddenCols.findColumnPosition(alwidth - 1);
- /* if (visXAsRes + vpwidth - 1 > visAlignWidth)
- {
- // went past the end of the alignment, adjust backwards
-
- // 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));
- }
- else
- {
- visXAsRes = ranges.getStartRes();
- }
- }*/
-
- //
- // Convert y value to sequence position
- //
-
- // convert y to residues
- // int yAsSeq = Math.round((float) y * alheight / sequencesHeight);
-
- // get viewport height in sequences
- int vpheight = ranges.getViewportHeight();
-
- // 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
- // position,
- // so convert back after getting visible region position
- yAsSeq = hiddenSeqs.adjustForHiddenSeqs(
- hiddenSeqs.findIndexWithoutHiddenSeqs(yAsSeq));
-
- // check in case we went off the edge of the alignment
- int visAlignHeight = hiddenSeqs.findIndexWithoutHiddenSeqs(alheight);
- int visYAsSeq = hiddenSeqs.findIndexWithoutHiddenSeqs(yAsSeq);
- if (visYAsSeq + vpheight - 1 > visAlignHeight)
- {
- // went past the end of the alignment, adjust backwards
- if (ranges.getEndSeq() < visAlignHeight)
- {
- visYAsSeq = hiddenSeqs.findIndexWithoutHiddenSeqs(
- hiddenSeqs.subtractVisibleRows(vpheight - 1, alheight - 1));
- }
- else
- {
- visYAsSeq = ranges.getStartSeq();
- }
- }
+ int visYAsRes = hiddenSeqs.findIndexWithoutHiddenSeqs(vpy) + fixedY;
- // update viewport
- ranges.setStartRes(visXAsRes);
- ranges.setStartSeq(visYAsSeq);
+ updateViewportFromTopLeft(visXAsRes, visYAsRes,
+ hiddenSeqs,
+ hiddenCols);
}
@Override
- protected void updateViewportFromTopLeft(int xAsRes, int yAsSeq,
+ protected void updateViewportFromTopLeft(int visXAsRes, int visYAsSeq,
HiddenSequences hiddenSeqs, HiddenColumns hiddenCols)
{
resetAlignmentDims();
- if (xAsRes < 0)
+ if (visXAsRes < 0)
{
- xAsRes = 0;
+ visXAsRes = 0;
}
- if (yAsSeq < 0)
+ if (visYAsSeq < 0)
{
- yAsSeq = 0;
+ visYAsSeq = 0;
}
//
// 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
- int visXAsRes = hiddenCols.findColumnPosition(xAsRes);
+
// check in case we went off the edge of the alignment
int visAlignWidth = hiddenCols.findColumnPosition(alwidth - 1);
// if y is in a hidden row region, shift up - but we still need absolute
// position,
// so convert back after getting visible region position
- yAsSeq = hiddenSeqs.adjustForHiddenSeqs(hiddenSeqs
- .findIndexWithoutHiddenSeqs(yAsSeq));
+
// check in case we went off the edge of the alignment
int visAlignHeight = hiddenSeqs.findIndexWithoutHiddenSeqs(alheight);
- int visYAsSeq = hiddenSeqs.findIndexWithoutHiddenSeqs(yAsSeq);
+
if (visYAsSeq + vpheight - 1 > visAlignHeight)
{
// went past the end of the alignment, adjust backwards
int startSeq = hiddenSeqs.adjustForHiddenSeqs(ranges.getStartSeq());
int endSeq = hiddenSeqs.adjustForHiddenSeqs(ranges.getEndSeq());
+ System.out.println("Update box: startres: " + startRes);
+
setBoxPosition(startRes, startSeq, endRes - startRes + 1, endSeq
- startSeq + 1);
}
{
// get alignment position of x and box (can get directly from vpranges) and calc difference
int vpx = Math.round((float) x * alwidth / width);
- int visXAsRes = hiddenCols.findColumnPosition(vpx);
-
- int vpy = Math.round((float) y * alheight / sequencesHeight);
- int visYAsRes = hiddenSeqs.findIndexWithoutHiddenSeqs(vpy);
+ fixedX = ranges.getStartRes() - hiddenCols.findColumnPosition(vpx);
- transX = ranges.getStartRes() - visXAsRes;
- transY = ranges.getStartSeq() - visYAsRes;
+ int vpy = Math.round((float) y * alheight / sequencesHeight);
+ fixedY = ranges.getStartSeq()
+ - hiddenSeqs.findIndexWithoutHiddenSeqs(vpy);
}
}