X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FSeqCanvas.java;h=403cbcffe69014c2421354dbf7ad4bae8a7c06b8;hb=53507580ea0d347514d4f5e092a4d3d815609b9e;hp=8004cacebd8d89ea9f5f4a5633a85df7ee1d18d3;hpb=daf0320a63cf578d009076b2c3c3c788f7c153af;p=jalview.git diff --git a/src/jalview/gui/SeqCanvas.java b/src/jalview/gui/SeqCanvas.java index 8004cac..403cbcf 100755 --- a/src/jalview/gui/SeqCanvas.java +++ b/src/jalview/gui/SeqCanvas.java @@ -283,7 +283,7 @@ public class SeqCanvas extends JComponent implements ViewportListenerI */ public void fastPaint(int horizontal, int vertical) { - if (fastpainting || gg == null) + if (fastpainting || gg == null || img == null) { return; } @@ -429,12 +429,16 @@ public class SeqCanvas extends JComponent implements ViewportListenerI public void drawPanelForPrinting(Graphics g1, int startRes, int endRes, int startSeq, int endSeq) { + drawPanel(g1, startRes, endRes, startSeq, endSeq, 0); + BufferedImage selectImage = drawSelectionGroup(startRes, endRes, startSeq, endSeq); - drawPanel(g1, startRes, endRes, startSeq, endSeq, 0); - ((Graphics2D) g1).setComposite( - AlphaComposite.getInstance(AlphaComposite.SRC_OVER)); - g1.drawImage(selectImage, 0, 0, this); + if (selectImage != null) + { + ((Graphics2D) g1).setComposite(AlphaComposite + .getInstance(AlphaComposite.SRC_OVER)); + g1.drawImage(selectImage, 0, 0, this); + } } /** @@ -453,18 +457,34 @@ public class SeqCanvas extends JComponent implements ViewportListenerI int canvasHeight, int startRes) { SequenceGroup group = av.getSelectionGroup(); - BufferedImage selectImage = new BufferedImage(canvasWidth, canvasHeight, - BufferedImage.TYPE_INT_ARGB); // ARGB so alpha compositing works + + drawWrappedPanel(g, canvasWidth, canvasHeight, startRes); if (group != null) { - Graphics2D g2 = selectImage.createGraphics(); - setupSelectionGroup(g2, selectImage); - drawWrappedSelection(g2, group, canvasWidth, canvasHeight, startRes); - drawWrappedPanel(g, canvasWidth, canvasHeight, startRes); - g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER)); - g.drawImage(selectImage, 0, 0, this); - g2.dispose(); + BufferedImage selectImage = null; + try + { + selectImage = new BufferedImage(canvasWidth, canvasHeight, + BufferedImage.TYPE_INT_ARGB); // ARGB so alpha compositing works + } catch (OutOfMemoryError er) + { + System.gc(); + System.err.println("Print image OutOfMemory Error.\n" + er); + new OOMWarning("Creating wrapped alignment image for printing", er); + } + if (selectImage != null) + { + Graphics2D g2 = selectImage.createGraphics(); + setupSelectionGroup(g2, selectImage); + drawWrappedSelection(g2, group, canvasWidth, canvasHeight, + startRes); + + g2.setComposite( + AlphaComposite.getInstance(AlphaComposite.SRC_OVER)); + g.drawImage(selectImage, 0, 0, this); + g2.dispose(); + } } } @@ -807,7 +827,6 @@ public class SeqCanvas extends JComponent implements ViewportListenerI return annotations.adjustPanelHeight(); } - /** * Draws the visible region of the alignment on the graphics context. If there * are hidden column markers in the visible region, then each sub-region @@ -827,9 +846,8 @@ public class SeqCanvas extends JComponent implements ViewportListenerI * @param yOffset * vertical offset at which to draw (for wrapped alignments) */ - private void drawPanel(Graphics g1, int startRes, int endRes, - int startSeq, int endSeq, int yOffset) - + public void drawPanel(Graphics g1, final int startRes, final int endRes, + final int startSeq, final int endSeq, final int yOffset) { updateViewport(); if (!av.hasHiddenColumns()) @@ -903,7 +921,6 @@ public class SeqCanvas extends JComponent implements ViewportListenerI } - /** * Draws a region of the visible alignment * @@ -1010,7 +1027,7 @@ public class SeqCanvas extends JComponent implements ViewportListenerI { drawPartialGroupOutline(g, group, startRes, endRes, startSeq, endSeq, offset); - + groupIndex++; g.setStroke(new BasicStroke()); @@ -1472,6 +1489,7 @@ public class SeqCanvas extends JComponent implements ViewportListenerI return matchFound; } + @Override public void propertyChange(PropertyChangeEvent evt) { @@ -1492,12 +1510,22 @@ public class SeqCanvas extends JComponent implements ViewportListenerI else { int scrollX = 0; - if (eventName.equals(ViewportRanges.STARTRES)) + if (eventName.equals(ViewportRanges.STARTRES) + || eventName.equals(ViewportRanges.STARTRESANDSEQ)) { // Make sure we're not trying to draw a panel // larger than the visible window + if (eventName.equals(ViewportRanges.STARTRES)) + { + scrollX = (int) evt.getNewValue() - (int) evt.getOldValue(); + } + else + { + scrollX = ((int[]) evt.getNewValue())[0] + - ((int[]) evt.getOldValue())[0]; + } ViewportRanges vpRanges = av.getRanges(); - scrollX = (int) evt.getNewValue() - (int) evt.getOldValue(); + int range = vpRanges.getEndRes() - vpRanges.getStartRes(); if (scrollX > range) { @@ -1524,6 +1552,11 @@ public class SeqCanvas extends JComponent implements ViewportListenerI // scroll fastPaint(0, (int) evt.getNewValue() - (int) evt.getOldValue()); } + else if (eventName.equals(ViewportRanges.STARTRESANDSEQ)) + { + fastPaint(scrollX, ((int[]) evt.getNewValue())[1] + - ((int[]) evt.getOldValue())[1]); + } } }