package aliview.gui.pane; import org.apache.log4j.Logger; import aliview.AminoAcid; import aliview.alignment.Alignment; import aliview.sequences.AminoAcidAndPosition; import aliview.sequences.Sequence; public class SequencePainterAminoAcidTranslatedIgnoreGap extends SequencePainter { public SequencePainterAminoAcidTranslatedIgnoreGap(Sequence seq, int seqYPos, int clipPosY, int xMinSeqPos, int xMaxSeqPos, double seqPerPix, double charWidth, double charHeight, double highDPIScaleFactor, RGBArray clipRGB, AlignmentPane aliPane, Alignment alignment) { super(seq, seqYPos, clipPosY, xMinSeqPos, xMaxSeqPos, seqPerPix, charWidth, charHeight, highDPIScaleFactor, clipRGB, aliPane, alignment); // TODO Auto-generated constructor stub } private static final Logger logger = Logger.getLogger(SequencePainterAminoAcidTranslatedIgnoreGap.class); @Override protected void copyPixels(Sequence seq, RGBArray clipRGB, int seqXPos, int seqYPos, int pixelPosX, int pixelPosY, AlignmentPane aliPane, Alignment alignment) { AminoAcidAndPosition aaAndPos = seq.getNoGapAminoAcidAtNucleotidePos(seqXPos); int acidStartPos = aaAndPos.position; AminoAcid acid = aaAndPos.acid; byte residue = seq.getBaseAtPos(seqXPos); TranslationCharPixelsContainer pixContainerToUse = aliPane.charPixTranslationDefault; TranslationCharPixelsContainer pixLetterContainerToUse = aliPane.charPixTranslationLetter; // adjust colors if selected and temp selection // We have to calculate within this way - because rect.contains(Point) is always returning false on a 0-width or 0 height Rectangle boolean isPointWithinSelectionRect = false; if(alignment.getTempSelection() != null){ if(seqXPos <= alignment.getTempSelection().getMaxX() && seqXPos >= alignment.getTempSelection().getMinX() && seqYPos <= alignment.getTempSelection().getMaxY() && seqYPos >= alignment.getTempSelection().getMinY()){ isPointWithinSelectionRect = true; } } if(alignment.isBaseSelected(seqXPos,seqYPos) || (alignment.getTempSelection() != null && isPointWithinSelectionRect)){ pixContainerToUse = aliPane.charPixTranslationSelected; pixLetterContainerToUse = aliPane.charPixTranslationSelectedLetter; } RGBArray newPiece; if(! aliPane.isDrawAminoAcidCode()){ newPiece = pixContainerToUse.getRGBArray(acid, residue); }else{ if(seqXPos == acidStartPos + 1){ // this line is changed newPiece = pixLetterContainerToUse.getRGBArray(acid, residue); }else{ residue = ' '; newPiece = pixContainerToUse.getRGBArray(acid, residue); } } try { ImageUtils.insertRGBArrayAt(pixelPosX, pixelPosY, newPiece, clipRGB); } catch (Exception e) { logger.info("clipX" + pixelPosX); logger.info("clipY" + pixelPosY); } } }