X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FSeqCanvas.java;h=15c15c3d25c0768cd90a6300ae7a09a9a2839703;hb=3bdd4947c87108581abe34d05c878ee110b60f72;hp=f542b17d68effd255169286b4fd82b36e2131255;hpb=3d1120fca6dd9dc2865ee6cde98760f65c2701da;p=jalview.git diff --git a/src/jalview/gui/SeqCanvas.java b/src/jalview/gui/SeqCanvas.java index f542b17..15c15c3 100755 --- a/src/jalview/gui/SeqCanvas.java +++ b/src/jalview/gui/SeqCanvas.java @@ -34,8 +34,8 @@ import javax.swing.*; */ public class SeqCanvas extends JComponent { - FeatureRenderer fr; - SequenceRenderer sr; + final FeatureRenderer fr; + final SequenceRenderer sr; BufferedImage img; Graphics2D gg; int imgWidth; @@ -46,6 +46,11 @@ public class SeqCanvas extends JComponent int LABEL_WEST; int LABEL_EAST; + + int cursorX = 0; + int cursorY = 0; + + /** * Creates a new SeqCanvas object. * @@ -100,8 +105,11 @@ public class SeqCanvas extends JComponent // NORTH SCALE for (int i = scalestartx; i < endx; i += 10) { - String string = String.valueOf(av.getColumnSelection().adjustForHiddenColumns(i)); - g.drawString(string, (i - startx - 1) * av.charWidth, + int value = i; + if(av.hasHiddenColumns) + value = av.getColumnSelection().adjustForHiddenColumns(value); + + g.drawString( String.valueOf(value), (i - startx - 1) * av.charWidth, ypos - (av.charHeight / 2)); g.drawLine(((i - startx - 1) * av.charWidth) + (av.charWidth / 2), @@ -124,6 +132,9 @@ public class SeqCanvas extends JComponent FontMetrics fm = getFontMetrics(av.getFont()); ypos += av.charHeight; + if(av.hasHiddenColumns) + startx = av.getColumnSelection().adjustForHiddenColumns(startx); + // EAST SCALE for (int i = 0; i < av.alignment.getHeight(); i++) { @@ -166,10 +177,14 @@ public class SeqCanvas extends JComponent { ypos += av.charHeight; + if(av.hasHiddenColumns) + endx = av.getColumnSelection().adjustForHiddenColumns(endx); + + SequenceI seq; // EAST SCALE for (int i = 0; i < av.alignment.getHeight(); i++) { - SequenceI seq = av.alignment.getSequenceAt(i); + seq = av.alignment.getSequenceAt(i); int index = endx; int value = -1; @@ -182,7 +197,7 @@ public class SeqCanvas extends JComponent continue; } - value = av.alignment.getSequenceAt(i).findPosition(index); + value = seq.findPosition(index); break; } @@ -208,6 +223,7 @@ public class SeqCanvas extends JComponent return; } + fastPaint = true; gg.copyArea(horizontal * av.charWidth, @@ -224,6 +240,7 @@ public class SeqCanvas extends JComponent int transX = 0; int transY = 0; + if (horizontal > 0) // scrollbar pulled right, image to the left { er ++; @@ -280,7 +297,7 @@ public class SeqCanvas extends JComponent { super.paintComponent(g); - sr.renderGaps(av.renderGaps); + if ( img != null && (fastPaint || (getVisibleRect().width != g.getClipBounds().width) @@ -329,7 +346,7 @@ public class SeqCanvas extends JComponent if (pdbCanvas != null) { - pdbCanvas.updateSeqColours(); + pdbCanvas.updateSeqColours(); } } @@ -392,14 +409,12 @@ public class SeqCanvas extends JComponent FontMetrics fm = getFontMetrics(av.getFont()); - int LABEL_EAST = 0; if (av.scaleRightWrapped) { LABEL_EAST = fm.stringWidth(getMask()); } - int LABEL_WEST = 0; if (av.scaleLeftWrapped) { @@ -418,12 +433,18 @@ public class SeqCanvas extends JComponent av.endRes = av.startRes + cWidth; - int endx = (startRes + cWidth) - 1; + int endx; int ypos = hgap; - while ((ypos <= canvasHeight) && (startRes < av.alignment.getWidth())) { + endx = startRes + cWidth -1; + + if (endx > al.getWidth()) + { + endx = al.getWidth(); + } + g.setFont(av.getFont()); g.setColor(Color.black); @@ -460,12 +481,6 @@ public class SeqCanvas extends JComponent cWidth * av.charWidth, (int) clip.getBounds().getHeight()); } - if (av.vconsensus!=null && av.alignment.getWidth() >= av.vconsensus.size()) - { - endx = av.vconsensus.size() - 2; - } - - drawPanel(g, startRes, endx, 0, al.getHeight(), ypos); if(av.showAnnotation) @@ -474,7 +489,7 @@ public class SeqCanvas extends JComponent if(annotations==null) annotations = new AnnotationPanel(av); - annotations.drawComponent( (Graphics2D) g, startRes, endx + 1); + annotations.drawComponent( (Graphics2D) g, startRes, endx+1); g.translate(0, -cHeight - ypos); } g.setClip(clip); @@ -485,12 +500,6 @@ public class SeqCanvas extends JComponent ypos -= 3; startRes += cWidth; - endx = (startRes + cWidth) - 1; - - if (endx > al.getWidth()) - { - endx = al.getWidth(); - } } } @@ -510,35 +519,12 @@ public class SeqCanvas extends JComponent * DOCUMENT ME! * * @param g1 DOCUMENT ME! - * @param x1 DOCUMENT ME! - * @param x2 DOCUMENT ME! - * @param y1 DOCUMENT ME! - * @param y2 DOCUMENT ME! - * @param startx DOCUMENT ME! - * @param starty DOCUMENT ME! + * @param startRes DOCUMENT ME! + * @param endRes DOCUMENT ME! + * @param startSeq DOCUMENT ME! + * @param endSeq DOCUMENT ME! * @param offset DOCUMENT ME! */ - - float aaRatio = 2f/3f; - public void increaseAARatio() - { - aaRatio += .025; - if(aaRatio>1) - aaRatio = 1; - - repaint(); - } - - public void decreaseAARation() - { - aaRatio -= .025; - if(aaRatio<0) - aaRatio = 0; - - repaint(); - } - - void drawPanel(Graphics g1, int startRes, int endRes, int startSeq, int endSeq, int offset) { @@ -587,7 +573,7 @@ public class SeqCanvas extends JComponent blockStart = hideEnd + 1; } - if (screenY < (endRes - startRes)) + if (screenY <= (endRes - startRes)) { blockEnd = blockStart + (endRes - startRes) - screenY; g1.translate(screenY * av.charWidth, 0); @@ -603,13 +589,13 @@ public class SeqCanvas extends JComponent //int startRes, int endRes, int startSeq, int endSeq, int x, int y, // int x1, int x2, int y1, int y2, int startx, int starty, - void draw(Graphics g1, + void draw(Graphics g, int startRes, int endRes, int startSeq, int endSeq, int offset) { - Graphics2D g = (Graphics2D) g1; g.setFont(av.getFont()); + sr.prepare(g, av.renderGaps); SequenceI nextSeq; @@ -619,15 +605,14 @@ public class SeqCanvas extends JComponent { nextSeq = av.alignment.getSequenceAt(i); - sr.drawSequence(g, nextSeq, av.alignment.findAllGroups(nextSeq), + sr.drawSequence(nextSeq, av.alignment.findAllGroups(nextSeq), startRes, endRes, offset + ( (i - startSeq) * av.charHeight)); if (av.showSequenceFeatures) { - fr.drawSequence(g1, nextSeq, startRes, endRes, - offset + ((i - startSeq) * av.charHeight), av.charWidth, - av.charHeight); + fr.drawSequence(g, nextSeq, startRes, endRes, + offset + ((i - startSeq) * av.charHeight)); } /// Highlight search Results once all sequences have been drawn @@ -641,12 +626,29 @@ public class SeqCanvas extends JComponent sr.drawHighlightedText(nextSeq, visibleResults[r], visibleResults[r + 1], (visibleResults[r] - startRes) * av.charWidth, - offset + ( (i - startSeq) * av.charHeight), - av.charWidth, av.charHeight); + offset + ( (i - startSeq) * av.charHeight)); } } + + if(av.cursorMode && cursorY==i + && cursorX>=startRes && cursorX<=endRes) + { + sr.drawCursor(nextSeq, cursorX, (cursorX - startRes) * av.charWidth, + offset + ( (i - startSeq) * av.charHeight)); + } } + if(av.getSelectionGroup()!=null || av.alignment.getGroups().size()>0) + drawGroupsBoundaries(g, startRes, endRes, startSeq, endSeq, offset); + + } + + void drawGroupsBoundaries(Graphics g1, + int startRes, int endRes, + int startSeq, int endSeq, + int offset) + { + Graphics2D g = (Graphics2D)g1; // ///////////////////////////////////// // Now outline any areas if necessary @@ -806,9 +808,13 @@ public class SeqCanvas extends JComponent } group = (SequenceGroup) av.alignment.getGroups().elementAt(groupIndex); + + g.setStroke(new BasicStroke()); } while (groupIndex < av.alignment.getGroups().size()); + } + } /**