X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjalview%2Fgui%2FIdCanvas.java;h=b883e98d5cefaad6c1da132871b07a42abbca6b8;hb=5ea5764f835390ab631afbf54c2de40f63aa8f31;hp=a925227f2e1e60a3c0303ee5969abeae8d17108b;hpb=ab00dbe83bf9addb1ffababb3bca6b21bab7b0c5;p=jalview.git diff --git a/src/jalview/gui/IdCanvas.java b/src/jalview/gui/IdCanvas.java index a925227..b883e98 100755 --- a/src/jalview/gui/IdCanvas.java +++ b/src/jalview/gui/IdCanvas.java @@ -20,6 +20,10 @@ */ package jalview.gui; +import jalview.datamodel.SequenceI; +import jalview.viewmodel.ViewportListenerI; +import jalview.viewmodel.ViewportRanges; + import java.awt.BorderLayout; import java.awt.Color; import java.awt.Font; @@ -33,10 +37,6 @@ import java.util.List; import javax.swing.JPanel; -import jalview.datamodel.SequenceI; -import jalview.viewmodel.ViewportListenerI; -import jalview.viewmodel.ViewportRanges; - /** * DOCUMENT ME! * @@ -55,11 +55,11 @@ public class IdCanvas extends JPanel implements ViewportListenerI BufferedImage image; - Graphics2D gg; +// Graphics2D gg; int imgHeight = 0; - boolean fastPaint = false; + private boolean fastPaint = false; List searchResults; @@ -67,6 +67,8 @@ public class IdCanvas extends JPanel implements ViewportListenerI private Font idfont; + private boolean allowFastPaint; + /** * Creates a new IdCanvas object. * @@ -137,6 +139,7 @@ public class IdCanvas extends JPanel implements ViewportListenerI g.drawString(s.getDisplayId(av.getShowJVSuffix()), xPos, (((i - starty + 1) * charHeight) + ypos) - (charHeight / 5)); + // JAL-3253-applet was just hiddenRows here. ccfc48e (gmungoc) added getShowHiddenMarkers test if (hiddenRows && av.getShowHiddenMarkers()) { drawMarker(g, av, i, starty, ypos); @@ -152,10 +155,11 @@ public class IdCanvas extends JPanel implements ViewportListenerI */ public void fastPaint(int vertical) { + /* * for now, not attempting fast paint of wrapped ids... */ - if (gg == null || av.getWrapAlignment()) + if (image == null || av.getWrapAlignment()) { repaint(); @@ -164,6 +168,7 @@ public class IdCanvas extends JPanel implements ViewportListenerI ViewportRanges ranges = av.getRanges(); + Graphics2D gg = image.createGraphics(); gg.copyArea(0, 0, getWidth(), imgHeight, 0, -vertical * av.getCharHeight()); @@ -200,6 +205,8 @@ public class IdCanvas extends JPanel implements ViewportListenerI gg.translate(0, -transY); + gg.dispose(); + fastPaint = true; // Call repaint on alignment panel so that repaints from other alignment @@ -217,12 +224,15 @@ public class IdCanvas extends JPanel implements ViewportListenerI @Override public void paintComponent(Graphics g) { - super.paintComponent(g); + if (av.getAlignPanel().getHoldRepaint()) + { + return; + } g.setColor(Color.white); g.fillRect(0, 0, getWidth(), getHeight()); - if (fastPaint) + if (allowFastPaint && fastPaint) { fastPaint = false; g.drawImage(image, 0, 0, this); @@ -242,17 +252,19 @@ public class IdCanvas extends JPanel implements ViewportListenerI if (oldHeight != imgHeight || image.getWidth(this) != getWidth()) { - image = new BufferedImage(getWidth(), imgHeight, + image = new BufferedImage(getWidth(), imgHeight, BufferedImage.TYPE_INT_RGB); } - gg = (Graphics2D) image.getGraphics(); + Graphics2D gg = image.createGraphics(); // Fill in the background gg.setColor(Color.white); gg.fillRect(0, 0, getWidth(), imgHeight); drawIds(gg, av, av.getRanges().getStartSeq(), av.getRanges().getEndSeq(), searchResults); + + gg.dispose(); g.drawImage(image, 0, 0, this); } @@ -380,20 +392,49 @@ public class IdCanvas extends JPanel implements ViewportListenerI int alignmentWidth = alignViewport.getAlignment().getWidth(); final int alheight = alignViewport.getAlignment().getHeight(); - /* + +// int annotationHeight = 0; + + /* (former) * assumption: SeqCanvas.calculateWrappedGeometry has been called + * + * was based on the fact that SeqCanvas was added as a child prior to IdCanvas, + * and children are processed in order of addition. + * + * It's probably fine. But... + * */ SeqCanvas seqCanvas = alignViewport.getAlignPanel() .getSeqPanel().seqCanvas; + // ...better: let's call it now + seqCanvas.calculateWrappedGeometry(); final int charHeight = alignViewport.getCharHeight(); AnnotationLabels labels = null; if (alignViewport.isShowAnnotation()) { + // BH when was ap == null? + if (ap == null) + { + ap = new AnnotationPanel(alignViewport); + } +// annotationHeight = ap.adjustPanelHeight(); labels = new AnnotationLabels(alignViewport); } +// int hgap = charHeight; +// if (alignViewport.getScaleAboveWrapped()) +// { +// hgap += charHeight; +// } +// +// /* +// * height of alignment + gap + annotations (if shown) +// */ +// int cHeight = alheight * charHeight + hgap +// + annotationHeight; +// ViewportRanges ranges = alignViewport.getRanges(); int rowSize = ranges.getViewportWidth(); @@ -564,20 +605,34 @@ public class IdCanvas extends JPanel implements ViewportListenerI public void propertyChange(PropertyChangeEvent evt) { String propertyName = evt.getPropertyName(); - if (propertyName.equals(ViewportRanges.STARTSEQ) - || (av.getWrapAlignment() - && propertyName.equals(ViewportRanges.STARTRES))) + switch (propertyName) { + case ViewportRanges.STARTSEQ: fastPaint((int) evt.getNewValue() - (int) evt.getOldValue()); - } - else if (propertyName.equals(ViewportRanges.STARTRESANDSEQ)) - { + break; + case ViewportRanges.STARTRES: + if (av.getWrapAlignment()) + { + fastPaint((int) evt.getNewValue() - (int) evt.getOldValue()); + } + break; + case ViewportRanges.STARTRESANDSEQ: fastPaint(((int[]) evt.getNewValue())[1] - ((int[]) evt.getOldValue())[1]); - } - else if (propertyName.equals(ViewportRanges.MOVE_VIEWPORT)) - { + break; + case ViewportRanges.MOVE_VIEWPORT: repaint(); + break; + default: } } + + /** + * Clears the flag that allows a 'fast paint' on the next repaint, so + * requiring a full repaint + */ + public void setNoFastPaint() + { + allowFastPaint = false; + } }