X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FSeqCanvas.java;h=2b5995c7e3b72b74580c9bfda4e3f6aadb3a2985;hb=4263dac5b885f760215fa599eb453e1221767d04;hp=a9f2329ea34bb3bc2e6dcdc38d33182ebc42a2aa;hpb=df1c58f9669c477db082016aa919d6c6cc9da071;p=jalview.git diff --git a/src/jalview/gui/SeqCanvas.java b/src/jalview/gui/SeqCanvas.java index a9f2329..2b5995c 100755 --- a/src/jalview/gui/SeqCanvas.java +++ b/src/jalview/gui/SeqCanvas.java @@ -100,8 +100,11 @@ public class SeqCanvas extends JComponent // NORTH SCALE for (int i = scalestartx; i < endx; i += 10) { - String string = String.valueOf(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 +127,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,6 +172,9 @@ public class SeqCanvas extends JComponent { ypos += av.charHeight; + if(av.hasHiddenColumns) + endx = av.getColumnSelection().adjustForHiddenColumns(endx); + // EAST SCALE for (int i = 0; i < av.alignment.getHeight(); i++) { @@ -173,6 +182,8 @@ public class SeqCanvas extends JComponent int index = endx; int value = -1; + + while (index > startx) { if (jalview.util.Comparison.isGap(seq.getCharAt(index))) @@ -203,11 +214,12 @@ public class SeqCanvas extends JComponent */ public void fastPaint(int horizontal, int vertical) { - if (fastPaint || gg == null) + if (gg == null) { return; } + fastPaint = true; gg.copyArea(horizontal * av.charWidth, @@ -224,6 +236,7 @@ public class SeqCanvas extends JComponent int transX = 0; int transY = 0; + if (horizontal > 0) // scrollbar pulled right, image to the left { er ++; @@ -258,7 +271,7 @@ public class SeqCanvas extends JComponent } gg.translate(transX, transY); - drawPanel(gg, sr, er, ss, es, sr, ss, 0); + drawPanel(gg, sr, er, ss, es, 0); gg.translate(-transX, -transY); repaint(); @@ -280,7 +293,7 @@ public class SeqCanvas extends JComponent { super.paintComponent(g); - sr.renderGaps(av.renderGaps); + if ( img != null && (fastPaint || (getVisibleRect().width != g.getClipBounds().width) @@ -322,8 +335,7 @@ public class SeqCanvas extends JComponent } else { - drawPanel(gg, av.startRes, av.endRes, av.startSeq, av.endSeq, - av.startRes, av.startSeq, 0); + drawPanel(gg, av.startRes, av.endRes, av.startSeq, av.endSeq, 0); } g.drawImage(img, 0, 0, this); @@ -422,7 +434,6 @@ public class SeqCanvas extends JComponent int endx = (startRes + cWidth) - 1; int ypos = hgap; - while ((ypos <= canvasHeight) && (startRes < av.alignment.getWidth())) { g.setFont(av.getFont()); @@ -467,7 +478,7 @@ public class SeqCanvas extends JComponent } - drawPanel(g, startRes, endx, 0, al.getHeight(), startRes, 0, ypos); + drawPanel(g, startRes, endx, 0, al.getHeight(), ypos); if(av.showAnnotation) { @@ -540,83 +551,96 @@ public class SeqCanvas extends JComponent } - void drawPanel(Graphics g1, int x1, int x2, int y1, int y2, int startx, int starty, int offset) + void drawPanel(Graphics g1, int startRes, int endRes, + int startSeq, int endSeq, int offset) { - Graphics2D g = (Graphics2D) g1; - g.setFont(av.getFont()); + if(!av.hasHiddenColumns) + { + draw(g1, startRes, endRes, startSeq, endSeq, offset); + } + else + { + java.util.Vector regions = av.getColumnSelection().getHiddenColumns(); - SequenceI nextSeq; - // int aaHeight = av.charHeight; - // Font aafont = av.getFont(); + int screenY = 0; + int blockStart = startRes; + int blockEnd = endRes; - /* dnafont = null, , dna = null, dnaHeight = av.charHeight - if (av.getShowTranslation()) - { - aaHeight = (int) (av.getCharHeight() * aaRatio); - dnaHeight = (int) (av.getCharHeight() * (1 - aaRatio)); - java.awt.geom.AffineTransform transform = new java.awt.geom.AffineTransform(); - transform.scale(1f / 3f, 1); - dnafont = new Font(av.getFont().getName(), av.getFont().getStyle(), - dnaHeight); - dnafont = dnafont.deriveFont(transform); - - aafont = new Font(av.getFont().getName(), av.getFont().getStyle(), - aaHeight); - transform = new java.awt.geom.AffineTransform(); - transform.scale(1 / aaRatio, 1); - aafont = aafont.deriveFont(transform); + for (int i = 0; i < regions.size(); i++) + { + int[] region = (int[]) regions.elementAt(i); + int hideStart = region[0]; + int hideEnd = region[1]; + + if (hideStart <= blockStart) + { + blockStart += (hideEnd - hideStart) + 1; + continue; + } + + blockEnd = hideStart - 1; + + g1.translate(screenY * av.charWidth, 0); + + draw(g1, blockStart, blockEnd, startSeq, endSeq, offset); + + g1.setColor(Color.blue); + g1.drawLine( (blockEnd - blockStart + 1) * av.charWidth - 1, + startSeq + offset, + (blockEnd - blockStart + 1) * av.charWidth - 1, + startSeq + (endSeq - startSeq) * av.charHeight + offset); + g1.drawLine( (blockEnd - blockStart + 1) * av.charWidth, + startSeq + offset, + (blockEnd - blockStart + 1) * av.charWidth, + startSeq + (endSeq - startSeq) * av.charHeight + offset); + + g1.translate( -screenY * av.charWidth, 0); + screenY += blockEnd - blockStart + 1; + blockStart = hideEnd + 1; + } + + if (screenY <= (endRes - startRes)) + { + blockEnd = blockStart + (endRes - startRes) - screenY; + g1.translate(screenY * av.charWidth, 0); + draw(g1, blockStart, blockEnd, startSeq, endSeq, offset); + g1.translate( -screenY * av.charWidth, 0); + } } -*/ + } + + + + + //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, + int startRes, int endRes, + int startSeq, int endSeq, + int offset) + { + + sr.renderGaps(av.renderGaps); + Graphics2D g = (Graphics2D) g1; + g.setFont(av.getFont()); + + SequenceI nextSeq; /// First draw the sequences ///////////////////////////// - for (int i = y1; i < y2; i++) + for (int i = startSeq; i < endSeq; i++) { nextSeq = av.alignment.getSequenceAt(i); - /* if(av.getShowTranslation()) - { - dna = nextSeq; - StringBuffer sb = new StringBuffer(); - for(int r = 0; r imgWidth) ex = imgWidth; - else if (sx + ex >= (x2 - x1 + 1) * av.charWidth) - ex = (x2 - x1 + 1) * av.charWidth; + else if (sx + ex >= (endRes - startRes + 1) * av.charWidth) + ex = (endRes - startRes + 1) * av.charWidth; if (top != -1) { @@ -755,7 +779,7 @@ public class SeqCanvas extends JComponent if (inGroup) { - sy = offset + ( (i - starty) * av.charHeight); + sy = offset + ( (i - startSeq) * av.charHeight); if (sx >= 0 && sx < imgWidth) g.drawLine(sx, oldY, sx, sy); @@ -770,8 +794,8 @@ public class SeqCanvas extends JComponent if (sx + ex > imgWidth) ex = imgWidth; - else if (sx + ex >= (x2 - x1 + 1) * av.charWidth) - ex = (x2 - x1 + 1) * av.charWidth; + else if (sx + ex >= (endRes - startRes + 1) * av.charWidth) + ex = (endRes - startRes + 1) * av.charWidth; if (top != -1) {