From 39f673a9ab8eb3974645eddd5932113d7fefea96 Mon Sep 17 00:00:00 2001 From: kiramt Date: Tue, 14 Nov 2017 12:11:21 +0000 Subject: [PATCH] JAL-2831 Attempt at cursor fix for wrapped mode --- src/jalview/viewmodel/ViewportRanges.java | 53 ++++++++++++++++++++++------- 1 file changed, 40 insertions(+), 13 deletions(-) diff --git a/src/jalview/viewmodel/ViewportRanges.java b/src/jalview/viewmodel/ViewportRanges.java index 0e7b431..973482f 100644 --- a/src/jalview/viewmodel/ViewportRanges.java +++ b/src/jalview/viewmodel/ViewportRanges.java @@ -549,13 +549,32 @@ public class ViewportRanges extends ViewportProperties */ public boolean scrollToWrappedVisible(int res) { + int newStartRes = calcWrappedStartResidue(res); + if (newStartRes == startRes) + { + return false; + } + setStartRes(newStartRes); + + return true; + } + + /** + * Calculate wrapped start residue from visible start residue + * + * @param res + * absolute start residue + * @return left column of panel res will be located in + */ + private int calcWrappedStartResidue(int res) + { int oldStartRes = startRes; int width = getViewportWidth(); - if (res >= oldStartRes && res < oldStartRes + width) + /*if (res >= oldStartRes && res < oldStartRes + width) { return false; - } + }*/ boolean up = res < oldStartRes; int widthsToScroll = Math.abs((res - oldStartRes) / width); @@ -571,10 +590,7 @@ public class ViewportRanges extends ViewportProperties { newStartRes = 0; } - - setStartRes(newStartRes); - - return true; + return newStartRes; } /** @@ -623,17 +639,27 @@ public class ViewportRanges extends ViewportProperties */ public boolean setViewportLocation(int x, int y) { - // if (x,y) is already visible don't do anything boolean changedLocation = false; int vis_x = al.getHiddenColumns().findColumnPosition(x); int vis_y = al.getHiddenSequences().findIndexWithoutHiddenSeqs(y); + // if (vis_x,vis_y) is already visible don't do anything if (startRes > vis_x || vis_x > endRes || startSeq > vis_y && vis_y > endSeq) { + int[] old = new int[] { startRes, startSeq }; + int[] newresseq; + if (wrappedMode) + { + int newstartres = calcWrappedStartResidue(vis_x); + setStartRes(newstartres); + newresseq = new int[] { startRes, startSeq }; + } + else + { int width = getViewportWidth(); - int[] oldresvalues = updateStartEndRes(vis_x, vis_x + width - 1); + updateStartEndRes(vis_x, vis_x + width - 1); int startseq = vis_y; int height = getViewportHeight(); @@ -641,13 +667,14 @@ public class ViewportRanges extends ViewportProperties { startseq = getVisibleAlignmentHeight() - height; } - int[] oldseqvalues = updateStartEndSeq(startseq, + updateStartEndSeq(startseq, startseq + height - 1); - int[] old = new int[] { oldresvalues[0], oldseqvalues[0] }; - int[] newresseq = new int[] { startRes, startSeq }; - changedLocation = true; - changeSupport.firePropertyChange(MOVE_VIEWPORT, old, newresseq); + // int[] old = new int[] { oldresvalues[0], oldseqvalues[0] }; + newresseq = new int[] { startRes, startSeq }; + } + changedLocation = true; + changeSupport.firePropertyChange(MOVE_VIEWPORT, old, newresseq); } return changedLocation; } -- 1.7.10.2