Lay the foundation for handling selected SCH_ITEMs.

This commit is contained in:
Jeff Young 2019-04-19 16:54:29 +01:00
parent e9c1cd2371
commit 954998ec9a
4 changed files with 113 additions and 160 deletions

View File

@ -90,14 +90,10 @@ bool SCH_ITEM::IsConnected( const wxPoint& aPosition ) const
SCH_CONNECTION* SCH_ITEM::Connection( const SCH_SHEET_PATH& aSheet ) const SCH_CONNECTION* SCH_ITEM::Connection( const SCH_SHEET_PATH& aSheet ) const
{ {
try if( m_connection_map.count( aSheet ) )
{
return m_connection_map.at( aSheet ); return m_connection_map.at( aSheet );
}
catch( ... ) return nullptr;
{
return nullptr;
}
} }

View File

@ -93,27 +93,6 @@ const COLOR4D& SCH_RENDER_SETTINGS::GetColor( const VIEW_ITEM* aItem, int aLayer
return m_layerColors[ aLayer ]; return m_layerColors[ aLayer ];
} }
static const COLOR4D getOverlayColor( const EDA_ITEM* aItem, const COLOR4D& aColor, bool aOnBackgroundLayer )
{
if( aItem->IsMoving() || ( aItem->GetParent() && aItem->GetParent()->IsMoving() ) )
{
return aColor.Brightened( 0.5 );
}
else if( aItem->IsHighlighted() || ( aItem->GetParent() && aItem->GetParent()->IsHighlighted() ) )
{
if ( aOnBackgroundLayer )
{
auto bri = aColor.GetBrightness();
return COLOR4D( bri, 0.0, 0.0, 0.3 );
}
else
{
return COLOR4D( 1.0, 0.3, 0.3, 1.0 );
}
}
return aColor;
}
/** /**
* Used when a LIB_PART is not found in library to draw a dummy shape. * Used when a LIB_PART is not found in library to draw a dummy shape.
@ -244,8 +223,36 @@ bool SCH_PAINTER::isUnitAndConversionShown( const LIB_ITEM* aItem )
} }
void SCH_PAINTER::draw( LIB_PART *aPart, int aLayer, bool aDrawFields, int aUnit, int aConvert, COLOR4D SCH_PAINTER::getRenderColor( const EDA_ITEM* aItem, int aLayer, bool aOnBackgroundLayer )
SCH_PINS* aPinMap ) {
if( aItem->GetState( BRIGHTENED ) )
return m_schSettings.GetLayerColor( LAYER_BRIGHTENED );
const SCH_LINE* line = dynamic_cast<const SCH_LINE*>( aItem );
COLOR4D color = line ? line->GetLineColor() : m_schSettings.GetLayerColor( aLayer );
if( aItem->IsSelected() )
{
return color.Brightened( 0.5 );
}
// JEY TODO: IsMoving checks can go away after seleciton model is fully implemented...
else if( aItem->IsMoving() )
{
return color.Brightened( 0.5 );
}
else if( aItem->IsHighlighted() )
{
if ( aOnBackgroundLayer )
return COLOR4D( color.GetBrightness(), 0.0, 0.0, 0.3 );
else
return COLOR4D( 1.0, 0.3, 0.3, 1.0 );
}
return color;
}
void SCH_PAINTER::draw( LIB_PART *aPart, int aLayer, bool aDrawFields, int aUnit, int aConvert )
{ {
if( !aUnit ) if( !aUnit )
aUnit = m_schSettings.m_ShowUnit; aUnit = m_schSettings.m_ShowUnit;
@ -264,18 +271,7 @@ void SCH_PAINTER::draw( LIB_PART *aPart, int aLayer, bool aDrawFields, int aUnit
if( aConvert && item.GetConvert() && aConvert != item.GetConvert() ) if( aConvert && item.GetConvert() && aConvert != item.GetConvert() )
continue; continue;
if( item.Type() == LIB_PIN_T ) Draw( &item, aLayer );
{
LIB_PIN* libPin = static_cast<LIB_PIN*>( &item );
SCH_PIN* schPin = nullptr;
if( aPinMap && aPinMap->count( libPin ) )
schPin = &aPinMap->at( libPin );
draw( libPin, aLayer, schPin, aPart->IsMoving() );
}
else
Draw( &item, aLayer );
} }
} }
@ -317,7 +313,7 @@ bool SCH_PAINTER::setColors( const LIB_ITEM* aItem, int aLayer )
{ {
if( aLayer == LAYER_DEVICE_BACKGROUND && aItem->GetFillMode() == FILLED_WITH_BG_BODYCOLOR ) if( aLayer == LAYER_DEVICE_BACKGROUND && aItem->GetFillMode() == FILLED_WITH_BG_BODYCOLOR )
{ {
COLOR4D color = getOverlayColor( aItem, m_schSettings.GetLayerColor( LAYER_DEVICE_BACKGROUND ), true ); COLOR4D color = getRenderColor( aItem, LAYER_DEVICE_BACKGROUND, true );
// These actions place the item over others, so allow a modest transparency here // These actions place the item over others, so allow a modest transparency here
if( aItem->IsMoving() || aItem->IsDragging() || aItem->IsResized() ) if( aItem->IsMoving() || aItem->IsDragging() || aItem->IsResized() )
@ -331,7 +327,7 @@ bool SCH_PAINTER::setColors( const LIB_ITEM* aItem, int aLayer )
} }
else if( aLayer == LAYER_DEVICE ) else if( aLayer == LAYER_DEVICE )
{ {
COLOR4D color = getOverlayColor( aItem, m_schSettings.GetLayerColor( LAYER_DEVICE ), false ); COLOR4D color = getRenderColor( aItem, LAYER_DEVICE, false );
// These actions place the item over others, so allow a modest transparency here // These actions place the item over others, so allow a modest transparency here
if( aItem->IsMoving() || aItem->IsDragging() || aItem->IsResized() ) if( aItem->IsMoving() || aItem->IsDragging() || aItem->IsResized() )
@ -427,7 +423,7 @@ void SCH_PAINTER::draw( LIB_FIELD *aField, int aLayer )
if( !isUnitAndConversionShown( aField ) ) if( !isUnitAndConversionShown( aField ) )
return; return;
auto color = getOverlayColor( aField, aField->GetDefaultColor(), false ); auto color = getRenderColor( aField, aLayer, false );
if( !aField->IsVisible() ) if( !aField->IsVisible() )
{ {
@ -469,7 +465,7 @@ void SCH_PAINTER::draw( LIB_TEXT *aText, int aLayer )
if( !isUnitAndConversionShown( aText ) ) if( !isUnitAndConversionShown( aText ) )
return; return;
auto color = getOverlayColor( aText, m_schSettings.GetLayerColor( LAYER_DEVICE ), false ); auto color = getRenderColor( aText, LAYER_DEVICE, false );
if( !aText->IsVisible() ) if( !aText->IsVisible() )
{ {
@ -525,7 +521,7 @@ static void drawPinDanglingSymbol( GAL* aGal, const VECTOR2I& aPos, const COLOR4
} }
void SCH_PAINTER::draw( LIB_PIN *aPin, int aLayer, SCH_PIN* aSchPin, bool isParentMoving ) void SCH_PAINTER::draw( LIB_PIN *aPin, int aLayer )
{ {
if( aLayer != LAYER_DEVICE ) if( aLayer != LAYER_DEVICE )
return; return;
@ -533,17 +529,8 @@ void SCH_PAINTER::draw( LIB_PIN *aPin, int aLayer, SCH_PIN* aSchPin, bool isPare
if( !isUnitAndConversionShown( aPin ) ) if( !isUnitAndConversionShown( aPin ) )
return; return;
bool isMoving = isParentMoving || aPin->IsMoving();
bool isDangling = !aSchPin || aSchPin->IsDangling();
bool isBrightened = aSchPin && aSchPin->IsBrightened();
VECTOR2I pos = mapCoords( aPin->GetPosition() ); VECTOR2I pos = mapCoords( aPin->GetPosition() );
COLOR4D color; COLOR4D color = getRenderColor( aPin, LAYER_PIN, false );
if( isBrightened )
color = m_schSettings.GetLayerColor( LAYER_BRIGHTENED );
else
color = getOverlayColor( aPin, m_schSettings.GetLayerColor( LAYER_PIN ), false );
if( !aPin->IsVisible() ) if( !aPin->IsVisible() )
{ {
@ -553,7 +540,7 @@ void SCH_PAINTER::draw( LIB_PIN *aPin, int aLayer, SCH_PIN* aSchPin, bool isPare
} }
else else
{ {
if( isDangling && aPin->IsPowerConnection() ) if( ( aPin->GetFlags() & IS_DANGLING ) && aPin->IsPowerConnection() )
drawPinDanglingSymbol( m_gal, pos, color ); drawPinDanglingSymbol( m_gal, pos, color );
return; return;
@ -674,10 +661,10 @@ void SCH_PAINTER::draw( LIB_PIN *aPin, int aLayer, SCH_PIN* aSchPin, bool isPare
m_gal->DrawLine( pos + VECTOR2D( 1, -1 ) * TARGET_PIN_RADIUS , m_gal->DrawLine( pos + VECTOR2D( 1, -1 ) * TARGET_PIN_RADIUS ,
pos + VECTOR2D( -1, 1 ) * TARGET_PIN_RADIUS ); pos + VECTOR2D( -1, 1 ) * TARGET_PIN_RADIUS );
isDangling = false; // PIN_NC pin type is always not connected and dangling. aPin->ClearFlags( IS_DANGLING ); // PIN_NC pin type is always not connected and dangling.
} }
if( isDangling && ( aPin->IsVisible() || aPin->IsPowerConnection() ) ) if( ( aPin->GetFlags() & IS_DANGLING ) && ( aPin->IsVisible() || aPin->IsPowerConnection() ) )
drawPinDanglingSymbol( m_gal, pos, color ); drawPinDanglingSymbol( m_gal, pos, color );
// Draw the labels // Draw the labels
@ -704,12 +691,12 @@ void SCH_PAINTER::draw( LIB_PIN *aPin, int aLayer, SCH_PIN* aSchPin, bool isPare
{ {
size [INSIDE] = libEntry->ShowPinNames() ? aPin->GetNameTextSize() : 0; size [INSIDE] = libEntry->ShowPinNames() ? aPin->GetNameTextSize() : 0;
thickness[INSIDE] = nameLineWidth; thickness[INSIDE] = nameLineWidth;
colour [INSIDE] = m_schSettings.GetLayerColor( LAYER_PINNAM ); colour [INSIDE] = getRenderColor( aPin, LAYER_PINNAM, false );
text [INSIDE] = aPin->GetName(); text [INSIDE] = aPin->GetName();
size [ABOVE] = libEntry->ShowPinNumbers() ? aPin->GetNumberTextSize() : 0; size [ABOVE] = libEntry->ShowPinNumbers() ? aPin->GetNumberTextSize() : 0;
thickness[ABOVE] = numLineWidth; thickness[ABOVE] = numLineWidth;
colour [ABOVE] = m_schSettings.GetLayerColor( LAYER_PINNUM ); colour [ABOVE] = getRenderColor( aPin, LAYER_PINNUM, false );
text [ABOVE] = aPin->GetNumber(); text [ABOVE] = aPin->GetNumber();
} }
// Otherwise pin NAMES go above and pin NUMBERS go below // Otherwise pin NAMES go above and pin NUMBERS go below
@ -717,12 +704,12 @@ void SCH_PAINTER::draw( LIB_PIN *aPin, int aLayer, SCH_PIN* aSchPin, bool isPare
{ {
size [ABOVE] = libEntry->ShowPinNames() ? aPin->GetNameTextSize() : 0; size [ABOVE] = libEntry->ShowPinNames() ? aPin->GetNameTextSize() : 0;
thickness[ABOVE] = nameLineWidth; thickness[ABOVE] = nameLineWidth;
colour [ABOVE] = m_schSettings.GetLayerColor( LAYER_PINNAM ); colour [ABOVE] = getRenderColor( aPin, LAYER_PINNAM, false );
text [ABOVE] = aPin->GetName(); text [ABOVE] = aPin->GetName();
size [BELOW] = libEntry->ShowPinNumbers() ? aPin->GetNumberTextSize() : 0; size [BELOW] = libEntry->ShowPinNumbers() ? aPin->GetNumberTextSize() : 0;
thickness[BELOW] = numLineWidth; thickness[BELOW] = numLineWidth;
colour [BELOW] = m_schSettings.GetLayerColor( LAYER_PINNUM ); colour [BELOW] = getRenderColor( aPin, LAYER_PINNUM, false );
text [BELOW] = aPin->GetNumber(); text [BELOW] = aPin->GetNumber();
} }
@ -730,7 +717,7 @@ void SCH_PAINTER::draw( LIB_PIN *aPin, int aLayer, SCH_PIN* aSchPin, bool isPare
{ {
size [OUTSIDE] = std::max( aPin->GetNameTextSize() * 3 / 4, Millimeter2iu( 0.7 ) ); size [OUTSIDE] = std::max( aPin->GetNameTextSize() * 3 / 4, Millimeter2iu( 0.7 ) );
thickness[OUTSIDE] = size[OUTSIDE] / 6; thickness[OUTSIDE] = size[OUTSIDE] / 6;
colour [OUTSIDE] = m_schSettings.GetLayerColor( LAYER_NOTES ); colour [OUTSIDE] = getRenderColor( aPin, LAYER_NOTES, false );
text [OUTSIDE] = aPin->GetElectricalTypeName(); text [OUTSIDE] = aPin->GetElectricalTypeName();
} }
@ -739,11 +726,6 @@ void SCH_PAINTER::draw( LIB_PIN *aPin, int aLayer, SCH_PIN* aSchPin, bool isPare
for( COLOR4D& c : colour ) for( COLOR4D& c : colour )
c = m_schSettings.GetLayerColor( LAYER_HIDDEN ); c = m_schSettings.GetLayerColor( LAYER_HIDDEN );
} }
else if( isMoving )
{
for( COLOR4D& c : colour )
c = getOverlayColor( aPin, c, false );
}
int insideOffset = textOffset; int insideOffset = textOffset;
int outsideOffset = 10; int outsideOffset = 10;
@ -926,16 +908,13 @@ static void drawDanglingSymbol( GAL* aGal, const wxPoint& aPos )
void SCH_PAINTER::draw( SCH_JUNCTION *aJct, int aLayer ) void SCH_PAINTER::draw( SCH_JUNCTION *aJct, int aLayer )
{ {
COLOR4D color = m_schSettings.GetLayerColor( LAYER_JUNCTION ); COLOR4D color;
auto conn = aJct->Connection( *g_CurrentSheet ); auto conn = aJct->Connection( *g_CurrentSheet );
if( conn && conn->IsBus() ) if( conn && conn->IsBus() )
color = m_schSettings.GetLayerColor( LAYER_BUS ); color = getRenderColor( aJct, LAYER_BUS, false );
if( aJct->GetState( BRIGHTENED ) )
color = m_schSettings.GetLayerColor( LAYER_BRIGHTENED );
else else
color = getOverlayColor( aJct, color, false ); color = getRenderColor( aJct, LAYER_JUNCTION, false );
m_gal->SetIsStroke(true); m_gal->SetIsStroke(true);
m_gal->SetIsFill(true); m_gal->SetIsFill(true);
@ -947,12 +926,7 @@ void SCH_PAINTER::draw( SCH_JUNCTION *aJct, int aLayer )
void SCH_PAINTER::draw( SCH_LINE *aLine, int aLayer ) void SCH_PAINTER::draw( SCH_LINE *aLine, int aLayer )
{ {
COLOR4D color = aLine->GetLineColor(); COLOR4D color = getRenderColor( aLine, aLine->GetLayer(), false );
if( aLine->GetState( BRIGHTENED ) )
color = m_schSettings.GetLayerColor( LAYER_BRIGHTENED );
color = getOverlayColor( aLine, color, false );
int width = aLine->GetPenSize(); int width = aLine->GetPenSize();
@ -1020,28 +994,20 @@ void SCH_PAINTER::draw( SCH_LINE *aLine, int aLayer )
void SCH_PAINTER::draw( SCH_TEXT *aText, int aLayer ) void SCH_PAINTER::draw( SCH_TEXT *aText, int aLayer )
{ {
COLOR4D color; SCH_CONNECTION* conn = aText->Connection( *g_CurrentSheet );
COLOR4D color;
switch( aText->Type() ) switch( aText->Type() )
{ {
case SCH_SHEET_PIN_T: color = m_schSettings.GetLayerColor( LAYER_SHEETLABEL ); break; case SCH_SHEET_PIN_T: color = getRenderColor( aText, LAYER_SHEETLABEL, false ); break;
case SCH_HIER_LABEL_T: color = m_schSettings.GetLayerColor( LAYER_HIERLABEL ); break; case SCH_HIER_LABEL_T: color = getRenderColor( aText, LAYER_HIERLABEL, false ); break;
case SCH_GLOBAL_LABEL_T: color = m_schSettings.GetLayerColor( LAYER_GLOBLABEL ); break; case SCH_GLOBAL_LABEL_T: color = getRenderColor( aText, LAYER_GLOBLABEL, false ); break;
case SCH_LABEL_T: color = m_schSettings.GetLayerColor( LAYER_LOCLABEL ); break; case SCH_LABEL_T: color = getRenderColor( aText, LAYER_LOCLABEL, false ); break;
default: color = m_schSettings.GetLayerColor( LAYER_NOTES ); break; default: color = getRenderColor( aText, LAYER_NOTES, false ); break;
} }
auto conn = aText->Connection( *g_CurrentSheet ); if( conn && conn->IsBus() )
color = getRenderColor( aText, LAYER_BUS, false );
if( conn && conn->IsBus() &&
( aText->Type() == SCH_SHEET_PIN_T ||
aText->Type() == SCH_HIER_LABEL_T ) )
color = m_schSettings.GetLayerColor( LAYER_BUS );
if( aText->GetState( BRIGHTENED ) )
color = m_schSettings.GetLayerColor( LAYER_BRIGHTENED );
color = getOverlayColor( aText, color, false );
if( !aText->IsVisible() ) if( !aText->IsVisible() )
{ {
@ -1071,7 +1037,7 @@ void SCH_PAINTER::draw( SCH_TEXT *aText, int aLayer )
} }
static void orientComponent( LIB_PART *part, int orientation ) static void orientPart( LIB_PART* part, int orientation )
{ {
struct ORIENT struct ORIENT
{ {
@ -1123,44 +1089,47 @@ static void orientComponent( LIB_PART *part, int orientation )
void SCH_PAINTER::draw( SCH_COMPONENT *aComp, int aLayer ) void SCH_PAINTER::draw( SCH_COMPONENT *aComp, int aLayer )
{ {
PART_SPTR partSptr = aComp->GetPartRef().lock(); PART_SPTR originalPartSptr = aComp->GetPartRef().lock();
// Use dummy part if the actual couldn't be found (or couldn't be locked). // Use dummy part if the actual couldn't be found (or couldn't be locked).
LIB_PART* part = partSptr ? partSptr.get() : dummy(); LIB_PART* originalPart = originalPartSptr ? originalPartSptr.get() : dummy();
LIB_PINS originalPins;
originalPart->GetPins( originalPins, aComp->GetUnit(), aComp->GetConvert() );
// Copy the source it so we can re-orient and translate it. // Copy the source so we can re-orient and translate it.
std::unique_ptr<LIB_PART> temp( new LIB_PART( *part ) ); LIB_PART tempPart( *originalPart );
LIB_PINS tempPins;
tempPart.GetPins( tempPins, aComp->GetUnit(), aComp->GetConvert() );
// Update the pinMap to be indexed by the temp part's pins tempPart.SetFlags( aComp->GetFlags() );
LIB_PIN* libPin = part->GetNextPin();
LIB_PIN* tempPin = temp->GetNextPin();
SCH_PINS& pinMap = aComp->GetPinMap();
SCH_PINS tempPinMap;
while( libPin && tempPin ) orientPart( &tempPart, aComp->GetOrientation());
for( auto& tempItem : tempPart.GetDrawItems() )
tempItem.Move( tempItem.GetPosition() + (wxPoint) mapCoords( aComp->GetPosition() ) );
// Copy pin info from the component
SCH_PINS pinMap = aComp->GetPinMap();
for( int i = 0; i < originalPins.size() && i < tempPins.size(); ++i )
{ {
if( pinMap.count( libPin ) ) LIB_PIN* originalPin = originalPins[ i ];
tempPinMap.emplace( std::make_pair( tempPin, SCH_PIN( pinMap.at( libPin ) ) ) ); LIB_PIN* tempPin = tempPins[ i ];
libPin = part->GetNextPin( libPin ); if( pinMap.count( originalPin ) )
tempPin = temp->GetNextPin( tempPin ); {
const SCH_PIN& schPin = pinMap.at( originalPin );
tempPin->ClearFlags();
tempPin->SetFlags( schPin.GetFlags() ); // IS_MOVED, SELECTED, HIGHLIGHTED
tempPin->SetStatus( schPin.GetStatus() ); // BRIGHTENED
if( schPin.IsDangling() )
tempPin->SetFlags( IS_DANGLING );
}
} }
if( aComp->IsMoving() ) draw( &tempPart, aLayer, false, aComp->GetUnit(), aComp->GetConvert() );
temp->SetFlags( IS_MOVED );
if( aComp->IsHighlighted() )
temp->SetFlags( HIGHLIGHTED );
orientComponent( temp.get(), aComp->GetOrientation() );
for( auto& item : temp->GetDrawItems() )
{
auto rp = aComp->GetPosition();
auto ip = item.GetPosition();
item.Move( wxPoint( rp.x + ip.x, ip.y - rp.y ) );
}
draw( temp.get(), aLayer, false, aComp->GetUnit(), aComp->GetConvert(), &tempPinMap );
// The fields are SCH_COMPONENT-specific and so don't need to be copied/ // The fields are SCH_COMPONENT-specific and so don't need to be copied/
// oriented/translated. // oriented/translated.
@ -1182,13 +1151,11 @@ void SCH_PAINTER::draw( SCH_FIELD *aField, int aLayer )
switch( aField->GetId() ) switch( aField->GetId() )
{ {
case REFERENCE: color = m_schSettings.GetLayerColor( LAYER_REFERENCEPART ); break; case REFERENCE: color = getRenderColor( aField, LAYER_REFERENCEPART, false ); break;
case VALUE: color = m_schSettings.GetLayerColor( LAYER_VALUEPART ); break; case VALUE: color = getRenderColor( aField, LAYER_VALUEPART, false ); break;
default: color = m_schSettings.GetLayerColor( LAYER_FIELDS ); break; default: color = getRenderColor( aField, LAYER_FIELDS, false ); break;
} }
color = getOverlayColor( aField, color, false );
if( !aField->IsVisible() ) if( !aField->IsVisible() )
{ {
if( m_schSettings.m_ShowHiddenText ) if( m_schSettings.m_ShowHiddenText )
@ -1250,15 +1217,10 @@ void SCH_PAINTER::draw( SCH_FIELD *aField, int aLayer )
void SCH_PAINTER::draw( SCH_GLOBALLABEL *aLabel, int aLayer ) void SCH_PAINTER::draw( SCH_GLOBALLABEL *aLabel, int aLayer )
{ {
auto color = m_schSettings.GetLayerColor( LAYER_GLOBLABEL ); auto color = getRenderColor( aLabel, LAYER_GLOBLABEL, false );
auto back_color = m_schSettings.GetLayerColor( LAYER_SCHEMATIC_BACKGROUND ); auto back_color = m_schSettings.GetLayerColor( LAYER_SCHEMATIC_BACKGROUND );
int width = aLabel->GetThickness() ? aLabel->GetThickness() : GetDefaultLineThickness(); int width = aLabel->GetThickness() ? aLabel->GetThickness() : GetDefaultLineThickness();
if( aLabel->GetState( BRIGHTENED ) )
color = m_schSettings.GetLayerColor( LAYER_BRIGHTENED );
color = getOverlayColor( aLabel, color, false );
std::vector<wxPoint> pts; std::vector<wxPoint> pts;
std::deque<VECTOR2D> pts2; std::deque<VECTOR2D> pts2;
@ -1280,18 +1242,14 @@ void SCH_PAINTER::draw( SCH_GLOBALLABEL *aLabel, int aLayer )
void SCH_PAINTER::draw( SCH_HIERLABEL *aLabel, int aLayer ) void SCH_PAINTER::draw( SCH_HIERLABEL *aLabel, int aLayer )
{ {
auto color = m_schSettings.GetLayerColor( LAYER_SHEETLABEL ); auto color = getRenderColor( aLabel, LAYER_SHEETLABEL, false );
auto back_color = m_schSettings.GetLayerColor( LAYER_SCHEMATIC_BACKGROUND ); auto back_color = m_schSettings.GetLayerColor( LAYER_SCHEMATIC_BACKGROUND );
int width = aLabel->GetThickness() ? aLabel->GetThickness() : GetDefaultLineThickness(); int width = aLabel->GetThickness() ? aLabel->GetThickness() : GetDefaultLineThickness();
auto conn = aLabel->Connection( *g_CurrentSheet ); auto conn = aLabel->Connection( *g_CurrentSheet );
if( conn && conn->IsBus() ) if( conn && conn->IsBus() )
color = m_schSettings.GetLayerColor( LAYER_BUS ); color = getRenderColor( aLabel, LAYER_BUS, false );
if( aLabel->GetState( BRIGHTENED ) )
color = m_schSettings.GetLayerColor( LAYER_BRIGHTENED );
color = getOverlayColor( aLabel, color, false );
std::vector<wxPoint> pts; std::vector<wxPoint> pts;
std::deque<VECTOR2D> pts2; std::deque<VECTOR2D> pts2;
@ -1411,7 +1369,9 @@ void SCH_PAINTER::draw( SCH_NO_CONNECT *aNC, int aLayer )
int delta = aNC->GetSize() / 2; int delta = aNC->GetSize() / 2;
int width = GetDefaultLineThickness(); int width = GetDefaultLineThickness();
m_gal->SetStrokeColor( m_schSettings.GetLayerColor( LAYER_NOCONNECT ) ); COLOR4D color = getRenderColor( aNC, LAYER_NOCONNECT, false );
m_gal->SetStrokeColor( color );
m_gal->SetIsStroke( true ); m_gal->SetIsStroke( true );
m_gal->SetIsFill( false ); m_gal->SetIsFill( false );
m_gal->SetLineWidth( width ); m_gal->SetLineWidth( width );
@ -1425,14 +1385,9 @@ void SCH_PAINTER::draw( SCH_NO_CONNECT *aNC, int aLayer )
void SCH_PAINTER::draw( SCH_BUS_ENTRY_BASE *aEntry, int aLayer ) void SCH_PAINTER::draw( SCH_BUS_ENTRY_BASE *aEntry, int aLayer )
{ {
COLOR4D color = aEntry->Type() == SCH_BUS_BUS_ENTRY_T ? COLOR4D color = aEntry->Type() == SCH_BUS_BUS_ENTRY_T
m_schSettings.GetLayerColor( LAYER_BUS ) ? getRenderColor( aEntry, LAYER_BUS, false )
: m_schSettings.GetLayerColor( LAYER_WIRE ); : getRenderColor( aEntry, LAYER_WIRE, false );
if( aEntry->GetState( BRIGHTENED ) )
color = m_schSettings.GetLayerColor( LAYER_BRIGHTENED );
color = getOverlayColor( aEntry, color, false );
m_gal->SetStrokeColor( color ); m_gal->SetStrokeColor( color );
m_gal->SetIsStroke( true ); m_gal->SetIsStroke( true );

View File

@ -135,11 +135,10 @@ public:
private: private:
void draw( LIB_RECTANGLE* aRect, int aLayer ); void draw( LIB_RECTANGLE* aRect, int aLayer );
void draw( LIB_PIN* aPin, int aLayer, SCH_PIN* aSchPin = nullptr, bool isParentMoving = false ); void draw( LIB_PIN* aPin, int aLayer );
void draw( LIB_CIRCLE* aCircle, int aLayer ); void draw( LIB_CIRCLE* aCircle, int aLayer );
void draw( LIB_ITEM *, int aLayer ); void draw( LIB_ITEM *, int aLayer );
void draw( LIB_PART* aPart, int, bool aDrawFields = true, int aUnit = 0, int aConvert = 0, void draw( LIB_PART* aPart, int, bool aDrawFields = true, int aUnit = 0, int aConvert = 0 );
SCH_PINS* aPinMap = nullptr );
void draw( LIB_ALIAS* aAlias, int aLayer ); void draw( LIB_ALIAS* aAlias, int aLayer );
void draw( LIB_ARC* aArc, int aLayer ); void draw( LIB_ARC* aArc, int aLayer );
void draw( LIB_POLYLINE* aLine, int aLayer ); void draw( LIB_POLYLINE* aLine, int aLayer );
@ -150,7 +149,6 @@ private:
void draw( SCH_JUNCTION* aJct, int aLayer ); void draw( SCH_JUNCTION* aJct, int aLayer );
void draw( SCH_FIELD* aField, int aLayer ); void draw( SCH_FIELD* aField, int aLayer );
void draw( SCH_TEXT* aText, int aLayer ); void draw( SCH_TEXT* aText, int aLayer );
void draw( SCH_LABEL* aLabel, int aLayer );
void draw( SCH_HIERLABEL* aLabel, int aLayer ); void draw( SCH_HIERLABEL* aLabel, int aLayer );
void draw( SCH_GLOBALLABEL* aLabel, int aLayer ); void draw( SCH_GLOBALLABEL* aLabel, int aLayer );
void draw( SCH_SHEET* aSheet, int aLayer ); void draw( SCH_SHEET* aSheet, int aLayer );
@ -162,6 +160,8 @@ private:
bool isUnitAndConversionShown( const LIB_ITEM* aItem ); bool isUnitAndConversionShown( const LIB_ITEM* aItem );
COLOR4D getRenderColor( const EDA_ITEM* aItem, int aLayer, bool aOnBackgroundLayer );
bool setColors( const LIB_ITEM* aItem, int aLayer ); bool setColors( const LIB_ITEM* aItem, int aLayer );
void triLine ( const VECTOR2D &a, const VECTOR2D &b, const VECTOR2D &c ); void triLine ( const VECTOR2D &a, const VECTOR2D &b, const VECTOR2D &c );

View File

@ -141,6 +141,8 @@ typedef const INSPECTOR_FUNC& INSPECTOR; /// std::function passed to nested u
///< (applies to segments only) ///< (applies to segments only)
#define UR_TRANSIENT (1 << 28) ///< indicates the item is owned by the undo/redo stack #define UR_TRANSIENT (1 << 28) ///< indicates the item is owned by the undo/redo stack
#define IS_DANGLING (1 << 29) ///< indicates a pin is dangling
#define EDA_ITEM_ALL_FLAGS -1 #define EDA_ITEM_ALL_FLAGS -1