Loading common/view/view.cpp +4 −3 Original line number Diff line number Diff line Loading @@ -370,7 +370,7 @@ struct VIEW::updateItemsColor void operator()( VIEW_ITEM* aItem ) { // Obtain the color that should be used for coloring the item const COLOR4D color = painter->GetColor( aItem, layer ); const COLOR4D color = painter->GetSettings()->GetColor( aItem, layer ); int group = aItem->getGroup( layer ); if( group >= 0 ) Loading Loading @@ -672,7 +672,8 @@ struct VIEW::recacheLayer { int group = gal->BeginGroup(); aItem->setGroup( layer, group ); view->m_painter->Draw( static_cast<EDA_ITEM*>( aItem ), layer ); if( !view->m_painter->Draw( aItem, layer ) ) aItem->ViewDraw( layer, gal, BOX2I() ); // Alternative drawing method gal->EndGroup(); } else Loading Loading @@ -836,7 +837,7 @@ void VIEW::updateItemColor( VIEW_ITEM* aItem, int aLayer ) wxASSERT( (unsigned) aLayer < m_layers.size() ); // Obtain the color that should be used for coloring the item on the specific layerId const COLOR4D color = m_painter->GetColor( aItem, aLayer ); const COLOR4D color = m_painter->GetSettings()->GetColor( aItem, aLayer ); int group = aItem->getGroup( aLayer ); // Change the color, only if it has group assigned Loading include/painter.h +10 −10 Original line number Diff line number Diff line Loading @@ -113,6 +113,16 @@ public: m_hiContrastEnabled = aEnabled; } /** * Function GetColor * Returns the color that should be used to draw the specific VIEW_ITEM on the specific layer * using currently used render settings. * @param aItem is the VIEW_ITEM. * @param aLayer is the layer. * @return The color. */ virtual const COLOR4D& GetColor( const VIEW_ITEM* aItem, int aLayer ) const = 0; protected: /** * Function update Loading Loading @@ -217,16 +227,6 @@ public: */ virtual void DrawBrightened( const VIEW_ITEM* aItem ); /** * Function GetColor * Returns the color that should be used to draw the specific VIEW_ITEM on the specific layer * using currently used render settings. * @param aItem is the VIEW_ITEM. * @param aLayer is the layer. * @return The color. */ virtual const COLOR4D& GetColor( const VIEW_ITEM* aItem, int aLayer ) = 0; protected: /// Instance of graphic abstraction layer that gives an interface to call /// commands used to draw (eg. DrawLine, DrawCircle, etc.) Loading pcbnew/pcb_painter.cpp +45 −45 Original line number Diff line number Diff line Loading @@ -137,29 +137,7 @@ void PCB_RENDER_SETTINGS::LoadDisplayOptions( const DISPLAY_OPTIONS& aOptions ) } void PCB_RENDER_SETTINGS::update() { // Calculate darkened/highlighted variants of layer colors for( int i = 0; i < TOTAL_LAYER_COUNT; i++ ) { m_layerColors[i].a = m_layerOpacity; m_layerColorsHi[i] = m_layerColors[i].Brightened( m_highlightFactor ); m_layerColorsDark[i] = m_layerColors[i].Darkened( 1.0 - m_highlightFactor ); m_layerColorsSel[i] = m_layerColors[i].Brightened( m_selectFactor ); } m_hiContrastColor = COLOR4D( m_hiContrastFactor, m_hiContrastFactor, m_hiContrastFactor, m_layerOpacity ); } PCB_PAINTER::PCB_PAINTER( GAL* aGal ) : PAINTER( aGal ) { } const COLOR4D& PCB_PAINTER::GetColor( const VIEW_ITEM* aItem, int aLayer ) const COLOR4D& PCB_RENDER_SETTINGS::GetColor( const VIEW_ITEM* aItem, int aLayer ) const { int netCode = -1; Loading @@ -167,7 +145,7 @@ const COLOR4D& PCB_PAINTER::GetColor( const VIEW_ITEM* aItem, int aLayer ) { if( static_cast<const EDA_ITEM*>( aItem )->IsSelected() ) { return m_pcbSettings->m_layerColorsSel[aLayer]; return m_layerColorsSel[aLayer]; } // Try to obtain the netcode for the item Loading @@ -177,20 +155,42 @@ const COLOR4D& PCB_PAINTER::GetColor( const VIEW_ITEM* aItem, int aLayer ) } // Return grayish color for non-highlighted layers in the high contrast mode if( m_pcbSettings->m_hiContrastEnabled && m_pcbSettings->m_activeLayers.count( aLayer ) == 0 ) return m_pcbSettings->m_hiContrastColor; if( m_hiContrastEnabled && m_activeLayers.count( aLayer ) == 0 ) return m_hiContrastColor; // Single net highlight mode if( m_pcbSettings->m_highlightEnabled ) if( m_highlightEnabled ) { if( netCode == m_pcbSettings->m_highlightNetcode ) return m_pcbSettings->m_layerColorsHi[aLayer]; if( netCode == m_highlightNetcode ) return m_layerColorsHi[aLayer]; else return m_pcbSettings->m_layerColorsDark[aLayer]; return m_layerColorsDark[aLayer]; } // No special modificators enabled return m_pcbSettings->m_layerColors[aLayer]; return m_layerColors[aLayer]; } void PCB_RENDER_SETTINGS::update() { // Calculate darkened/highlighted variants of layer colors for( int i = 0; i < TOTAL_LAYER_COUNT; i++ ) { m_layerColors[i].a = m_layerOpacity; m_layerColorsHi[i] = m_layerColors[i].Brightened( m_highlightFactor ); m_layerColorsDark[i] = m_layerColors[i].Darkened( 1.0 - m_highlightFactor ); m_layerColorsSel[i] = m_layerColors[i].Brightened( m_selectFactor ); } m_hiContrastColor = COLOR4D( m_hiContrastFactor, m_hiContrastFactor, m_hiContrastFactor, m_layerOpacity ); } PCB_PAINTER::PCB_PAINTER( GAL* aGal ) : PAINTER( aGal ) { } Loading Loading @@ -280,8 +280,8 @@ void PCB_PAINTER::draw( const TRACK* aTrack, int aLayer ) double textSize = std::min( static_cast<double>( width ), length / netName.length() ); // Set a proper color for the label color = GetColor( aTrack, aTrack->GetLayer() ); COLOR4D labelColor = GetColor( NULL, aLayer ); color = m_pcbSettings->GetColor( aTrack, aTrack->GetLayer() ); COLOR4D labelColor = m_pcbSettings->GetColor( NULL, aLayer ); if( color.GetBrightness() > 0.5 ) m_gal->SetStrokeColor( labelColor.Inverted() ); Loading @@ -301,7 +301,7 @@ void PCB_PAINTER::draw( const TRACK* aTrack, int aLayer ) else if( IsCopperLayer( aLayer )) { // Draw a regular track color = GetColor( aTrack, aLayer ); color = m_pcbSettings->GetColor( aTrack, aLayer ); m_gal->SetStrokeColor( color ); m_gal->SetIsStroke( true ); Loading Loading @@ -340,7 +340,7 @@ void PCB_PAINTER::draw( const SEGVIA* aVia, int aLayer ) else return; color = GetColor( aVia, aLayer ); color = m_pcbSettings->GetColor( aVia, aLayer ); if( m_pcbSettings->m_sketchModeSelect[VIAS_VISIBLE] ) { Loading Loading @@ -419,8 +419,8 @@ void PCB_PAINTER::draw( const D_PAD* aPad, int aLayer ) m_gal->SetMirrored( false ); // Set a proper color for the label color = GetColor( aPad, aPad->GetLayer() ); COLOR4D labelColor = GetColor( NULL, aLayer ); color = m_pcbSettings->GetColor( aPad, aPad->GetLayer() ); COLOR4D labelColor = m_pcbSettings->GetColor( NULL, aLayer ); if( color.GetBrightness() > 0.5 ) m_gal->SetStrokeColor( labelColor.Inverted() ); Loading Loading @@ -466,7 +466,7 @@ void PCB_PAINTER::draw( const D_PAD* aPad, int aLayer ) } // Pad drawing color = GetColor( aPad, aLayer ); color = m_pcbSettings->GetColor( aPad, aLayer ); if( m_pcbSettings->m_sketchModeSelect[PADS_VISIBLE] ) { // Outline mode Loading Loading @@ -619,7 +619,7 @@ void PCB_PAINTER::draw( const D_PAD* aPad, int aLayer ) void PCB_PAINTER::draw( const DRAWSEGMENT* aSegment ) { COLOR4D color = GetColor( NULL, aSegment->GetLayer() ); COLOR4D color = m_pcbSettings->GetColor( NULL, aSegment->GetLayer() ); m_gal->SetIsFill( false ); m_gal->SetIsStroke( true ); Loading Loading @@ -708,7 +708,7 @@ void PCB_PAINTER::draw( const TEXTE_PCB* aText, int aLayer ) if( aText->GetText().Length() == 0 ) return; COLOR4D strokeColor = GetColor( NULL, aText->GetLayer() ); COLOR4D strokeColor = m_pcbSettings->GetColor( NULL, aText->GetLayer() ); VECTOR2D position( aText->GetTextPosition().x, aText->GetTextPosition().y ); double orientation = aText->GetOrientation() * M_PI / 1800.0; Loading @@ -732,7 +732,7 @@ void PCB_PAINTER::draw( const TEXTE_MODULE* aText, int aLayer ) if( aText->GetLength() == 0 ) return; COLOR4D strokeColor = GetColor( NULL, aLayer ); COLOR4D strokeColor = m_pcbSettings->GetColor( NULL, aLayer ); VECTOR2D position( aText->GetTextPosition().x, aText->GetTextPosition().y ); double orientation = aText->GetDrawRotation() * M_PI / 1800.0; Loading @@ -747,7 +747,7 @@ void PCB_PAINTER::draw( const TEXTE_MODULE* aText, int aLayer ) void PCB_PAINTER::draw( const ZONE_CONTAINER* aZone ) { COLOR4D color = GetColor( NULL, aZone->GetLayer() ); COLOR4D color = m_pcbSettings->GetColor( NULL, aZone->GetLayer() ); std::deque<VECTOR2D> corners; PCB_RENDER_SETTINGS::DisplayZonesMode displayMode = m_pcbSettings->m_displayZoneMode; Loading Loading @@ -824,7 +824,7 @@ void PCB_PAINTER::draw( const DIMENSION* aDimension, int aLayer ) else { int layer = aDimension->GetLayer(); COLOR4D strokeColor = GetColor( NULL, layer ); COLOR4D strokeColor = m_pcbSettings->GetColor( NULL, layer ); m_gal->SetStrokeColor( strokeColor ); m_gal->SetIsFill( false ); Loading @@ -850,7 +850,7 @@ void PCB_PAINTER::draw( const DIMENSION* aDimension, int aLayer ) void PCB_PAINTER::draw( const PCB_TARGET* aTarget ) { COLOR4D strokeColor = GetColor( NULL, aTarget->GetLayer() ); COLOR4D strokeColor = m_pcbSettings->GetColor( NULL, aTarget->GetLayer() ); VECTOR2D position( aTarget->GetPosition() ); double size, radius; Loading pcbnew/pcb_painter.h +3 −3 Original line number Diff line number Diff line Loading @@ -85,6 +85,9 @@ public: */ void LoadDisplayOptions( const DISPLAY_OPTIONS& aOptions ); /// @copydoc RENDER_SETTINGS::GetColor() virtual const COLOR4D& GetColor( const VIEW_ITEM* aItem, int aLayer ) const; protected: /// @copydoc RENDER_SETTINGS::Update() void update(); Loading Loading @@ -130,9 +133,6 @@ public: m_pcbSettings = dynamic_cast<PCB_RENDER_SETTINGS*>( aSettings ); } /// @copydoc PAINTER::GetColor() virtual const COLOR4D& GetColor( const VIEW_ITEM* aItem, int aLayer ); protected: PCB_RENDER_SETTINGS* m_pcbSettings; Loading Loading
common/view/view.cpp +4 −3 Original line number Diff line number Diff line Loading @@ -370,7 +370,7 @@ struct VIEW::updateItemsColor void operator()( VIEW_ITEM* aItem ) { // Obtain the color that should be used for coloring the item const COLOR4D color = painter->GetColor( aItem, layer ); const COLOR4D color = painter->GetSettings()->GetColor( aItem, layer ); int group = aItem->getGroup( layer ); if( group >= 0 ) Loading Loading @@ -672,7 +672,8 @@ struct VIEW::recacheLayer { int group = gal->BeginGroup(); aItem->setGroup( layer, group ); view->m_painter->Draw( static_cast<EDA_ITEM*>( aItem ), layer ); if( !view->m_painter->Draw( aItem, layer ) ) aItem->ViewDraw( layer, gal, BOX2I() ); // Alternative drawing method gal->EndGroup(); } else Loading Loading @@ -836,7 +837,7 @@ void VIEW::updateItemColor( VIEW_ITEM* aItem, int aLayer ) wxASSERT( (unsigned) aLayer < m_layers.size() ); // Obtain the color that should be used for coloring the item on the specific layerId const COLOR4D color = m_painter->GetColor( aItem, aLayer ); const COLOR4D color = m_painter->GetSettings()->GetColor( aItem, aLayer ); int group = aItem->getGroup( aLayer ); // Change the color, only if it has group assigned Loading
include/painter.h +10 −10 Original line number Diff line number Diff line Loading @@ -113,6 +113,16 @@ public: m_hiContrastEnabled = aEnabled; } /** * Function GetColor * Returns the color that should be used to draw the specific VIEW_ITEM on the specific layer * using currently used render settings. * @param aItem is the VIEW_ITEM. * @param aLayer is the layer. * @return The color. */ virtual const COLOR4D& GetColor( const VIEW_ITEM* aItem, int aLayer ) const = 0; protected: /** * Function update Loading Loading @@ -217,16 +227,6 @@ public: */ virtual void DrawBrightened( const VIEW_ITEM* aItem ); /** * Function GetColor * Returns the color that should be used to draw the specific VIEW_ITEM on the specific layer * using currently used render settings. * @param aItem is the VIEW_ITEM. * @param aLayer is the layer. * @return The color. */ virtual const COLOR4D& GetColor( const VIEW_ITEM* aItem, int aLayer ) = 0; protected: /// Instance of graphic abstraction layer that gives an interface to call /// commands used to draw (eg. DrawLine, DrawCircle, etc.) Loading
pcbnew/pcb_painter.cpp +45 −45 Original line number Diff line number Diff line Loading @@ -137,29 +137,7 @@ void PCB_RENDER_SETTINGS::LoadDisplayOptions( const DISPLAY_OPTIONS& aOptions ) } void PCB_RENDER_SETTINGS::update() { // Calculate darkened/highlighted variants of layer colors for( int i = 0; i < TOTAL_LAYER_COUNT; i++ ) { m_layerColors[i].a = m_layerOpacity; m_layerColorsHi[i] = m_layerColors[i].Brightened( m_highlightFactor ); m_layerColorsDark[i] = m_layerColors[i].Darkened( 1.0 - m_highlightFactor ); m_layerColorsSel[i] = m_layerColors[i].Brightened( m_selectFactor ); } m_hiContrastColor = COLOR4D( m_hiContrastFactor, m_hiContrastFactor, m_hiContrastFactor, m_layerOpacity ); } PCB_PAINTER::PCB_PAINTER( GAL* aGal ) : PAINTER( aGal ) { } const COLOR4D& PCB_PAINTER::GetColor( const VIEW_ITEM* aItem, int aLayer ) const COLOR4D& PCB_RENDER_SETTINGS::GetColor( const VIEW_ITEM* aItem, int aLayer ) const { int netCode = -1; Loading @@ -167,7 +145,7 @@ const COLOR4D& PCB_PAINTER::GetColor( const VIEW_ITEM* aItem, int aLayer ) { if( static_cast<const EDA_ITEM*>( aItem )->IsSelected() ) { return m_pcbSettings->m_layerColorsSel[aLayer]; return m_layerColorsSel[aLayer]; } // Try to obtain the netcode for the item Loading @@ -177,20 +155,42 @@ const COLOR4D& PCB_PAINTER::GetColor( const VIEW_ITEM* aItem, int aLayer ) } // Return grayish color for non-highlighted layers in the high contrast mode if( m_pcbSettings->m_hiContrastEnabled && m_pcbSettings->m_activeLayers.count( aLayer ) == 0 ) return m_pcbSettings->m_hiContrastColor; if( m_hiContrastEnabled && m_activeLayers.count( aLayer ) == 0 ) return m_hiContrastColor; // Single net highlight mode if( m_pcbSettings->m_highlightEnabled ) if( m_highlightEnabled ) { if( netCode == m_pcbSettings->m_highlightNetcode ) return m_pcbSettings->m_layerColorsHi[aLayer]; if( netCode == m_highlightNetcode ) return m_layerColorsHi[aLayer]; else return m_pcbSettings->m_layerColorsDark[aLayer]; return m_layerColorsDark[aLayer]; } // No special modificators enabled return m_pcbSettings->m_layerColors[aLayer]; return m_layerColors[aLayer]; } void PCB_RENDER_SETTINGS::update() { // Calculate darkened/highlighted variants of layer colors for( int i = 0; i < TOTAL_LAYER_COUNT; i++ ) { m_layerColors[i].a = m_layerOpacity; m_layerColorsHi[i] = m_layerColors[i].Brightened( m_highlightFactor ); m_layerColorsDark[i] = m_layerColors[i].Darkened( 1.0 - m_highlightFactor ); m_layerColorsSel[i] = m_layerColors[i].Brightened( m_selectFactor ); } m_hiContrastColor = COLOR4D( m_hiContrastFactor, m_hiContrastFactor, m_hiContrastFactor, m_layerOpacity ); } PCB_PAINTER::PCB_PAINTER( GAL* aGal ) : PAINTER( aGal ) { } Loading Loading @@ -280,8 +280,8 @@ void PCB_PAINTER::draw( const TRACK* aTrack, int aLayer ) double textSize = std::min( static_cast<double>( width ), length / netName.length() ); // Set a proper color for the label color = GetColor( aTrack, aTrack->GetLayer() ); COLOR4D labelColor = GetColor( NULL, aLayer ); color = m_pcbSettings->GetColor( aTrack, aTrack->GetLayer() ); COLOR4D labelColor = m_pcbSettings->GetColor( NULL, aLayer ); if( color.GetBrightness() > 0.5 ) m_gal->SetStrokeColor( labelColor.Inverted() ); Loading @@ -301,7 +301,7 @@ void PCB_PAINTER::draw( const TRACK* aTrack, int aLayer ) else if( IsCopperLayer( aLayer )) { // Draw a regular track color = GetColor( aTrack, aLayer ); color = m_pcbSettings->GetColor( aTrack, aLayer ); m_gal->SetStrokeColor( color ); m_gal->SetIsStroke( true ); Loading Loading @@ -340,7 +340,7 @@ void PCB_PAINTER::draw( const SEGVIA* aVia, int aLayer ) else return; color = GetColor( aVia, aLayer ); color = m_pcbSettings->GetColor( aVia, aLayer ); if( m_pcbSettings->m_sketchModeSelect[VIAS_VISIBLE] ) { Loading Loading @@ -419,8 +419,8 @@ void PCB_PAINTER::draw( const D_PAD* aPad, int aLayer ) m_gal->SetMirrored( false ); // Set a proper color for the label color = GetColor( aPad, aPad->GetLayer() ); COLOR4D labelColor = GetColor( NULL, aLayer ); color = m_pcbSettings->GetColor( aPad, aPad->GetLayer() ); COLOR4D labelColor = m_pcbSettings->GetColor( NULL, aLayer ); if( color.GetBrightness() > 0.5 ) m_gal->SetStrokeColor( labelColor.Inverted() ); Loading Loading @@ -466,7 +466,7 @@ void PCB_PAINTER::draw( const D_PAD* aPad, int aLayer ) } // Pad drawing color = GetColor( aPad, aLayer ); color = m_pcbSettings->GetColor( aPad, aLayer ); if( m_pcbSettings->m_sketchModeSelect[PADS_VISIBLE] ) { // Outline mode Loading Loading @@ -619,7 +619,7 @@ void PCB_PAINTER::draw( const D_PAD* aPad, int aLayer ) void PCB_PAINTER::draw( const DRAWSEGMENT* aSegment ) { COLOR4D color = GetColor( NULL, aSegment->GetLayer() ); COLOR4D color = m_pcbSettings->GetColor( NULL, aSegment->GetLayer() ); m_gal->SetIsFill( false ); m_gal->SetIsStroke( true ); Loading Loading @@ -708,7 +708,7 @@ void PCB_PAINTER::draw( const TEXTE_PCB* aText, int aLayer ) if( aText->GetText().Length() == 0 ) return; COLOR4D strokeColor = GetColor( NULL, aText->GetLayer() ); COLOR4D strokeColor = m_pcbSettings->GetColor( NULL, aText->GetLayer() ); VECTOR2D position( aText->GetTextPosition().x, aText->GetTextPosition().y ); double orientation = aText->GetOrientation() * M_PI / 1800.0; Loading @@ -732,7 +732,7 @@ void PCB_PAINTER::draw( const TEXTE_MODULE* aText, int aLayer ) if( aText->GetLength() == 0 ) return; COLOR4D strokeColor = GetColor( NULL, aLayer ); COLOR4D strokeColor = m_pcbSettings->GetColor( NULL, aLayer ); VECTOR2D position( aText->GetTextPosition().x, aText->GetTextPosition().y ); double orientation = aText->GetDrawRotation() * M_PI / 1800.0; Loading @@ -747,7 +747,7 @@ void PCB_PAINTER::draw( const TEXTE_MODULE* aText, int aLayer ) void PCB_PAINTER::draw( const ZONE_CONTAINER* aZone ) { COLOR4D color = GetColor( NULL, aZone->GetLayer() ); COLOR4D color = m_pcbSettings->GetColor( NULL, aZone->GetLayer() ); std::deque<VECTOR2D> corners; PCB_RENDER_SETTINGS::DisplayZonesMode displayMode = m_pcbSettings->m_displayZoneMode; Loading Loading @@ -824,7 +824,7 @@ void PCB_PAINTER::draw( const DIMENSION* aDimension, int aLayer ) else { int layer = aDimension->GetLayer(); COLOR4D strokeColor = GetColor( NULL, layer ); COLOR4D strokeColor = m_pcbSettings->GetColor( NULL, layer ); m_gal->SetStrokeColor( strokeColor ); m_gal->SetIsFill( false ); Loading @@ -850,7 +850,7 @@ void PCB_PAINTER::draw( const DIMENSION* aDimension, int aLayer ) void PCB_PAINTER::draw( const PCB_TARGET* aTarget ) { COLOR4D strokeColor = GetColor( NULL, aTarget->GetLayer() ); COLOR4D strokeColor = m_pcbSettings->GetColor( NULL, aTarget->GetLayer() ); VECTOR2D position( aTarget->GetPosition() ); double size, radius; Loading
pcbnew/pcb_painter.h +3 −3 Original line number Diff line number Diff line Loading @@ -85,6 +85,9 @@ public: */ void LoadDisplayOptions( const DISPLAY_OPTIONS& aOptions ); /// @copydoc RENDER_SETTINGS::GetColor() virtual const COLOR4D& GetColor( const VIEW_ITEM* aItem, int aLayer ) const; protected: /// @copydoc RENDER_SETTINGS::Update() void update(); Loading Loading @@ -130,9 +133,6 @@ public: m_pcbSettings = dynamic_cast<PCB_RENDER_SETTINGS*>( aSettings ); } /// @copydoc PAINTER::GetColor() virtual const COLOR4D& GetColor( const VIEW_ITEM* aItem, int aLayer ); protected: PCB_RENDER_SETTINGS* m_pcbSettings; Loading