{
if (mstring != null)
{
- g.drawString(mstring, mpos * avcharWidth, ypos
- - (avcharHeight / 2));
+ g.drawString(mstring, mpos * avcharWidth,
+ ypos - (avcharHeight / 2));
}
- g.drawLine((mpos * avcharWidth) + (avcharWidth / 2), (ypos + 2)
- - (avcharHeight / 2), (mpos * avcharWidth)
- + (avcharWidth / 2), ypos - 2);
+ g.drawLine((mpos * avcharWidth) + (avcharWidth / 2),
+ (ypos + 2) - (avcharHeight / 2),
+ (mpos * avcharWidth) + (avcharWidth / 2), ypos - 2);
}
}
}
{
int x = LABEL_WEST - fm.stringWidth(String.valueOf(value))
- avcharWidth / 2;
- g.drawString(value + "", x, (ypos + (i * avcharHeight))
- - (avcharHeight / 5));
+ g.drawString(value + "", x,
+ (ypos + (i * avcharHeight)) - (avcharHeight / 5));
}
}
}
if (value != -1)
{
- g.drawString(String.valueOf(value), 0, (ypos + (i * avcharHeight))
- - (avcharHeight / 5));
+ g.drawString(String.valueOf(value), 0,
+ (ypos + (i * avcharHeight)) - (avcharHeight / 5));
}
}
}
lastsr = ranges.getStartRes();
fastPaint = true;
- gg.copyArea(horizontal * avcharWidth, vertical * avcharHeight, imgWidth
- - horizontal * avcharWidth,
+ gg.copyArea(horizontal * avcharWidth, vertical * avcharHeight,
+ imgWidth - horizontal * avcharWidth,
imgHeight - vertical * avcharHeight, -horizontal * avcharWidth,
-vertical * avcharHeight);
- int sr = ranges.getStartRes(), er = ranges.getEndRes(), ss = ranges
- .getStartSeq(), es = ranges
- .getEndSeq(), transX = 0, transY = 0;
+ int sr = ranges.getStartRes(), er = ranges.getEndRes(),
+ ss = ranges.getStartSeq(), es = ranges.getEndSeq(), transX = 0,
+ transY = 0;
if (horizontal > 0) // scrollbar pulled right, image to the left
{
ss = es - vertical;
if (ss < ranges.getStartSeq()) // ie scrolling too fast, more than a page
// at a
- // time
+ // time
{
ss = ranges.getStartSeq();
}
{
if (img != null
- && (fastPaint || (getSize().width != g.getClipBounds().width) || (getSize().height != g
- .getClipBounds().height)))
+ && (fastPaint || (getSize().width != g.getClipBounds().width)
+ || (getSize().height != g.getClipBounds().height)))
{
g.drawImage(img, 0, 0, this);
fastPaint = false;
FontMetrics fm = getFontMetrics(av.getFont());
+ LABEL_EAST = 0;
+ LABEL_WEST = 0;
+
if (av.getScaleRightWrapped())
{
LABEL_EAST = fm.stringWidth(getMask());
av.setWrappedWidth(cWidth);
- av.getRanges().setEndRes(av.getRanges().getStartRes() + cWidth - 1);
+ av.getRanges().setViewportStartAndWidth(startRes, cWidth);
int endx;
int ypos = hgap;
- int maxwidth = av.getAlignment().getWidth() - 1;
+ int maxwidth = av.getAlignment().getWidth();
if (av.hasHiddenColumns())
{
maxwidth = av.getAlignment().getHiddenColumns()
- .findColumnPosition(maxwidth) - 1;
+ .findColumnPosition(maxwidth);
}
while ((ypos <= canvasHeight) && (startRes < maxwidth))
continue;
}
- gg.fillPolygon(new int[] { res * avcharWidth - avcharHeight / 4,
- res * avcharWidth + avcharHeight / 4, res * avcharWidth },
- new int[] { ypos - (avcharHeight / 2),
- ypos - (avcharHeight / 2),
- ypos - (avcharHeight / 2) + 8 }, 3);
+ gg.fillPolygon(
+ new int[]
+ { res * avcharWidth - avcharHeight / 4,
+ res * avcharWidth + avcharHeight / 4,
+ res * avcharWidth },
+ new int[]
+ { ypos - (avcharHeight / 2), ypos - (avcharHeight / 2),
+ ypos - (avcharHeight / 2) + 8 },
+ 3);
}
}
return annotations.adjustPanelHeight();
}
- private void drawPanel(Graphics g1, int startRes, int endRes,
- int startSeq, int endSeq, int offset)
+ private void drawPanel(Graphics g1, final int startRes, final int endRes,
+ final int startSeq, final int endSeq, final int offset)
{
if (!av.hasHiddenColumns())
}
else
{
-
int screenY = 0;
+ final int screenYMax = endRes - startRes;
int blockStart = startRes;
int blockEnd = endRes;
continue;
}
- blockEnd = hideStart - 1;
+ /*
+ * draw up to just before the next hidden region, or the end of
+ * the visible region, whichever comes first
+ */
+ blockEnd = Math.min(hideStart - 1, blockStart + screenYMax
+ - screenY);
g1.translate(screenY * avcharWidth, 0);
draw(g1, blockStart, blockEnd, startSeq, endSeq, offset);
- if (av.getShowHiddenMarkers())
+ /*
+ * draw the downline of the hidden column marker (ScalePanel draws the
+ * triangle on top) if we reached it
+ */
+ if (av.getShowHiddenMarkers() && blockEnd == hideStart - 1)
{
g1.setColor(Color.blue);
g1.drawLine((blockEnd - blockStart + 1) * avcharWidth - 1,
- 0 + offset, (blockEnd - blockStart + 1) * avcharWidth
- - 1, (endSeq - startSeq + 1) * avcharHeight
- + offset);
+ 0 + offset,
+ (blockEnd - blockStart + 1) * avcharWidth - 1,
+ (endSeq - startSeq + 1) * avcharHeight + offset);
}
g1.translate(-screenY * avcharWidth, 0);
screenY += blockEnd - blockStart + 1;
blockStart = hideEnd + 1;
- if (screenY > (endRes - startRes))
+ if (screenY > screenYMax)
{
// already rendered last block
return;
}
}
}
- if (screenY <= (endRes - startRes))
+ if (screenY <= screenYMax)
{
// remaining visible region to render
blockEnd = blockStart + (endRes - startRes) - screenY;
if (av.isShowSequenceFeatures())
{
- fr.drawSequence(g, nextSeq, startRes, endRes, offset
- + ((i - startSeq) * avcharHeight), false);
+ fr.drawSequence(g, nextSeq, startRes, endRes,
+ offset + ((i - startSeq) * avcharHeight), false);
}
// / Highlight search Results once all sequences have been drawn
if (av.hasSearchResults())
{
int[] visibleResults = av.getSearchResults().getResults(nextSeq,
- startRes,
- endRes);
+ startRes, endRes);
if (visibleResults != null)
{
for (int r = 0; r < visibleResults.length; r += 2)
{
sr.drawHighlightedText(nextSeq, visibleResults[r],
- visibleResults[r + 1], (visibleResults[r] - startRes)
- * avcharWidth, offset
- + ((i - startSeq) * avcharHeight));
+ visibleResults[r + 1],
+ (visibleResults[r] - startRes) * avcharWidth,
+ offset + ((i - startSeq) * avcharHeight));
}
}
}
{
sx = (group.getStartRes() - startRes) * avcharWidth;
sy = offset + ((i - startSeq) * avcharHeight);
- ex = (((group.getEndRes() + 1) - group.getStartRes()) * avcharWidth) - 1;
+ ex = (((group.getEndRes() + 1) - group.getStartRes())
+ * avcharWidth) - 1;
if (sx + ex < 0 || sx > imgWidth)
{
}
if ((sx <= (endRes - startRes) * avcharWidth)
- && group.getSequences(null).contains(
- av.getAlignment().getSequenceAt(i)))
+ && group.getSequences(null)
+ .contains(av.getAlignment().getSequenceAt(i)))
{
if ((bottom == -1)
- && (i >= alHeight || !group.getSequences(null)
- .contains(
- av.getAlignment().getSequenceAt(i + 1))))
+ && (i >= alHeight || !group.getSequences(null).contains(
+ av.getAlignment().getSequenceAt(i + 1))))
{
bottom = sy + avcharHeight;
}
if (!inGroup)
{
- if (((top == -1) && (i == 0))
- || !group.getSequences(null).contains(
- av.getAlignment().getSequenceAt(i - 1)))
+ if (((top == -1) && (i == 0)) || !group.getSequences(null)
+ .contains(av.getAlignment().getSequenceAt(i - 1)))
{
top = sy;
}
// larger than the visible window
ViewportRanges vpRanges = av.getRanges();
scrollX = (int) evt.getNewValue() - (int) evt.getOldValue();
- if (scrollX > vpRanges.getEndRes() - vpRanges.getStartRes())
+ int range = vpRanges.getEndRes() - vpRanges.getStartRes();
+ if (scrollX > range)
{
- scrollX = vpRanges.getEndRes() - vpRanges.getStartRes();
+ scrollX = range;
}
- else if (scrollX < vpRanges.getStartRes() - vpRanges.getEndRes())
+ else if (scrollX < -range)
{
- scrollX = vpRanges.getStartRes() - vpRanges.getEndRes();
+ scrollX = -range;
}
}