X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FOverviewCanvas.java;h=7371eb5e0bf79a44aac37b9a081000d1a58df858;hb=2ff9268291ebf9d1d8d10c0108ea4f8b50c2885f;hp=997d214b5eafea5cfd0230922ca5d896a902e2ec;hpb=67affee2e65ca942447570c35526c04d64f41fe1;p=jalview.git diff --git a/src/jalview/gui/OverviewCanvas.java b/src/jalview/gui/OverviewCanvas.java index 997d214..7371eb5 100644 --- a/src/jalview/gui/OverviewCanvas.java +++ b/src/jalview/gui/OverviewCanvas.java @@ -21,26 +21,20 @@ package jalview.gui; import jalview.api.AlignViewportI; +import jalview.bin.Cache; import jalview.renderer.OverviewRenderer; +import jalview.renderer.OverviewResColourFinder; import jalview.viewmodel.OverviewDimensions; -import java.awt.AlphaComposite; import java.awt.Color; +import java.awt.Dimension; import java.awt.Graphics; -import java.awt.Graphics2D; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; import java.awt.image.BufferedImage; import javax.swing.JComponent; -import javax.swing.Timer; public class OverviewCanvas extends JComponent { - private static final long RUNNING_TIME = 2000; - - private static final int SPEED = 40; - private static final Color TRANS_GREY = new Color(100, 100, 100, 25); // This is set true if the alignment view changes whilst @@ -49,12 +43,12 @@ public class OverviewCanvas extends JComponent private volatile boolean updaterunning = false; + private boolean dispose = false; + private BufferedImage miniMe; private BufferedImage lastMiniMe = null; - private BufferedImage veryLastMiniMe = null; - // Can set different properties in this seqCanvas than // main visible SeqCanvas private SequenceRenderer sr; @@ -67,11 +61,7 @@ public class OverviewCanvas extends JComponent private AlignViewportI av; - private float alpha = 0f; - - private long startTime = -1; - - private final Timer timer; + private OverviewResColourFinder cf; private ProgressPanel progressPanel; @@ -84,40 +74,16 @@ public class OverviewCanvas extends JComponent sr = new SequenceRenderer(av); sr.renderGaps = false; - sr.forOverview = true; fr = new jalview.renderer.seqfeatures.FeatureRenderer(av); - setSize(od.getWidth(), od.getHeight()); - - timer = new Timer(SPEED, new ActionListener() - { - - @Override - public void actionPerformed(ActionEvent e) - { - if (startTime < 0) - { - startTime = System.currentTimeMillis(); - } - else - { + boolean useLegacy = Cache.getDefault(Preferences.USE_LEGACY_GAP, false); + Color gapCol = Cache.getDefaultColour(Preferences.GAP_COLOUR, + jalview.renderer.OverviewResColourFinder.OVERVIEW_DEFAULT_GAP); + Color hiddenCol = Cache.getDefaultColour(Preferences.HIDDEN_COLOUR, + jalview.renderer.OverviewResColourFinder.OVERVIEW_DEFAULT_HIDDEN); + cf = new OverviewResColourFinder(useLegacy, gapCol, hiddenCol); - long time = System.currentTimeMillis(); - long duration = time - startTime; - if (duration >= RUNNING_TIME) - { - startTime = -1; - ((Timer) e.getSource()).stop(); - alpha = 0f; - } - else - { - alpha = 1f - ((float) duration / (float) RUNNING_TIME); - } - repaint(); - } - } - }); + setSize(od.getWidth(), od.getHeight()); } /** @@ -169,15 +135,19 @@ public class OverviewCanvas extends JComponent FeatureRenderer transferRenderer) { miniMe = null; - veryLastMiniMe = lastMiniMe; if (showSequenceFeatures) { fr.transferSettings(transferRenderer); } - or = new OverviewRenderer(sr, fr, od); + setPreferredSize(new Dimension(od.getWidth(), od.getHeight())); + + or = new OverviewRenderer(fr, od, av.getAlignment(), + av.getResidueShading(), cf); + or.addPropertyChangeListener(progressPanel); + miniMe = or.draw(od.getRows(av.getAlignment()), od.getColumns(av.getAlignment())); @@ -194,17 +164,19 @@ public class OverviewCanvas extends JComponent System.gc(); or.removePropertyChangeListener(progressPanel); + or = null; if (restart) { restart = false; - draw(showSequenceFeatures, showAnnotation, transferRenderer); + if (!dispose) + { + draw(showSequenceFeatures, showAnnotation, transferRenderer); + } } else { updaterunning = false; lastMiniMe = miniMe; - alpha = 1f; - timer.start(); } } @@ -272,25 +244,8 @@ public class OverviewCanvas extends JComponent } else // not a resize { - if (alpha != 0) // this is a timer triggered dissolve - { - Graphics2D g2d = (Graphics2D) g.create(); - - // draw the original image - g2d.drawImage(veryLastMiniMe, 0, 0, getWidth(), getHeight(), - this); - - // draw the new image on top with varying degrees of transparency - g2d.setComposite(AlphaComposite.SrcOver.derive(1f - alpha)); - g2d.drawImage(lastMiniMe, 0, 0, getWidth(), getHeight(), this); - - g2d.dispose(); - } - else - { - // fall back to normal behaviour - g.drawImage(lastMiniMe, 0, 0, getWidth(), getHeight(), this); - } + // fall back to normal behaviour + g.drawImage(lastMiniMe, 0, 0, getWidth(), getHeight(), this); } } @@ -298,4 +253,17 @@ public class OverviewCanvas extends JComponent g.setColor(Color.red); od.drawBox(g); } + + public void dispose() + { + dispose = true; + synchronized (this) + { + restart = true; + if (or != null) + { + or.setRedraw(true); + } + } + } }