- new ArrayList<Object[]>();
-
- int scalestartx = (startx / 10) * 10;
-
- SequenceI refSeq = av.getAlignment().getSeqrep();
- int refSp = 0, refEp = -1, refStart = 0, refEnd = -1, refStartI = 0, refEndI = -1;
- if (refSeq != null)
- {
- // find bounds and set origin appopriately
- // locate first visible position for this sequence
- int[] refbounds = av.getColumnSelection()
- .locateVisibleBoundsOfSequence(refSeq);
-
- refSp = refbounds[0];
- refEp = refbounds[1];
- refStart = refbounds[2];
- refEnd = refbounds[3];
- refStartI = refbounds[4];
- refEndI = refbounds[5];
- scalestartx = refSp + ((scalestartx - refSp) / 10) * 10;
- }
-
-
- if (refSeq == null && scalestartx % 10 == 0)
- {
- scalestartx += 5;
- }
- List<Object[]> marks = new ArrayList<Object[]>();
- String string;
- int maxX = 0, refN, iadj;
- // todo: add a 'reference origin column' to set column number relative to
- for (int i = scalestartx; i < endx; i += 5)
- {
- Object[] amark = new Object[3];
- if (((i - refSp) % 10) == 0)
- {
- if (refSeq == null)
- {
- iadj = av.getColumnSelection().adjustForHiddenColumns(i - 1) + 1;
- string = String.valueOf(iadj);
- }
- else
- {
- iadj = av.getColumnSelection().adjustForHiddenColumns(i - 1);
- refN = refSeq.findPosition(iadj);
- // TODO show bounds if position is a gap
- // - ie L--R -> "1L|2R" for
- // marker
- if (iadj < refStartI)
- {
- string = String.valueOf(iadj - refStartI);
- }
- else if (iadj > refEndI)
- {
- string = "+" + String.valueOf(iadj - refEndI);
- }
- else
- {
- string = String.valueOf(refN) + refSeq.getCharAt(iadj);
- }
- }
- amark[0] = Boolean.TRUE;
- amark[1] = Integer.valueOf(i - startx - 1);
- amark[2] = string;
-
- }
- else
- {
- amark[0] = Boolean.FALSE;
- amark[1] = Integer.valueOf(i - startx - 1);
- amark[2] = null;
- }
- marks.add(amark);
+ // Respond to viewport change events (e.g. alignment panel was scrolled)
+ // Both scrolling and resizing change viewport ranges: scrolling changes
+ // both start and end points, but resize only changes end values.
+ // Here we only want to fastpaint on a scroll, with resize using a normal
+ // paint, so scroll events are identified as changes to the horizontal or
+ // vertical start value.
+ if (evt.getPropertyName().equals(ViewportRanges.STARTRES)
+ || evt.getPropertyName().equals(ViewportRanges.STARTRESANDSEQ)
+ || evt.getPropertyName().equals(ViewportRanges.MOVE_VIEWPORT))
+ {
+ // scroll event, repaint panel
+
+ // Call repaint on alignment panel so that repaints from other alignment
+ // panel components can be aggregated. Otherwise performance of the overview
+ // window and others may be adversely affected.
+ av.getAlignPanel().repaint();