Commit 06596629 authored by Baranovskiy Konstantin's avatar Baranovskiy Konstantin Committed by Wayne Stambaugh
Browse files

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

parent 860d26e4
Loading
Loading
Loading
Loading
+2 −1
Original line number Original line Diff line number Diff line
@@ -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;


+47 −8
Original line number Original line Diff line number Diff line
@@ -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 );
+2 −1
Original line number Original line Diff line number Diff line
@@ -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)