Fix worksheet multiple line text plotting bug. (fixes lp:1261906)

This commit is contained in:
Baranovskiy Konstantin 2013-12-23 11:25:13 -05:00 committed by Wayne Stambaugh
parent 860d26e451
commit 065966291c
3 changed files with 51 additions and 10 deletions

View File

@ -133,7 +133,8 @@ void PlotWorkSheet( PLOTTER* plotter, const TITLE_BLOCK& aTitleBlock,
text->GetSize(), text->GetSize(),
text->GetHorizJustify(), text->GetVertJustify(), text->GetHorizJustify(), text->GetVertJustify(),
text->GetPenWidth(), text->GetPenWidth(),
text->IsItalic(), text->IsBold() ); text->IsItalic(), text->IsBold(),
text->IsMultilineAllowed() );
} }
break; break;

View File

@ -602,6 +602,7 @@ void DrawGraphicHaloText( EDA_RECT* aClipBox, wxDC * aDC,
* Use a value min(aSize.x, aSize.y) / 5 for a bold text * Use a value min(aSize.x, aSize.y) / 5 for a bold text
* @param aItalic = true to simulate an italic font * @param aItalic = true to simulate an italic font
* @param aBold = true to use a bold font Useful only with default width value (aWidth = 0) * @param aBold = true to use a bold font Useful only with default width value (aWidth = 0)
* @param aMultilineAllowed = true to plot text as multiline, otherwise single line
*/ */
void PLOTTER::Text( const wxPoint& aPos, void PLOTTER::Text( const wxPoint& aPos,
enum EDA_COLOR_T aColor, enum EDA_COLOR_T aColor,
@ -612,7 +613,8 @@ void PLOTTER::Text( const wxPoint& aPos,
enum EDA_TEXT_VJUSTIFY_T aV_justify, enum EDA_TEXT_VJUSTIFY_T aV_justify,
int aWidth, int aWidth,
bool aItalic, bool aItalic,
bool aBold ) bool aBold,
bool aMultilineAllowed )
{ {
int textPensize = aWidth; int textPensize = aWidth;
@ -630,6 +632,42 @@ void PLOTTER::Text( const wxPoint& aPos,
if( aColor >= 0 ) if( aColor >= 0 )
SetColor( aColor ); SetColor( aColor );
if( aMultilineAllowed )
{
// EDA_TEXT needs for calculations of the position of every
// line according to orientation and justifications
EDA_TEXT* multilineText = new EDA_TEXT( aText );
multilineText->SetSize( aSize );
multilineText->SetTextPosition( aPos );
multilineText->SetOrientation( aOrient );
multilineText->SetHorizJustify( aH_justify );
multilineText->SetVertJustify( aV_justify );
multilineText->SetThickness( aWidth );
multilineText->SetMultilineAllowed( aMultilineAllowed );
std::vector<wxPoint> positions;
wxArrayString* list = wxStringSplit( aText, '\n' );
positions.reserve( list->Count() );
multilineText->GetPositionsOfLinesOfMultilineText(
positions, list->Count() );
for( unsigned ii = 0; ii < list->Count(); ii++ )
{
wxString& txt = list->Item( ii );
DrawGraphicText( NULL, NULL, positions[ii], aColor, txt,
aOrient, aSize,
aH_justify, aV_justify,
textPensize, aItalic,
aBold,
NULL,
this );
}
delete multilineText;
delete list;
}
else
{
DrawGraphicText( NULL, NULL, aPos, aColor, aText, DrawGraphicText( NULL, NULL, aPos, aColor, aText,
aOrient, aSize, aOrient, aSize,
aH_justify, aV_justify, aH_justify, aV_justify,
@ -637,6 +675,7 @@ void PLOTTER::Text( const wxPoint& aPos,
aBold, aBold,
NULL, NULL,
this ); this );
}
if( aWidth != textPensize ) if( aWidth != textPensize )
SetCurrentLineWidth( aWidth ); SetCurrentLineWidth( aWidth );

View File

@ -253,7 +253,8 @@ public:
enum EDA_TEXT_VJUSTIFY_T aV_justify, enum EDA_TEXT_VJUSTIFY_T aV_justify,
int aWidth, int aWidth,
bool aItalic, bool aItalic,
bool aBold ); bool aBold,
bool aMultilineAllowed = false );
/** /**
* Draw a marker (used for the drill map) * Draw a marker (used for the drill map)