+ drawComponent(g2, true, width);
+
+ }
+
+ /**
+ * Draw the full set of annotation Labels for the alignment at the given
+ * cursor
+ *
+ * @param g
+ * Graphics2D instance (needed for font scaling)
+ * @param width
+ * Width for scaling labels
+ *
+ */
+ public void drawComponent(Graphics g, int width)
+ {
+ drawComponent(g, false, width);
+ }
+
+ private final boolean debugRedraw = false;
+
+ /**
+ * Draw the full set of annotation Labels for the alignment at the given
+ * cursor
+ *
+ * @param g
+ * Graphics2D instance (needed for font scaling)
+ * @param clip
+ * - true indicates that only current visible area needs to be
+ * rendered
+ * @param width
+ * Width for scaling labels
+ */
+ public void drawComponent(Graphics g, boolean clip, int width)
+ {
+ if (av.getFont().getSize() < 10)
+ {
+ g.setFont(font);
+ }
+ else
+ {
+ g.setFont(av.getFont());
+ }
+
+ FontMetrics fm = g.getFontMetrics(g.getFont());
+ g.setColor(Color.white);
+ g.fillRect(0, 0, getWidth(), getHeight());
+
+ g.translate(0, scrollOffset);
+ g.setColor(Color.black);
+
+ AlignmentAnnotation[] aa = av.getAlignment().getAlignmentAnnotation();
+ int fontHeight = g.getFont().getSize();
+ int y = 0;
+ int x = 0;
+ int graphExtras = 0;
+ int offset = 0;
+ Font baseFont = g.getFont();
+ FontMetrics baseMetrics = fm;
+ int ofontH = fontHeight;
+ int sOffset = 0;
+ int visHeight = 0;
+ int[] visr = (ap != null && ap.annotationPanel != null) ? ap.annotationPanel
+ .getVisibleVRange() : null;
+ if (clip && visr != null)
+ {
+ sOffset = visr[0];
+ visHeight = visr[1];
+ }
+ boolean visible = true, before = false, after = false;
+ if (aa != null)
+ {
+ hasHiddenRows = false;
+ int olY = 0;
+ for (int i = 0; i < aa.length; i++)
+ {
+ visible = true;
+ if (!aa[i].visible)
+ {
+ hasHiddenRows = true;
+ continue;
+ }
+ olY = y;
+ y += aa[i].height;
+ if (clip)
+ {
+ if (y < sOffset)
+ {
+ if (!before)
+ {
+ if (debugRedraw)
+ {
+ System.out.println("before vis: " + i);
+ }
+ before = true;
+ }
+ // don't draw what isn't visible
+ continue;
+ }
+ if (olY > visHeight)
+ {
+
+ if (!after)
+ {
+ if (debugRedraw)
+ {
+ System.out.println("Scroll offset: " + sOffset
+ + " after vis: " + i);
+ }
+ after = true;
+ }
+ // don't draw what isn't visible
+ continue;
+ }
+ }