/* * This program source code file is part of KiCad, a free EDA CAD application. * * Copyright (C) 2017 Jon Evans * Copyright (C) 2021 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 . */ #ifndef __GERBVIEW_PAINTER_H #define __GERBVIEW_PAINTER_H #include #include #include #include #include #include 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 { return m_layerColors[aLayer]; } /** * 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 { return m_layerColors[ LAYER_GERBVIEW_BACKGROUND ]; } 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 */