Try to reconcile SELECTION and BRIGHTENED use of overlay.

For some reason the overlay doesn't get redrawn during the PCBNew
selection disambiguation menu, so we need to not hide BRIGHTENED
items.

Fixes https://gitlab.com/kicad/code/kicad/issues/12547

(cherry picked from commit 436d75e7f9)
This commit is contained in:
Jeff Young 2022-10-04 14:14:27 +01:00
parent 2793e67bab
commit c94de31a8c
1 changed files with 6 additions and 6 deletions

View File

@ -2293,10 +2293,7 @@ void PCB_SELECTION_TOOL::unselect( BOARD_ITEM* aItem )
void PCB_SELECTION_TOOL::highlight( BOARD_ITEM* aItem, int aMode, PCB_SELECTION* aGroup ) void PCB_SELECTION_TOOL::highlight( BOARD_ITEM* aItem, int aMode, PCB_SELECTION* aGroup )
{ {
if( aGroup ) if( aGroup )
{
aGroup->Add( aItem ); aGroup->Add( aItem );
view()->Hide( aItem, true ); // Hide the original item, so it is shown only on overlay
}
highlightInternal( aItem, aMode, aGroup != nullptr ); highlightInternal( aItem, aMode, aGroup != nullptr );
view()->Update( aItem, KIGFX::REPAINT ); view()->Update( aItem, KIGFX::REPAINT );
@ -2315,6 +2312,9 @@ void PCB_SELECTION_TOOL::highlightInternal( BOARD_ITEM* aItem, int aMode, bool a
else if( aMode == BRIGHTENED ) else if( aMode == BRIGHTENED )
aItem->SetBrightened(); aItem->SetBrightened();
if( aUsingOverlay && aMode != BRIGHTENED )
view()->Hide( aItem, true ); // Hide the original item, so it is shown only on overlay
if( aItem->Type() == PCB_FOOTPRINT_T ) if( aItem->Type() == PCB_FOOTPRINT_T )
{ {
static_cast<FOOTPRINT*>( aItem )->RunOnChildren( static_cast<FOOTPRINT*>( aItem )->RunOnChildren(
@ -2337,10 +2337,7 @@ void PCB_SELECTION_TOOL::highlightInternal( BOARD_ITEM* aItem, int aMode, bool a
void PCB_SELECTION_TOOL::unhighlight( BOARD_ITEM* aItem, int aMode, PCB_SELECTION* aGroup ) void PCB_SELECTION_TOOL::unhighlight( BOARD_ITEM* aItem, int aMode, PCB_SELECTION* aGroup )
{ {
if( aGroup ) if( aGroup )
{
aGroup->Remove( aItem ); aGroup->Remove( aItem );
view()->Hide( aItem, false ); // // Restore original item visibility
}
unhighlightInternal( aItem, aMode, aGroup != nullptr ); unhighlightInternal( aItem, aMode, aGroup != nullptr );
view()->Update( aItem, KIGFX::REPAINT ); view()->Update( aItem, KIGFX::REPAINT );
@ -2358,6 +2355,9 @@ void PCB_SELECTION_TOOL::unhighlightInternal( BOARD_ITEM* aItem, int aMode, bool
else if( aMode == BRIGHTENED ) else if( aMode == BRIGHTENED )
aItem->ClearBrightened(); aItem->ClearBrightened();
if( aUsingOverlay && aMode != BRIGHTENED )
view()->Hide( aItem, false ); // // Restore original item visibility
if( aItem->Type() == PCB_FOOTPRINT_T ) if( aItem->Type() == PCB_FOOTPRINT_T )
{ {
static_cast<FOOTPRINT*>( aItem )->RunOnChildren( static_cast<FOOTPRINT*>( aItem )->RunOnChildren(