+ maxwidth = av.getColumnSelection().findColumnPosition(maxwidth) - 1;\r
+ }\r
+\r
+ while ( (ypos <= canvasHeight) && (startRes < maxwidth))\r
+ {\r
+ endx = startRes + cWidth - 1;\r
+\r
+ if (endx > maxwidth)\r
+ {\r
+ endx = maxwidth;\r
+ }\r
+\r
+ g.setFont(av.getFont());\r
+ g.setColor(Color.black);\r
+\r
+ if (av.scaleLeftWrapped)\r
+ {\r
+ drawWestScale(g, startRes, endx, ypos);\r
+ }\r
+\r
+ if (av.scaleRightWrapped)\r
+ {\r
+ g.translate(canvasWidth - LABEL_EAST, 0);\r
+ drawEastScale(g, startRes, endx, ypos);\r
+ g.translate( - (canvasWidth - LABEL_EAST), 0);\r
+ }\r
+\r
+ g.translate(LABEL_WEST, 0);\r
+\r
+ if (av.scaleAboveWrapped)\r
+ {\r
+ drawNorthScale(g, startRes, endx, ypos);\r
+ }\r
+\r
+ if (av.hasHiddenColumns && av.showHiddenMarkers)\r
+ {\r
+ g.setColor(Color.blue);\r
+ int res;\r
+ for (int i = 0; i < av.getColumnSelection().getHiddenColumns().size();\r
+ i++)\r
+ {\r
+ res = av.getColumnSelection().findHiddenRegionPosition(i) -\r
+ startRes;\r
+\r
+ if (res < 0 || res > endx - startRes)\r
+ {\r
+ continue;\r
+ }\r
+\r
+ gg.fillPolygon(new int[]\r
+ {res * av.charWidth - av.charHeight / 4,\r
+ res * av.charWidth + av.charHeight / 4,\r
+ res * av.charWidth},\r
+ new int[]\r
+ {\r
+ ypos - (av.charHeight / 2),\r
+ ypos - (av.charHeight / 2),\r
+ ypos - (av.charHeight / 2) + 8\r
+ }, 3);\r
+\r
+ }\r
+ }\r
+\r
+ // When printing we have an extra clipped region,\r
+ // the Printable page which we need to account for here\r
+ Shape clip = g.getClip();\r
+\r
+ if (clip == null)\r
+ {\r
+ g.setClip(0, 0, cWidth * av.charWidth, canvasHeight);\r
+ }\r
+ else\r
+ {\r
+ g.setClip(0, (int) clip.getBounds().getY(),\r
+ cWidth * av.charWidth, (int) clip.getBounds().getHeight());\r
+ }\r
+\r
+ drawPanel(g, startRes, endx, 0, al.getHeight(), ypos);\r
+\r
+ if (av.showAnnotation)\r
+ {\r
+ g.translate(0, cHeight + ypos + 3);\r
+ if (annotations == null)\r
+ {\r
+ annotations = new AnnotationPanel(av);\r
+ }\r
+\r
+ annotations.drawComponent( (Graphics2D) g, startRes, endx + 1);\r
+ g.translate(0, -cHeight - ypos - 3);\r
+ }\r
+ g.setClip(clip);\r
+ g.translate( -LABEL_WEST, 0);\r
+\r
+ ypos += cHeight + getAnnotationHeight() + hgap;\r
+\r
+ startRes += cWidth;\r
+ }\r
+ }\r
+\r
+ AnnotationPanel annotations;\r
+ int getAnnotationHeight()\r
+ {\r
+ if (!av.showAnnotation)\r
+ {\r
+ return 0;\r
+ }\r
+\r
+ if (annotations == null)\r
+ {\r
+ annotations = new AnnotationPanel(av);\r
+ }\r
+\r
+ return annotations.adjustPanelHeight();\r
+ }\r
+\r
+ /**\r
+ * DOCUMENT ME!\r
+ *\r
+ * @param g1 DOCUMENT ME!\r
+ * @param startRes DOCUMENT ME!\r
+ * @param endRes DOCUMENT ME!\r
+ * @param startSeq DOCUMENT ME!\r
+ * @param endSeq DOCUMENT ME!\r
+ * @param offset DOCUMENT ME!\r
+ */\r
+ void drawPanel(Graphics g1, int startRes, int endRes,\r
+ int startSeq, int endSeq, int offset)\r
+ {\r
+ if (!av.hasHiddenColumns)\r
+ {\r
+ draw(g1, startRes, endRes, startSeq, endSeq, offset);\r
+ }\r
+ else\r
+ {\r
+ java.util.Vector regions = av.getColumnSelection().getHiddenColumns();\r
+\r
+ int screenY = 0;\r
+ int blockStart = startRes;\r
+ int blockEnd = endRes;\r
+\r
+ for (int i = 0; i < regions.size(); i++)\r
+ {\r
+ int[] region = (int[]) regions.elementAt(i);\r
+ int hideStart = region[0];\r
+ int hideEnd = region[1];\r
+\r
+ if (hideStart <= blockStart)\r
+ {\r
+ blockStart += (hideEnd - hideStart) + 1;\r
+ continue;\r
+ }\r
+\r
+ blockEnd = hideStart - 1;\r
+\r
+ g1.translate(screenY * av.charWidth, 0);\r
+\r
+ draw(g1, blockStart, blockEnd, startSeq, endSeq, offset);\r
+\r
+ if (av.getShowHiddenMarkers())\r
+ {\r
+ g1.setColor(Color.blue);\r
+\r
+ g1.drawLine( (blockEnd - blockStart + 1) * av.charWidth - 1,\r
+ 0 + offset,\r
+ (blockEnd - blockStart + 1) * av.charWidth - 1,\r
+ (endSeq - startSeq) * av.charHeight + offset);\r
+ }\r
+\r
+ g1.translate( -screenY * av.charWidth, 0);\r
+ screenY += blockEnd - blockStart + 1;\r
+ blockStart = hideEnd + 1;\r
+ }\r
+\r
+ if (screenY <= (endRes - startRes))\r
+ {\r
+ blockEnd = blockStart + (endRes - startRes) - screenY;\r
+ g1.translate(screenY * av.charWidth, 0);\r
+ draw(g1, blockStart, blockEnd, startSeq, endSeq, offset);\r
+\r
+ g1.translate( -screenY * av.charWidth, 0);\r
+ }\r
+ }\r
+\r
+ }\r
+\r
+ //int startRes, int endRes, int startSeq, int endSeq, int x, int y,\r
+ // int x1, int x2, int y1, int y2, int startx, int starty,\r
+ void draw(Graphics g,\r
+ int startRes, int endRes,\r
+ int startSeq, int endSeq,\r
+ int offset)\r
+ {\r
+ g.setFont(av.getFont());\r
+ sr.prepare(g, av.renderGaps);\r