X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=test%2Fjalview%2Fgui%2FSeqCanvasTest.java;h=a27bc3fafbb90511ce895570b058cc4a6e13d9a3;hb=6d3ef91f739a955628e4d0b4338e93a36ea1eb28;hp=e38732204c12cefc9e3ade5c133d3afe5b9f56f5;hpb=89dff5f24a9584bc3f01cc9057cfbc723a31b145;p=jalview.git diff --git a/test/jalview/gui/SeqCanvasTest.java b/test/jalview/gui/SeqCanvasTest.java index e387322..a27bc3f 100644 --- a/test/jalview/gui/SeqCanvasTest.java +++ b/test/jalview/gui/SeqCanvasTest.java @@ -32,6 +32,7 @@ public class SeqCanvasTest assertEquals(al.getHeight(), 15); av.setWrapAlignment(true); + av.getRanges().setStartEndSeq(0, 14); av.setFont(new Font("SansSerif", Font.PLAIN, 14), true); int charHeight = av.getCharHeight(); int charWidth = av.getCharWidth(); @@ -48,8 +49,8 @@ public class SeqCanvasTest av.setScaleLeftWrapped(true); av.setScaleRightWrapped(true); FontMetrics fm = SwingUtilities2.getFontMetrics(testee, av.getFont()); - int labelWidth = fm.stringWidth("00000"); // width of 3 digits and 2 spaces - assertEquals(labelWidth, 45); // note this is not 5 * charWidth + int labelWidth = fm.stringWidth("000") + charWidth; + assertEquals(labelWidth, 39); // 3 x 9 + charWidth /* * width 400 pixels leaves (400 - 2*labelWidth) for residue columns @@ -117,8 +118,8 @@ public class SeqCanvasTest assertEquals(wrappedWidth, 19); /* - * turn off West scale - adds labelWidth (45) to available for residues - * which with the 11 remainder makes 56 which is 4 more charWidths rem 8 + * turn off West scale - adds labelWidth (39) to available for residues + * which with the 11 remainder makes 50 which is 4 more charWidths rem 2 */ av.setScaleLeftWrapped(false); wrappedWidth = testee.calculateWrappedGeometry(canvasWidth, @@ -126,9 +127,9 @@ public class SeqCanvasTest assertEquals(wrappedWidth, 23); /* - * add 4 pixels to width to fit in another whole residue column + * add 10 pixels to width to fit in another whole residue column */ - canvasWidth += 3; + canvasWidth += 9; wrappedWidth = testee.calculateWrappedGeometry(canvasWidth, canvasHeight); assertEquals(wrappedWidth, 23); @@ -138,7 +139,7 @@ public class SeqCanvasTest assertEquals(wrappedWidth, 24); /* - * turn off East scale to gain 45 more pixels (3 columns remainder 9) + * turn off East scale to gain 39 more pixels (3 columns remainder 3) */ av.setScaleRightWrapped(false); wrappedWidth = testee.calculateWrappedGeometry(canvasWidth, @@ -146,15 +147,19 @@ public class SeqCanvasTest assertEquals(wrappedWidth, 27); /* - * add 3 pixels to width to gain a residue column + * add 9 pixels to width to gain a residue column */ - canvasWidth += 3; + canvasWidth += 8; + wrappedWidth = testee.calculateWrappedGeometry(canvasWidth, + canvasHeight); + assertEquals(wrappedWidth, 27); + canvasWidth += 1; wrappedWidth = testee.calculateWrappedGeometry(canvasWidth, canvasHeight); assertEquals(wrappedWidth, 28); /* - * now West but not East scale - lose 45 pixels or 4 columns + * now West but not East scale - lose 39 pixels or 4 columns */ av.setScaleLeftWrapped(true); wrappedWidth = testee.calculateWrappedGeometry(canvasWidth, @@ -162,9 +167,9 @@ public class SeqCanvasTest assertEquals(wrappedWidth, 24); /* - * adding 9 pixels to width regains one column + * adding 3 pixels to width regains one column */ - canvasWidth += 8; + canvasWidth += 2; wrappedWidth = testee.calculateWrappedGeometry(canvasWidth, canvasHeight); assertEquals(wrappedWidth, 24); @@ -181,4 +186,98 @@ public class SeqCanvasTest testee.calculateWrappedGeometry(canvasWidth, canvasHeight); assertEquals(PA.getValue(testee, "wrappedVisibleWidths"), 1); } + + /** + * Test the method that computes wrapped width in residues, height of wrapped + * widths in pixels, and the number of widths visible + */ + @Test(groups = "Functional") + public void testCalculateWrappedGeometry_withAnnotations() + { + AlignFrame af = new FileLoader().LoadFileWaitTillLoaded( + "examples/uniref50.fa", DataSourceType.FILE); + AlignViewport av = af.getViewport(); + AlignmentI al = av.getAlignment(); + assertEquals(al.getWidth(), 157); + assertEquals(al.getHeight(), 15); + + av.setWrapAlignment(true); + av.getRanges().setStartEndSeq(0, 14); + av.setFont(new Font("SansSerif", Font.PLAIN, 14), true); + int charHeight = av.getCharHeight(); + int charWidth = av.getCharWidth(); + assertEquals(charHeight, 17); + assertEquals(charWidth, 12); + + SeqCanvas testee = af.alignPanel.getSeqPanel().seqCanvas; + + /* + * first with scales above, left, right + */ + av.setShowAnnotation(true); + av.setScaleAboveWrapped(true); + av.setScaleLeftWrapped(true); + av.setScaleRightWrapped(true); + FontMetrics fm = SwingUtilities2.getFontMetrics(testee, av.getFont()); + int labelWidth = fm.stringWidth("000") + charWidth; + assertEquals(labelWidth, 39); // 3 x 9 + charWidth + int annotationHeight = testee.getAnnotationHeight(); + + /* + * width 400 pixels leaves (400 - 2*labelWidth) for residue columns + * take the whole multiple of character widths + */ + int canvasWidth = 400; + int canvasHeight = 300; + int residueColumns = (canvasWidth - 2 * labelWidth) / charWidth; + int wrappedWidth = testee.calculateWrappedGeometry(canvasWidth, canvasHeight); + assertEquals(wrappedWidth, residueColumns); + assertEquals(PA.getValue(testee, "labelWidthWest"), labelWidth); + assertEquals(PA.getValue(testee, "labelWidthEast"), labelWidth); + assertEquals(PA.getValue(testee, "wrappedSpaceAboveAlignment"), + 2 * charHeight); + int repeatingHeight = (int) PA.getValue(testee, "wrappedRepeatHeightPx"); + assertEquals(repeatingHeight, charHeight * (2 + al.getHeight()) + + annotationHeight); + assertEquals(PA.getValue(testee, "wrappedVisibleWidths"), 1); + + /* + * repeat height is 17 * (2 + 15) = 289 + annotationHeight = 507 + * make canvas height 2 * 289 + 3 * charHeight so just enough to + * draw 2 widths and the first sequence of a third + */ + canvasHeight = charHeight * (17 * 2 + 3) + 2 * annotationHeight; + testee.calculateWrappedGeometry(canvasWidth, canvasHeight); + assertEquals(PA.getValue(testee, "wrappedVisibleWidths"), 3); + + /* + * reduce canvas height by 1 pixel - should not be enough height + * to draw 3 widths + */ + canvasHeight -= 1; + testee.calculateWrappedGeometry(canvasWidth, canvasHeight); + assertEquals(PA.getValue(testee, "wrappedVisibleWidths"), 2); + + /* + * turn off scale above - can now fit in 2 and a bit widths + */ + av.setScaleAboveWrapped(false); + testee.calculateWrappedGeometry(canvasWidth, canvasHeight); + assertEquals(PA.getValue(testee, "wrappedVisibleWidths"), 3); + + /* + * reduce height to enough for 2 widths and not quite a third + * i.e. two repeating heights + spacer + sequence - 1 pixel + */ + canvasHeight = charHeight * (16 * 2 + 2) + 2 * annotationHeight - 1; + testee.calculateWrappedGeometry(canvasWidth, canvasHeight); + assertEquals(PA.getValue(testee, "wrappedVisibleWidths"), 2); + + /* + * add 1 pixel to height - should now get 3 widths drawn + */ + canvasHeight += 1; + testee.calculateWrappedGeometry(canvasWidth, canvasHeight); + assertEquals(PA.getValue(testee, "wrappedVisibleWidths"), 3); + } }