Repair point editing of rotated text boxes.
Fixes https://gitlab.com/kicad/code/kicad/issues/11432
This commit is contained in:
parent
f8829de5ea
commit
de12c63de6
|
@ -113,8 +113,8 @@ public:
|
|||
* Return the starting point of the graphic.
|
||||
*/
|
||||
const VECTOR2I& GetStart() const { return m_start; }
|
||||
int GetStartY() { return m_start.y; }
|
||||
int GetStartX() { return m_start.x; }
|
||||
int GetStartY() const { return m_start.y; }
|
||||
int GetStartX() const { return m_start.x; }
|
||||
|
||||
void SetStart( const VECTOR2I& aStart )
|
||||
{
|
||||
|
@ -138,8 +138,8 @@ public:
|
|||
* Return the ending point of the graphic.
|
||||
*/
|
||||
const VECTOR2I& GetEnd() const { return m_end; }
|
||||
int GetEndY() { return m_end.y; }
|
||||
int GetEndX() { return m_end.x; }
|
||||
int GetEndY() const { return m_end.y; }
|
||||
int GetEndX() const { return m_end.x; }
|
||||
|
||||
void SetEnd( const VECTOR2I& aEnd )
|
||||
{
|
||||
|
@ -159,6 +159,14 @@ public:
|
|||
m_endsSwapped = false;
|
||||
}
|
||||
|
||||
virtual VECTOR2I GetTopLeft() const { return GetStart(); }
|
||||
virtual VECTOR2I GetBotRight() const { return GetEnd(); }
|
||||
|
||||
virtual void SetTop( int val ) { SetStartY( val ); }
|
||||
virtual void SetLeft( int val ) { SetStartX( val ); }
|
||||
virtual void SetRight( int val ) { SetEndX( val ); }
|
||||
virtual void SetBottom( int val ) { SetEndY( val ); }
|
||||
|
||||
void SetBezierC1( const VECTOR2I& aPt ) { m_bezierC1 = aPt; }
|
||||
const VECTOR2I& GetBezierC1() const { return m_bezierC1; }
|
||||
|
||||
|
|
|
@ -60,6 +60,80 @@ int FP_TEXTBOX::GetTextMargin() const
|
|||
}
|
||||
|
||||
|
||||
VECTOR2I FP_TEXTBOX::GetTopLeft() const
|
||||
{
|
||||
EDA_ANGLE rotation = GetDrawRotation();
|
||||
|
||||
if( rotation == ANGLE_90 )
|
||||
return VECTOR2I( GetStartX(), GetEndY() );
|
||||
else if( rotation == ANGLE_180 )
|
||||
return GetEnd();
|
||||
else if( rotation == ANGLE_270 )
|
||||
return VECTOR2I( GetEndX(), GetStartY() );
|
||||
else
|
||||
return GetStart();
|
||||
}
|
||||
|
||||
|
||||
VECTOR2I FP_TEXTBOX::GetBotRight() const
|
||||
{
|
||||
EDA_ANGLE rotation = GetDrawRotation();
|
||||
|
||||
if( rotation == ANGLE_90 )
|
||||
return VECTOR2I( GetEndX(), GetStartY() );
|
||||
else if( rotation == ANGLE_180 )
|
||||
return GetStart();
|
||||
else if( rotation == ANGLE_270 )
|
||||
return VECTOR2I( GetStartX(), GetEndY() );
|
||||
else
|
||||
return GetEnd();
|
||||
}
|
||||
|
||||
|
||||
void FP_TEXTBOX::SetTop( int aVal )
|
||||
{
|
||||
EDA_ANGLE rotation = GetDrawRotation();
|
||||
|
||||
if( rotation == ANGLE_90 || rotation == ANGLE_180 )
|
||||
SetEndY( aVal );
|
||||
else
|
||||
SetStartY( aVal );
|
||||
}
|
||||
|
||||
|
||||
void FP_TEXTBOX::SetBottom( int aVal )
|
||||
{
|
||||
EDA_ANGLE rotation = GetDrawRotation();
|
||||
|
||||
if( rotation == ANGLE_90 || rotation == ANGLE_180 )
|
||||
SetStartY( aVal );
|
||||
else
|
||||
SetEndY( aVal );
|
||||
}
|
||||
|
||||
|
||||
void FP_TEXTBOX::SetLeft( int aVal )
|
||||
{
|
||||
EDA_ANGLE rotation = GetDrawRotation();
|
||||
|
||||
if( rotation == ANGLE_180 || rotation == ANGLE_270 )
|
||||
SetEndX( aVal );
|
||||
else
|
||||
SetStartX( aVal );
|
||||
}
|
||||
|
||||
|
||||
void FP_TEXTBOX::SetRight( int aVal )
|
||||
{
|
||||
EDA_ANGLE rotation = GetDrawRotation();
|
||||
|
||||
if( rotation == ANGLE_180 || rotation == ANGLE_270 )
|
||||
SetStartX( aVal );
|
||||
else
|
||||
SetEndX( aVal );
|
||||
}
|
||||
|
||||
|
||||
EDA_ANGLE FP_TEXTBOX::GetDrawRotation() const
|
||||
{
|
||||
FOOTPRINT* parentFootprint = static_cast<FOOTPRINT*>( m_parent );
|
||||
|
|
|
@ -64,6 +64,14 @@ public:
|
|||
return false;
|
||||
}
|
||||
|
||||
VECTOR2I GetTopLeft() const override;
|
||||
VECTOR2I GetBotRight() const override;
|
||||
|
||||
void SetTop( int aVal ) override;
|
||||
void SetLeft( int aVal ) override;
|
||||
void SetRight( int aVal ) override;
|
||||
void SetBottom( int aVal ) override;
|
||||
|
||||
wxString GetParentAsString() const { return m_parent->m_Uuid.AsString(); }
|
||||
|
||||
bool Matches( const wxFindReplaceData& aSearchData, void* aAuxData ) const override
|
||||
|
|
|
@ -58,6 +58,80 @@ int PCB_TEXTBOX::GetTextMargin() const
|
|||
}
|
||||
|
||||
|
||||
VECTOR2I PCB_TEXTBOX::GetTopLeft() const
|
||||
{
|
||||
EDA_ANGLE rotation = GetDrawRotation();
|
||||
|
||||
if( rotation == ANGLE_90 )
|
||||
return VECTOR2I( GetStartX(), GetEndY() );
|
||||
else if( rotation == ANGLE_180 )
|
||||
return GetEnd();
|
||||
else if( rotation == ANGLE_270 )
|
||||
return VECTOR2I( GetEndX(), GetStartY() );
|
||||
else
|
||||
return GetStart();
|
||||
}
|
||||
|
||||
|
||||
VECTOR2I PCB_TEXTBOX::GetBotRight() const
|
||||
{
|
||||
EDA_ANGLE rotation = GetDrawRotation();
|
||||
|
||||
if( rotation == ANGLE_90 )
|
||||
return VECTOR2I( GetEndX(), GetStartY() );
|
||||
else if( rotation == ANGLE_180 )
|
||||
return GetStart();
|
||||
else if( rotation == ANGLE_270 )
|
||||
return VECTOR2I( GetStartX(), GetEndY() );
|
||||
else
|
||||
return GetEnd();
|
||||
}
|
||||
|
||||
|
||||
void PCB_TEXTBOX::SetTop( int aVal )
|
||||
{
|
||||
EDA_ANGLE rotation = GetDrawRotation();
|
||||
|
||||
if( rotation == ANGLE_90 || rotation == ANGLE_180 )
|
||||
SetEndY( aVal );
|
||||
else
|
||||
SetStartY( aVal );
|
||||
}
|
||||
|
||||
|
||||
void PCB_TEXTBOX::SetBottom( int aVal )
|
||||
{
|
||||
EDA_ANGLE rotation = GetDrawRotation();
|
||||
|
||||
if( rotation == ANGLE_90 || rotation == ANGLE_180 )
|
||||
SetStartY( aVal );
|
||||
else
|
||||
SetEndY( aVal );
|
||||
}
|
||||
|
||||
|
||||
void PCB_TEXTBOX::SetLeft( int aVal )
|
||||
{
|
||||
EDA_ANGLE rotation = GetDrawRotation();
|
||||
|
||||
if( rotation == ANGLE_180 || rotation == ANGLE_270 )
|
||||
SetEndX( aVal );
|
||||
else
|
||||
SetStartX( aVal );
|
||||
}
|
||||
|
||||
|
||||
void PCB_TEXTBOX::SetRight( int aVal )
|
||||
{
|
||||
EDA_ANGLE rotation = GetDrawRotation();
|
||||
|
||||
if( rotation == ANGLE_180 || rotation == ANGLE_270 )
|
||||
SetStartX( aVal );
|
||||
else
|
||||
SetEndX( aVal );
|
||||
}
|
||||
|
||||
|
||||
std::vector<VECTOR2I> PCB_TEXTBOX::GetAnchorAndOppositeCorner() const
|
||||
{
|
||||
std::vector<VECTOR2I> pts;
|
||||
|
|
|
@ -62,6 +62,14 @@ public:
|
|||
return false;
|
||||
}
|
||||
|
||||
VECTOR2I GetTopLeft() const override;
|
||||
VECTOR2I GetBotRight() const override;
|
||||
|
||||
void SetTop( int aVal ) override;
|
||||
void SetLeft( int aVal ) override;
|
||||
void SetRight( int aVal ) override;
|
||||
void SetBottom( int aVal ) override;
|
||||
|
||||
int GetTextMargin() const;
|
||||
|
||||
VECTOR2I GetDrawPos() const override;
|
||||
|
|
|
@ -210,10 +210,10 @@ std::shared_ptr<EDIT_POINTS> PCB_POINT_EDITOR::makePoints( EDA_ITEM* aItem )
|
|||
break;
|
||||
|
||||
case SHAPE_T::RECT:
|
||||
points->AddPoint( shape->GetStart() );
|
||||
points->AddPoint( VECTOR2I( shape->GetEnd().x, shape->GetStart().y ) );
|
||||
points->AddPoint( shape->GetEnd() );
|
||||
points->AddPoint( VECTOR2I( shape->GetStart().x, shape->GetEnd().y ) );
|
||||
points->AddPoint( shape->GetTopLeft() );
|
||||
points->AddPoint( VECTOR2I( shape->GetBotRight().x, shape->GetTopLeft().y ) );
|
||||
points->AddPoint( shape->GetBotRight() );
|
||||
points->AddPoint( VECTOR2I( shape->GetTopLeft().x, shape->GetBotRight().y ) );
|
||||
|
||||
points->AddLine( points->Point( RECT_TOP_LEFT ), points->Point( RECT_TOP_RIGHT ) );
|
||||
points->Line( RECT_TOP ).SetConstraint( new EC_PERPLINE( points->Line( RECT_TOP ) ) );
|
||||
|
@ -1111,24 +1111,26 @@ void PCB_POINT_EDITOR::updateItem() const
|
|||
|| isModified( m_editPoints->Point( RECT_BOT_RIGHT ) )
|
||||
|| isModified( m_editPoints->Point( RECT_BOT_LEFT ) ) )
|
||||
{
|
||||
shape->SetPosition( topLeft );
|
||||
shape->SetEnd( botRight );
|
||||
shape->SetLeft( topLeft.x );
|
||||
shape->SetTop( topLeft.y );
|
||||
shape->SetRight( botRight.x );
|
||||
shape->SetBottom( botRight.y );
|
||||
}
|
||||
else if( isModified( m_editPoints->Line( RECT_TOP ) ) )
|
||||
{
|
||||
shape->SetStartY( topLeft.y );
|
||||
shape->SetTop( topLeft.y );
|
||||
}
|
||||
else if( isModified( m_editPoints->Line( RECT_LEFT ) ) )
|
||||
{
|
||||
shape->SetStartX( topLeft.x );
|
||||
shape->SetLeft( topLeft.x );
|
||||
}
|
||||
else if( isModified( m_editPoints->Line( RECT_BOT ) ) )
|
||||
{
|
||||
shape->SetEndY( botRight.y );
|
||||
shape->SetBottom( botRight.y );
|
||||
}
|
||||
else if( isModified( m_editPoints->Line( RECT_RIGHT ) ) )
|
||||
{
|
||||
shape->SetEndX( botRight.x );
|
||||
shape->SetRight( botRight.x );
|
||||
}
|
||||
|
||||
for( unsigned i = 0; i < m_editPoints->LinesSize(); ++i )
|
||||
|
@ -1666,12 +1668,12 @@ void PCB_POINT_EDITOR::updatePoints()
|
|||
|
||||
if( shape->GetShape() == SHAPE_T::RECT )
|
||||
{
|
||||
m_editPoints->Point( RECT_TOP_LEFT ).SetPosition( shape->GetStart() );
|
||||
m_editPoints->Point( RECT_TOP_RIGHT ).SetPosition( shape->GetEnd().x,
|
||||
shape->GetStart().y );
|
||||
m_editPoints->Point( RECT_BOT_RIGHT ).SetPosition( shape->GetEnd() );
|
||||
m_editPoints->Point( RECT_BOT_LEFT ).SetPosition( shape->GetStart().x,
|
||||
shape->GetEnd().y );
|
||||
m_editPoints->Point( RECT_TOP_LEFT ).SetPosition( shape->GetTopLeft() );
|
||||
m_editPoints->Point( RECT_TOP_RIGHT ).SetPosition( shape->GetBotRight().x,
|
||||
shape->GetTopLeft().y );
|
||||
m_editPoints->Point( RECT_BOT_RIGHT ).SetPosition( shape->GetBotRight() );
|
||||
m_editPoints->Point( RECT_BOT_LEFT ).SetPosition( shape->GetTopLeft().x,
|
||||
shape->GetBotRight().y );
|
||||
}
|
||||
else if( shape->GetShape() == SHAPE_T::POLY )
|
||||
{
|
||||
|
@ -1694,12 +1696,12 @@ void PCB_POINT_EDITOR::updatePoints()
|
|||
break;
|
||||
|
||||
case SHAPE_T::RECT:
|
||||
m_editPoints->Point( RECT_TOP_LEFT ).SetPosition( shape->GetStart() );
|
||||
m_editPoints->Point( RECT_TOP_RIGHT ).SetPosition( shape->GetEnd().x,
|
||||
shape->GetStart().y );
|
||||
m_editPoints->Point( RECT_BOT_RIGHT ).SetPosition( shape->GetEnd() );
|
||||
m_editPoints->Point( RECT_BOT_LEFT ).SetPosition( shape->GetStart().x,
|
||||
shape->GetEnd().y );
|
||||
m_editPoints->Point( RECT_TOP_LEFT ).SetPosition( shape->GetTopLeft() );
|
||||
m_editPoints->Point( RECT_TOP_RIGHT ).SetPosition( shape->GetBotRight().x,
|
||||
shape->GetTopLeft().y );
|
||||
m_editPoints->Point( RECT_BOT_RIGHT ).SetPosition( shape->GetBotRight() );
|
||||
m_editPoints->Point( RECT_BOT_LEFT ).SetPosition( shape->GetTopLeft().x,
|
||||
shape->GetBotRight().y );
|
||||
break;
|
||||
|
||||
case SHAPE_T::ARC:
|
||||
|
|
Loading…
Reference in New Issue