diff --git a/pcbnew/drc/drc_test_provider_text_mirroring.cpp b/pcbnew/drc/drc_test_provider_text_mirroring.cpp index 60bcedff82..3ef2c88936 100644 --- a/pcbnew/drc/drc_test_provider_text_mirroring.cpp +++ b/pcbnew/drc/drc_test_provider_text_mirroring.cpp @@ -25,6 +25,7 @@ #include <pcb_field.h> #include <pcb_text.h> #include <pcb_textbox.h> +#include <pcb_tablecell.h> #include <drc/drc_engine.h> #include <drc/drc_item.h> #include <drc/drc_rule.h> @@ -75,20 +76,19 @@ bool DRC_TEST_PROVIDER_TEXT_MIRRORING::Run() } if( !reportPhase( _( "Checking text mirroring..." ) ) ) - return false; // DRC cancelled + return false; // DRC cancelled LSET topLayers( { F_Cu, F_SilkS, F_Mask, F_Fab } ); LSET bottomLayers( { B_Cu, B_SilkS, B_Mask, B_Fab } ); auto checkTextMirroring = - [&]( BOARD_ITEM* item, EDA_TEXT* text, PCB_LAYER_ID layerId, bool isMirrored, - int errorCode ) -> bool + [&]( BOARD_ITEM* item, EDA_TEXT* text, bool isMirrored, int errorCode ) { if( m_drcEngine->IsErrorLimitExceeded( errorCode ) ) - return false; + return; - bool layerMatch = ( isMirrored && topLayers.Contains( layerId ) ) - || ( !isMirrored && bottomLayers.Contains( layerId ) ); + bool layerMatch = ( isMirrored && topLayers.Contains( item->GetLayer() ) ) + || ( !isMirrored && bottomLayers.Contains( item->GetLayer() ) ); if( layerMatch && text->IsMirrored() == isMirrored ) { @@ -97,16 +97,15 @@ bool DRC_TEST_PROVIDER_TEXT_MIRRORING::Run() drcItem->SetErrorMessage( drcItem->GetErrorText() ); drcItem->SetItems( item ); - reportViolation( drcItem, item->GetPosition(), layerId ); + reportViolation( drcItem, item->GetPosition(), item->GetLayer() ); } - - return true; }; - const int progressDelta = 250; + const int progressDelta = 500; int count = 0; int progressIndex = 0; - static const std::vector<KICAD_T> itemTypes = { PCB_FIELD_T, PCB_TEXT_T, PCB_TEXTBOX_T }; + static const std::vector<KICAD_T> itemTypes = { PCB_FIELD_T, PCB_TEXT_T, PCB_TEXTBOX_T, + PCB_TABLECELL_T }; forEachGeometryItem( itemTypes, topLayers | bottomLayers, [&]( BOARD_ITEM* item ) -> bool @@ -125,10 +124,11 @@ bool DRC_TEST_PROVIDER_TEXT_MIRRORING::Run() switch( item->Type() ) { - case PCB_FIELD_T: text = static_cast<PCB_FIELD*>( item ); break; - case PCB_TEXT_T: text = static_cast<PCB_TEXT*>( item ); break; - case PCB_TEXTBOX_T: text = static_cast<PCB_TEXTBOX*>( item ); break; - default: UNIMPLEMENTED_FOR( item->GetClass() ); break; + case PCB_FIELD_T: text = static_cast<PCB_FIELD*>( item ); break; + case PCB_TEXT_T: text = static_cast<PCB_TEXT*>( item ); break; + case PCB_TEXTBOX_T: text = static_cast<PCB_TEXTBOX*>( item ); break; + case PCB_TABLECELL_T: text = static_cast<PCB_TABLECELL*>( item ); break; + default: UNIMPLEMENTED_FOR( item->GetClass() ); break; } if( !text || !text->IsVisible() @@ -138,12 +138,8 @@ bool DRC_TEST_PROVIDER_TEXT_MIRRORING::Run() return true; } - if( !checkTextMirroring( item, text, item->GetLayer(), true, DRCE_MIRRORED_TEXT_ON_FRONT_LAYER ) - || !checkTextMirroring( item, text, item->GetLayer(), false, DRCE_NONMIRRORED_TEXT_ON_BACK_LAYER ) ) - { - return false; - } - + checkTextMirroring( item, text, true, DRCE_MIRRORED_TEXT_ON_FRONT_LAYER ); + checkTextMirroring( item, text, false, DRCE_NONMIRRORED_TEXT_ON_BACK_LAYER ); return true; } );