/* * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) * Copyright (C) $$Year-Rel$$ The Jalview Authors * * This file is part of Jalview. * * Jalview is free software: you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation, either version 3 * of the License, or (at your option) any later version. * * Jalview is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR * PURPOSE. See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Jalview. If not, see . * The Jalview Authors are detailed in the 'AUTHORS' file. */ package jalview.renderer; import jalview.datamodel.SequenceGroup; import jalview.datamodel.SequenceI; import jalview.renderer.seqfeatures.FeatureColourFinder; import jalview.util.Comparison; import java.awt.Color; public class OverviewResColourFinder extends ResidueColourFinder { public static final Color OVERVIEW_DEFAULT_GAP = Color.lightGray; public static final Color OVERVIEW_DEFAULT_LEGACY_GAP = Color.white; public static final Color OVERVIEW_DEFAULT_HIDDEN = Color.darkGray .darker(); final Color gapColour; // colour to use for gaps final int gapColourInt; final Color residueColour; // colour to use for uncoloured residues final int residueColourInt; final Color hiddenColour; // colour for hidden regions boolean useLegacy = false; /** * Constructor without colour settings (used by applet) */ public OverviewResColourFinder() { this(false, OVERVIEW_DEFAULT_GAP, OVERVIEW_DEFAULT_HIDDEN); } /** * Constructor with colour settings * * @param useLegacyColouring * whether to use legacy gap colouring (white gaps, grey residues) * @param gapCol * gap colour if not legacy * @param hiddenCol * hidden region colour (transparency applied by rendering code) */ public OverviewResColourFinder(boolean useLegacyColouring, Color gapCol, Color hiddenCol) { if (useLegacyColouring) { gapColour = Color.white; residueColour = Color.lightGray; } else { gapColour = gapCol; residueColour = Color.WHITE; } gapColourInt = gapColour.getRGB(); residueColourInt = residueColour.getRGB(); hiddenColour = hiddenCol; } @Override public Color getBoxColour(ResidueShaderI shader, SequenceI seq, int i) { return new Color(getBoxColourInt(shader, seq, i)); } public int getBoxColourInt(ResidueShaderI shader, SequenceI seq, int i) { char currentChar = seq.getCharAt(i); // In the overview window, gaps are coloured grey, unless the colour scheme // specifies a gap colour, in which case gaps honour the colour scheme // settings boolean isGap = Comparison.isGap(currentChar); if (shader.getColourScheme() == null) { return (isGap ? gapColourInt : residueColourInt); } return (isGap && !shader.getColourScheme().hasGapColour() ? gapColourInt : shader.findColourInt(currentChar, i, seq)); } @Override public Color getResidueColour(boolean showBoxes, ResidueShaderI shader, SequenceGroup[] allGroups, final SequenceI seq, int i, FeatureColourFinder finder) { Color col = getResidueBoxColour(showBoxes, shader, allGroups, seq, i); // if there's a FeatureColourFinder we might override the residue colour // here with feature colouring col = finder == null || finder.noFeaturesDisplayed() ? col : finder.findFeatureColour(col, seq, i); return col; } public int getResidueColourInt(boolean showBoxes, ResidueShaderI shader, SequenceGroup[] allGroups, final SequenceI seq, int i, FeatureColourFinder finder) { int col = getResidueBoxColourInt(showBoxes, shader, allGroups, seq, i); // if there's a FeatureColourFinder we might override the residue colour // here with feature colouring col = finder == null || finder.noFeaturesDisplayed() ? col : finder.findFeatureColourInt(col, seq, i); return col; } @Override protected Color getResidueBoxColour(boolean showBoxes, ResidueShaderI shader, SequenceGroup[] allGroups, SequenceI seq, int i) { return new Color( getResidueBoxColourInt(showBoxes, shader, allGroups, seq, i)); } /** * In the overview, the showBoxes setting is ignored, as the overview displays * the colours regardless. */ protected int getResidueBoxColourInt(boolean showBoxes, ResidueShaderI shader, SequenceGroup[] allGroups, SequenceI seq, int i) { SequenceGroup currentSequenceGroup = getCurrentSequenceGroup(allGroups, i); ResidueShaderI currentShader = (currentSequenceGroup == null ? shader : currentSequenceGroup.getGroupColourScheme()); return getBoxColourInt(currentShader, seq, i); } /** * Supply hidden colour * * @return colour of hidden regions */ protected Color getHiddenColour() { return hiddenColour; } }