Do grid snapping earlier to avoid inconsistencies.
Fixes https://gitlab.com/kicad/code/kicad/issues/5908
This commit is contained in:
parent
189b1742f7
commit
2226e0b7aa
|
@ -67,7 +67,6 @@
|
||||||
#include <core/arraydim.h>
|
#include <core/arraydim.h>
|
||||||
|
|
||||||
#define FIELD_PADDING Mils2iu( 10 ) // arbitrarily chosen for aesthetics
|
#define FIELD_PADDING Mils2iu( 10 ) // arbitrarily chosen for aesthetics
|
||||||
#define FIELD_PADDING_ALIGNED Mils2iu( 18 ) // aligns 50 mil text to a 100 mil grid
|
|
||||||
#define WIRE_V_SPACING Mils2iu( 100 )
|
#define WIRE_V_SPACING Mils2iu( 100 )
|
||||||
#define HPADDING Mils2iu( 25 )
|
#define HPADDING Mils2iu( 25 )
|
||||||
#define VPADDING Mils2iu( 25 )
|
#define VPADDING Mils2iu( 25 )
|
||||||
|
@ -170,7 +169,7 @@ public:
|
||||||
if( m_align_to_grid )
|
if( m_align_to_grid )
|
||||||
{
|
{
|
||||||
pos.x = round_n( pos.x, Mils2iu( 50 ), field_side.x >= 0 );
|
pos.x = round_n( pos.x, Mils2iu( 50 ), field_side.x >= 0 );
|
||||||
pos.y = round_n( pos.y, Mils2iu( 50 ), field_side.y == 1 );
|
pos.y = round_n( pos.y, Mils2iu( 50 ), field_side.y >= 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
field->SetPosition( pos );
|
field->SetPosition( pos );
|
||||||
|
@ -193,24 +192,21 @@ protected:
|
||||||
int field_height;
|
int field_height;
|
||||||
|
|
||||||
if( m_symbol->GetTransform().y1 )
|
if( m_symbol->GetTransform().y1 )
|
||||||
{
|
|
||||||
field->SetTextAngle( TEXT_ANGLE_VERT );
|
field->SetTextAngle( TEXT_ANGLE_VERT );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
field->SetTextAngle( TEXT_ANGLE_HORIZ );
|
field->SetTextAngle( TEXT_ANGLE_HORIZ );
|
||||||
}
|
|
||||||
|
|
||||||
field_width = field->GetBoundingBox().GetWidth();
|
field_width = field->GetBoundingBox().GetWidth();
|
||||||
field_height = field->GetBoundingBox().GetHeight();
|
field_height = field->GetBoundingBox().GetHeight();
|
||||||
|
|
||||||
max_field_width = std::max( max_field_width, field_width );
|
max_field_width = std::max( max_field_width, field_width );
|
||||||
|
|
||||||
if( aDynamic )
|
if( !aDynamic )
|
||||||
total_height += field_height + getFieldPadding();
|
|
||||||
else
|
|
||||||
total_height += WIRE_V_SPACING;
|
total_height += WIRE_V_SPACING;
|
||||||
|
else if( m_align_to_grid )
|
||||||
|
total_height += round_n( field_height, Mils2iu( 50 ), true );
|
||||||
|
else
|
||||||
|
total_height += field_height + FIELD_PADDING;
|
||||||
}
|
}
|
||||||
|
|
||||||
return wxSize( max_field_width, total_height );
|
return wxSize( max_field_width, total_height );
|
||||||
|
@ -512,8 +508,13 @@ protected:
|
||||||
wxPoint fieldBoxPlacement( SIDE aFieldSide )
|
wxPoint fieldBoxPlacement( SIDE aFieldSide )
|
||||||
{
|
{
|
||||||
wxPoint fbox_center = m_symbol_bbox.Centre();
|
wxPoint fbox_center = m_symbol_bbox.Centre();
|
||||||
int offs_x = ( m_symbol_bbox.GetWidth() + m_fbox_size.GetWidth() ) / 2 + HPADDING;
|
int offs_x = ( m_symbol_bbox.GetWidth() + m_fbox_size.GetWidth() ) / 2;
|
||||||
int offs_y = ( m_symbol_bbox.GetHeight() + m_fbox_size.GetHeight() ) / 2 + VPADDING;
|
int offs_y = ( m_symbol_bbox.GetHeight() + m_fbox_size.GetHeight() ) / 2;
|
||||||
|
|
||||||
|
if( aFieldSide.x != 0 )
|
||||||
|
offs_x += HPADDING;
|
||||||
|
else if( aFieldSide.y != 0 )
|
||||||
|
offs_y += VPADDING;
|
||||||
|
|
||||||
fbox_center.x += aFieldSide.x * offs_x;
|
fbox_center.x += aFieldSide.x * offs_x;
|
||||||
fbox_center.y += aFieldSide.y * offs_y;
|
fbox_center.y += aFieldSide.y * offs_y;
|
||||||
|
@ -567,16 +568,6 @@ protected:
|
||||||
|
|
||||||
wxPoint pos = aBox->GetPosition();
|
wxPoint pos = aBox->GetPosition();
|
||||||
|
|
||||||
// Remove the existing padding to get a bit more space to work with
|
|
||||||
if( aSide == SIDE_BOTTOM )
|
|
||||||
{
|
|
||||||
pos.y = m_symbol_bbox.GetBottom() - getFieldPadding();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
pos.y = m_symbol_bbox.GetTop() - m_fbox_size.y + getFieldPadding();
|
|
||||||
}
|
|
||||||
|
|
||||||
pos.y = round_n( pos.y, WIRE_V_SPACING, aSide == SIDE_BOTTOM );
|
pos.y = round_n( pos.y, WIRE_V_SPACING, aSide == SIDE_BOTTOM );
|
||||||
|
|
||||||
aBox->SetOrigin( pos );
|
aBox->SetOrigin( pos );
|
||||||
|
@ -637,17 +628,21 @@ protected:
|
||||||
int field_height;
|
int field_height;
|
||||||
int padding;
|
int padding;
|
||||||
|
|
||||||
if( aDynamic )
|
if( !aDynamic )
|
||||||
{
|
|
||||||
field_height = aField->GetBoundingBox().GetHeight();
|
|
||||||
|
|
||||||
padding = getFieldPadding();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
field_height = WIRE_V_SPACING / 2;
|
field_height = WIRE_V_SPACING / 2;
|
||||||
padding = WIRE_V_SPACING / 2;
|
padding = WIRE_V_SPACING / 2;
|
||||||
}
|
}
|
||||||
|
else if( m_align_to_grid )
|
||||||
|
{
|
||||||
|
field_height = aField->GetBoundingBox().GetHeight();
|
||||||
|
padding = round_n( field_height, Mils2iu( 50 ), true ) - field_height;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
field_height = aField->GetBoundingBox().GetHeight();
|
||||||
|
padding = FIELD_PADDING;
|
||||||
|
}
|
||||||
|
|
||||||
int placement = *aPosAccum + padding / 2 + field_height / 2;
|
int placement = *aPosAccum + padding / 2 + field_height / 2;
|
||||||
|
|
||||||
|
@ -656,17 +651,6 @@ protected:
|
||||||
return placement;
|
return placement;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the desired padding between fields.
|
|
||||||
*/
|
|
||||||
int getFieldPadding()
|
|
||||||
{
|
|
||||||
if( m_align_to_grid )
|
|
||||||
return FIELD_PADDING_ALIGNED;
|
|
||||||
else
|
|
||||||
return FIELD_PADDING;
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
SCH_SCREEN* m_screen;
|
SCH_SCREEN* m_screen;
|
||||||
SCH_COMPONENT* m_symbol;
|
SCH_COMPONENT* m_symbol;
|
||||||
|
|
Loading…
Reference in New Issue