diff --git a/common/view/view.cpp b/common/view/view.cpp index 9a33b88a38..2febd7288d 100644 --- a/common/view/view.cpp +++ b/common/view/view.cpp @@ -846,6 +846,9 @@ void VIEW::draw( VIEW_ITEM* aItem, int aLayer, bool aImmediate ) { auto viewData = aItem->viewPrivData(); + if( !viewData ) + return; + if( IsCached( aLayer ) && !aImmediate ) { // Draw using cached information or create one @@ -918,6 +921,10 @@ struct VIEW::recacheItem bool operator()( VIEW_ITEM* aItem ) { auto viewData = aItem->viewPrivData(); + + if( !viewData ) + return false; + // Remove previously cached group int group = viewData->getGroup( layer ); @@ -1096,6 +1103,9 @@ void VIEW::updateItemColor( VIEW_ITEM* aItem, int aLayer ) wxASSERT( (unsigned) aLayer < m_layers.size() ); wxASSERT( IsCached( aLayer ) ); + if( !viewData ) + return; + // Obtain the color that should be used for coloring the item on the specific layerId const COLOR4D color = m_painter->GetSettings()->GetColor( aItem, aLayer ); int group = viewData->getGroup( aLayer ); @@ -1112,6 +1122,9 @@ void VIEW::updateItemGeometry( VIEW_ITEM* aItem, int aLayer ) wxASSERT( (unsigned) aLayer < m_layers.size() ); wxASSERT( IsCached( aLayer ) ); + if( !viewData ) + return; + VIEW_LAYER& l = m_layers.at( aLayer ); m_gal->SetTarget( l.target ); @@ -1154,6 +1167,9 @@ void VIEW::updateLayers( VIEW_ITEM* aItem ) auto viewData = aItem->viewPrivData(); int layers[VIEW_MAX_LAYERS], layers_count; + if( !viewData ) + return; + // Remove the item from previous layer set viewData->getLayers( layers, layers_count ); @@ -1234,6 +1250,9 @@ void VIEW::UpdateItems() { auto viewData = item->viewPrivData(); + if( !viewData ) + continue; + if( viewData->m_requiredUpdate != NONE ) invalidateItem( item, viewData->m_requiredUpdate ); @@ -1285,7 +1304,8 @@ void VIEW::SetVisible( VIEW_ITEM* aItem, bool aIsVisible ) { auto viewData = aItem->viewPrivData(); - assert( viewData ); + if( !viewData ) + return; bool cur_visible = viewData->m_flags & VISIBLE; @@ -1305,6 +1325,9 @@ void VIEW::Hide( VIEW_ITEM* aItem, bool aHide ) { auto viewData = aItem->viewPrivData(); + if( !viewData ) + return; + if( !( viewData->m_flags & VISIBLE ) ) return;