*/
package jalview.gui;
+import static jalview.util.ImageMaker.TYPE.EPS;
+import static jalview.util.ImageMaker.TYPE.PNG;
+import static jalview.util.ImageMaker.TYPE.SVG;
+
import jalview.analysis.AnnotationSorter;
import jalview.api.AlignViewportI;
import jalview.api.AlignmentViewPanel;
}
/**
- * DOCUMENT ME!
+ * Provides the implementation of Printable.print
*
* @param pg
- * DOCUMENT ME!
+ * DOCUMENT ME!
* @param pf
- * DOCUMENT ME!
+ * DOCUMENT ME!
* @param pi
- * DOCUMENT ME!
+ * DOCUMENT ME!
*
* @return DOCUMENT ME!
*
* @throws PrinterException
- * DOCUMENT ME!
*/
@Override
public int print(Graphics pg, PageFormat pf, int pi)
if (av.getWrapAlignment())
{
- return printWrappedAlignment(pwidth, pheight, pi, pg);
+ return printWrappedAlignment(pwidth, pheight, pi, pg, true);
}
else
{
alignmentDrawnHeight);
getAnnotationPanel().renderer.drawComponent(getAnnotationPanel(), av,
alignmentGraphics, -1, startRes, endRes + 1);
+
+ /*
+ * reset to left margin
+ */
+ alignmentGraphics.translate(-alignmentGraphicsOffset, 0);
}
return Printable.PAGE_EXISTS;
* Prints one page of an alignment in wrapped mode. Returns
* Printable.PAGE_EXISTS (0) if a page was drawn, or Printable.NO_SUCH_PAGE if
* no page could be drawn (page number out of range).
+ * <p>
+ * The method is to write the whole alignment, but set a clip region such that
+ * only the specified page is written. This allows specified page(s) to be
+ * printed from the print dialog. The whole image may be written simply by
+ * making the page size match the image size. In this case, parameter
+ * {@code clipToPage} should be set to {@code false}, so that more output (for
+ * example the second panel of a split frame) can be written if wanted.
*
* @param pageWidth
* @param pageHeight
* @param pageNumber
- * (0, 1, ...)
+ * (0, 1, ...)
* @param g
+ * @param clipToPage
*
* @return
- *
- * @throws PrinterException
*/
public int printWrappedAlignment(int pageWidth, int pageHeight, int pageNumber,
- Graphics g) throws PrinterException
+ Graphics g, boolean clipToPage)
{
int annotationHeight = 0;
if (av.isShowAnnotation())
*/
g.translate(0, -pageNumber * pageHeight);
- g.setClip(0, pageNumber * pageHeight, pageWidth, pageHeight);
+ if (clipToPage)
+ {
+ g.setClip(0, pageNumber * pageHeight, pageWidth, pageHeight);
+ }
/*
* draw sequence ids and annotation labels (if shown)
idCanvas.drawIdsWrapped((Graphics2D) g, av, 0, totalHeight);
g.translate(idWidth, 0);
-
getSeqPanel().seqCanvas.drawWrappedPanelForPrinting(g, pageWidth - idWidth,
totalHeight, 0);
+ g.translate(-idWidth, 0);
if ((pageNumber * pageHeight) < totalHeight)
{
+ borderBottomOffset;
final int graphicsWidth = Math.max(dim1.width, dim2.width);
- final String imageAction, imageTitle;
- if (type == ImageMaker.TYPE.PNG)
- {
- imageAction = "Create PNG image from alignment";
- imageTitle = null;
- }
- else if (type == ImageMaker.TYPE.EPS)
- {
- imageAction = "Create EPS file from alignment";
- imageTitle = alignFrame.getTitle();
- }
- else
- {
- imageAction = "Create SVG file from alignment";
- imageTitle = alignFrame.getTitle();
- }
+ final String dialogTitle = MessageManager
+ .formatMessage("label.make_alignment_image", type.getName());
+ String imageTitle = type == PNG ? null : alignFrame.getTitle();
- ImageMaker im = new ImageMaker(this, type, imageAction,
+ ImageMaker im = new ImageMaker(this, type, dialogTitle,
graphicsWidth, graphicsHeight, file,
imageTitle, alignFrame, pSessionId, headless);
Graphics graphics = im.getGraphics();
if (av.getWrapAlignment())
{
printWrappedAlignment(dim1.width, dim1.height + borderBottomOffset,
- 0, graphics);
+ 0, graphics, false);
}
else
{
/*
* append coding complement image
*/
- graphics.translate(0, dim1.height);
+ boolean test = true;
+ if (test)
+ {
+ /*
+ * debug location of next write to Graphics
+ */
+ graphics.setColor(Color.red);
+ graphics.drawString("Hello world", 0, 0);
+ graphics.setColor(Color.black);
+ }
if (av.getCodingComplement().getWrapAlignment())
{
comp.printWrappedAlignment(dim2.width,
- dim2.height + borderBottomOffset, 0, graphics);
+ dim2.height + borderBottomOffset, 0, graphics, false);
}
else
{
*/
public void makeEPS(File epsFile, boolean forSplitFrame)
{
- makeAlignmentImage(ImageMaker.TYPE.EPS, epsFile, forSplitFrame);
+ makeAlignmentImage(EPS, epsFile, forSplitFrame);
}
/**
*/
public void makePNG(File pngFile, boolean forSplitFrame)
{
- makeAlignmentImage(ImageMaker.TYPE.PNG, pngFile, forSplitFrame);
+ makeAlignmentImage(PNG, pngFile, forSplitFrame);
}
/**
*/
public void makeSVG(File svgFile, boolean forSplitFrame)
{
- makeAlignmentImage(ImageMaker.TYPE.SVG, svgFile, forSplitFrame);
+ makeAlignmentImage(SVG, svgFile, forSplitFrame);
}
public void makePNGImageMap(File imgMapFile, String imageName)
int annotationHeight = 0;
if (av.isShowAnnotation())
{
+ hgap += SeqCanvas.SEQS_ANNOTATION_GAP;
annotationHeight = getAnnotationPanel().adjustPanelHeight();
}