Skip to content

Commit

Permalink
Fix a few issues when changing a color in render, in GAL mode.
Browse files Browse the repository at this point in the history
Now colors of ratsnest, vias, not plated holes and anchors can be set.
However not plated holes still have a color issue.
  • Loading branch information
jp-charras committed Apr 5, 2017
1 parent 23a8741 commit bf21640
Show file tree
Hide file tree
Showing 4 changed files with 55 additions and 36 deletions.
18 changes: 9 additions & 9 deletions include/layers_id_colors_and_visibility.h
Original file line number Diff line number Diff line change
Expand Up @@ -167,16 +167,16 @@ enum GAL_LAYER_ID: int
GAL_LAYER_ID_START = NETNAMES_LAYER_ID_END,

LAYER_VIAS = GAL_LAYER_ID_START,
LAYER_VIA_MICROVIA,
LAYER_VIA_BBLIND,
LAYER_VIA_THROUGH,
LAYER_NON_PLATED,
LAYER_VIA_MICROVIA, ///< to draw micro vias
LAYER_VIA_BBLIND, ///< to draw blind/buried vias
LAYER_VIA_THROUGH, ///< to draw usual through hole vias
LAYER_NON_PLATED, ///< handle color for not plated holes
LAYER_MOD_TEXT_FR,
LAYER_MOD_TEXT_BK,
LAYER_MOD_TEXT_INVISIBLE, ///< text marked as invisible
LAYER_ANCHOR,
LAYER_PAD_FR,
LAYER_PAD_BK,
LAYER_ANCHOR, ///< anchor of items having an anchor point (texts, footprints)
LAYER_PAD_FR, ///< smd pads, front layer
LAYER_PAD_BK, ///< smd pads, back layer
LAYER_RATSNEST,
LAYER_GRID,
LAYER_GRID_AXES,
Expand All @@ -187,8 +187,8 @@ enum GAL_LAYER_ID: int
LAYER_MOD_REFERENCES, ///< show modules references (when texts are visibles)
LAYER_TRACKS,
LAYER_PADS, ///< multilayer pads, usually with holes
LAYER_PADS_HOLES,
LAYER_VIAS_HOLES,
LAYER_PADS_HOLES, ///< to draw pad holes (plated or not plated)
LAYER_VIAS_HOLES, ///< to draw via holes (pad holes do not use this layer)
LAYER_DRC, ///< drc markers
LAYER_WORKSHEET, ///< worksheet frame
LAYER_GP_OVERLAY, ///< general purpose overlay
Expand Down
13 changes: 8 additions & 5 deletions pcbnew/class_pcb_layer_widget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ const LAYER_WIDGET::ROW PCB_LAYER_WIDGET::s_render_rows[] = {
RR( _( "Through Via" ), LAYER_VIA_THROUGH, WHITE, _( "Show through vias" ) ),
RR( _( "Bl/Buried Via" ), LAYER_VIA_BBLIND, WHITE, _( "Show blind or buried vias" ) ),
RR( _( "Micro Via" ), LAYER_VIA_MICROVIA, WHITE, _( "Show micro vias") ),
RR( _( "Non Plated" ), LAYER_NON_PLATED, WHITE, _( "Show non plated holes") ),
RR( _( "Non Plated Holes" ),LAYER_NON_PLATED, WHITE, _( "Show non plated holes in specific color") ),
RR( _( "Ratsnest" ), LAYER_RATSNEST, WHITE, _( "Show unconnected nets as a ratsnest") ),

RR( _( "Pads Front" ), LAYER_PAD_FR, WHITE, _( "Show footprint pads on board's front" ) ),
Expand Down Expand Up @@ -518,14 +518,17 @@ void PCB_LAYER_WIDGET::OnLayerVisible( int aLayer, bool isVisible, bool isFinal
void PCB_LAYER_WIDGET::OnRenderColorChange( int aId, COLOR4D aColor )
{
wxASSERT( aId > GAL_LAYER_ID_START && aId < GAL_LAYER_ID_END );
myframe->GetBoard()->SetVisibleElementColor( static_cast<GAL_LAYER_ID>( aId ), aColor );

BOARD* brd = myframe->GetBoard();
brd->SetVisibleElementColor( static_cast<GAL_LAYER_ID>( aId ), aColor );

EDA_DRAW_PANEL_GAL* galCanvas = myframe->GetGalCanvas();

if( galCanvas && myframe->IsGalCanvasActive() )
{
KIGFX::VIEW* view = galCanvas->GetView();
view->GetPainter()->GetSettings()->ImportLegacyColors( myframe->GetBoard()->GetColorsSettings() );
view->GetPainter()->GetSettings()->ImportLegacyColors( brd->GetColorsSettings() );
view->MarkTargetDirty( KIGFX::TARGET_NONCACHED ); // useful to update rastnest
view->UpdateLayerColor( aId );
galCanvas->Refresh();
}
Expand Down Expand Up @@ -560,8 +563,8 @@ void PCB_LAYER_WIDGET::OnRenderEnable( int aId, bool isEnabled )

galCanvas->Refresh();
}
else
myframe->GetCanvas()->Refresh();

myframe->GetCanvas()->Refresh();
}

//-----</LAYER_WIDGET callbacks>------------------------------------------
7 changes: 4 additions & 3 deletions pcbnew/pcb_draw_panel_gal.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ const LAYER_NUM GAL_LAYER_ORDER[] =
LAYER_MOD_REFERENCES, LAYER_MOD_VALUES,

LAYER_RATSNEST, LAYER_ANCHOR,
LAYER_VIAS_HOLES, LAYER_PADS_HOLES,
LAYER_VIAS_HOLES, LAYER_PADS_HOLES, LAYER_NON_PLATED,
LAYER_VIA_THROUGH, LAYER_VIA_BBLIND,
LAYER_VIA_MICROVIA, LAYER_PADS,

Expand Down Expand Up @@ -195,7 +195,7 @@ void PCB_DRAW_PANEL_GAL::SetHighContrastLayer( PCB_LAYER_ID aLayer )
LAYER_NUM layers[] = {
GetNetnameLayer( aLayer ), LAYER_VIA_THROUGH,
LAYER_VIAS_HOLES, LAYER_PADS,
LAYER_PADS_HOLES, LAYER_PADS_NETNAMES,
LAYER_PADS_HOLES, LAYER_NON_PLATED, LAYER_PADS_NETNAMES,
LAYER_GP_OVERLAY, LAYER_RATSNEST
};

Expand Down Expand Up @@ -231,7 +231,7 @@ void PCB_DRAW_PANEL_GAL::SetTopLayer( PCB_LAYER_ID aLayer )
const LAYER_NUM layers[] = {
LAYER_VIA_THROUGH,
LAYER_VIAS_HOLES, LAYER_PADS,
LAYER_PADS_HOLES, LAYER_PADS_NETNAMES,
LAYER_PADS_HOLES, LAYER_NON_PLATED, LAYER_PADS_NETNAMES,
LAYER_GP_OVERLAY, LAYER_RATSNEST, Dwgs_User,
LAYER_DRC
};
Expand Down Expand Up @@ -401,6 +401,7 @@ void PCB_DRAW_PANEL_GAL::setDefaultLayerDeps()
// Some more required layers settings
m_view->SetRequired( LAYER_VIAS_HOLES, LAYER_VIA_THROUGH );
m_view->SetRequired( LAYER_PADS_HOLES, LAYER_PADS );
m_view->SetRequired( LAYER_NON_PLATED, LAYER_PADS );
m_view->SetRequired( LAYER_PADS_NETNAMES, LAYER_PADS );

// Front modules
Expand Down
53 changes: 34 additions & 19 deletions pcbnew/pcb_painter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -65,32 +65,34 @@ PCB_RENDER_SETTINGS::PCB_RENDER_SETTINGS()

void PCB_RENDER_SETTINGS::ImportLegacyColors( const COLORS_DESIGN_SETTINGS* aSettings )
{
// Init board layers colors:
for( int i = 0; i < PCB_LAYER_ID_COUNT; i++ )
{
m_layerColors[i] = aSettings->GetLayerColor( i );
m_layerColors[i].a = 0.8; // slightly transparent
}

// Init specific graphic layers colors:
for( int i = GAL_LAYER_ID_START; i < GAL_LAYER_ID_END; i++ )
m_layerColors[i] = aSettings->GetItemColor( i );

m_layerColors[LAYER_MOD_TEXT_FR] = m_layerColors[F_SilkS];
m_layerColors[LAYER_MOD_TEXT_BK] = m_layerColors[B_SilkS];

// Default colors for specific layers
m_layerColors[LAYER_VIAS_HOLES] = COLOR4D( 0.5, 0.4, 0.0, 0.8 );
m_layerColors[LAYER_PADS_HOLES] = COLOR4D( 0.0, 0.5, 0.5, 0.8 );
m_layerColors[LAYER_VIA_THROUGH] = COLOR4D( 0.6, 0.6, 0.6, 0.8 );
m_layerColors[LAYER_VIA_BBLIND] = COLOR4D( 0.6, 0.6, 0.6, 0.8 );
m_layerColors[LAYER_VIA_MICROVIA] = COLOR4D( 0.4, 0.4, 0.8, 0.8 );
m_layerColors[LAYER_PADS] = COLOR4D( 0.6, 0.6, 0.6, 0.8 );
m_layerColors[LAYER_PADS_NETNAMES] = COLOR4D( 1.0, 1.0, 1.0, 0.9 );
m_layerColors[LAYER_PAD_FR_NETNAMES] = COLOR4D( 1.0, 1.0, 1.0, 0.9 );
m_layerColors[LAYER_PAD_BK_NETNAMES] = COLOR4D( 1.0, 1.0, 1.0, 0.9 );
m_layerColors[LAYER_ANCHOR] = COLOR4D( 0.3, 0.3, 1.0, 0.9 );
m_layerColors[LAYER_RATSNEST] = COLOR4D( 0.4, 0.4, 0.4, 0.8 );
m_layerColors[LAYER_WORKSHEET] = COLOR4D( 0.5, 0.0, 0.0, 0.8 );
m_layerColors[LAYER_DRC] = COLOR4D( 1.0, 0.0, 0.0, 0.8 );
// Default colors for specific layers (not really board layers).
m_layerColors[LAYER_VIAS_HOLES] = COLOR4D( 0.5, 0.4, 0.0, 0.8 );
m_layerColors[LAYER_PADS_HOLES] = COLOR4D( 0.0, 0.0, 0.0, 1.0 );
m_layerColors[LAYER_PADS] = COLOR4D( 0.6, 0.6, 0.0, 0.8 );
m_layerColors[LAYER_PADS_NETNAMES] = COLOR4D( 1.0, 1.0, 1.0, 0.9 );
m_layerColors[LAYER_PAD_FR_NETNAMES] = COLOR4D( 1.0, 1.0, 1.0, 0.9 );
m_layerColors[LAYER_PAD_BK_NETNAMES] = COLOR4D( 1.0, 1.0, 1.0, 0.9 );
m_layerColors[LAYER_WORKSHEET] = COLOR4D( 0.5, 0.0, 0.0, 0.8 );
m_layerColors[LAYER_DRC] = COLOR4D( 1.0, 0.0, 0.0, 0.8 );

// LAYER_NON_PLATED, LAYER_ANCHOR],LAYER_RATSNEST,
// LAYER_VIA_THROUGH], LAYER_VIA_BBLIND, LAYER_VIA_MICROVIA
// are initialized from aSettings

// These colors are not actually used. Set just in case...
m_layerColors[LAYER_MOD_TEXT_FR] = m_layerColors[F_SilkS];
m_layerColors[LAYER_MOD_TEXT_BK] = m_layerColors[B_SilkS];

// Make ratsnest lines slightly transparent
m_layerColors[LAYER_RATSNEST].a = 0.8;
Expand Down Expand Up @@ -599,7 +601,20 @@ void PCB_PAINTER::draw( const D_PAD* aPad, int aLayer )
}

// Pad drawing
const COLOR4D& color = m_pcbSettings.GetColor( aPad, aLayer );
COLOR4D color = m_pcbSettings.GetColor( aPad, aLayer );

// Pad holes color is specific
if( aLayer == LAYER_PADS_HOLES || aLayer == LAYER_NON_PLATED )
{
// Hole color is the background color for plated holes, but a specific color
// for not plated holes (LAYER_NON_PLATED color layer )
if( aPad->GetAttribute() == PAD_ATTRIB_HOLE_NOT_PLATED /*&&
brd->IsElementVisible( LAYER_NON_PLATED )*/ )
color = m_pcbSettings.GetColor( nullptr, LAYER_NON_PLATED );
else
color = m_pcbSettings.GetBackgroundColor();
}

VECTOR2D size;

if( m_pcbSettings.m_sketchMode[LAYER_PADS] )
Expand All @@ -623,7 +638,7 @@ void PCB_PAINTER::draw( const D_PAD* aPad, int aLayer )
m_gal->Rotate( -aPad->GetOrientationRadians() );

// Choose drawing settings depending on if we are drawing a pad itself or a hole
if( aLayer == LAYER_PADS_HOLES )
if( aLayer == LAYER_PADS_HOLES || aLayer == LAYER_NON_PLATED )
{
// Drawing hole: has same shape as PAD_CIRCLE or PAD_OVAL
size = VECTOR2D( aPad->GetDrillSize() ) / 2.0;
Expand Down

0 comments on commit bf21640

Please sign in to comment.