PNS: fixed crash on via dragging
This commit is contained in:
parent
21b0818e58
commit
86b07d89a7
|
@ -83,6 +83,9 @@ bool PNS_DRAGGER::startDragVia( const VECTOR2D& aP, PNS_VIA* aVia )
|
||||||
VECTOR2I p0( aVia->Pos() );
|
VECTOR2I p0( aVia->Pos() );
|
||||||
PNS_JOINT* jt = m_world->FindJoint( p0, aVia->Layers().Start(), aVia->Net() );
|
PNS_JOINT* jt = m_world->FindJoint( p0, aVia->Layers().Start(), aVia->Net() );
|
||||||
|
|
||||||
|
if( !jt )
|
||||||
|
return false;
|
||||||
|
|
||||||
BOOST_FOREACH( PNS_ITEM* item, jt->LinkList() )
|
BOOST_FOREACH( PNS_ITEM* item, jt->LinkList() )
|
||||||
{
|
{
|
||||||
if( item->OfKind( PNS_ITEM::SEGMENT ) )
|
if( item->OfKind( PNS_ITEM::SEGMENT ) )
|
||||||
|
|
|
@ -195,13 +195,19 @@ void PNS_TOOL_BASE::updateStartItem( TOOL_EVENT& aEvent )
|
||||||
{
|
{
|
||||||
int tl = getView()->GetTopLayer();
|
int tl = getView()->GetTopLayer();
|
||||||
VECTOR2I cp = m_ctls->GetCursorPosition();
|
VECTOR2I cp = m_ctls->GetCursorPosition();
|
||||||
|
VECTOR2I p;
|
||||||
|
|
||||||
PNS_ITEM* startItem = NULL;
|
PNS_ITEM* startItem = NULL;
|
||||||
|
bool snapEnabled = true;
|
||||||
|
|
||||||
if( aEvent.IsMotion() || aEvent.IsClick() )
|
if( aEvent.IsMotion() || aEvent.IsClick() )
|
||||||
{
|
{
|
||||||
bool snapEnabled = !aEvent.Modifier( MD_SHIFT );
|
snapEnabled = !aEvent.Modifier( MD_SHIFT );
|
||||||
|
p = aEvent.Position();
|
||||||
|
} else {
|
||||||
|
p = cp;
|
||||||
|
}
|
||||||
|
|
||||||
VECTOR2I p( aEvent.Position() );
|
|
||||||
startItem = pickSingleItem( p );
|
startItem = pickSingleItem( p );
|
||||||
m_router->EnableSnapping ( snapEnabled );
|
m_router->EnableSnapping ( snapEnabled );
|
||||||
|
|
||||||
|
@ -224,11 +230,6 @@ void PNS_TOOL_BASE::updateStartItem( TOOL_EVENT& aEvent )
|
||||||
m_ctls->ForceCursorPosition( false );
|
m_ctls->ForceCursorPosition( false );
|
||||||
}
|
}
|
||||||
|
|
||||||
// if( startItem->Layers().IsMultilayer() )
|
|
||||||
// m_startLayer = tl;
|
|
||||||
// else
|
|
||||||
// m_startLayer = startItem->Layers().Start();
|
|
||||||
|
|
||||||
m_startItem = startItem;
|
m_startItem = startItem;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -238,7 +239,6 @@ void PNS_TOOL_BASE::updateStartItem( TOOL_EVENT& aEvent )
|
||||||
m_ctls->ForceCursorPosition( false );
|
m_ctls->ForceCursorPosition( false );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void PNS_TOOL_BASE::updateEndItem( TOOL_EVENT& aEvent )
|
void PNS_TOOL_BASE::updateEndItem( TOOL_EVENT& aEvent )
|
||||||
|
|
|
@ -660,7 +660,10 @@ int ROUTER_TOOL::mainLoop( PNS_ROUTER_MODE aMode )
|
||||||
performRouting();
|
performRouting();
|
||||||
}
|
}
|
||||||
else if( evt->IsAction( &ACT_Drag ) )
|
else if( evt->IsAction( &ACT_Drag ) )
|
||||||
|
{
|
||||||
|
updateStartItem( *evt );
|
||||||
performDragging();
|
performDragging();
|
||||||
|
}
|
||||||
|
|
||||||
handleCommonEvents( *evt );
|
handleCommonEvents( *evt );
|
||||||
}
|
}
|
||||||
|
@ -731,6 +734,8 @@ void ROUTER_TOOL::performDragging()
|
||||||
m_needsSync = true;
|
m_needsSync = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_startItem = NULL;
|
||||||
|
|
||||||
ctls->SetAutoPan( false );
|
ctls->SetAutoPan( false );
|
||||||
ctls->ForceCursorPosition( false );
|
ctls->ForceCursorPosition( false );
|
||||||
highlightNet( false );
|
highlightNet( false );
|
||||||
|
|
Loading…
Reference in New Issue