X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FIdCanvas.java;h=cd7b0b77d8733a2c8d72d688c1a19ff0849c1042;hb=948bd3bcbacc509da0cefaae3eedd97300a6ccce;hp=2ebdbba1521629e20c84739bb78a4792bd6f424b;hpb=838a66f363f856d499deb2eb5f05d78c2ea75f10;p=jalview.git diff --git a/src/jalview/gui/IdCanvas.java b/src/jalview/gui/IdCanvas.java index 2ebdbba..cd7b0b7 100755 --- a/src/jalview/gui/IdCanvas.java +++ b/src/jalview/gui/IdCanvas.java @@ -83,7 +83,7 @@ public class IdCanvas extends JPanel implements ViewportListenerI this.av = av; PaintRefresher.Register(this, av.getSequenceSetId()); av.getRanges().addPropertyChangeListener(this); - } + } /** * DOCUMENT ME! @@ -204,7 +204,11 @@ public class IdCanvas extends JPanel implements ViewportListenerI gg.translate(0, -transY); fastPaint = true; - repaint(); + + // 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(); } /** @@ -216,41 +220,43 @@ public class IdCanvas extends JPanel implements ViewportListenerI @Override public void paintComponent(Graphics g) { + super.paintComponent(g); + g.setColor(Color.white); g.fillRect(0, 0, getWidth(), getHeight()); - + if (fastPaint) { fastPaint = false; g.drawImage(image, 0, 0, this); - + return; } - + int oldHeight = imgHeight; - + imgHeight = getHeight(); imgHeight -= (imgHeight % av.getCharHeight()); - + if (imgHeight < 1) { return; } - + if (oldHeight != imgHeight || image.getWidth(this) != getWidth()) { - image = new BufferedImage(getWidth(), imgHeight, - BufferedImage.TYPE_INT_RGB); + image = new BufferedImage(getWidth(), imgHeight, + BufferedImage.TYPE_INT_RGB); } - + gg = (Graphics2D) image.getGraphics(); - + // Fill in the background gg.setColor(Color.white); gg.fillRect(0, 0, getWidth(), imgHeight); - + drawIds(av.getRanges().getStartSeq(), av.getRanges().getEndSeq()); - + g.drawImage(image, 0, 0, this); } @@ -266,8 +272,8 @@ public class IdCanvas extends JPanel implements ViewportListenerI { if (av.isSeqNameItalics()) { - setIdfont(new Font(av.getFont().getName(), Font.ITALIC, av.getFont() - .getSize())); + setIdfont(new Font(av.getFont().getName(), Font.ITALIC, + av.getFont().getSize())); } else { @@ -323,9 +329,8 @@ public class IdCanvas extends JPanel implements ViewportListenerI currentColor = Color.black; currentTextColor = Color.white; } - else if ((av.getSelectionGroup() != null) - && av.getSelectionGroup().getSequences(null) - .contains(sequence)) + else if ((av.getSelectionGroup() != null) && av.getSelectionGroup() + .getSequences(null).contains(sequence)) { currentColor = Color.lightGray; currentTextColor = Color.black; @@ -375,7 +380,7 @@ public class IdCanvas extends JPanel implements ViewportListenerI if (av.hasHiddenColumns()) { maxwidth = av.getAlignment().getHiddenColumns() - .findColumnPosition(maxwidth) - 1; + .absoluteToVisibleColumn(maxwidth) - 1; } int annotationHeight = 0; @@ -404,15 +409,15 @@ public class IdCanvas extends JPanel implements ViewportListenerI ViewportRanges ranges = av.getRanges(); - int rowSize = ranges.getEndRes() - ranges.getStartRes(); + int rowSize = ranges.getViewportWidth(); /* * draw repeating sequence ids until out of sequence data or * out of visible space, whichever comes first */ int ypos = hgap; - for (int row = ranges.getStartRes(); (ypos <= getHeight()) - && (row < maxwidth);) + int row = ranges.getStartRes(); + while ((ypos <= getHeight()) && (row < maxwidth)) { for (int i = starty; i < alheight; i++) { @@ -444,7 +449,8 @@ public class IdCanvas extends JPanel implements ViewportListenerI void drawMarker(int i, int starty, int yoffset) { - SequenceI[] hseqs = av.getAlignment().getHiddenSequences().hiddenSequences; + SequenceI[] hseqs = av.getAlignment() + .getHiddenSequences().hiddenSequences; // Use this method here instead of calling hiddenSeq adjust // 3 times. int hSize = hseqs.length; @@ -479,32 +485,36 @@ public class IdCanvas extends JPanel implements ViewportListenerI if (below) { gg.fillPolygon( - new int[] { getWidth() - av.getCharHeight(), + new int[] + { getWidth() - av.getCharHeight(), getWidth() - av.getCharHeight(), getWidth() }, - new int[] { - (i - starty) * av.getCharHeight() + yoffset, + new int[] + { (i - starty) * av.getCharHeight() + yoffset, (i - starty) * av.getCharHeight() + yoffset + av.getCharHeight() / 4, - (i - starty) * av.getCharHeight() + yoffset }, 3); + (i - starty) * av.getCharHeight() + yoffset }, + 3); } if (above) { gg.fillPolygon( - new int[] { getWidth() - av.getCharHeight(), + new int[] + { getWidth() - av.getCharHeight(), getWidth() - av.getCharHeight(), getWidth() }, - new int[] { - (i - starty + 1) * av.getCharHeight() + yoffset, + new int[] + { (i - starty + 1) * av.getCharHeight() + yoffset, (i - starty + 1) * av.getCharHeight() + yoffset - av.getCharHeight() / 4, - (i - starty + 1) * av.getCharHeight() + yoffset }, 3); + (i - starty + 1) * av.getCharHeight() + yoffset }, + 3); } } void setHiddenFont(SequenceI seq) { - Font bold = new Font(av.getFont().getName(), Font.BOLD, av.getFont() - .getSize()); + Font bold = new Font(av.getFont().getName(), Font.BOLD, + av.getFont().getSize()); if (av.isReferenceSeq(seq) || av.isHiddenRepSequence(seq)) { @@ -555,10 +565,19 @@ public class IdCanvas extends JPanel implements ViewportListenerI { String propertyName = evt.getPropertyName(); if (propertyName.equals(ViewportRanges.STARTSEQ) - || (av.getWrapAlignment() && propertyName - .equals(ViewportRanges.STARTRES))) + || (av.getWrapAlignment() + && propertyName.equals(ViewportRanges.STARTRES))) { fastPaint((int) evt.getNewValue() - (int) evt.getOldValue()); } + else if (propertyName.equals(ViewportRanges.STARTRESANDSEQ)) + { + fastPaint(((int[]) evt.getNewValue())[1] + - ((int[]) evt.getOldValue())[1]); + } + else if (propertyName.equals(ViewportRanges.MOVE_VIEWPORT)) + { + repaint(); + } } }