Commit 5d704c96 authored by Maciej Suminski's avatar Maciej Suminski

Turned on group recaching on GAL change.

parent a96c5379
...@@ -143,7 +143,7 @@ VIEW::VIEW( bool aIsDynamic, bool aUseGroups ) : ...@@ -143,7 +143,7 @@ VIEW::VIEW( bool aIsDynamic, bool aUseGroups ) :
m_dynamic( aIsDynamic ), m_dynamic( aIsDynamic ),
m_useGroups( aUseGroups ) m_useGroups( aUseGroups )
{ {
// By default there is not layer on the top // By default there is no layer on the top
m_topLayer.enabled = false; m_topLayer.enabled = false;
} }
...@@ -201,6 +201,10 @@ void VIEW::SetGAL( GAL* aGal ) ...@@ -201,6 +201,10 @@ void VIEW::SetGAL( GAL* aGal )
{ {
m_gal = aGal; m_gal = aGal;
// items need to be recached after changing GAL
if( m_useGroups )
itemsRecache();
// force the new GAL to display the current viewport. // force the new GAL to display the current viewport.
SetCenter( m_center ); SetCenter( m_center );
SetScale( m_scale ); SetScale( m_scale );
...@@ -374,19 +378,14 @@ struct VIEW::drawItem ...@@ -374,19 +378,14 @@ struct VIEW::drawItem
{ {
group = gal->BeginGroup(); group = gal->BeginGroup();
aItem->m_cachedGroup = group; aItem->m_cachedGroup = group;
aItem->ViewDraw( 0, gal, tmp ); view->m_painter->Draw( static_cast<EDA_ITEM*>( aItem ), currentLayer );
gal->EndGroup(); gal->EndGroup();
gal->DrawGroup( group ); gal->DrawGroup( group );
} }
} }
else if( aItem->ViewIsVisible() ) else if( aItem->ViewIsVisible() )
{ {
if( !( view->m_painter view->m_painter->Draw( static_cast<EDA_ITEM*>( aItem ), currentLayer );
&& view->m_painter->Draw( static_cast<EDA_ITEM*>( aItem ), currentLayer ) ) )
{
// Fallback, if there is no painter or painter does not know how to draw aItem
aItem->ViewDraw( currentLayer, gal, tmp );
}
} }
time += rdtsc() - ts; time += rdtsc() - ts;
...@@ -445,6 +444,15 @@ struct VIEW::unlinkItem ...@@ -445,6 +444,15 @@ struct VIEW::unlinkItem
}; };
struct VIEW::recacheItem
{
void operator()( VIEW_ITEM* aItem )
{
aItem->m_cachedGroup = -1;
}
};
void VIEW::Clear() void VIEW::Clear()
{ {
BOX2I r; BOX2I r;
...@@ -544,3 +552,18 @@ void VIEW::clearGroupCache() ...@@ -544,3 +552,18 @@ void VIEW::clearGroupCache()
l->items->Query( r, visitor ); l->items->Query( r, visitor );
}; };
} }
void VIEW::itemsRecache()
{
BOX2I r;
r.SetMaximum();
for( LayerMapIter i = m_layers.begin(); i != m_layers.end(); ++i )
{
VIEW_LAYER* l = & ( ( *i ).second );
recacheItem visitor;
l->items->Query( r, visitor );
};
}
...@@ -328,6 +328,7 @@ private: ...@@ -328,6 +328,7 @@ private:
// Function objects that need to access VIEW/VIEW_ITEM private/protected members // Function objects that need to access VIEW/VIEW_ITEM private/protected members
struct clearItemCache; struct clearItemCache;
struct unlinkItem; struct unlinkItem;
struct recacheItem;
struct drawItem; struct drawItem;
///* Saves current top layer settings in order to restore it when it's not top anymore ///* Saves current top layer settings in order to restore it when it's not top anymore
...@@ -349,6 +350,9 @@ private: ...@@ -349,6 +350,9 @@ private:
///* Clears cached GAL display lists ///* Clears cached GAL display lists
void clearGroupCache(); void clearGroupCache();
///* Rebuilds GAL display lists
void itemsRecache();
/// Determines rendering order of layers. Used in display order sorting function. /// Determines rendering order of layers. Used in display order sorting function.
static bool compareRenderingOrder( VIEW_LAYER* i, VIEW_LAYER* j ) static bool compareRenderingOrder( VIEW_LAYER* i, VIEW_LAYER* j )
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment