1 /* 2 * This program source code file is part of KiCad, a free EDA CAD application. 3 * 4 * Copyright (C) 2019-2020 CERN 5 * Copyright (C) 2020-2021 KiCad Developers, see AUTHORS.txt for contributors. 6 * 7 * @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch> 8 * 9 * This program is free software; you can redistribute it and/or 10 * modify it under the terms of the GNU General Public License 11 * as published by the Free Software Foundation; either version 2 12 * of the License, or (at your option) any later version. 13 * 14 * This program is distributed in the hope that it will be useful, 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 * GNU General Public License for more details. 18 * 19 * You should have received a copy of the GNU General Public License 20 * along with this program; if not, you may find one here: 21 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html 22 * or you may search the http://www.gnu.org website for the version 2 license, 23 * or you may write to the Free Software Foundation, Inc., 24 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA 25 */ 26 27 #ifndef __SCH_PAINTER_H 28 #define __SCH_PAINTER_H 29 30 #include <sch_symbol.h> 31 32 #include <painter.h> 33 34 35 class LIB_PIN; 36 class LIB_SHAPE; 37 class LIB_ITEM; 38 class LIB_SYMBOL; 39 class LIB_FIELD; 40 class LIB_TEXT; 41 class SCH_SYMBOL; 42 class SCH_FIELD; 43 class SCH_JUNCTION; 44 class SCH_LABEL; 45 class SCH_TEXT; 46 class SCH_HIERLABEL; 47 class SCH_GLOBALLABEL; 48 class SCH_SHEET; 49 class SCH_SHEET_PIN; 50 class SCH_MARKER; 51 class SCH_NO_CONNECT; 52 class SCH_LINE; 53 class SCH_BUS_ENTRY_BASE; 54 class SCH_BITMAP; 55 class SCHEMATIC; 56 57 namespace KIGFX 58 { 59 class GAL; 60 class SCH_PAINTER; 61 62 63 /** 64 * Store schematic specific render settings. 65 */ 66 class SCH_RENDER_SETTINGS : public RENDER_SETTINGS 67 { 68 public: 69 friend class SCH_PAINTER; 70 71 SCH_RENDER_SETTINGS(); 72 73 void LoadColors( const COLOR_SETTINGS* aSettings ) override; 74 75 /// @copydoc RENDER_SETTINGS::GetColor() 76 virtual COLOR4D GetColor( const VIEW_ITEM* aItem, int aLayer ) const override; 77 IsBackgroundDark()78 bool IsBackgroundDark() const override 79 { 80 auto luma = m_layerColors[ LAYER_SCHEMATIC_BACKGROUND ].GetBrightness(); 81 82 return luma < 0.5; 83 } 84 GetBackgroundColor()85 const COLOR4D& GetBackgroundColor() override 86 { 87 return m_layerColors[ LAYER_SCHEMATIC_BACKGROUND ]; 88 } 89 SetBackgroundColor(const COLOR4D & aColor)90 void SetBackgroundColor( const COLOR4D& aColor ) override 91 { 92 m_layerColors[ LAYER_SCHEMATIC_BACKGROUND ] = aColor; 93 } 94 GetDanglineSymbolThickness()95 float GetDanglineSymbolThickness() const 96 { 97 return (float) m_defaultPenWidth / 3.0F; 98 } 99 GetGridColor()100 const COLOR4D& GetGridColor() override { return m_layerColors[ LAYER_SCHEMATIC_GRID ]; } 101 GetCursorColor()102 const COLOR4D& GetCursorColor() override { return m_layerColors[ LAYER_SCHEMATIC_CURSOR ]; } 103 104 bool m_IsSymbolEditor; 105 106 int m_ShowUnit; // Show all units if 0 107 int m_ShowConvert; // Show all conversions if 0 108 109 bool m_ShowHiddenText; 110 bool m_ShowHiddenPins; 111 bool m_ShowPinsElectricalType; 112 bool m_ShowDisabled; 113 bool m_ShowGraphicsDisabled; 114 bool m_ShowUmbilicals; 115 116 bool m_OverrideItemColors; 117 118 double m_LabelSizeRatio; // Proportion of font size to label box 119 double m_TextOffsetRatio; // Proportion of font size to offset text above/below 120 // wires, buses, etc. 121 122 int m_PinSymbolSize; 123 int m_JunctionSize; 124 }; 125 126 127 /** 128 * Contains methods for drawing schematic-specific items. 129 */ 130 class SCH_PAINTER : public PAINTER 131 { 132 public: 133 SCH_PAINTER( GAL* aGal ); 134 135 /// @copydoc PAINTER::Draw() 136 virtual bool Draw( const VIEW_ITEM*, int ) override; 137 138 /// @copydoc PAINTER::GetSettings() GetSettings()139 virtual SCH_RENDER_SETTINGS* GetSettings() override 140 { 141 return &m_schSettings; 142 } 143 SetSchematic(SCHEMATIC * aSchematic)144 void SetSchematic( SCHEMATIC* aSchematic ) 145 { 146 m_schematic = aSchematic; 147 } 148 149 private: 150 void draw( LIB_PIN* aPin, int aLayer ); 151 void draw( const LIB_SHAPE* aCircle, int aLayer ); 152 void draw( const LIB_SYMBOL* aSymbol, int, bool aDrawFields = true, int aUnit = 0, 153 int aConvert = 0 ); 154 void draw( const LIB_FIELD* aField, int aLayer ); 155 void draw( const LIB_TEXT* aText, int aLayer ); 156 void draw( SCH_SYMBOL* aSymbol, int aLayer ); 157 void draw( const SCH_JUNCTION* aJct, int aLayer ); 158 void draw( const SCH_FIELD* aField, int aLayer ); 159 void draw( const SCH_TEXT* aText, int aLayer ); 160 void draw( SCH_HIERLABEL* aLabel, int aLayer ); 161 void draw( SCH_GLOBALLABEL* aLabel, int aLayer ); 162 void draw( const SCH_SHEET* aSheet, int aLayer ); 163 void draw( const SCH_NO_CONNECT* aNC, int aLayer ); 164 void draw( const SCH_MARKER* aMarker, int aLayer ); 165 void draw( const SCH_BITMAP* aBitmap, int aLayer ); 166 void draw( const SCH_LINE* aLine, int aLayer ); 167 void draw( const SCH_BUS_ENTRY_BASE* aEntry, int aLayer ); 168 169 void drawPinDanglingSymbol( const VECTOR2I& aPos, const COLOR4D& aColor, 170 bool aDrawingShadows ); 171 void drawDanglingSymbol( const wxPoint& aPos, const COLOR4D& aColor, int aWidth, 172 bool aDrawingShadows ); 173 174 int internalPinDecoSize( const LIB_PIN &aPin ); 175 int externalPinDecoSize( const LIB_PIN &aPin ); 176 177 bool isUnitAndConversionShown( const LIB_ITEM* aItem ) const; 178 179 float getShadowWidth() const; 180 COLOR4D getRenderColor( const EDA_ITEM* aItem, int aLayer, bool aDrawingShadows ) const; 181 float getLineWidth( const LIB_ITEM* aItem, bool aDrawingShadows ) const; 182 float getLineWidth( const SCH_ITEM* aItem, bool aDrawingShadows ) const; 183 float getTextThickness( const SCH_TEXT* aItem, bool aDrawingShadows ) const; 184 float getTextThickness( const SCH_FIELD* aItem, bool aDrawingShadows ) const; 185 float getTextThickness( const LIB_FIELD* aItem, bool aDrawingShadows ) const; 186 float getTextThickness( const LIB_TEXT* aItem, bool aDrawingShadows ) const; 187 188 bool setDeviceColors( const LIB_ITEM* aItem, int aLayer ); 189 190 void triLine ( const VECTOR2D &a, const VECTOR2D &b, const VECTOR2D &c ); 191 void strokeText( const wxString& aText, const VECTOR2D& aPosition, double aRotationAngle ); 192 void boxText( const wxString& aText, const VECTOR2D& aPosition, double aAngle ); 193 194 private: 195 SCH_RENDER_SETTINGS m_schSettings; 196 197 SCHEMATIC* m_schematic; 198 }; 199 200 }; // namespace KIGFX 201 202 203 #endif // __SCH_PAINTER_H 204