From: jprocter Date: Wed, 9 Nov 2011 14:23:13 +0000 (+0000) Subject: (JAL-985,JAL-986) allow different ID margin calculation for on and off screen rendering X-Git-Tag: Archived_Release_2_7~18^2~1 X-Git-Url: http://source.jalview.org/gitweb/?p=jalview.git;a=commitdiff_plain;h=299fbd01c9a02a8010cbba3885c1b958b15c16b2 (JAL-985,JAL-986) allow different ID margin calculation for on and off screen rendering --- diff --git a/src/jalview/gui/AlignmentPanel.java b/src/jalview/gui/AlignmentPanel.java index b7028ac..0155a67 100644 --- a/src/jalview/gui/AlignmentPanel.java +++ b/src/jalview/gui/AlignmentPanel.java @@ -174,15 +174,28 @@ public class AlignmentPanel extends GAlignmentPanel implements */ public Dimension calculateIdWidth() { + // calculate sensible default width when no preference is available + + int afwidth = (alignFrame != null ? alignFrame.getWidth() : 300); + int maxwidth = Math.max(20, + Math.min(afwidth - 200, (int) 2 * afwidth / 3)); + return calculateIdWidth(maxwidth); + } + /** + * Calculate the width of the alignment labels based on the displayed names + * and any bounds on label width set in preferences. + * @param maxwidth -1 or maximum width allowed for IdWidth + * @return Dimension giving the maximum width of the alignment label panel + * that should be used. + */ + public Dimension calculateIdWidth(int maxwidth) + { Container c = new Container(); FontMetrics fm = c.getFontMetrics(new Font(av.font.getName(), Font.ITALIC, av.font.getSize())); AlignmentI al = av.getAlignment(); - int afwidth = (alignFrame != null ? alignFrame.getWidth() : 300); - int maxwidth = Math.max(20, - Math.min(afwidth - 200, (int) 2 * afwidth / 3)); int i = 0; int idWidth = 0; String id; @@ -221,7 +234,7 @@ public class AlignmentPanel extends GAlignmentPanel implements } } - return new Dimension(Math.min(maxwidth, idWidth), 12); + return new Dimension(maxwidth<0 ? idWidth : Math.min(maxwidth, idWidth), 12); } /** @@ -789,7 +802,7 @@ public class AlignmentPanel extends GAlignmentPanel implements public int printUnwrapped(Graphics pg, int pwidth, int pheight, int pi) throws PrinterException { - int idWidth = getVisibleIdWidth(); + int idWidth = getVisibleIdWidth(false); FontMetrics fm = getFontMetrics(av.getFont()); int scaleHeight = av.charHeight + fm.getDescent(); @@ -956,7 +969,7 @@ public class AlignmentPanel extends GAlignmentPanel implements int cHeight = av.getAlignment().getHeight() * av.charHeight + hgap + annotationHeight; - int idWidth = getVisibleIdWidth(); + int idWidth = getVisibleIdWidth(false); int maxwidth = av.alignment.getWidth(); if (av.hasHiddenColumns) @@ -1029,11 +1042,33 @@ public class AlignmentPanel extends GAlignmentPanel implements return Printable.NO_SUCH_PAGE; } } - + /** + * get current sequence ID panel width, or nominal value if panel were to be displayed using default settings + * @return + */ int getVisibleIdWidth() { - return idPanel.getWidth() > 0 ? idPanel.getWidth() - : calculateIdWidth().width + 4; + return getVisibleIdWidth(true); + } + + /** + * get current sequence ID panel width, or nominal value if panel were to be displayed using default settings + * @param onscreen indicate if the Id width for onscreen or offscreen display should be returned + * @return + */ + int getVisibleIdWidth(boolean onscreen) + { + // see if rendering offscreen - check preferences and calc width accordingly + if (!onscreen && Cache.getDefault("FIGURE_AUTOIDWIDTH", false)) + { + return calculateIdWidth(-1).width+4; + } + Integer idwidth=null; + if (onscreen || (idwidth=Cache.getIntegerProperty("FIGURE_FIXEDIDWIDTH"))==null) { + return (idPanel.getWidth() > 0 ? idPanel.getWidth() + : calculateIdWidth().width + 4); + } + return idwidth.intValue()+4; } void makeAlignmentImage(int type, File file) @@ -1046,7 +1081,7 @@ public class AlignmentPanel extends GAlignmentPanel implements int height = ((av.alignment.getHeight() + 1) * av.charHeight) + scalePanel.getHeight(); - int width = getVisibleIdWidth() + (maxwidth * av.charWidth); + int width = getVisibleIdWidth(false) + (maxwidth * av.charWidth); if (av.getWrapAlignment()) { @@ -1054,14 +1089,16 @@ public class AlignmentPanel extends GAlignmentPanel implements if (System.getProperty("java.awt.headless") != null && System.getProperty("java.awt.headless").equals("true")) { - // TODO: JAL-244 + // need to obtain default alignment width and then add in any additional allowance for id margin + // this duplicates the calculation in getWrappedHeight but adjusts for offscreen idWith width = alignFrame.getWidth() - vscroll.getPreferredSize().width - alignFrame.getInsets().left - - alignFrame.getInsets().right; + - alignFrame.getInsets().right + - getVisibleIdWidth()+getVisibleIdWidth(false); } else { - width = seqPanel.getWidth() + getVisibleIdWidth(); + width = seqPanel.getWidth() + getVisibleIdWidth(false); } } @@ -1136,7 +1173,7 @@ public class AlignmentPanel extends GAlignmentPanel implements { // /////ONLY WORKS WITH NONE WRAPPED ALIGNMENTS // //////////////////////////////////////////// - int idWidth = getVisibleIdWidth(); + int idWidth = getVisibleIdWidth(true); FontMetrics fm = getFontMetrics(av.getFont()); int scaleHeight = av.charHeight + fm.getDescent();