Commit 802a59dc authored by jean-pierre charras's avatar jean-pierre charras
Browse files

eeschema: fix the very minor bug #1298094. But it was due to a bad bounding...

eeschema: fix the very minor bug  #1298094. But it was due to a bad bounding box calculation, which is now fixed.
parent 948f22de
Loading
Loading
Loading
Loading
+1 −12
Original line number Original line Diff line number Diff line
@@ -32,14 +32,6 @@
#include <trigo.h>               // RotatePoint
#include <trigo.h>               // RotatePoint
#include <class_drawpanel.h>     // EDA_DRAW_PANEL
#include <class_drawpanel.h>     // EDA_DRAW_PANEL


// until bzr rev 4476, Y position of vertical justification
// of multiline texts was incorrectly calculated for BOTTOM
// and CENTER vertical justification. (Only the first line was justified)
// If this line is left uncommented, the bug is fixed, but
// creates a (very minor) issue for existing texts, mainly in Pcbnew
// because the text position is sometimes critical.
#define FIX_MULTILINE_VERT_JUSTIF

// Conversion to application internal units defined at build time.
// Conversion to application internal units defined at build time.
#if defined( PCBNEW )
#if defined( PCBNEW )
    #include <class_board_item.h>
    #include <class_board_item.h>
@@ -205,7 +197,6 @@ EDA_RECT EDA_TEXT::GetTextBox( int aLine, int aThickness, bool aInvertY ) const


    if( linecount > 1 )
    if( linecount > 1 )
    {
    {
#ifdef FIX_MULTILINE_VERT_JUSTIF
        int yoffset;
        int yoffset;
        linecount -= 1;
        linecount -= 1;


@@ -224,7 +215,6 @@ EDA_RECT EDA_TEXT::GetTextBox( int aLine, int aThickness, bool aInvertY ) const
            rect.SetY( rect.GetY() - yoffset );
            rect.SetY( rect.GetY() - yoffset );
            break;
            break;
        }
        }
#endif
    }
    }


    rect.Inflate( thickness / 2 );
    rect.Inflate( thickness / 2 );
@@ -305,7 +295,6 @@ void EDA_TEXT::GetPositionsOfLinesOfMultilineText(


    offset.y = GetInterline();
    offset.y = GetInterline();


#ifdef FIX_MULTILINE_VERT_JUSTIF
    if( aLineCount > 1 )
    if( aLineCount > 1 )
    {
    {
        switch( m_VJustify )
        switch( m_VJustify )
@@ -326,7 +315,7 @@ void EDA_TEXT::GetPositionsOfLinesOfMultilineText(
    // Rotate the position of the first line
    // Rotate the position of the first line
    // around the center of the multiline text block
    // around the center of the multiline text block
    RotatePoint( &pos, m_Pos, m_Orient );
    RotatePoint( &pos, m_Pos, m_Orient );
#endif

    // Rotate the offset lines to increase happened in the right direction
    // Rotate the offset lines to increase happened in the right direction
    RotatePoint( &offset, m_Orient );
    RotatePoint( &offset, m_Orient );


+4 −29
Original line number Original line Diff line number Diff line
@@ -35,19 +35,6 @@
 * They can be renamed and can appear in reports
 * They can be renamed and can appear in reports
 */
 */


/* set USE_TEXT_JUSTIFY_INITIAL_BEHAVIOR to 0 to use
 * a justification relative to the text itself
 * i.e. justification relative to an horizontal text
 * or to 1 to keep the initial Eeschema behavior
 * The initial behavior is:
 *  For vertical texts, exchange the horizontal and the vertical justification
 *  The idea is to keep the justification always left or top for instance,
 *  no matter the text orientation
 *  This is a bit tricky when you want to change a text field justification
 *  when the fiels and the component are both rotated 90.0 degrees
 */
#define USE_TEXT_JUSTIFY_INITIAL_BEHAVIOR 0

#include <fctsys.h>
#include <fctsys.h>
#include <class_drawpanel.h>
#include <class_drawpanel.h>
#include <base_struct.h>
#include <base_struct.h>
@@ -206,7 +193,7 @@ void SCH_FIELD::Draw( EDA_DRAW_PANEL* panel, wxDC* DC,
        textpos  = m_Pos - origin;
        textpos  = m_Pos - origin;
        textpos  = parentComponent->GetScreenCoord( textpos );
        textpos  = parentComponent->GetScreenCoord( textpos );
        textpos += parentComponent->GetPosition();
        textpos += parentComponent->GetPosition();
        GRLine( clipbox, DC, origin.x, origin.y, textpos.x, textpos.y, 2, DARKGRAY );
        GRLine( clipbox, DC, origin, textpos, 2, DARKGRAY );
    }
    }


    /* Enable this to draw the bounding box around the text field to validate
    /* Enable this to draw the bounding box around the text field to validate
@@ -281,26 +268,14 @@ const EDA_RECT SCH_FIELD::GetBoundingBox() const
    // Calculate the text bounding box:
    // Calculate the text bounding box:
    EDA_RECT rect;
    EDA_RECT rect;


    // set USE_TEXT_JUSTIFY_INITIAL_BEHAVIOR to 0 to use
    if( m_id == REFERENCE )     // multi units have one letter or more added to reference
    // a justification relative to the text itself
    {
    // i.e. justification relative to an horizontal text
        SCH_FIELD text( *this );    // Make a local copy to change text
    // or to 1 to keep the initial behavior
#if (USE_TEXT_JUSTIFY_INITIAL_BEHAVIOR == 1 )
    if( m_Orient == TEXT_ORIENT_VERT )
    {
        // For vertical texts, exchange the horizontal and the vertical justification
        // The idea is to keep the justification always left or top for instance,
        // no matter the text orientation
        SCH_FIELD text( *this );    // Make a local copy to swap justifications
                                    // because GetBoundingBox() is const
                                    // because GetBoundingBox() is const
        int tmp = (int)text.m_VJustify;
        text.SetText( GetFullyQualifiedText() );
        NEGATE( tmp );
        text.m_VJustify  = (EDA_TEXT_VJUSTIFY_T)text.m_HJustify;
        text.m_HJustify = (EDA_TEXT_HJUSTIFY_T)tmp;
        rect = text.GetTextBox( -1, linewidth );
        rect = text.GetTextBox( -1, linewidth );
    }
    }
    else
    else
#endif
        rect = GetTextBox( -1, linewidth );
        rect = GetTextBox( -1, linewidth );


    // Calculate the bounding box position relative to the component:
    // Calculate the bounding box position relative to the component: