private boolean disposed = false;
- private BufferedImage lastMiniMe = null;
+ BufferedImage lastMiniMe = null;
// Can set different properties in this seqCanvas than
// main visible SeqCanvas
synchronized void finalizeDraw(BufferedImage miniMe)
{
- if (or == null)
- {
- System.out.println("OC or is null");
- }
- else if (showProgress)
+ if (showProgress && or != null)
{
or.removePropertyChangeListener(progressPanel);
}
}
else
{
- if (showAnnotation)
+ if (showAnnotation && or != null)
{
or.drawGraph(av.getAlignmentConservationAnnotation());
}
od.drawBox(g);
}
- private int ndraw, npaint, nrepaint;
+ // private int ndraw, npaint, nrepaint;
// @Override
// public void repaint()
@Override
public void componentResized(ComponentEvent evt)
{
- int ph = (progressPanel.getParent() == null ? 0
- : progressPanel.getHeight());
- // Resize is called on the initial display of the overview.
- // This code adjusts sizes to account for the progress bar if it has not
- // already been accounted for, which triggers another resize call for
- // the correct sizing, at which point the overview image is updated.
- // (This avoids a double recalculation of the image.)
- if (getWidth() == od.getWidth()
- && getHeight() == od.getHeight() + ph)
- {
- // BH: resizing is now exceptionally fast.
- // updateOverviewImage();
- }
- else
- {
- int w = getWidth();
- int h = getHeight();
- if ((w > 0) && (h > 0))
- {
- if (dim != null)
- {
- dim.setSize(w, h - ph);
- }
- od.setWidth(w);
- od.setHeight(h - ph);
- updateOverviewImage();
- // repaint();
- }
- // BH 2019.07.29 this is unnecessary -- it is what layout managers are
- // for:
- // setPreferredSize(new Dimension(od.getWidth(), od.getHeight() +
- // ph));
- }
+ resizePanel();
}
});
// }
}
+ protected void resizePanel()
+ {
+ int ph = (progressPanel.getParent() == null ? 0
+ : progressPanel.getHeight());
+ // Resize is called on the initial display of the overview.
+ // This code adjusts sizes to account for the progress bar if it has not
+ // already been accounted for, which triggers another resize call for
+ // the correct sizing, at which point the overview image is updated.
+ // (This avoids a double recalculation of the image.)
+ if (getWidth() == od.getWidth() && getHeight() == od.getHeight() + ph)
+ {
+ if (canvas.lastMiniMe == null)
+ {
+ updateOverviewImage();
+ }
+ }
+ else
+ {
+ int w = getWidth();
+ int h = getHeight();
+ if ((w > 0) && (h > 0))
+ {
+ if (dim != null)
+ {
+ dim.setSize(w, h - ph);
+ }
+ od.setWidth(w);
+ od.setHeight(h - ph);
+ updateOverviewImage();
+ }
+ // BH 2019.07.29 this is unnecessary -- it is what layout managers are
+ // for:
+ // setPreferredSize(new Dimension(od.getWidth(), od.getHeight() +
+ // ph));
+ }
+ }
+
/**
* Create the appropriate type of OverViewDimensions, with the desired size.
*/
return (isGap ? GAP_COLOUR : RESIDUE_COLOUR);
}
return (isGap && !shader.getColourScheme().hasGapColour() ? GAP_COLOUR
- : shader.findColour(currentChar, i, seq).getRGB());
+ : shader.findColourInt(currentChar, i, seq));
}
public int getResidueColourInt(boolean showBoxes, ResidueShaderI shader,
return colour;
}
+ @Override
+ public int findColourInt(char symbol, int position, SequenceI seq)
+ {
+ if (colourScheme == null)
+ {
+ return -1;// Color.white; // Colour is 'None'
+ }
+
+ /*
+ * get 'base' colour
+ */
+ ProfileI profile = consensus == null ? null : consensus.get(position);
+ String modalResidue = profile == null ? null
+ : profile.getModalResidue();
+ float pid = profile == null ? 0f
+ : profile.getPercentageIdentity(ignoreGaps);
+ int colour = colourScheme
+ .findColour(symbol, position, seq, modalResidue, pid).getRGB();
+
+ /*
+ * apply PID threshold and consensus fading if in force
+ */
+ if (!Comparison.isGap(symbol))
+ {
+ colour = adjustColourInt(symbol, position, colour);
+ }
+
+ return colour;
+ }
+
/**
* Adjusts colour by applying thresholding or conservation shading, if in
* force. That is
return colour;
}
+ protected int adjustColourInt(char symbol, int column, int colour)
+ {
+ if (!aboveThreshold(symbol, column))
+ {
+ colour = -1;// Color.white;
+ }
+
+ if (conservationColouring)
+ {
+ colour = applyConservationInt(colour, column);
+ }
+ return colour;
+ }
+
/**
* Answers true if there is a consensus profile for the specified column, and
* the given residue matches the consensus (or joint consensus) residue for
return ColorUtils.bleachColour(currentColour, bleachFactor);
}
+ protected int applyConservationInt(int currentColour, int column)
+ {
+ if (conservation == null || conservation.length <= column)
+ {
+ return currentColour;
+ }
+ char conservationScore = conservation[column];
+
+ /*
+ * if residues are fully conserved (* or 11), or all properties
+ * are conserved (+ or 10), leave colour unchanged
+ */
+ if (conservationScore == '*' || conservationScore == '+'
+ || conservationScore == (char) 10
+ || conservationScore == (char) 11)
+ {
+ return currentColour;
+ }
+
+ if (Comparison.isGap(conservationScore))
+ {
+ return -1;// Color.white;
+ }
+
+ /*
+ * convert score 0-9 to a bleaching factor 1.1 - 0.2
+ */
+ float bleachFactor = (11 - (conservationScore - '0')) / 10f;
+
+ /*
+ * scale this up by 0-5 (percentage slider / 20)
+ * as a result, scores of: 0 1 2 3 4 5 6 7 8 9
+ * fade to white at slider value: 18 20 22 25 29 33 40 50 67 100%
+ */
+ bleachFactor *= (conservationIncrement / 20f);
+
+ return ColorUtils.bleachColourInt(currentColour, bleachFactor);
+ }
+
/**
* @see jalview.renderer.ResidueShaderI#getColourScheme()
*/
public abstract void setColourScheme(ColourSchemeI cs);
+ int findColourInt(char symbol, int position, SequenceI seq);
+
}
\ No newline at end of file
}
}
+ public static int bleachColourInt(int colour, float bleachFactor)
+ {
+ if (bleachFactor >= 1f)
+ {
+ return -1;// Color.WHITE;
+ }
+ if (bleachFactor <= -1f)
+ {
+ return 0xFF000000;// Color.BLACK;
+ }
+ if (bleachFactor == 0f)
+ {
+ return colour;
+ }
+
+ int red = (colour >> 16) & 0xFF;// getRed();
+ int green = (colour >> 8) & 0xFF;// colour.getGreen();
+ int blue = colour & 0xFF;// .getBlue();
+
+ if (bleachFactor > 0)
+ {
+ red += (255 - red) * bleachFactor;
+ green += (255 - green) * bleachFactor;
+ blue += (255 - blue) * bleachFactor;
+ }
+ else
+ {
+ float factor = 1 + bleachFactor;
+ red *= factor;
+ green *= factor;
+ blue *= factor;
+ }
+ return 0xFF000000 | (red << 16) | (green << 8) | blue;// new Color(red,
+ // green, blue);
+ }
+
/**
* Parses a string into a Color, where the accepted formats are
* <ul>