Commit afe2e27b authored by Maciej Suminski's avatar Maciej Suminski
Browse files

Moved GetColor() from PAINTER to RENDER_SETTINGS. Fixed recaching of custom items.

parent c5d3376c
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -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 )
@@ -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
@@ -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
+10 −10
Original line number Diff line number Diff line
@@ -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
@@ -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.)
+45 −45
Original line number Diff line number Diff line
@@ -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;

@@ -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
@@ -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 )
{
}


@@ -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() );
@@ -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 );

@@ -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] )
    {
@@ -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() );
@@ -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
@@ -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 );
@@ -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;

@@ -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;

@@ -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;

@@ -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 );
@@ -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;

+3 −3
Original line number Diff line number Diff line
@@ -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();
@@ -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;