}
/**
- * 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
{
* 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)
{
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 drawWrappedPanelForPrinting(Graphics g, int canvasWidth,
int canvasHeight, int startRes)
{
- drawWrappedPanel(g, canvasWidth, canvasHeight, startRes);
+ int heightDrawn = drawWrappedPanel(g, canvasWidth, canvasHeight,
+ startRes);
SequenceGroup group = av.getSelectionGroup();
if (group != null)
drawWrappedSelection((Graphics2D) g, group, canvasWidth, canvasHeight,
startRes);
}
+
+ /*
+ * shift graphics (0, 0) to below the region drawn
+ */
+ g.translate(0, heightDrawn);
}
/**
}
/**
- * Draws as many widths of a wrapped alignment as can fit in the visible
- * window
+ * Draws as many widths of a wrapped alignment as can fit in the visible window,
+ * and returns the height drawn in pixels
*
* @param g
* @param canvasWidth
- * available width in pixels
+ * available width in pixels
* @param canvasHeight
- * available height in pixels
+ * available height in pixels
* @param startColumn
- * the first column (0...) of the alignment to draw
+ * the first column (0...) of the alignment to draw
+ *
+ * @return
*/
- public void drawWrappedPanel(Graphics g, int canvasWidth,
+ public int drawWrappedPanel(Graphics g, int canvasWidth,
int canvasHeight, final int startColumn)
{
int wrappedWidthInResidues = calculateWrappedGeometry(canvasWidth,
}
drawWrappedDecorators(g, startColumn);
+
+ return ypos;
}
/**
if (clip == null)
{
- g.setClip(0, 0, viewportWidth * charWidth, canvasHeight);
+ // g.setClip(0, 0, viewportWidth * charWidth, canvasHeight);
}
else
{
startColumn, endx + 1);
g.translate(0, -yShift);
}
- g.setClip(clip);
+
+ if (clip != null)
+ {
+ g.setClip(clip);
+ }
+
g.translate(-xOffset, 0);
}