- * Check box dimensions and scroll positions and correct if necessary
- */
- public void updateViewportFromMouse(int x, int y)
- {
- int alwidth = av.getAlignment().getWidth();
- int alheight = av.getAlignment().getAbsoluteHeight();
-
- HiddenSequences hiddenSeqs = av.getAlignment().getHiddenSequences();
- ColumnSelection hiddenCols = av.getColumnSelection();
-
- if (x < 0)
- {
- 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
- //
-
- // 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 = av.getPosProps().getEndRes()
- - av.getPosProps().getStartRes() + 1;
-
- // 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
- xAsRes = hiddenCols.adjustForHiddenColumns(hiddenCols
- .findColumnPosition(xAsRes));
-
- // get where end res should be by adding the viewport width on
- int endRes = xAsRes + vpwidth;
-
- // check in case we went off the edge of the alignment
- if (endRes > alwidth)
- {
- // went past the end of the alignment, adjust backwards
- endRes = alwidth;
- // recalc xAsRes backwards from endRes
- xAsRes = endRes - vpwidth;
- }
-
- //
- // 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 = av.getPosProps().getEndSeq()
- - av.getPosProps().getStartSeq();
-
- // 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));
-
- // 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)
- {
- // went past the end of the alignment, adjust backwards
- endSeq = alheight;
- // recalc yAsSeq backwards from endSeq
- yAsSeq = endSeq - vpheight;
- }
-
- // convert absolute positions back to visible alignment positions for
- // viewport scrolling
- scrollCol = hiddenCols.findColumnPosition(xAsRes);
- scrollRow = hiddenSeqs.findIndexWithoutHiddenSeqs(yAsSeq);
- }
-
- /**
- * Update the overview panel box when the associated alignment panel is
- * changed
- *
- */
- public void setBoxPosition()
- {
- int alwidth = av.getAlignment().getWidth();
- int alheight = av.getAlignment().getAbsoluteHeight();
-
- int startRes = av.getPosProps().getAbsoluteStartRes();
- int endRes = av.getPosProps().getAbsoluteEndRes();
-
- int startSeq = av.getPosProps().getAbsoluteStartSeq();
- int endSeq = av.getPosProps().getAbsoluteEndSeq();
-
- boxX = Math.round((float) startRes * width / alwidth);
- boxY = Math.round((float) startSeq * sequencesHeight / alheight);
-
- boxWidth = Math
- .round((float) (endRes - startRes + 1) * width / alwidth);
- boxHeight = Math.round((float) (endSeq - startSeq) * sequencesHeight
- / alheight);
- }
-
- /**