KiCad PCB EDA Suite
Loading...
Searching...
No Matches
selection_area.cpp
Go to the documentation of this file.
1/*
2 * This program source code file is part of KiCad, a free EDA CAD application.
3 *
4 * Copyright (C) 2013 CERN
5 * @author Tomasz Wlostowski <[email protected]>
6 *
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version 2
10 * of the License, or (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <https://www.gnu.org/licenses/>.
19 */
20
22
24#include <gal/painter.h>
25#include <view/view.h>
26
27using namespace KIGFX::PREVIEW;
28using KIGFX::COLOR4D;
29
39
41 { // dark background
42 COLOR4D( 0.3, 0.3, 0.7, 0.3 ), // Slight blue
43 COLOR4D( 0.3, 0.7, 0.3, 0.3 ), // Slight green
44 COLOR4D( 0.7, 0.3, 0.3, 0.3 ), // Slight red
45 COLOR4D( 0.7, 0.3, 0.3, 0.3 ), // Slight red
46
47 COLOR4D( 1.0, 1.0, 0.4, 1.0 ), // yellow
48 COLOR4D( 0.4, 0.4, 1.0, 1.0 ) // blue
49 },
50 { // bright background
51 COLOR4D( 0.5, 0.3, 1.0, 0.5 ), // Slight blue
52 COLOR4D( 0.5, 1.0, 0.5, 0.5 ), // Slight green
53 COLOR4D( 1.0, 0.5, 0.5, 0.5 ), // Slight red
54 COLOR4D( 1.0, 0.5, 0.5, 0.5 ), // Slight red
55
56 COLOR4D( 0.7, 0.7, 0.0, 1.0 ), // yellow
57 COLOR4D( 0.1, 0.1, 1.0, 1.0 ) // blue
58 }
59};
60
61
70
71
73{
74 BOX2I tmp;
75
76 switch( m_mode )
77 {
78 default:
81 tmp.SetOrigin( m_origin );
82 tmp.SetEnd( m_end );
83 break;
86 tmp = m_shape_poly.BBox();
87 break;
88 }
89
90 tmp.Normalize();
91
92 return tmp;
93}
94
95
96void SELECTION_AREA::ViewDraw( int aLayer, KIGFX::VIEW* aView ) const
97{
98 KIGFX::GAL& gal = *aView->GetGAL();
99 RENDER_SETTINGS* settings = aView->GetPainter()->GetSettings();
100
101 const SELECTION_COLORS& scheme = settings->IsBackgroundDark() ? selectionColorScheme[0]
103
104 // Set the colors of the selection shape based on the selection mode
105 if( m_additive )
106 gal.SetFillColor( scheme.additive );
107 else if( m_subtractive )
108 gal.SetFillColor( scheme.subtract );
109 else if( m_exclusiveOr )
110 gal.SetFillColor( scheme.exclusiveOr );
111 else
112 gal.SetFillColor( scheme.normal );
113
115 gal.SetStrokeColor( scheme.outline_l2r );
116 else
117 gal.SetStrokeColor( scheme.outline_r2l );
118
119 auto drawSelectionShape =
120 [&]()
121 {
122 switch( m_mode )
123 {
124 default:
128 break;
131 if( m_shape_poly.PointCount() > 1 )
133 break;
134 }
135 };
136
137 gal.SetIsStroke( true );
138 gal.SetIsFill( false );
139 // force 1-pixel-wide line
140 gal.SetLineWidth( 0.0 );
141 drawSelectionShape();
142
143 // draw the fill as the second object so that Z test will not clamp
144 // the single-pixel-wide rectangle sides
145 gal.SetIsFill( true );
146 drawSelectionShape();
147}
BOX2< VECTOR2I > BOX2I
Definition box2.h:918
constexpr void SetOrigin(const Vec &pos)
Definition box2.h:233
constexpr BOX2< Vec > & Normalize()
Ensure that the height and width are positive.
Definition box2.h:142
constexpr void SetEnd(coord_type x, coord_type y)
Definition box2.h:293
A color representation with 4 components: red, green, blue, alpha.
Definition color4d.h:101
Abstract interface for drawing on a 2D-surface.
virtual void DrawPolygon(const std::deque< VECTOR2D > &aPointList)
Draw a polygon.
virtual void SetIsFill(bool aIsFillEnabled)
Enable/disable fill.
virtual void DrawRectangle(const VECTOR2D &aStartPoint, const VECTOR2D &aEndPoint)
Draw a rectangle.
virtual void SetFillColor(const COLOR4D &aColor)
Set the fill color.
virtual void SetLineWidth(float aLineWidth)
Set the line width.
virtual void SetStrokeColor(const COLOR4D &aColor)
Set the stroke color.
virtual void SetIsStroke(bool aIsStrokeEnabled)
Enable/disable stroked outlines.
virtual RENDER_SETTINGS * GetSettings()=0
Return a pointer to current settings that are going to be used when drawing items.
void ViewDraw(int aLayer, KIGFX::VIEW *aView) const override final
Draw the parts of the object belonging to layer aLayer.
const BOX2I ViewBBox() const override
Set the origin of the rectangle (the fixed corner)
Container for all the knowledge about how graphical objects are drawn on any output surface/device.
virtual bool IsBackgroundDark() const
Hold a (potentially large) number of VIEW_ITEMs and renders them on a graphics device provided by the...
Definition view.h:63
GAL * GetGAL() const
Return the GAL this view is using to draw graphical primitives.
Definition view.h:207
PAINTER * GetPainter() const
Return the painter object used by the view for drawing #VIEW_ITEMS.
Definition view.h:225
static const SELECTION_COLORS selectionColorScheme[2]
SELECTION_MODE