X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Frenderer%2FOverviewRenderer.java;h=0f8cda6a1e78463a7abcaae559cb20e8cfd0de40;hb=b02e2d7bed980ad4c50112575f4253494b993ee2;hp=75b81987f11790c41297788a4347ef5111ec9509;hpb=af00f89579328012da26b151996997b1735265b4;p=jalview.git diff --git a/src/jalview/renderer/OverviewRenderer.java b/src/jalview/renderer/OverviewRenderer.java index 75b8198..0f8cda6 100644 --- a/src/jalview/renderer/OverviewRenderer.java +++ b/src/jalview/renderer/OverviewRenderer.java @@ -26,6 +26,7 @@ import jalview.datamodel.AlignmentAnnotation; import jalview.datamodel.Annotation; import jalview.datamodel.SequenceI; import jalview.renderer.seqfeatures.FeatureColourFinder; +import jalview.renderer.seqfeatures.FeatureRenderer; import jalview.viewmodel.OverviewDimensions; import java.awt.Color; @@ -47,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, - FeatureColourFinder colfinder, OverviewDimensions od) + FeatureRenderer fr, OverviewDimensions od) { sr = seqRenderer; - finder = colfinder; + finder = new FeatureColourFinder(fr); pixelsPerCol = od.getPixelsPerCol(); pixelsPerSeq = od.getPixelsPerSeq(); @@ -74,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); @@ -88,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; @@ -162,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) @@ -183,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; @@ -196,4 +221,12 @@ public class OverviewRenderer } } } + + public void setRedraw(boolean b) + { + synchronized (this) + { + redraw = b; + } + } }