KiCad PCB EDA Suite
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, you may find one here:
19 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
20 * or you may search the http://www.gnu.org website for the version 2 license,
21 * or you may write to the Free Software Foundation, Inc.,
22 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
23 */
24
26
28#include <painter.h>
29#include <view/view.h>
30
31using namespace KIGFX::PREVIEW;
32using KIGFX::COLOR4D;
33
35{
42};
43
45 { // dark background
46 COLOR4D( 0.3, 0.3, 0.7, 0.3 ), // Slight blue
47 COLOR4D( 0.3, 0.7, 0.3, 0.3 ), // Slight green
48 COLOR4D( 0.7, 0.3, 0.3, 0.3 ), // Slight red
49 COLOR4D( 0.7, 0.3, 0.3, 0.3 ), // Slight red
50
51 COLOR4D( 1.0, 1.0, 0.4, 1.0 ), // yellow
52 COLOR4D( 0.4, 0.4, 1.0, 1.0 ) // blue
53 },
54 { // bright background
55 COLOR4D( 0.5, 0.3, 1.0, 0.5 ), // Slight blue
56 COLOR4D( 0.5, 1.0, 0.5, 0.5 ), // Slight green
57 COLOR4D( 1.0, 0.5, 0.5, 0.5 ), // Slight red
58 COLOR4D( 1.0, 0.5, 0.5, 0.5 ), // Slight red
59
60 COLOR4D( 0.7, 0.7, 0.0, 1.0 ), // yellow
61 COLOR4D( 0.1, 0.1, 1.0, 1.0 ) // blue
62 }
63};
64
65
66SELECTION_AREA::SELECTION_AREA() :
67 m_additive( false ),
68 m_subtractive( false ),
69 m_exclusiveOr( false )
70{
71
72}
73
74
76{
77 BOX2I tmp;
78
79 tmp.SetOrigin( m_origin );
80 tmp.SetEnd( m_end );
81 tmp.Normalize();
82 return tmp;
83}
84
85
86void SELECTION_AREA::ViewDraw( int aLayer, KIGFX::VIEW* aView ) const
87{
88 KIGFX::GAL& gal = *aView->GetGAL();
89 RENDER_SETTINGS* settings = aView->GetPainter()->GetSettings();
90
91 const SELECTION_COLORS& scheme = settings->IsBackgroundDark() ? selectionColorScheme[0]
93
94 // Set the fill of the selection rectangle
95 // based on the selection mode
96 if( m_additive )
97 gal.SetFillColor( scheme.additive );
98 else if( m_subtractive )
99 gal.SetFillColor( scheme.subtract );
100 else if( m_exclusiveOr )
101 gal.SetFillColor( scheme.exclusiveOr );
102 else
103 gal.SetFillColor( scheme.normal );
104
105 gal.SetIsStroke( true );
106 gal.SetIsFill( true );
107
108 // force 1-pixel-wide line
109 gal.SetLineWidth( 0.0 );
110
111 // Set the stroke color to indicate window or crossing selection
112 bool windowSelection = ( m_origin.x <= m_end.x ) ? true : false;
113
114 if( aView->IsMirroredX() )
115 windowSelection = !windowSelection;
116
117 gal.SetStrokeColor( windowSelection ? scheme.outline_l2r : scheme.outline_r2l );
118 gal.SetIsFill( false );
120 gal.SetIsFill( true );
121 // draw the fill as the second object so that Z test will not clamp
122 // the single-pixel-wide rectangle sides
124}
void SetOrigin(const Vec &pos)
Definition: box2.h:202
BOX2< Vec > & Normalize()
Ensure that the height and width are positive.
Definition: box2.h:119
void SetEnd(coord_type x, coord_type y)
Definition: box2.h:255
A color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:104
Abstract interface for drawing on a 2D-surface.
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:69
GAL * GetGAL() const
Return the #GAL this view is using to draw graphical primitives.
Definition: view.h:195
bool IsMirroredX() const
Return true if view is flipped across the X axis.
Definition: view.h:243
PAINTER * GetPainter() const
Return the painter object used by the view for drawing #VIEW_ITEMS.
Definition: view.h:213
static const SELECTION_COLORS selectionColorScheme[2]