X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FSeqCanvas.java;h=4aa7851c44782deba0a0e513c2071de817e6fb51;hb=8fb1345b723e9104cab28c80b352a882e502b1ed;hp=bd2862a3b8affddc0858182222080e86f83011fd;hpb=875193c17720b95fa13a38703b1dd63949e12ca9;p=jalview.git diff --git a/src/jalview/gui/SeqCanvas.java b/src/jalview/gui/SeqCanvas.java index bd2862a..4aa7851 100755 --- a/src/jalview/gui/SeqCanvas.java +++ b/src/jalview/gui/SeqCanvas.java @@ -1275,40 +1275,80 @@ public class SeqCanvas extends JComponent implements ViewportListenerI // define our cursor image BufferedImage cursorImage = null; - if (av.cursorMode && cursorY >= startSeq && cursorY <= endSeq - && cursorX >= startRes && cursorX <= endRes) + // convert the cursorY into a position on the visible alignment + int cursor_ypos = av.getAlignment().getHiddenColumns() + .findColumnPosition(cursorY); + + // don't do work unless we have to + if (av.cursorMode && cursor_ypos >= startSeq && cursor_ypos <= endSeq) { - // get a new image of the correct size - cursorImage = setupImage(); - Graphics2D g = (Graphics2D) cursorImage.getGraphics(); + int yoffset = 0; + int xoffset = 0; + int startx = startRes; + int endx = endRes; - // get the character the cursor is drawn at - SequenceI seq = av.getAlignment().getSequenceAt(cursorY); - char s = seq.getCharAt(cursorX); + // convert the cursorX into a position on the visible alignment + int cursor_xpos = av.getAlignment().getHiddenColumns() + .findColumnPosition(cursorX); - int offset = 0; if (av.getWrapAlignment()) { - // work out the correct offset for the cursor - offset = wrappedSpaceAboveAlignment; - int currentWidth = 0; - while ((currentWidth < wrappedVisibleWidths) - && (currentWidth < cursorX)) + // work out the correct offsets for the cursor + int charHeight = av.getCharHeight(); + int charWidth = av.getCharWidth(); + int canvasWidth = getWidth(); + int canvasHeight = getHeight(); + + // height gap above each panel + int hgap = charHeight; + if (av.getScaleAboveWrapped()) + { + hgap += charHeight; + } + + int cWidth = (canvasWidth - labelWidthEast - labelWidthWest) + / charWidth; + int cHeight = av.getAlignment().getHeight() * charHeight; + + endx = startx + cWidth - 1; + int ypos = hgap; // vertical offset + + // iterate down the wrapped panels + while ((ypos <= canvasHeight) && (endx < cursor_xpos)) { - offset += wrappedRepeatHeightPx; - currentWidth++; + // update vertical offset + ypos += cHeight + getAnnotationHeight() + hgap; + + // update horizontal offset + startx += cWidth; + endx = startx + cWidth - 1; } + yoffset = ypos; + xoffset = labelWidthWest; } - seqRdr.drawCursor(g, s, - (cursorX - startRes) * av.getCharWidth(), - offset + ((cursorY - startSeq) * av.getCharHeight())); - g.dispose(); + // now check if cursor is within range for x values + if (cursor_xpos >= startx && cursor_xpos <= endx) + { + // get a new image of the correct size + cursorImage = setupImage(); + Graphics2D g = (Graphics2D) cursorImage.getGraphics(); + + // get the character the cursor is drawn at + SequenceI seq = av.getAlignment().getSequenceAt(cursorY); + char s = seq.getCharAt(cursorX); + + seqRdr.drawCursor(g, s, + xoffset + (cursor_xpos - startx) * av.getCharWidth(), + yoffset + (cursor_ypos - startSeq) * av.getCharHeight()); + g.dispose(); + } } return cursorImage; } + /* * Set up graphics for selection group */