|                                                                                                                             |  | /*
 * This program source code file is part of KiCad, a free EDA CAD application. * * Copyright (C) 2017 Jon Evans <jon@craftyjon.com> * Copyright The KiCad Developers, see AUTHORS.txt for contributors. * * This program is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation, either version 3 of the License, or (at your * option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
#ifndef __GERBVIEW_PAINTER_H
#define __GERBVIEW_PAINTER_H
#include <layer_ids.h>
#include <gal/painter.h>
#include <dcode.h>
#include <gbr_display_options.h>
#include <geometry/shape_poly_set.h>
#include <memory>
class EDA_ITEM;class GERBER_DRAW_ITEM;class GERBER_FILE_IMAGE;
namespace KIGFX{class GAL;
/**
 * Store GerbView specific render settings. */class GERBVIEW_RENDER_SETTINGS : public RENDER_SETTINGS{public:    friend class GERBVIEW_PAINTER;
    GERBVIEW_RENDER_SETTINGS();
    void LoadColors( const COLOR_SETTINGS* aSettings ) override;
    /// @copydoc RENDER_SETTINGS::GetColor()
    virtual COLOR4D GetColor( const VIEW_ITEM* aItem, int aLayer ) const override;
    /**
     * Return the color used to draw a layer.     *     * @param aLayer is the layer number.     */    inline const COLOR4D& GetLayerColor( int aLayer ) const    {        auto it = m_layerColors.find( aLayer );        return it == m_layerColors.end() ? COLOR4D::WHITE : it->second;    }
    /**
     * Change the color used to draw a layer.     *     * @param aLayer is the layer number.     * @param aColor is the new color.     */    inline void SetLayerColor( int aLayer, const COLOR4D& aColor )    {        m_layerColors[aLayer] = aColor;
        update();       // recompute other shades of the color
    }
    const COLOR4D& GetBackgroundColor() const override    {        auto it = m_layerColors.find( LAYER_GERBVIEW_BACKGROUND );        return it == m_layerColors.end() ? COLOR4D::BLACK : it->second;    }
    void SetBackgroundColor( const COLOR4D& aColor ) override    {        m_layerColors[ LAYER_GERBVIEW_BACKGROUND ] = aColor;    }
    const COLOR4D& GetGridColor() override { return m_layerColors[ LAYER_GERBVIEW_GRID ]; }
    const COLOR4D& GetCursorColor() override { return m_layerColors[ LAYER_CURSOR ]; }
    bool GetShowPageLimits() const override;
    /// Clear all highlight selections (dcode, net, component, attribute selection)
    void ClearHighlightSelections();
    /// If set to anything but an empty string, will highlight items with matching component
    wxString m_componentHighlightString;
    /// If set to anything but an empty string, will highlight items with matching net
    wxString m_netHighlightString;
    /// If set to anything but an empty string, will highlight items with matching attribute
    wxString m_attributeHighlightString;
    /// If set to anything but >0 (in fact 10 the min dcode value),
    /// will highlight items with matching dcode
    int m_dcodeHighlightValue;
protected:    /// Maximum font size for D-Codes and other strings
    static const double MAX_FONT_SIZE;};
/**
 * Methods for drawing GerbView specific items. */class GERBVIEW_PAINTER : public PAINTER{public:    GERBVIEW_PAINTER( GAL* aGal );
    /// @copydoc PAINTER::GetSettings()
    virtual GERBVIEW_RENDER_SETTINGS* GetSettings() override    {        return &m_gerbviewSettings;    }
    /// @copydoc PAINTER::Draw()
    virtual bool Draw( const VIEW_ITEM* aItem, int aLayer ) override;
protected:    GERBVIEW_RENDER_SETTINGS m_gerbviewSettings;
    // Drawing functions
    void draw( /*const*/ GERBER_DRAW_ITEM* aVia, int aLayer );
    /**
     * Helper routine to draw a polygon.     *     * @param aParent Pointer to the draw item for AB Position calculation.     * @param aPolygon the polygon to draw.     * @param aFilled If true, draw the polygon as filled, otherwise only outline.     * @param aShift If true, draw the polygon relative to the parent item position.     */    void drawPolygon( GERBER_DRAW_ITEM* aParent, const SHAPE_POLY_SET& aPolygon,                      bool aFilled, bool aShift = false );
    /// Helper to draw a flashed shape (aka spot)
    void drawFlashedShape( GERBER_DRAW_ITEM* aItem, bool aFilled );
    /// Helper to draw an aperture macro shape
    void drawApertureMacro( GERBER_DRAW_ITEM* aParent, bool aFilled );
    /**
     * Get the thickness to draw for a line (e.g. 0 thickness lines get a minimum value).     *     * @param aActualThickness line own thickness.     * @return the thickness to draw.     */    int getLineThickness( int aActualThickness ) const;};} // namespace KIGFX
#endif /* __GERBVIEW_PAINTER_H */
 |