RenderingHints.VALUE_ANTIALIAS_ON);
}
- drawComponent(g2, width);
+ drawComponent(g2, true, width);
}
/**
- * DOCUMENT ME!
+ * Draw the full set of annotation Labels for the alignment at the given cursor
*
- * @param g
- * DOCUMENT ME!
+ * @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);
g.translate(0, scrollOffset);
g.setColor(Color.black);
-
+
AlignmentAnnotation[] aa = av.getAlignment().getAlignmentAnnotation();
int fontHeight = g.getFont().getSize();
int y = 0;
Font baseFont = g.getFont();
FontMetrics baseMetrics = fm;
int ofontH = fontHeight;
- boolean visible = true;
+ 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;
- g.setColor(Color.black);
-
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;
+ }}
+ g.setColor(Color.black);
offset = -aa[i].height / 2;
if (aa[i].graphGroup > -1)
{
int groupSize = 0;
+ // TODO: JAL-1291 revise rendering model so the graphGroup map is computed efficiently for all visible labels
for (int gg = 0; gg < aa.length; gg++)
{
if (aa[gg].graphGroup == aa[i].graphGroup)
dragEvent.getY() - scrollOffset);
}
- if ((aa == null) || (aa.length < 1))
+ if (!av.wrapAlignment && ((aa == null) || (aa.length < 1)))
{
g.drawString("Right click", 2, 8);
g.drawString("to add annotation", 2, 18);