From c94de31a8c45c663d979c64da5fcf379d42ee78b Mon Sep 17 00:00:00 2001 From: Jeff Young Date: Tue, 4 Oct 2022 14:14:27 +0100 Subject: [PATCH] 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 436d75e7f93d9d6f8ae12e272ff28a81baa3eac3) --- pcbnew/tools/pcb_selection_tool.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pcbnew/tools/pcb_selection_tool.cpp b/pcbnew/tools/pcb_selection_tool.cpp index f249acecbb..1289193662 100644 --- a/pcbnew/tools/pcb_selection_tool.cpp +++ b/pcbnew/tools/pcb_selection_tool.cpp @@ -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 ) { if( aGroup ) - { aGroup->Add( aItem ); - view()->Hide( aItem, true ); // Hide the original item, so it is shown only on overlay - } highlightInternal( aItem, aMode, aGroup != nullptr ); 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 ) 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 ) { static_cast( 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 ) { if( aGroup ) - { aGroup->Remove( aItem ); - view()->Hide( aItem, false ); // // Restore original item visibility - } unhighlightInternal( aItem, aMode, aGroup != nullptr ); view()->Update( aItem, KIGFX::REPAINT ); @@ -2358,6 +2355,9 @@ void PCB_SELECTION_TOOL::unhighlightInternal( BOARD_ITEM* aItem, int aMode, bool else if( aMode == BRIGHTENED ) aItem->ClearBrightened(); + if( aUsingOverlay && aMode != BRIGHTENED ) + view()->Hide( aItem, false ); // // Restore original item visibility + if( aItem->Type() == PCB_FOOTPRINT_T ) { static_cast( aItem )->RunOnChildren(