X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Frenderer%2FOverviewRenderer.java;h=0f8cda6a1e78463a7abcaae559cb20e8cfd0de40;hb=3d0101179759ef157b088ea135423cd909512d9f;hp=60f80b128dd9636fb5d9ca93f1d8b8e251509865;hpb=e0aee2e0eb48c09a557a61fece6c0f4fdcae110b;p=jalview.git diff --git a/src/jalview/renderer/OverviewRenderer.java b/src/jalview/renderer/OverviewRenderer.java index 60f80b1..0f8cda6 100644 --- a/src/jalview/renderer/OverviewRenderer.java +++ b/src/jalview/renderer/OverviewRenderer.java @@ -48,11 +48,14 @@ public class OverviewRenderer // raw number of pixels to allocate to each row private float pixelsPerSeq; + // flag to indicate whether to halt drawing + private volatile boolean redraw = false; + public OverviewRenderer(jalview.api.SequenceRenderer seqRenderer, - FeatureRenderer ftRenderer, OverviewDimensions od) + FeatureRenderer fr, OverviewDimensions od) { sr = seqRenderer; - finder = new FeatureColourFinder(ftRenderer); + finder = new FeatureColourFinder(fr); pixelsPerCol = od.getPixelsPerCol(); pixelsPerSeq = od.getPixelsPerSeq(); @@ -75,8 +78,14 @@ public class OverviewRenderer int rgbcolor = Color.white.getRGB(); int seqIndex = 0; int pixelRow = 0; + for (int alignmentRow : rows) { + if (redraw) + { + break; + } + // get details of this alignment row boolean hidden = rows.isHidden(alignmentRow); SequenceI seq = rows.getSequence(alignmentRow); @@ -89,25 +98,36 @@ public class OverviewRenderer int pixelCol = 0; for (int alignmentCol : cols) { + if (redraw) + { + break; + } + // calculate where this column extends to in pixels - int endCol = Math.min( - Math.round((colIndex + 1) * pixelsPerCol) - 1, + int endCol = Math.min(Math.round((colIndex + 1) * pixelsPerCol) - 1, miniMe.getWidth() - 1); - // determine the colour based on the sequence and column position - rgbcolor = getColumnColourFromSequence(seq, - hidden || cols.isHidden(alignmentCol), alignmentCol, finder); - - // fill in the appropriate number of pixels - for (int row = pixelRow; row <= endRow; ++row) + // don't do expensive colour determination if we're not going to use it + // NB this is important to avoid performance issues in the overview + // panel + if (pixelCol <= endCol) { - for (int col = pixelCol; col <= endCol; ++col) + // determine the colour based on the sequence and column position + rgbcolor = getColumnColourFromSequence(seq, + hidden || cols.isHidden(alignmentCol), alignmentCol, + finder); + + // fill in the appropriate number of pixels + for (int row = pixelRow; row <= endRow; ++row) { - miniMe.setRGB(col, row, rgbcolor); + for (int col = pixelCol; col <= endCol; ++col) + { + miniMe.setRGB(col, row, rgbcolor); + } } - } - pixelCol = endCol + 1; + pixelCol = endCol + 1; + } colIndex++; } pixelRow = endRow + 1; @@ -163,14 +183,17 @@ public class OverviewRenderer int pixelCol = 0; for (int alignmentCol : cols) { + if (redraw) + { + break; + } if (alignmentCol >= annotations.length) { break; // no more annotations to draw here } else { - int endCol = Math.min( - Math.round((colIndex + 1) * pixelsPerCol) - 1, + int endCol = Math.min(Math.round((colIndex + 1) * pixelsPerCol) - 1, miniMe.getWidth() - 1); if (annotations[alignmentCol] != null) @@ -184,7 +207,8 @@ public class OverviewRenderer g.setColor(annotations[alignmentCol].colour); } - height = (int) ((annotations[alignmentCol].value / anno.graphMax) * y); + height = (int) ((annotations[alignmentCol].value / anno.graphMax) + * y); if (height > y) { height = y; @@ -197,4 +221,12 @@ public class OverviewRenderer } } } + + public void setRedraw(boolean b) + { + synchronized (this) + { + redraw = b; + } + } }