PrintGraphicalViewerOperation does not print Connections with Style 'Graphics.LINE_DASH' [message #493837] |
Wed, 28 October 2009 08:17 |
Alexander Haag Messages: 119 Registered: July 2009 |
Senior Member |
|
|
Hi there,
I've got a subclass of PrintGraphicalViewerOperation to print the
content of ma graphical Viewer with pagebreaks and footer on every page.
The printoperation does work without complaints.
The only thing that does not work as desined is that my
ConnectionEditParts having lineStyle LINE_DASH are printed as if they
where LINE_SOLID.
Does anybody know what I must do in order to get the correct linestyle
printed?
I added a snippet with the overriden method in
PrintGraphicalViewerOperation below.
Additional Info:
I did set the linestyle of my Connection using
((PolylineConnection) connection).setLineStyle( Graphics.LINE_DASH );
in the createFigure()-Method of my EditPart.
The Connections are routed using ManhattenRouter.
OS: Windows XP
Eclipse Galileo(Build id: 20090619-0625) with
'org.eclipse.gef_3.5.0.v20090528-1511.jar'
Thanks for all your help and advices
Alex
------->> Snippet <<------
/**
* {@inheritDoc}
*
* @see org.eclipse.draw2d.PrintFigureOperation#printPages()
*/
@Override
protected void printPages()
{
Graphics graphics = getFreshPrinterGraphics();
IFigure figure = getPrintSource();
PrinterData prnData = getPrinter().getPrinterData();
int startPageNumber = prnData.startPage;
int endPageNumber = prnData.endPage;
setupPrinterGraphicsFor( graphics, figure );
Rectangle bounds = figure.getBounds();
int x = bounds.x, y = bounds.y;
// compute pagesizes for all pages
Rectangle clipRect = new Rectangle();
graphics.getClip( clipRect );
// save original pagesize for later use
m_OriginalPageSizeHeight = clipRect.height;
m_OriginalPageSizeWidth = clipRect.width;
computePageSizeForEditorGraphicsPrint();
int currentPageNumber = 1;
while ( y < bounds.y + bounds.height )
{
while ( x < bounds.x + bounds.width )
{
graphics.pushState();
graphics.translate( -x, -y );
graphics.getClip( clipRect );
clipRect.setSize( m_PrintablePageSizeWidth,
m_PrintablePageSizeHeight );
graphics.clipRect( clipRect );
/*
* check if all pages are to be printed (scope ==
PrinterData.ALL_PAGES) or just some
* (startpage>= curPage >= endPage)
*/
if ( prnData.scope == PrinterData.ALL_PAGES
|| (currentPageNumber <= endPageNumber &&
currentPageNumber >= startPageNumber) )
{
getPrinter().startPage();
figure.paint( graphics );
// draw page header with m_HeaderString
graphics.drawText( m_HeaderString, clipRect.width /
2 + clipRect.x, clipRect.y );
// draw page footer with currentPageNumber
graphics.drawText( " " + currentPageNumber,
clipRect.width / 2 + clipRect.x,
clipRect.height + clipRect.y - 12 );
getPrinter().endPage();
}
graphics.popState();
// incrementiere die bereits gedruckte seitenbreite
x += clipRect.width;
// incrementiere die currentPageNumber
currentPageNumber++;
}
// reset x
x = bounds.x;
// incrementiere die bereits gedruckte seitenhoehe
y += clipRect.height;
}
}
private void computePageSizeForEditorGraphicsPrint()
{
// compute static print-size of a page
int widthOffset = (m_OriginalPageSizeWidth -
GraphicalControlLayoutManager.INIT_GAP) %
GraphicalControlLayoutManager.COLUMN_WIDTH;
int heightOffset = (m_OriginalPageSizeHeight -
GraphicalControlLayoutManager.INIT_GAP) %
GraphicalControlLayoutManager.ROW_HEIGHT;
m_PrintablePageSizeWidth = m_OriginalPageSizeWidth - widthOffset;
m_PrintablePageSizeHeight = m_OriginalPageSizeHeight -
heightOffset;
}
|
|
|
|
Powered by
FUDForum. Page generated in 0.04529 seconds