Fix sheet resizing in eeschema.
This commit is contained in:
parent
84572d371d
commit
55f6529216
|
@ -572,7 +572,7 @@ void SCH_SCREEN::Draw( EDA_DRAW_PANEL* aCanvas, wxDC* aDC, int aDrawMode, int aC
|
||||||
{
|
{
|
||||||
for( SCH_ITEM* item = GetDrawItems(); item != NULL; item = item->Next() )
|
for( SCH_ITEM* item = GetDrawItems(); item != NULL; item = item->Next() )
|
||||||
{
|
{
|
||||||
if( item->IsMoving() )
|
if( item->IsMoving() || item->IsResized() )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// uncomment line below when there is a virtual
|
// uncomment line below when there is a virtual
|
||||||
|
|
|
@ -214,7 +214,6 @@ void SCH_EDIT_FRAME::Process_Special_Functions( wxCommandEvent& event )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ID_POPUP_SCH_RESIZE_SHEET:
|
case ID_POPUP_SCH_RESIZE_SHEET:
|
||||||
DrawPanel->MoveCursorToCrossHair();
|
|
||||||
ReSizeSheet( (SCH_SHEET*) item, &dc );
|
ReSizeSheet( (SCH_SHEET*) item, &dc );
|
||||||
screen->TestDanglingEnds( DrawPanel, &dc );
|
screen->TestDanglingEnds( DrawPanel, &dc );
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -198,7 +198,7 @@ static void MoveOrResizeSheet( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint&
|
||||||
if( aErase )
|
if( aErase )
|
||||||
sheet->Draw( aPanel, aDC, wxPoint( 0, 0 ), g_XorMode );
|
sheet->Draw( aPanel, aDC, wxPoint( 0, 0 ), g_XorMode );
|
||||||
|
|
||||||
if( sheet->GetFlags() & IS_RESIZED )
|
if( sheet->IsResized() )
|
||||||
{
|
{
|
||||||
int width = screen->GetCrossHairPosition().x - sheet->m_Pos.x;
|
int width = screen->GetCrossHairPosition().x - sheet->m_Pos.x;
|
||||||
int height = screen->GetCrossHairPosition().y - sheet->m_Pos.y;
|
int height = screen->GetCrossHairPosition().y - sheet->m_Pos.y;
|
||||||
|
@ -223,7 +223,7 @@ static void MoveOrResizeSheet( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint&
|
||||||
sheet->m_Pos.y + height ) );
|
sheet->m_Pos.y + height ) );
|
||||||
sheet->Resize( wxSize( grid.x - sheet->m_Pos.x, grid.y - sheet->m_Pos.y ) );
|
sheet->Resize( wxSize( grid.x - sheet->m_Pos.x, grid.y - sheet->m_Pos.y ) );
|
||||||
}
|
}
|
||||||
else /* Move Sheet */
|
else if( sheet->IsMoving() )
|
||||||
{
|
{
|
||||||
moveVector = screen->GetCrossHairPosition() - sheet->m_Pos;
|
moveVector = screen->GetCrossHairPosition() - sheet->m_Pos;
|
||||||
sheet->Move( moveVector );
|
sheet->Move( moveVector );
|
||||||
|
@ -251,7 +251,7 @@ static void ExitSheet( EDA_DRAW_PANEL* aPanel, wxDC* aDC )
|
||||||
{
|
{
|
||||||
SAFE_DELETE( item );
|
SAFE_DELETE( item );
|
||||||
}
|
}
|
||||||
else if( item->m_Flags & (IS_RESIZED | IS_MOVED) )
|
else if( item->IsMoving() || item->IsResized() )
|
||||||
{
|
{
|
||||||
screen->RemoveFromDrawList( item );
|
screen->RemoveFromDrawList( item );
|
||||||
delete item;
|
delete item;
|
||||||
|
@ -266,10 +266,6 @@ static void ExitSheet( EDA_DRAW_PANEL* aPanel, wxDC* aDC )
|
||||||
|
|
||||||
item->Draw( aPanel, aDC, wxPoint( 0, 0 ), GR_DEFAULT_DRAWMODE );
|
item->Draw( aPanel, aDC, wxPoint( 0, 0 ), GR_DEFAULT_DRAWMODE );
|
||||||
item->ClearFlags();
|
item->ClearFlags();
|
||||||
SCH_SHEET* sheet = ( SCH_SHEET* ) item;
|
|
||||||
aPanel->CrossHairOff( aDC );
|
|
||||||
screen->SetCrossHairPosition( sheet->GetResizePosition() );
|
|
||||||
aPanel->CrossHairOn( aDC );
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -300,6 +296,7 @@ SCH_SHEET* SCH_EDIT_FRAME::CreateSheet( wxDC* aDC )
|
||||||
DrawPanel->m_mouseCaptureCallback( DrawPanel, aDC, wxDefaultPosition, false );
|
DrawPanel->m_mouseCaptureCallback( DrawPanel, aDC, wxDefaultPosition, false );
|
||||||
DrawPanel->CrossHairOff( aDC );
|
DrawPanel->CrossHairOff( aDC );
|
||||||
GetScreen()->SetCrossHairPosition( sheet->GetResizePosition() );
|
GetScreen()->SetCrossHairPosition( sheet->GetResizePosition() );
|
||||||
|
DrawPanel->MoveCursorToCrossHair();
|
||||||
DrawPanel->CrossHairOn( aDC );
|
DrawPanel->CrossHairOn( aDC );
|
||||||
|
|
||||||
return sheet;
|
return sheet;
|
||||||
|
@ -315,20 +312,19 @@ void SCH_EDIT_FRAME::ReSizeSheet( SCH_SHEET* aSheet, wxDC* aDC )
|
||||||
wxString::Format( wxT( "Cannot perform sheet resize on %s object." ),
|
wxString::Format( wxT( "Cannot perform sheet resize on %s object." ),
|
||||||
GetChars( aSheet->GetClass() ) ) );
|
GetChars( aSheet->GetClass() ) ) );
|
||||||
|
|
||||||
SetUndoItem( aSheet );
|
DrawPanel->CrossHairOff( aDC );
|
||||||
OnModify();
|
GetScreen()->SetCrossHairPosition( aSheet->GetResizePosition() );
|
||||||
aSheet->SetFlags( IS_RESIZED );
|
DrawPanel->MoveCursorToCrossHair();
|
||||||
|
DrawPanel->CrossHairOn( aDC );
|
||||||
|
|
||||||
|
SetUndoItem( aSheet );
|
||||||
|
aSheet->SetFlags( IS_RESIZED );
|
||||||
|
|
||||||
DrawPanel->SetMouseCapture( MoveOrResizeSheet, ExitSheet );
|
DrawPanel->SetMouseCapture( MoveOrResizeSheet, ExitSheet );
|
||||||
DrawPanel->m_mouseCaptureCallback( DrawPanel, aDC, wxDefaultPosition, true );
|
DrawPanel->m_mouseCaptureCallback( DrawPanel, aDC, wxDefaultPosition, true );
|
||||||
|
|
||||||
if( aSheet->IsNew() ) // not already in edit, save a copy for undo/redo
|
if( aSheet->IsNew() ) // not already in edit, save a copy for undo/redo
|
||||||
SetUndoItem( aSheet );
|
SetUndoItem( aSheet );
|
||||||
|
|
||||||
DrawPanel->CrossHairOff( aDC );
|
|
||||||
GetScreen()->SetCrossHairPosition( aSheet->GetResizePosition() );
|
|
||||||
DrawPanel->CrossHairOn( aDC );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -412,6 +412,7 @@ public:
|
||||||
inline bool IsMoving() const { return m_Flags & IS_MOVED; }
|
inline bool IsMoving() const { return m_Flags & IS_MOVED; }
|
||||||
inline bool IsDragging() const { return m_Flags & IS_DRAGGED; }
|
inline bool IsDragging() const { return m_Flags & IS_DRAGGED; }
|
||||||
inline bool IsSelected() const { return m_Flags & SELECTED; }
|
inline bool IsSelected() const { return m_Flags & SELECTED; }
|
||||||
|
inline bool IsResized() const { return m_Flags & IS_RESIZED; }
|
||||||
|
|
||||||
void SetModified();
|
void SetModified();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue