diff --git a/common/board_printout.cpp b/common/board_printout.cpp index e9df82b6b2..697373e934 100644 --- a/common/board_printout.cpp +++ b/common/board_printout.cpp @@ -143,34 +143,35 @@ void BOARD_PRINTOUT::DrawPage( const wxString& aLayerName, int aPageNum, int aPa VECTOR2I sheetSizeMils = m_settings.m_pageInfo.GetSizeMils(); VECTOR2I sheetSizeIU( milsToIU( sheetSizeMils.x ), milsToIU( sheetSizeMils.y ) ); - BOX2I bBox = BOX2I( VECTOR2I( 0, 0 ), VECTOR2I( sheetSizeIU ) ); + BOX2I drawingAreaBBox = BOX2I( VECTOR2I( 0, 0 ), VECTOR2I( sheetSizeIU ) ); + + // When printing the board without worksheet items, move board center to the + // drawing area center. + if( !m_settings.PrintBorderAndTitleBlock() ) + drawingAreaBBox = getBoundingBox(); view->SetLayerVisible( LAYER_DRAWINGSHEET, m_settings.PrintBorderAndTitleBlock() ); - // Fit to page + // Fit to page (drawingAreaBBox) if( m_settings.m_scale <= 0.0 ) { - if( !m_settings.PrintBorderAndTitleBlock() ) - bBox = getBoundingBox(); // Fit to "objects", new centre - - if( bBox.GetWidth() == 0 || bBox.GetHeight() == 0 ) + if( drawingAreaBBox.GetWidth() == 0 || drawingAreaBBox.GetHeight() == 0 ) { - // Nothing to print + // Nothing to print (empty board and no worksheet) m_settings.m_scale = 1.0; } else { - double scaleX = (double) pageSizeIU.x / bBox.GetWidth(); - double scaleY = (double) pageSizeIU.y / bBox.GetHeight(); + double scaleX = (double) pageSizeIU.x / drawingAreaBBox.GetWidth(); + double scaleY = (double) pageSizeIU.y / drawingAreaBBox.GetHeight(); m_settings.m_scale = std::min( scaleX, scaleY ); } } setupGal( gal ); galPrint->SetNativePaperSize( pageSizeIn, printCtx->HasNativeLandscapeRotation() ); - gal->SetLookAtPoint( bBox.Centre() ); + gal->SetLookAtPoint( drawingAreaBBox.Centre() ); gal->SetZoomFactor( m_settings.m_scale ); - gal->SetClearColor( dstSettings->GetBackgroundColor() ); gal->ClearScreen();